Subversion Repositories Kolibri OS

Rev

Rev 2116 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1951 mario79 1
;;****************************************************************************
2
;****************************************************************************
3
; Draw output part of the image and SCROLLBAR's
4
;****************************************************************************
5
;****************************************************************************
6
  drawimage:
7
 
8
 
9
    call get_window_param
10
    ;mov  edx,5*65536+50
11
	mov  edx,0*65536+28
12
    mov  esi,[img_resolution]    ;24
13
    cmp  esi,32
14
    ja   .exit_error ;.exit
15
    mov  edi,[img_palette]
16
;****************************************************************************
17
; Calculation of sizes of an output part of the image
18
;****************************************************************************
19
    xor  eax,eax
20
    mov  [draw_SB],al
21
    mov  [draw_SB1],al
22
    mov  eax,[window_width]
23
;    sub  eax,9
24
    mov  [wa_width],ax
25
    mov  [wa_width_1],ax
26
    mov  [wa_width_2],ax
27
    mov  ebx,[img_width]
28
    test ebx,ebx
29
    jz   .exit_error ;.exit
30
    cmp  ax,bx
31
    jae   @f
32
	sub   ax,[scroll_bar_data_vertical.size_x]
33
    mov  [draw_SB],1
34
    jmp  .size_y
35
@@:
36
    mov  ax,bx
37
 
38
 
39
.size_y:
40
    mov  ebx,[img_high]
41
    test ebx,ebx
42
    jz   .exit_error ;.exit
43
    shl  eax,16
44
    add  eax,[window_high]
2116 mario79 45
;    cmp  ax,28
46
;    jbe  @f
47
    sub  ax,28
48
;@@:
1951 mario79 49
    mov [wa_high],ax
50
    mov [wa_high_1],ax
51
    mov [wa_high_2],ax
52
    cmp  ax,bx
53
    jae   @f
54
	sub   ax,[scroll_bar_data_horizontal.size_y]
55
    mov  [draw_SB1],1
56
    jmp  .continue
57
@@:
58
    mov  ax,bx
59
.continue:
60
    mov  ecx,eax
61
;****************************************************************************
62
;
63
;****************************************************************************
64
    cmp  [draw_SB1],1
65
    je   @f
66
    cmp  [draw_SB],0
67
    je   @f
68
	ror  ecx,16
69
	add  cx,[scroll_bar_data_vertical.size_x]
70
	rol  ecx,16
71
@@:
72
    cmp  [draw_SB],1
73
    je  @f
74
    cmp  [draw_SB1],0
75
    je  @f
76
	add  cx,[scroll_bar_data_horizontal.size_y]
77
@@:
78
;    call  check_8bit_less
79
;.continue_1:
80
;****************************************************************************
81
; Prepare of data for SCROLLBAR's
82
;****************************************************************************
83
    call correct_cur_area
84
 
85
    mov  eax,[img_width]
86
	push edx
87
	imul eax,[scaling_mode]
88
	mov  ebx,100
89
	xor  edx,edx
90
	div  ebx
91
    mov  [scroll_bar_data_horizontal.max_area],eax
92
	pop  edx
93
 
94
 
95
    mov  ebx,[img_high]
96
	push eax edx
97
	mov  eax,ebx
98
	imul eax,[scaling_mode]
99
	mov  ebx,100
100
	xor  edx,edx
101
	div  ebx
102
	mov  ebx,eax
103
	pop  edx eax
104
    mov  [scroll_bar_data_vertical.max_area],ebx
105
 
106
;	cmp [scaling_mode],100
107
;	jne  .continue_1
108
 
109
    call correct_width
110
    call correct_cur_area
111
 
112
    cmp [correct_w],0
113
    je  @f
114
 
115
    call correct_high
116
    call correct_cur_area
117
    jmp  .continue_1
118
 
119
@@:
120
    call correct_high
121
    call correct_cur_area
122
 
123
    cmp [correct_h],0
124
    je  @f
125
 
126
    call correct_width
127
    call correct_cur_area
128
@@:
129
 
130
;    call  check_8bit_less
131
 
132
.continue_1:
133
;	mov  eax,[window_high]
134
;	sub  eax,55
135
;	ror  eax,16
136
;	mov  ax,dx
137
;	rol  eax,16
138
    mov  eax,edx
139
    shl  eax,16
140
    mov  ax,cx
141
    mov  [scroll_bar_data_vertical.y],eax
142
 
143
;	mov  eax,[window_width]
144
;	sub  eax,10
145
;	ror  eax,16
146
;	ror  edx,16
147
;	mov  ax,dx
148
;	rol  edx,16
149
;	rol  eax,16
150
    mov  eax,edx
151
    mov  ebx,ecx
152
    shr  ebx,16
153
    mov  ax,bx
154
    mov  [scroll_bar_data_horizontal.x],eax
155
 
156
 
157
;    mov  eax,edx
158
;    mov  ebx,ecx
159
;    shr  ebx,16
160
;    shr  eax,16
161
;    add  ax,bx
162
	mov  eax,[window_width]
163
	sub  ax,[scroll_bar_data_vertical.size_x]
164
;	sub  ax,4
165
	mov  [scroll_bar_data_vertical.start_x],ax
166
 
167
;    mov  eax,edx
168
;    add  ax,cx
169
	mov  eax,[window_high]
170
	sub  ax,[scroll_bar_data_horizontal.size_y]
171
;	sub  ax,4
172
    mov  [scroll_bar_data_horizontal.start_y],ax
173
 
174
;****************************************************************************
175
; Check necessity prepare of data
176
;****************************************************************************
177
    mov   eax,[scroll_bar_data_horizontal.max_area]
178
    mov   ebx,[scroll_bar_data_vertical.max_area]
179
    cmp   ebx,[scroll_bar_data_vertical.cur_area]
180
    ja    @f
181
    cmp   eax,[scroll_bar_data_horizontal.cur_area]
182
    ja    @f
183
 
184
    mov  ebp,0
185
    mov  ebx,[soi]
186
    jmp  .end
187
@@:
188
;****************************************************************************
189
; Calculate offset of next row data relative to previous row data
190
;****************************************************************************
191
    mov  ebp,eax
192
    mov  ebx,ecx
193
    shr  ebx,16
194
    sub  ebp,ebx
195
    imul ebp,esi
196
    mov  eax,ebp
197
    shr  ebp,3
198
;****************************************************************************
199
; Vertical SCROLLBAR
200
; At a case of resizing of the window
201
; Check the position of a runner has crossed a limit
202
;****************************************************************************
203
    mov  eax,[scroll_bar_data_vertical.max_area]
204
    sub  eax,[scroll_bar_data_vertical.cur_area]
205
    cmp  eax,[scroll_bar_data_vertical.position]
206
    jae  @f
207
    mov  [scroll_bar_data_vertical.position],eax
208
@@:
209
;****************************************************************************
210
; Horizontal SCROLLBAR
211
; At a case of resizing of the window
212
; Check the position of a runner has crossed a limit
213
;****************************************************************************
214
    mov  eax,[scroll_bar_data_horizontal.max_area]
215
    sub  eax,[scroll_bar_data_horizontal.cur_area]
216
    cmp  eax,[scroll_bar_data_horizontal.position]
217
    jae  @f
218
    mov  [scroll_bar_data_horizontal.position],eax
219
@@:
220
;****************************************************************************
221
; Calculate offset from a beginning of a image
222
;****************************************************************************
223
    mov  ebx,[scroll_bar_data_horizontal.max_area]
224
    imul ebx,esi
225
    mov  eax,ebx
226
    shr  ebx,3
227
    imul ebx,[scroll_bar_data_vertical.position]
228
    mov  eax,[scroll_bar_data_horizontal.position]
229
    imul eax,esi
230
    shr  eax,3
231
    add  ebx,eax
232
    add  ebx,[soi]
233
.end:
234
    cmp  [soi],0
235
    je   .exit_error ;.exit
236
;****************************************************************************
237
; Draw image
238
;****************************************************************************
239
    cmp   [img_resolution_2],15
240
    jne  @f
241
	mov  esi,15
242
@@:
243
	mov  [image_start_coordinates],edx
244
	mov  [image_draw_size],ecx
245
	cmp [scaling_mode],dword 100
246
	je  .100
247
	cmp [scaling_mode],dword 0
248
	jne  @f
249
	call scaling.1
250
	ret
251
@@:
252
	mov  [correct_scrollbar_100_flag],0
253
	call zoom_all
254
	ret
255
.100:
256
	mov  al,[correct_scrollbar_100_flag]
257
	test al,al
258
	jnz  @r
259
;******************************
260
	mov  eax,wa_width_1
261
	mov  eax,[eax]
262
	push eax
263
	mov  eax,wa_high_1
264
	mov  eax,[eax]
265
	push eax
266
;******************************
267
	rol  ecx,16
268
    mov  eax,[scroll_bar_data_vertical.max_area]
269
    cmp  eax,[scroll_bar_data_vertical.cur_area]
270
	mov  ax,[wa_width_1]
271
    jbe  @f
272
	sub  ax,[scroll_bar_data_vertical.size_x]
273
	mov  [wa_width_1],ax
274
@@:
275
	sub  ax,cx
276
	mov  [wa_width_2],cx
277
	ror  ecx,16
278
	shr  ax,1
279
	shl  eax,16
280
	add  edx,eax
281
	shr  eax,16
282
	test eax,eax
283
	jz   @f
284
	call scaling.fill_for_L_R
285
@@:
286
    mov  eax,[scroll_bar_data_horizontal.max_area]
287
    cmp  eax,[scroll_bar_data_horizontal.cur_area]
288
	mov  ax,[wa_high_1]
289
    jbe  @f
290
	sub  ax,[scroll_bar_data_horizontal.size_y]
291
	mov  [wa_high_1],ax
292
@@:
293
	sub  ax,cx
294
	mov  [wa_high_2],cx
295
	shr  ax,1
296
	add  edx,eax
297
	test eax,eax
298
	jz   @f
299
	call scaling.fill_for_U_D
300
@@:
301
;******************************
302
    mcall 65,  ;[soi]
303
;******************************
304
	pop  eax
305
	mov  ebx,wa_high_1
306
	mov  [ebx],eax
307
 
308
	pop  eax
309
	mov  ebx,wa_width_1
310
	mov  [ebx],eax
311
;******************************
312
.exit:
313
	call draw_file_name_to_work_area
314
	ret
315
 
316
.exit_error:
317
	xor  eax,eax
318
	mov  [scroll_bar_data_vertical.cur_area],eax
319
	mov  [scroll_bar_data_horizontal.cur_area],eax
320
	ret
321
;****************************************************************************
322
draw_file_name_to_work_area:
3184 IgorA 323
	mov  eax,[check1.flags]
1951 mario79 324
	test  eax,10b
325
	jz  @f
326
	mov  ebx,[file_name_length]
327
	mov  eax,ebx
328
	lea  ebx,[ebx*5]
329
	add  ebx,eax
330
	add  ebx,13 shl 16
331
	mcall 13,,<59,11>,0xe5e5e5
332
	mcall 4,<16,60>,0x80000000,file_name,,0xe5e5e5
333
@@:
334
	ret
335
;****************************************************************************
336
;check_8bit_less:
337
;    cmp  esi,8
338
;    jae  .no_8bit_less
339
;    mov  eax,ecx
340
;    ror  eax,16
341
;;    mov  ebx,eax
342
;    xor  ecx,ecx
343
;
344
;    inc  ecx
345
;    shr  ax,1
346
;
347
;    cmp  esi,4
348
;    je   @f
349
;
350
;    inc  ecx
351
;    shr  ax,1
352
;
353
;    cmp  esi,2
354
;    je   @f
355
;
356
;    inc  ecx
357
;    shr  ax,1
358
;@@:
359
;;    test ebx,ecx
360
;;    jz  @f
361
;;    inc  eax
362
;;@@:
363
;    shl  ax,cl
364
;    rol  eax,16
365
;    mov  ecx,eax
366
;.no_8bit_less:
367
;    ret
368
;****************************************************************************
369
correct_width:
370
    mov   [correct_w],0
371
    mov   ebx,[scroll_bar_data_vertical.max_area]
372
    cmp   ebx,[scroll_bar_data_vertical.cur_area]
373
    jbe   @f
374
    mov   eax,ecx
375
    shr   eax,16
376
	push  eax
377
	mov   ax,[scroll_bar_data_vertical.size_x]
378
	sub   [wa_width],ax
379
	pop   eax
380
    cmp   [wa_width],ax
381
    jae   @f
382
    ror   ecx,16
383
    mov   cx,[wa_width]
384
    rol   ecx,16
385
    mov   [correct_w],1
386
@@:
387
    ret
388
;****************************************************************************
389
correct_high:
390
    mov   [correct_h],0
391
    mov   eax,[scroll_bar_data_horizontal.max_area]
392
    cmp   eax,[scroll_bar_data_horizontal.cur_area]
393
    jbe   @f
394
	push  eax
395
	mov   ax,[scroll_bar_data_horizontal.size_y]
396
	sub   [wa_high],ax
397
	pop   eax
398
    cmp   [wa_high],cx
399
    jae   @f
400
    mov   cx,[wa_high]
401
    mov   [correct_h],1
402
@@:
403
    ret
404
;****************************************************************************
405
correct_cur_area:
406
    mov  eax,ecx
407
    xor  ebx,ebx
408
    mov  bx,ax
409
    mov  [scroll_bar_data_vertical.cur_area],ebx
410
    shr  eax,16
411
    mov  [scroll_bar_data_horizontal.cur_area],eax
412
    ret
413
;****************************************************************************
414
; Check draw vertical scrollbar
415
;****************************************************************************
416
draw_scrollbars:
417
	xor   eax,eax
418
	mov   [draw_scrollbar_counter],eax
419
    mov   eax,[scroll_bar_data_vertical.max_area]
420
    cmp   eax,[scroll_bar_data_vertical.cur_area]
421
    jbe   @f
422
	cmp   [scroll_bar_data_vertical.cur_area],0
423
	je   @f
424
	push    dword scroll_bar_data_vertical
425
	call    [scrollbar_ver_draw]
426
;    draw_scroll_bar_vertical scroll_bar_data_vertical
427
	inc  [draw_scrollbar_counter]
428
@@:
429
;****************************************************************************
430
; Check draw horizontal scrollbar
431
;****************************************************************************
432
    mov   eax,[scroll_bar_data_horizontal.max_area]
433
    cmp   eax,[scroll_bar_data_horizontal.cur_area]
434
    jbe   @f
435
	cmp   [scroll_bar_data_horizontal.cur_area],0
436
	je   @f
437
	push    dword scroll_bar_data_horizontal
438
	call    [scrollbar_hor_draw]
439
;    draw_scroll_bar_horizontal scroll_bar_data_horizontal
440
	inc  [draw_scrollbar_counter]
441
@@:
442
;  nodrawimage:
443
	cmp  [draw_scrollbar_counter],2
444
	jne  @f
445
	mov  ebx,[scroll_bar_data_vertical.x]
446
	mov  ecx,[scroll_bar_data_horizontal.y]
447
	mcall 13, , ,0xffffff
448
@@:
449
    ret
450
;****************************************************************************
451
;debug_1:
452
;     pushad
453
;     mov   eax,ecx
454
;     shr   eax,16
455
;     mov   ebx,ecx
456
;     shl   ebx,16
457
;     shr   ebx,16
458
;     mov   eax,[image_file]
459
;     mov   ebx,edi
460
;     mov   [temp_eax],eax
461
;     mov   [temp_ebx],ebx
462
;     mcall 13,<90,500>,<2,20>,0
463
;     mcall 47,0xa0000,[temp_eax],<100, 5>,0xffffff
464
;     mcall 47,0xa0000,[temp_ebx],<300, 5>,0xffffff
465
;     popad
466
;     ret
467
;temp_eax dd 0
468
;temp_ebx dd 0
469
;****************************************************************************