mirror of
https://github.com/KolibriOS/kolibrios.git
synced 2024-12-21 06:12:34 +03:00
81ba3134e6
git-svn-id: svn://kolibrios.org@3184 a494cfbc-eb01-0410-851d-a64ba20cac60
469 lines
12 KiB
PHP
469 lines
12 KiB
PHP
;;****************************************************************************
|
|
;****************************************************************************
|
|
; Draw output part of the image and SCROLLBAR's
|
|
;****************************************************************************
|
|
;****************************************************************************
|
|
drawimage:
|
|
|
|
|
|
call get_window_param
|
|
;mov edx,5*65536+50
|
|
mov edx,0*65536+28
|
|
mov esi,[img_resolution] ;24
|
|
cmp esi,32
|
|
ja .exit_error ;.exit
|
|
mov edi,[img_palette]
|
|
;****************************************************************************
|
|
; Calculation of sizes of an output part of the image
|
|
;****************************************************************************
|
|
xor eax,eax
|
|
mov [draw_SB],al
|
|
mov [draw_SB1],al
|
|
mov eax,[window_width]
|
|
; sub eax,9
|
|
mov [wa_width],ax
|
|
mov [wa_width_1],ax
|
|
mov [wa_width_2],ax
|
|
mov ebx,[img_width]
|
|
test ebx,ebx
|
|
jz .exit_error ;.exit
|
|
cmp ax,bx
|
|
jae @f
|
|
sub ax,[scroll_bar_data_vertical.size_x]
|
|
mov [draw_SB],1
|
|
jmp .size_y
|
|
@@:
|
|
mov ax,bx
|
|
|
|
|
|
.size_y:
|
|
mov ebx,[img_high]
|
|
test ebx,ebx
|
|
jz .exit_error ;.exit
|
|
shl eax,16
|
|
add eax,[window_high]
|
|
; cmp ax,28
|
|
; jbe @f
|
|
sub ax,28
|
|
;@@:
|
|
mov [wa_high],ax
|
|
mov [wa_high_1],ax
|
|
mov [wa_high_2],ax
|
|
cmp ax,bx
|
|
jae @f
|
|
sub ax,[scroll_bar_data_horizontal.size_y]
|
|
mov [draw_SB1],1
|
|
jmp .continue
|
|
@@:
|
|
mov ax,bx
|
|
.continue:
|
|
mov ecx,eax
|
|
;****************************************************************************
|
|
;
|
|
;****************************************************************************
|
|
cmp [draw_SB1],1
|
|
je @f
|
|
cmp [draw_SB],0
|
|
je @f
|
|
ror ecx,16
|
|
add cx,[scroll_bar_data_vertical.size_x]
|
|
rol ecx,16
|
|
@@:
|
|
cmp [draw_SB],1
|
|
je @f
|
|
cmp [draw_SB1],0
|
|
je @f
|
|
add cx,[scroll_bar_data_horizontal.size_y]
|
|
@@:
|
|
; call check_8bit_less
|
|
;.continue_1:
|
|
;****************************************************************************
|
|
; Prepare of data for SCROLLBAR's
|
|
;****************************************************************************
|
|
call correct_cur_area
|
|
|
|
mov eax,[img_width]
|
|
push edx
|
|
imul eax,[scaling_mode]
|
|
mov ebx,100
|
|
xor edx,edx
|
|
div ebx
|
|
mov [scroll_bar_data_horizontal.max_area],eax
|
|
pop edx
|
|
|
|
|
|
mov ebx,[img_high]
|
|
push eax edx
|
|
mov eax,ebx
|
|
imul eax,[scaling_mode]
|
|
mov ebx,100
|
|
xor edx,edx
|
|
div ebx
|
|
mov ebx,eax
|
|
pop edx eax
|
|
mov [scroll_bar_data_vertical.max_area],ebx
|
|
|
|
; cmp [scaling_mode],100
|
|
; jne .continue_1
|
|
|
|
call correct_width
|
|
call correct_cur_area
|
|
|
|
cmp [correct_w],0
|
|
je @f
|
|
|
|
call correct_high
|
|
call correct_cur_area
|
|
jmp .continue_1
|
|
|
|
@@:
|
|
call correct_high
|
|
call correct_cur_area
|
|
|
|
cmp [correct_h],0
|
|
je @f
|
|
|
|
call correct_width
|
|
call correct_cur_area
|
|
@@:
|
|
|
|
; call check_8bit_less
|
|
|
|
.continue_1:
|
|
; mov eax,[window_high]
|
|
; sub eax,55
|
|
; ror eax,16
|
|
; mov ax,dx
|
|
; rol eax,16
|
|
mov eax,edx
|
|
shl eax,16
|
|
mov ax,cx
|
|
mov [scroll_bar_data_vertical.y],eax
|
|
|
|
; mov eax,[window_width]
|
|
; sub eax,10
|
|
; ror eax,16
|
|
; ror edx,16
|
|
; mov ax,dx
|
|
; rol edx,16
|
|
; rol eax,16
|
|
mov eax,edx
|
|
mov ebx,ecx
|
|
shr ebx,16
|
|
mov ax,bx
|
|
mov [scroll_bar_data_horizontal.x],eax
|
|
|
|
|
|
; mov eax,edx
|
|
; mov ebx,ecx
|
|
; shr ebx,16
|
|
; shr eax,16
|
|
; add ax,bx
|
|
mov eax,[window_width]
|
|
sub ax,[scroll_bar_data_vertical.size_x]
|
|
; sub ax,4
|
|
mov [scroll_bar_data_vertical.start_x],ax
|
|
|
|
; mov eax,edx
|
|
; add ax,cx
|
|
mov eax,[window_high]
|
|
sub ax,[scroll_bar_data_horizontal.size_y]
|
|
; sub ax,4
|
|
mov [scroll_bar_data_horizontal.start_y],ax
|
|
|
|
;****************************************************************************
|
|
; Check necessity prepare of data
|
|
;****************************************************************************
|
|
mov eax,[scroll_bar_data_horizontal.max_area]
|
|
mov ebx,[scroll_bar_data_vertical.max_area]
|
|
cmp ebx,[scroll_bar_data_vertical.cur_area]
|
|
ja @f
|
|
cmp eax,[scroll_bar_data_horizontal.cur_area]
|
|
ja @f
|
|
|
|
mov ebp,0
|
|
mov ebx,[soi]
|
|
jmp .end
|
|
@@:
|
|
;****************************************************************************
|
|
; Calculate offset of next row data relative to previous row data
|
|
;****************************************************************************
|
|
mov ebp,eax
|
|
mov ebx,ecx
|
|
shr ebx,16
|
|
sub ebp,ebx
|
|
imul ebp,esi
|
|
mov eax,ebp
|
|
shr ebp,3
|
|
;****************************************************************************
|
|
; 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]
|
|
sub eax,[scroll_bar_data_vertical.cur_area]
|
|
cmp eax,[scroll_bar_data_vertical.position]
|
|
jae @f
|
|
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]
|
|
sub eax,[scroll_bar_data_horizontal.cur_area]
|
|
cmp eax,[scroll_bar_data_horizontal.position]
|
|
jae @f
|
|
mov [scroll_bar_data_horizontal.position],eax
|
|
@@:
|
|
;****************************************************************************
|
|
; Calculate offset from a beginning of a image
|
|
;****************************************************************************
|
|
mov ebx,[scroll_bar_data_horizontal.max_area]
|
|
imul ebx,esi
|
|
mov eax,ebx
|
|
shr ebx,3
|
|
imul ebx,[scroll_bar_data_vertical.position]
|
|
mov eax,[scroll_bar_data_horizontal.position]
|
|
imul eax,esi
|
|
shr eax,3
|
|
add ebx,eax
|
|
add ebx,[soi]
|
|
.end:
|
|
cmp [soi],0
|
|
je .exit_error ;.exit
|
|
;****************************************************************************
|
|
; Draw image
|
|
;****************************************************************************
|
|
cmp [img_resolution_2],15
|
|
jne @f
|
|
mov esi,15
|
|
@@:
|
|
mov [image_start_coordinates],edx
|
|
mov [image_draw_size],ecx
|
|
cmp [scaling_mode],dword 100
|
|
je .100
|
|
cmp [scaling_mode],dword 0
|
|
jne @f
|
|
call scaling.1
|
|
ret
|
|
@@:
|
|
mov [correct_scrollbar_100_flag],0
|
|
call zoom_all
|
|
ret
|
|
.100:
|
|
mov al,[correct_scrollbar_100_flag]
|
|
test al,al
|
|
jnz @r
|
|
;******************************
|
|
mov eax,wa_width_1
|
|
mov eax,[eax]
|
|
push eax
|
|
mov eax,wa_high_1
|
|
mov eax,[eax]
|
|
push eax
|
|
;******************************
|
|
rol ecx,16
|
|
mov eax,[scroll_bar_data_vertical.max_area]
|
|
cmp eax,[scroll_bar_data_vertical.cur_area]
|
|
mov ax,[wa_width_1]
|
|
jbe @f
|
|
sub ax,[scroll_bar_data_vertical.size_x]
|
|
mov [wa_width_1],ax
|
|
@@:
|
|
sub ax,cx
|
|
mov [wa_width_2],cx
|
|
ror ecx,16
|
|
shr ax,1
|
|
shl eax,16
|
|
add edx,eax
|
|
shr eax,16
|
|
test eax,eax
|
|
jz @f
|
|
call scaling.fill_for_L_R
|
|
@@:
|
|
mov eax,[scroll_bar_data_horizontal.max_area]
|
|
cmp eax,[scroll_bar_data_horizontal.cur_area]
|
|
mov ax,[wa_high_1]
|
|
jbe @f
|
|
sub ax,[scroll_bar_data_horizontal.size_y]
|
|
mov [wa_high_1],ax
|
|
@@:
|
|
sub ax,cx
|
|
mov [wa_high_2],cx
|
|
shr ax,1
|
|
add edx,eax
|
|
test eax,eax
|
|
jz @f
|
|
call scaling.fill_for_U_D
|
|
@@:
|
|
;******************************
|
|
mcall 65, ;[soi]
|
|
;******************************
|
|
pop eax
|
|
mov ebx,wa_high_1
|
|
mov [ebx],eax
|
|
|
|
pop eax
|
|
mov ebx,wa_width_1
|
|
mov [ebx],eax
|
|
;******************************
|
|
.exit:
|
|
call draw_file_name_to_work_area
|
|
ret
|
|
|
|
.exit_error:
|
|
xor eax,eax
|
|
mov [scroll_bar_data_vertical.cur_area],eax
|
|
mov [scroll_bar_data_horizontal.cur_area],eax
|
|
ret
|
|
;****************************************************************************
|
|
draw_file_name_to_work_area:
|
|
mov eax,[check1.flags]
|
|
test eax,10b
|
|
jz @f
|
|
mov ebx,[file_name_length]
|
|
mov eax,ebx
|
|
lea ebx,[ebx*5]
|
|
add ebx,eax
|
|
add ebx,13 shl 16
|
|
mcall 13,,<59,11>,0xe5e5e5
|
|
mcall 4,<16,60>,0x80000000,file_name,,0xe5e5e5
|
|
@@:
|
|
ret
|
|
;****************************************************************************
|
|
;check_8bit_less:
|
|
; cmp esi,8
|
|
; jae .no_8bit_less
|
|
; mov eax,ecx
|
|
; ror eax,16
|
|
;; mov ebx,eax
|
|
; xor ecx,ecx
|
|
;
|
|
; inc ecx
|
|
; shr ax,1
|
|
;
|
|
; cmp esi,4
|
|
; je @f
|
|
;
|
|
; inc ecx
|
|
; shr ax,1
|
|
;
|
|
; cmp esi,2
|
|
; je @f
|
|
;
|
|
; inc ecx
|
|
; shr ax,1
|
|
;@@:
|
|
;; test ebx,ecx
|
|
;; jz @f
|
|
;; inc eax
|
|
;;@@:
|
|
; shl ax,cl
|
|
; rol eax,16
|
|
; mov ecx,eax
|
|
;.no_8bit_less:
|
|
; ret
|
|
;****************************************************************************
|
|
correct_width:
|
|
mov [correct_w],0
|
|
mov ebx,[scroll_bar_data_vertical.max_area]
|
|
cmp ebx,[scroll_bar_data_vertical.cur_area]
|
|
jbe @f
|
|
mov eax,ecx
|
|
shr eax,16
|
|
push eax
|
|
mov ax,[scroll_bar_data_vertical.size_x]
|
|
sub [wa_width],ax
|
|
pop eax
|
|
cmp [wa_width],ax
|
|
jae @f
|
|
ror ecx,16
|
|
mov cx,[wa_width]
|
|
rol ecx,16
|
|
mov [correct_w],1
|
|
@@:
|
|
ret
|
|
;****************************************************************************
|
|
correct_high:
|
|
mov [correct_h],0
|
|
mov eax,[scroll_bar_data_horizontal.max_area]
|
|
cmp eax,[scroll_bar_data_horizontal.cur_area]
|
|
jbe @f
|
|
push eax
|
|
mov ax,[scroll_bar_data_horizontal.size_y]
|
|
sub [wa_high],ax
|
|
pop eax
|
|
cmp [wa_high],cx
|
|
jae @f
|
|
mov cx,[wa_high]
|
|
mov [correct_h],1
|
|
@@:
|
|
ret
|
|
;****************************************************************************
|
|
correct_cur_area:
|
|
mov eax,ecx
|
|
xor ebx,ebx
|
|
mov bx,ax
|
|
mov [scroll_bar_data_vertical.cur_area],ebx
|
|
shr eax,16
|
|
mov [scroll_bar_data_horizontal.cur_area],eax
|
|
ret
|
|
;****************************************************************************
|
|
; Check draw vertical scrollbar
|
|
;****************************************************************************
|
|
draw_scrollbars:
|
|
xor eax,eax
|
|
mov [draw_scrollbar_counter],eax
|
|
mov eax,[scroll_bar_data_vertical.max_area]
|
|
cmp eax,[scroll_bar_data_vertical.cur_area]
|
|
jbe @f
|
|
cmp [scroll_bar_data_vertical.cur_area],0
|
|
je @f
|
|
push dword scroll_bar_data_vertical
|
|
call [scrollbar_ver_draw]
|
|
; draw_scroll_bar_vertical scroll_bar_data_vertical
|
|
inc [draw_scrollbar_counter]
|
|
@@:
|
|
;****************************************************************************
|
|
; Check draw horizontal scrollbar
|
|
;****************************************************************************
|
|
mov eax,[scroll_bar_data_horizontal.max_area]
|
|
cmp eax,[scroll_bar_data_horizontal.cur_area]
|
|
jbe @f
|
|
cmp [scroll_bar_data_horizontal.cur_area],0
|
|
je @f
|
|
push dword scroll_bar_data_horizontal
|
|
call [scrollbar_hor_draw]
|
|
; draw_scroll_bar_horizontal scroll_bar_data_horizontal
|
|
inc [draw_scrollbar_counter]
|
|
@@:
|
|
; nodrawimage:
|
|
cmp [draw_scrollbar_counter],2
|
|
jne @f
|
|
mov ebx,[scroll_bar_data_vertical.x]
|
|
mov ecx,[scroll_bar_data_horizontal.y]
|
|
mcall 13, , ,0xffffff
|
|
@@:
|
|
ret
|
|
;****************************************************************************
|
|
;debug_1:
|
|
; pushad
|
|
; mov eax,ecx
|
|
; shr eax,16
|
|
; mov ebx,ecx
|
|
; shl ebx,16
|
|
; shr ebx,16
|
|
; mov eax,[image_file]
|
|
; mov ebx,edi
|
|
; mov [temp_eax],eax
|
|
; mov [temp_ebx],ebx
|
|
; mcall 13,<90,500>,<2,20>,0
|
|
; mcall 47,0xa0000,[temp_eax],<100, 5>,0xffffff
|
|
; mcall 47,0xa0000,[temp_ebx],<300, 5>,0xffffff
|
|
; popad
|
|
; ret
|
|
;temp_eax dd 0
|
|
;temp_ebx dd 0
|
|
;**************************************************************************** |