2011-06-12 00:16:26 +02:00
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
|
invert_left_to_right:
|
|
|
|
|
mov ebx,3
|
|
|
|
|
jmp rotate_counter_clockwise.1
|
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
|
invert_up_to_down:
|
|
|
|
|
mov ebx,4
|
|
|
|
|
jmp rotate_counter_clockwise.1
|
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
|
rotate_clockwise:
|
|
|
|
|
mov ebx,1
|
|
|
|
|
jmp rotate_counter_clockwise.1
|
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
|
rotate_counter_clockwise:
|
|
|
|
|
mov ebx,2
|
|
|
|
|
.1:
|
|
|
|
|
mov eax,[soi]
|
|
|
|
|
test eax,eax
|
|
|
|
|
jz still
|
|
|
|
|
|
|
|
|
|
mov eax,[RAW1_pointer]
|
|
|
|
|
test eax,eax
|
|
|
|
|
jz @f
|
|
|
|
|
cmp [Total_Repeat_N],1
|
|
|
|
|
ja still
|
|
|
|
|
@@:
|
|
|
|
|
|
|
|
|
|
push ebx
|
|
|
|
|
call proc_position_correct
|
|
|
|
|
mov eax,[vertical_position_coorect]
|
|
|
|
|
mov ebx,[horizontal_position_coorect]
|
|
|
|
|
mov [horizontal_position_coorect],eax
|
|
|
|
|
mov [vertical_position_coorect],ebx
|
|
|
|
|
pop ebx
|
2011-06-13 19:24:37 +02:00
|
|
|
|
; mov eax,image_file
|
|
|
|
|
; ebx - direction
|
|
|
|
|
; 1 - clockwise, 2 - counter clockwise
|
|
|
|
|
; 3 - Left&Right, 4 - Up&Down
|
|
|
|
|
push ebx
|
|
|
|
|
push dword image_file
|
2011-06-12 00:16:26 +02:00
|
|
|
|
; call [plugin_rotate]
|
|
|
|
|
call [rotate_Start]
|
2011-09-07 18:34:44 +02:00
|
|
|
|
mov ebx,[raw_pointer]
|
|
|
|
|
mov eax,[ebx+4]
|
|
|
|
|
mov [img_width],eax
|
|
|
|
|
mov eax,[ebx+8]
|
|
|
|
|
mov [img_high],eax
|
2011-06-12 00:16:26 +02:00
|
|
|
|
call convert.img_resolution_ok
|
|
|
|
|
jmp kopen.1
|
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
|
calculate_arrows_offset:
|
|
|
|
|
mov eax,[arrows_offset]
|
|
|
|
|
imul eax,[scaling_mode]
|
|
|
|
|
mov ebx,100
|
|
|
|
|
xor edx,edx
|
|
|
|
|
div ebx
|
|
|
|
|
mov [scroll_bar_data_vertical.ar_offset],eax
|
|
|
|
|
mov [scroll_bar_data_horizontal.ar_offset],eax
|
|
|
|
|
ret
|
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
|
no_scaling:
|
|
|
|
|
mov eax,scaling_mode
|
|
|
|
|
cmp [eax],dword 100
|
|
|
|
|
je still
|
|
|
|
|
.1:
|
|
|
|
|
mov [eax],dword 100
|
|
|
|
|
mov [zoom_factors],dword zoom_factors.100
|
|
|
|
|
mov eax,[eax]
|
|
|
|
|
jmp zoom_plus.2
|
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
|
scaling:
|
|
|
|
|
mov eax,[soi]
|
|
|
|
|
test eax,eax
|
|
|
|
|
jz still
|
|
|
|
|
mov eax,scaling_mode
|
|
|
|
|
xor ebx,ebx
|
|
|
|
|
cmp [eax],ebx ;dword 0
|
|
|
|
|
je still
|
|
|
|
|
mov [eax],ebx ;dword 0
|
|
|
|
|
mov [zoom_factors],dword zoom_factors.1
|
|
|
|
|
call .1
|
|
|
|
|
call draw_zoom_factors
|
|
|
|
|
jmp still
|
|
|
|
|
;---------------------------
|
|
|
|
|
.compens_x:
|
|
|
|
|
call .get_x_y
|
|
|
|
|
xor ecx,ecx
|
|
|
|
|
mov cx,[wa_high_1]
|
|
|
|
|
imul eax,ecx
|
|
|
|
|
xor edx,edx
|
|
|
|
|
div ebx
|
|
|
|
|
ret
|
|
|
|
|
;---------------------------
|
|
|
|
|
.compens_y:
|
|
|
|
|
call .get_x_y
|
|
|
|
|
xchg eax,ebx
|
|
|
|
|
xor ecx,ecx
|
|
|
|
|
mov cx,[wa_width_1]
|
|
|
|
|
imul eax,ecx
|
|
|
|
|
xor edx,edx
|
|
|
|
|
div ebx
|
|
|
|
|
ret
|
|
|
|
|
;---------------------------
|
|
|
|
|
.get_x_y:
|
|
|
|
|
mov ebx,[raw_pointer]
|
|
|
|
|
mov eax,[ebx+4]
|
|
|
|
|
mov ebx,[ebx+8]
|
|
|
|
|
ret
|
|
|
|
|
;---------------------------
|
|
|
|
|
.fill_for_L_R:
|
|
|
|
|
cmp [no_fill],1
|
|
|
|
|
je @f
|
|
|
|
|
pusha
|
|
|
|
|
mov ebx,[image_start_coordinates]
|
|
|
|
|
mov ecx,ebx
|
|
|
|
|
shl ecx,16
|
|
|
|
|
mov bx,ax
|
|
|
|
|
mov cx,[wa_high_1]
|
|
|
|
|
mcall 13,,,[fill_color] ;0xffffff
|
|
|
|
|
mov ax,bx
|
|
|
|
|
ror ebx,16
|
|
|
|
|
add bx,ax
|
|
|
|
|
add bx,[wa_width_2]
|
|
|
|
|
mov ax,[wa_width_1]
|
|
|
|
|
sub ax,bx
|
|
|
|
|
rol ebx,16
|
|
|
|
|
mov bx,ax
|
|
|
|
|
mcall 13,,,[fill_color] ;0xffffff
|
|
|
|
|
popa
|
|
|
|
|
@@:
|
|
|
|
|
ret
|
|
|
|
|
;---------------------------
|
|
|
|
|
.fill_for_U_D:
|
|
|
|
|
cmp [no_fill],1
|
|
|
|
|
je @f
|
|
|
|
|
pusha
|
|
|
|
|
mov ebx,[image_start_coordinates]
|
|
|
|
|
mov ecx,ebx
|
|
|
|
|
shl ecx,16
|
|
|
|
|
mov cx,ax
|
|
|
|
|
mov bx,[wa_width_1]
|
|
|
|
|
mcall 13,,,[fill_color] ;0xffffff
|
|
|
|
|
mov ax,cx
|
|
|
|
|
ror ecx,16
|
|
|
|
|
add cx,ax
|
|
|
|
|
add cx,[wa_high_2]
|
|
|
|
|
mov ax,[wa_high_1]
|
|
|
|
|
add ax,28 ;50
|
|
|
|
|
sub ax,cx
|
|
|
|
|
rol ecx,16
|
|
|
|
|
mov cx,ax
|
|
|
|
|
mcall 13,,,[fill_color] ;0xffffff
|
|
|
|
|
popa
|
|
|
|
|
@@:
|
|
|
|
|
ret
|
|
|
|
|
;---------------------------
|
|
|
|
|
.1:
|
|
|
|
|
call .get_x_y
|
|
|
|
|
cmp eax,ebx
|
|
|
|
|
jb .y
|
|
|
|
|
;---------------------------
|
|
|
|
|
.x:
|
|
|
|
|
call .compens_y
|
|
|
|
|
cmp ax,[wa_high_1]
|
|
|
|
|
jbe @f
|
|
|
|
|
call .compens_x
|
|
|
|
|
mov [wa_width_2],ax
|
|
|
|
|
jmp .4
|
|
|
|
|
@@:
|
|
|
|
|
mov [wa_high_2],ax
|
|
|
|
|
jmp .4
|
|
|
|
|
;---------------------------
|
|
|
|
|
.y:
|
|
|
|
|
call .compens_x
|
|
|
|
|
cmp ax,[wa_width_1]
|
|
|
|
|
jbe @f
|
|
|
|
|
call .compens_y
|
|
|
|
|
mov [wa_high_2],ax
|
|
|
|
|
jmp .4
|
|
|
|
|
@@:
|
|
|
|
|
mov [wa_width_2],ax
|
|
|
|
|
;---------------------------
|
|
|
|
|
.4:
|
|
|
|
|
mov bx,[wa_width_2]
|
|
|
|
|
shl ebx,16
|
|
|
|
|
mov bx,[wa_high_2]
|
|
|
|
|
|
|
|
|
|
xor ecx,ecx
|
|
|
|
|
.5:
|
|
|
|
|
|
|
|
|
|
; mov eax,ebx
|
|
|
|
|
; and eax,0xffff
|
|
|
|
|
; mov [test1],eax
|
|
|
|
|
|
|
|
|
|
; mov eax,ebx
|
|
|
|
|
; shr eax,16
|
|
|
|
|
; mov [test2],eax
|
|
|
|
|
|
|
|
|
|
; mov eax,ecx
|
|
|
|
|
; and eax,0xffff
|
|
|
|
|
; mov [test3],eax
|
|
|
|
|
|
|
|
|
|
; mov eax,ecx
|
|
|
|
|
; shr eax,16
|
|
|
|
|
; mov [test4],eax
|
|
|
|
|
|
2011-06-13 20:13:55 +02:00
|
|
|
|
; mov eax,image_file
|
|
|
|
|
; mov edx,[scaling_mode]
|
2011-06-12 00:16:26 +02:00
|
|
|
|
movzx esi,byte [filtering_flag]
|
2011-06-13 20:13:55 +02:00
|
|
|
|
; mov edi,[background_color]
|
|
|
|
|
|
2011-09-07 18:34:44 +02:00
|
|
|
|
push dword 0 ; eax - crop size
|
|
|
|
|
push dword [background_color] ; edi - background color
|
|
|
|
|
push esi ; esi - filtering
|
|
|
|
|
push dword [scaling_mode] ; edx - scaling mode
|
|
|
|
|
push ecx ; ecx - start_coordinates
|
|
|
|
|
push ebx ; ebx - new_size
|
|
|
|
|
push dword image_file ; eax - convert data table
|
|
|
|
|
|
2011-06-12 00:16:26 +02:00
|
|
|
|
; pusha
|
|
|
|
|
; mcall 26,9
|
|
|
|
|
; mov [test1],eax
|
|
|
|
|
; popa
|
|
|
|
|
|
|
|
|
|
call [Scaling_Start]
|
|
|
|
|
|
|
|
|
|
; pusha
|
|
|
|
|
; mcall 26,9
|
|
|
|
|
; mov ebx,[test1]
|
|
|
|
|
; sub eax,ebx
|
|
|
|
|
; cmp [test2],0
|
|
|
|
|
; je @f
|
|
|
|
|
; add eax,[test2]
|
|
|
|
|
; shr eax,1
|
|
|
|
|
; cmp eax,[test3]
|
|
|
|
|
; jbe @f
|
|
|
|
|
; mov [test3],eax
|
|
|
|
|
;@@:
|
|
|
|
|
; mov [test2],eax
|
|
|
|
|
; popa
|
|
|
|
|
|
|
|
|
|
mov ecx,ebx
|
|
|
|
|
|
|
|
|
|
mov edx,[image_start_coordinates]
|
|
|
|
|
|
2011-09-07 18:34:44 +02:00
|
|
|
|
mov eax,edx
|
|
|
|
|
shl eax,16
|
|
|
|
|
mov ax,cx
|
|
|
|
|
mov [scroll_bar_data_vertical.y],eax
|
|
|
|
|
|
|
|
|
|
mov eax,edx
|
|
|
|
|
mov ebx,ecx
|
|
|
|
|
shr ebx,16
|
|
|
|
|
mov ax,bx
|
|
|
|
|
mov [scroll_bar_data_horizontal.x],eax
|
2011-06-12 00:16:26 +02:00
|
|
|
|
|
|
|
|
|
; call correct_cur_area
|
|
|
|
|
|
|
|
|
|
; movzx eax,[wa_width_1]
|
|
|
|
|
; mov [test1],eax
|
|
|
|
|
; movzx eax,[wa_width_2]
|
|
|
|
|
; mov [test2],eax
|
|
|
|
|
|
|
|
|
|
; movzx eax,[wa_high_1]
|
|
|
|
|
; mov [test3],eax
|
|
|
|
|
; movzx eax,[wa_high_2]
|
|
|
|
|
; mov [test4],eax
|
|
|
|
|
|
|
|
|
|
xor eax,eax
|
|
|
|
|
mov ax,[wa_width_1]
|
|
|
|
|
sub ax,[wa_width_2]
|
|
|
|
|
shr ax,1
|
|
|
|
|
test ax,ax
|
|
|
|
|
jz @f
|
|
|
|
|
shl eax,16
|
|
|
|
|
add edx,eax
|
|
|
|
|
shr eax,16
|
|
|
|
|
call .fill_for_L_R
|
|
|
|
|
@@:
|
|
|
|
|
mov ax,[wa_high_1]
|
|
|
|
|
sub ax,[wa_high_2]
|
|
|
|
|
shr ax,1
|
|
|
|
|
test ax,ax
|
|
|
|
|
jz @f
|
|
|
|
|
add edx,eax
|
|
|
|
|
call .fill_for_U_D
|
|
|
|
|
@@:
|
2011-09-07 18:34:44 +02:00
|
|
|
|
; mov esi,[img_resolution]
|
|
|
|
|
; cmp [img_resolution_2],15
|
|
|
|
|
; jne @f
|
|
|
|
|
; mov esi,15
|
|
|
|
|
;@@:
|
|
|
|
|
mov eax,[raw_pointer_2]
|
|
|
|
|
mov esi,[eax+12]
|
|
|
|
|
|
2011-06-12 00:16:26 +02:00
|
|
|
|
mov eax,[raw_pointer]
|
|
|
|
|
mov edi,[eax+20]
|
|
|
|
|
add edi,eax
|
|
|
|
|
; mov edi,[img_palette]
|
2011-09-07 18:34:44 +02:00
|
|
|
|
|
2011-06-12 00:16:26 +02:00
|
|
|
|
xor ebp,ebp
|
|
|
|
|
|
|
|
|
|
mov ebx,[raw_pointer_2]
|
2011-09-07 18:34:44 +02:00
|
|
|
|
mov eax,[ebx+28]
|
|
|
|
|
add ebx,eax
|
2011-06-12 00:16:26 +02:00
|
|
|
|
|
|
|
|
|
mov eax,ecx
|
|
|
|
|
test ax,ax
|
|
|
|
|
jz .no_draw ;@f
|
|
|
|
|
shr eax,16
|
|
|
|
|
test eax,eax
|
|
|
|
|
jz .no_draw ;@f
|
2011-09-07 18:34:44 +02:00
|
|
|
|
|
|
|
|
|
; cmp [filtering_flag],0
|
|
|
|
|
; je @f
|
|
|
|
|
; cmp esi,8
|
|
|
|
|
; jne @f
|
|
|
|
|
; mov esi,24
|
|
|
|
|
;@@:
|
2011-06-12 00:16:26 +02:00
|
|
|
|
mcall 65
|
|
|
|
|
.no_draw:
|
|
|
|
|
; mov eax,ecx
|
|
|
|
|
; shr eax,16
|
|
|
|
|
; mov [test1],eax
|
|
|
|
|
;
|
|
|
|
|
; mov eax,ecx
|
|
|
|
|
; and eax,0xffff
|
|
|
|
|
; mov [test2],eax
|
|
|
|
|
;
|
|
|
|
|
; mov eax,edx
|
|
|
|
|
; shr eax,16
|
|
|
|
|
; mov [test3],eax
|
|
|
|
|
;
|
|
|
|
|
; mov eax,edx
|
|
|
|
|
; and eax,0xffff
|
|
|
|
|
; mov [test4],eax
|
|
|
|
|
|
|
|
|
|
call draw_file_name_to_work_area
|
2011-09-07 18:34:44 +02:00
|
|
|
|
mcall 68,13,[raw_pointer_2]
|
2011-06-12 00:16:26 +02:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
xor eax,eax
|
|
|
|
|
mov ax,[wa_width_2]
|
2011-09-07 18:34:44 +02:00
|
|
|
|
|
2011-06-12 00:16:26 +02:00
|
|
|
|
mov ebx,[img_width]
|
2011-09-07 18:34:44 +02:00
|
|
|
|
; imul eax,100
|
|
|
|
|
call calculate_relation
|
2011-06-12 00:16:26 +02:00
|
|
|
|
mov [zoom_auto_factor],eax
|
|
|
|
|
|
|
|
|
|
ret
|
|
|
|
|
;---------------------------------------------------------------------
|
2011-09-07 18:34:44 +02:00
|
|
|
|
calculate_relation:
|
|
|
|
|
; relation = X*100/Y
|
|
|
|
|
; eax = eax*100/ebx
|
|
|
|
|
; <EFBFBD><EFBFBD><EFBFBD> = <EFBFBD><EFBFBD><EFBFBD> * 100
|
|
|
|
|
shl eax,2 ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> 4
|
|
|
|
|
lea eax,[eax+eax*4] ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> 5
|
|
|
|
|
lea eax,[eax+eax*4] ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> 5
|
|
|
|
|
integer_division:
|
|
|
|
|
; eax = eax/ebx
|
|
|
|
|
test ebx,ebx
|
|
|
|
|
jnz @f
|
|
|
|
|
inc ebx
|
|
|
|
|
@@:
|
|
|
|
|
xor edx,edx
|
|
|
|
|
div ebx
|
|
|
|
|
; shl edx,1
|
|
|
|
|
; cmp ebx,edx
|
|
|
|
|
; jb @f
|
|
|
|
|
; inc eax
|
|
|
|
|
;@@:
|
|
|
|
|
ret
|
|
|
|
|
;---------------------------------------------------------------------
|
2011-06-12 00:16:26 +02:00
|
|
|
|
calculation_next_value_plus:
|
|
|
|
|
mov ebx,[zoom_auto_factor]
|
|
|
|
|
mov ecx,zoom_factors.min
|
|
|
|
|
sub ecx,4
|
|
|
|
|
@@:
|
|
|
|
|
add ecx,4
|
|
|
|
|
cmp ecx,dword zoom_factors.max
|
|
|
|
|
jae .max
|
|
|
|
|
mov eax,[ecx]
|
|
|
|
|
cmp eax,ebx
|
|
|
|
|
jb @r
|
|
|
|
|
@@:
|
|
|
|
|
mov eax,zoom_factors
|
|
|
|
|
mov [eax],ecx
|
|
|
|
|
; jmp zoom_plus.1
|
|
|
|
|
ret
|
|
|
|
|
.max:
|
|
|
|
|
mov ecx,dword zoom_factors.max
|
|
|
|
|
jmp @r
|
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
|
calculation_next_value_minus:
|
|
|
|
|
mov ebx,[zoom_auto_factor]
|
|
|
|
|
mov ecx,zoom_factors.max
|
|
|
|
|
add ecx,4
|
|
|
|
|
@@:
|
|
|
|
|
sub ecx,4
|
|
|
|
|
cmp ecx,dword zoom_factors.min
|
|
|
|
|
jbe .min
|
|
|
|
|
mov eax,[ecx]
|
|
|
|
|
cmp eax,ebx
|
|
|
|
|
ja @r
|
|
|
|
|
@@:
|
|
|
|
|
mov eax,zoom_factors
|
|
|
|
|
mov [eax],ecx
|
|
|
|
|
; jmp zoom_plus.1
|
|
|
|
|
ret
|
|
|
|
|
.min:
|
|
|
|
|
mov ecx,dword zoom_factors.min
|
|
|
|
|
jmp @r
|
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
|
proc_position_correct:
|
|
|
|
|
mov [position_coorect],1
|
|
|
|
|
mov eax,[scroll_bar_data_vertical.max_area]
|
|
|
|
|
xor ebx,ebx
|
|
|
|
|
mov bx,[wa_high_1]
|
|
|
|
|
shr ebx,1
|
|
|
|
|
shl eax,8
|
|
|
|
|
add ebx,[scroll_bar_data_vertical.position]
|
|
|
|
|
test ebx,ebx
|
|
|
|
|
jnz @f
|
|
|
|
|
inc ebx
|
|
|
|
|
@@:
|
|
|
|
|
xor edx,edx
|
|
|
|
|
div ebx
|
|
|
|
|
mov [vertical_position_coorect],eax
|
|
|
|
|
|
|
|
|
|
mov eax,[scroll_bar_data_horizontal.max_area]
|
|
|
|
|
xor ebx,ebx
|
|
|
|
|
mov bx,[wa_width_1]
|
|
|
|
|
shr ebx,1
|
|
|
|
|
shl eax,8
|
|
|
|
|
add ebx,[scroll_bar_data_horizontal.position]
|
|
|
|
|
test ebx,ebx
|
|
|
|
|
jnz @f
|
|
|
|
|
inc ebx
|
|
|
|
|
@@:
|
|
|
|
|
xor edx,edx
|
|
|
|
|
div ebx
|
|
|
|
|
mov [horizontal_position_coorect],eax
|
|
|
|
|
ret
|
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
|
zoom_plus:
|
|
|
|
|
; cmp [scaling_mode],dword 0
|
|
|
|
|
mov eax,[scaling_mode]
|
|
|
|
|
test eax,eax
|
|
|
|
|
; jz no_scaling.1
|
|
|
|
|
; jz calculation_next_value_plus
|
|
|
|
|
jnz @f
|
|
|
|
|
call calculation_next_value_plus
|
|
|
|
|
jmp .1
|
|
|
|
|
@@:
|
|
|
|
|
; jne @f
|
|
|
|
|
; mov [scaling_mode],dword 100
|
|
|
|
|
; mov [zoom_factors],dword zoom_factors.100
|
|
|
|
|
; call draw_zoom_factors
|
|
|
|
|
; jmp red
|
|
|
|
|
;@@:
|
|
|
|
|
mov eax,zoom_factors
|
|
|
|
|
cmp [eax],dword zoom_factors.max
|
|
|
|
|
jae still
|
|
|
|
|
add [eax],dword 4
|
|
|
|
|
.1:
|
|
|
|
|
mov eax,[eax]
|
|
|
|
|
mov eax,[eax]
|
|
|
|
|
.2:
|
|
|
|
|
mov [scaling_mode],eax
|
|
|
|
|
|
|
|
|
|
mov [correct_scrollbar_100_flag],1
|
|
|
|
|
call calculate_arrows_offset
|
|
|
|
|
|
|
|
|
|
call proc_position_correct
|
|
|
|
|
|
|
|
|
|
call drawimage
|
|
|
|
|
|
|
|
|
|
call set_draw_scrollbar_all
|
|
|
|
|
call draw_scrollbars
|
|
|
|
|
call set_nodraw_scrollbar_all
|
|
|
|
|
|
|
|
|
|
call draw_zoom_factors
|
|
|
|
|
jmp still
|
|
|
|
|
|
|
|
|
|
zoom_all:
|
|
|
|
|
;******************************
|
|
|
|
|
mov eax,wa_width_1
|
|
|
|
|
mov eax,[eax]
|
|
|
|
|
push eax
|
|
|
|
|
mov eax,wa_high_1
|
|
|
|
|
mov eax,[eax]
|
|
|
|
|
push eax
|
|
|
|
|
;******************************
|
|
|
|
|
cmp [position_coorect],0
|
|
|
|
|
je .correct_end
|
|
|
|
|
mov [position_coorect],0
|
|
|
|
|
mov eax,[scroll_bar_data_vertical.max_area]
|
|
|
|
|
; xor ebx,ebx
|
|
|
|
|
; mov bx,[wa_high_1]
|
|
|
|
|
; shr ebx,1
|
|
|
|
|
; add eax,ebx ;[scroll_bar_data_vertical.cur_area]
|
|
|
|
|
shl eax,8
|
|
|
|
|
mov ebx,[vertical_position_coorect]
|
|
|
|
|
test ebx,ebx
|
|
|
|
|
jnz @f
|
|
|
|
|
inc ebx
|
|
|
|
|
@@:
|
|
|
|
|
xor edx,edx
|
|
|
|
|
div ebx
|
|
|
|
|
; shr eax,8
|
|
|
|
|
xor ebx,ebx
|
|
|
|
|
mov bx,[wa_high_1]
|
|
|
|
|
shr ebx,1
|
|
|
|
|
cmp eax,ebx
|
|
|
|
|
jae @f
|
|
|
|
|
xor eax,eax
|
|
|
|
|
jmp .position_vertical_correct
|
|
|
|
|
@@:
|
|
|
|
|
sub eax,ebx
|
|
|
|
|
.position_vertical_correct:
|
|
|
|
|
mov [scroll_bar_data_vertical.position],eax
|
|
|
|
|
|
|
|
|
|
mov eax,[scroll_bar_data_horizontal.max_area]
|
|
|
|
|
; xor ebx,ebx
|
|
|
|
|
; mov bx,[wa_width_1]
|
|
|
|
|
; shr ebx,1
|
|
|
|
|
; add eax,ebx ;[scroll_bar_data_horizontal.cur_area]
|
|
|
|
|
shl eax,8
|
|
|
|
|
mov ebx,[horizontal_position_coorect]
|
|
|
|
|
test ebx,ebx
|
|
|
|
|
jnz @f
|
|
|
|
|
inc ebx
|
|
|
|
|
@@:
|
|
|
|
|
xor edx,edx
|
|
|
|
|
div ebx
|
|
|
|
|
; shr eax,8
|
|
|
|
|
xor ebx,ebx
|
|
|
|
|
mov bx,[wa_width_1]
|
|
|
|
|
shr ebx,1
|
|
|
|
|
cmp eax,ebx
|
|
|
|
|
jae @f
|
|
|
|
|
xor eax,eax
|
|
|
|
|
jmp .position_horizontal_correct
|
|
|
|
|
@@:
|
|
|
|
|
sub eax,ebx
|
|
|
|
|
.position_horizontal_correct:
|
|
|
|
|
mov [scroll_bar_data_horizontal.position],eax
|
|
|
|
|
|
|
|
|
|
.correct_end:
|
|
|
|
|
|
|
|
|
|
;****************************************************************************
|
|
|
|
|
; Vertical SCROLLBAR
|
|
|
|
|
; At a case of resizing of the window
|
|
|
|
|
; Check the position of a runner has crossed a limit
|
|
|
|
|
;****************************************************************************
|
|
|
|
|
mov eax,[scroll_bar_data_vertical.max_area]
|
|
|
|
|
xor ebx,ebx
|
|
|
|
|
mov bx,[wa_high_1]
|
|
|
|
|
cmp eax,ebx
|
|
|
|
|
ja @f
|
|
|
|
|
xor eax,eax
|
|
|
|
|
jmp .p_5
|
|
|
|
|
@@:
|
|
|
|
|
sub eax,ebx ;[scroll_bar_data_vertical.cur_area]
|
|
|
|
|
cmp eax,[scroll_bar_data_vertical.position]
|
|
|
|
|
jae @f
|
|
|
|
|
.p_5:
|
|
|
|
|
mov [scroll_bar_data_vertical.position],eax
|
|
|
|
|
@@:
|
|
|
|
|
;****************************************************************************
|
|
|
|
|
; Horizontal SCROLLBAR
|
|
|
|
|
; At a case of resizing of the window
|
|
|
|
|
; Check the position of a runner has crossed a limit
|
|
|
|
|
;****************************************************************************
|
|
|
|
|
mov eax,[scroll_bar_data_horizontal.max_area]
|
|
|
|
|
xor ebx,ebx
|
|
|
|
|
mov bx,[wa_width_1]
|
|
|
|
|
cmp eax,ebx
|
|
|
|
|
ja @f
|
|
|
|
|
xor eax,eax
|
|
|
|
|
jmp .p_6
|
|
|
|
|
@@:
|
|
|
|
|
sub eax,ebx ;[scroll_bar_data_horizontal.cur_area]
|
|
|
|
|
cmp eax,[scroll_bar_data_horizontal.position]
|
|
|
|
|
jae @f
|
|
|
|
|
.p_6:
|
|
|
|
|
mov [scroll_bar_data_horizontal.position],eax
|
|
|
|
|
@@:
|
|
|
|
|
;****************************************************************************
|
|
|
|
|
|
|
|
|
|
mov eax,[scroll_bar_data_horizontal.max_area]
|
|
|
|
|
mov ebx,[scroll_bar_data_vertical.max_area]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
sub eax,[scroll_bar_data_horizontal.position] ;100
|
|
|
|
|
sub ebx,[scroll_bar_data_vertical.position] ;100
|
|
|
|
|
|
|
|
|
|
xor ecx,ecx
|
|
|
|
|
mov cx,word [wa_width_1]
|
|
|
|
|
cmp eax,ecx
|
|
|
|
|
jbe @f
|
|
|
|
|
xor eax,eax
|
|
|
|
|
mov ax,[wa_width_1]
|
|
|
|
|
@@:
|
|
|
|
|
mov [wa_width_2],ax
|
|
|
|
|
mov ecx,eax
|
|
|
|
|
shl ecx,16
|
|
|
|
|
xchg eax,ebx
|
|
|
|
|
|
|
|
|
|
xor edx,edx
|
|
|
|
|
mov dx,word [wa_high_1]
|
|
|
|
|
cmp eax,edx
|
|
|
|
|
jbe @f
|
|
|
|
|
xor eax,eax
|
|
|
|
|
mov ax,[wa_high_1]
|
|
|
|
|
@@:
|
|
|
|
|
mov [wa_high_2],ax
|
|
|
|
|
mov cx,ax
|
|
|
|
|
|
|
|
|
|
call correct_cur_area
|
|
|
|
|
|
|
|
|
|
mov ebx,ecx
|
|
|
|
|
|
|
|
|
|
push eax
|
|
|
|
|
mov eax,[scroll_bar_data_vertical.max_area]
|
|
|
|
|
cmp eax,[scroll_bar_data_vertical.cur_area]
|
|
|
|
|
jbe .horizontal ;@f
|
|
|
|
|
mov ax,[wa_width_1]
|
|
|
|
|
sub ax,[scroll_bar_data_vertical.size_x]
|
|
|
|
|
mov [wa_width_1],ax
|
|
|
|
|
cmp ax,[wa_width_2]
|
|
|
|
|
jae .horizontal
|
|
|
|
|
mov [wa_width_2],ax
|
|
|
|
|
.horizontal:
|
|
|
|
|
mov eax,[scroll_bar_data_horizontal.max_area]
|
|
|
|
|
cmp eax,[scroll_bar_data_horizontal.cur_area]
|
|
|
|
|
jbe .finish ;@f
|
|
|
|
|
mov ax,[wa_high_1]
|
|
|
|
|
sub ax,[scroll_bar_data_horizontal.size_y]
|
|
|
|
|
mov [wa_high_1],ax
|
|
|
|
|
cmp ax,[wa_high_2]
|
|
|
|
|
jae .finish
|
|
|
|
|
mov [wa_high_2],ax
|
|
|
|
|
.finish: ;@@:
|
|
|
|
|
pop eax
|
|
|
|
|
|
|
|
|
|
mov cx,[wa_width_2]
|
|
|
|
|
shl ecx,16
|
|
|
|
|
mov cx,[wa_high_2]
|
|
|
|
|
|
|
|
|
|
call correct_cur_area
|
|
|
|
|
|
|
|
|
|
mov ebx,ecx
|
|
|
|
|
|
|
|
|
|
mov eax,[scroll_bar_data_horizontal.position]
|
|
|
|
|
|
|
|
|
|
; imul eax,100
|
|
|
|
|
; <EFBFBD><EFBFBD><EFBFBD> = <EFBFBD><EFBFBD><EFBFBD> * 100
|
|
|
|
|
shl eax,2 ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> 4
|
|
|
|
|
lea eax,[eax+eax*4] ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> 5
|
|
|
|
|
lea eax,[eax+eax*4] ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> 5
|
|
|
|
|
push ebx
|
|
|
|
|
mov ebx,[scaling_mode]
|
|
|
|
|
xor edx,edx
|
|
|
|
|
div ebx
|
|
|
|
|
|
|
|
|
|
; shl edx,1
|
|
|
|
|
; cmp edx,ebx
|
|
|
|
|
; jb @f
|
|
|
|
|
; inc eax
|
|
|
|
|
;@@:
|
|
|
|
|
|
|
|
|
|
pop ebx
|
|
|
|
|
|
|
|
|
|
mov ecx,eax
|
|
|
|
|
shl ecx,16
|
|
|
|
|
|
|
|
|
|
mov eax,[scroll_bar_data_vertical.position]
|
|
|
|
|
|
|
|
|
|
; imul eax,100
|
|
|
|
|
; <EFBFBD><EFBFBD><EFBFBD> = <EFBFBD><EFBFBD><EFBFBD> * 100
|
|
|
|
|
shl eax,2 ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> 4
|
|
|
|
|
lea eax,[eax+eax*4] ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> 5
|
|
|
|
|
lea eax,[eax+eax*4] ; <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> 5
|
|
|
|
|
push ebx
|
|
|
|
|
mov ebx,[scaling_mode]
|
|
|
|
|
xor edx,edx
|
|
|
|
|
div ebx
|
|
|
|
|
|
|
|
|
|
; shl edx,1
|
|
|
|
|
; cmp edx,ebx
|
|
|
|
|
; jb @f
|
|
|
|
|
; inc eax
|
|
|
|
|
;@@:
|
|
|
|
|
|
|
|
|
|
pop ebx
|
|
|
|
|
|
|
|
|
|
mov cx,ax
|
|
|
|
|
|
|
|
|
|
call scaling.5
|
|
|
|
|
;******************************
|
|
|
|
|
pop eax
|
|
|
|
|
mov ebx,wa_high_1
|
|
|
|
|
mov [ebx],eax
|
|
|
|
|
|
|
|
|
|
pop eax
|
|
|
|
|
mov ebx,wa_width_1
|
|
|
|
|
mov [ebx],eax
|
|
|
|
|
;******************************
|
|
|
|
|
|
|
|
|
|
ret
|
|
|
|
|
;---------------------------------------------------------------------
|
|
|
|
|
zoom_minus:
|
|
|
|
|
; cmp [scaling_mode],dword 0
|
|
|
|
|
mov eax,[scaling_mode]
|
|
|
|
|
test eax,eax
|
|
|
|
|
; jz no_scaling.1
|
|
|
|
|
; jz calculation_next_value_minus
|
|
|
|
|
jnz @f
|
|
|
|
|
call calculation_next_value_minus
|
|
|
|
|
jmp zoom_plus.1
|
|
|
|
|
@@:
|
|
|
|
|
; je no_scaling.1
|
|
|
|
|
; jne @f
|
|
|
|
|
; mov [scaling_mode],dword 100
|
|
|
|
|
; mov [zoom_factors],dword zoom_factors.100
|
|
|
|
|
; call draw_zoom_factors
|
|
|
|
|
; jmp red
|
|
|
|
|
;@@:
|
|
|
|
|
mov eax,zoom_factors
|
|
|
|
|
cmp [eax],dword zoom_factors.min
|
|
|
|
|
jbe still
|
|
|
|
|
sub [eax],dword 4
|
|
|
|
|
jmp zoom_plus.1
|
|
|
|
|
;---------------------------------------------------------------------
|