;--------------------------------------------------------------------- check_scroll_left_event: pusha mov eax,[mouse_scroll_data] test eax,eax jz .end test ax,0x8000 jnz .decr shr eax,16 test ax,0x8000 jnz .decr_1 mov eax,[left_folder_block] sub eax,[max_panel_line] cmp [left_start_draw_line],eax jae .end movzx eax,[mouse_scroll_data.vertical] test eax,eax jnz @f movzx eax,[mouse_scroll_data.horizontal] @@: add [left_start_draw_line],eax jmp .draw .decr: movzx eax,[mouse_scroll_data.vertical] jmp @f .decr_1: movzx eax,[mouse_scroll_data.horizontal] @@: cmp [left_start_draw_line],0 je .end mov ebx,0xffff sub ebx,eax inc ebx sub [left_start_draw_line],ebx cmp [left_start_draw_line],0 jae .draw mov [left_start_draw_line],0 .draw: call draw_left_panel mov [scroll_bar_event],1 .end: popa ret ;--------------------------------------------------------------------- check_scroll_right_event: pusha mov eax,[mouse_scroll_data] test eax,eax jz .end test ax,0x8000 jnz .decr shr eax,16 test ax,0x8000 jnz .decr_1 mov eax,[right_folder_block] sub eax,[max_panel_line] cmp [right_start_draw_line],eax jae .end movzx eax,[mouse_scroll_data.vertical] test eax,eax jnz @f movzx eax,[mouse_scroll_data.horizontal] @@: add [right_start_draw_line],eax jmp .draw .decr: movzx eax,[mouse_scroll_data.vertical] jmp @f .decr_1: movzx eax,[mouse_scroll_data.horizontal] @@: cmp [right_start_draw_line],0 je .end mov ebx,0xffff sub ebx,eax inc ebx sub [right_start_draw_line],ebx cmp [right_start_draw_line],0 jae .draw mov [right_start_draw_line],0 .draw: call draw_right_panel mov [scroll_bar_event],1 .end: popa ret ;--------------------------------------------------------------------- check_scroll_bar_left_event: mov [scroll_pointer],1 cmp [mouse_keys_delta],0 je @f cmp [mouse_keys],0 jz .exit @@: sub ecx,15 cmp bx,cx jb .exit @@: cmp [select_panel_counter],0 je @f mov [select_panel_counter],0 call draw_all_panels_for_scroll_bar @@: mov [scroll_bar_event],1 mov cx,[left_panel_y.start_y] add cx,15 cmp ax,cx ja .scroll cmp [left_start_draw_line],0 jne @f ret @@: dec [left_start_draw_line] jmp .all .scroll: add cx,[left_panel_y.size_y] sub cx,30 cmp ax,cx ja .down mov ebx,16 ;15 add bx,[left_panel_y.start_y] sub cx,bx sub ax,bx mov ebx,eax mov eax,[left_folder_block] call calculate_for_scroll_bar cmp [left_start_draw_line],eax je .exit mov [left_start_draw_line],eax .all: call draw_left_panel .exit: ret .down: mov eax,[left_folder_block] sub eax,[max_panel_line] cmp [left_start_draw_line],eax jb @f ret @@: inc [left_start_draw_line] jmp .all ;--------------------------------------------------------------------- draw_all_panels_for_scroll_bar: push eax push ebx call draw_right_panel call draw_left_panel pop ebx pop eax ret ;--------------------------------------------------------------------- calculate_for_scroll_bar: sub eax,[max_panel_line] inc eax shl eax,10 xor edx,edx div ecx shl edx,1 cmp edx,ebx jb @f inc eax @@: imul eax,ebx shr eax,10 ret ;--------------------------------------------------------------------- check_scroll_bar_right_event: mov [scroll_pointer],2 cmp [mouse_keys_delta],0 je @f cmp [mouse_keys],0 jz .exit @@: sub ecx,15 cmp bx,cx jb .exit @@: cmp [select_panel_counter],1 je @f mov [select_panel_counter],1 call draw_all_panels_for_scroll_bar @@: mov [scroll_bar_event],1 mov cx,[right_panel_y.start_y] add cx,15 cmp ax,cx ja .scroll cmp [right_start_draw_line],0 jne @f ret @@: dec [right_start_draw_line] jmp .all .scroll: add cx,[right_panel_y.size_y] sub cx,30 cmp ax,cx ja .down mov ebx,16 ;15 add bx,[right_panel_y.start_y] sub cx,bx sub ax,bx mov ebx,eax mov eax,[right_folder_block] call calculate_for_scroll_bar cmp [right_start_draw_line],eax je .exit mov [right_start_draw_line],eax .all: call draw_right_panel .exit: ret .down: mov eax,[right_folder_block] sub eax,[max_panel_line] cmp [right_start_draw_line],eax jb @f ret @@: inc [right_start_draw_line] jmp .all ;--------------------------------------------------------------------- draw_scroll_bar_left: pusha mov eax,[left_folder_block] cmp eax,0 jne @f inc eax @@: mov ebx,[max_panel_line] xor edx,edx div ebx cmp eax,0 jne @f inc eax @@: mov ebx,eax xor eax,eax mov ax,[left_panel_x.size_x] sub eax,30 xor edx,edx div ebx shr eax,1 cmp eax,5 jae @f mov eax,5 @@: mov [left_scroll_compens],eax popa mov [scroll_pointer_1],1 pusha mov bx,[left_panel_x.start_x] add bx,[left_panel_x.size_x] sub bx,15 shl ebx,16 mov bx,15 mov ecx,[left_panel_y] call calculate_for_draw_scroll_bar push ecx mov ax,[left_panel_y.size_y] sub eax,30 ;45 sub eax,[left_scroll_compens] sub eax,[left_scroll_compens] shl eax,10 push ebx mov ebx,[left_folder_block] call calculate_for_draw_scroll_bar_2 mov ebx,[left_start_draw_line] imul eax,ebx pop ebx call calculate_for_draw_scroll_bar_1 pop ecx ror ecx,16 add cx,[left_panel_y.size_y] call calculate_for_draw_scroll_bar_3 popa ret ;--------------------------------------------------------------------- draw_scroll_bar_right: pusha mov eax,[right_folder_block] cmp eax,0 jne @f inc eax @@: mov ebx,[max_panel_line] xor edx,edx div ebx cmp eax,0 jne @f inc eax @@: mov ebx,eax xor eax,eax mov ax,[right_panel_x.size_x] sub eax,30 xor edx,edx div ebx shr eax,1 cmp eax,5 jae @f mov eax,5 @@: mov [right_scroll_compens],eax popa mov [scroll_pointer_1],2 pusha mov bx,[right_panel_x.start_x] add bx,[right_panel_x.size_x] sub bx,15 shl ebx,16 mov bx,15 mov ecx,[right_panel_y] call calculate_for_draw_scroll_bar push ecx mov ax,[right_panel_y.size_y] sub eax,30 ;45 sub eax,[right_scroll_compens] sub eax,[right_scroll_compens] shl eax,10 push ebx mov ebx,[right_folder_block] call calculate_for_draw_scroll_bar_2 mov ebx,[right_start_draw_line] imul eax,ebx pop ebx call calculate_for_draw_scroll_bar_1 pop ecx ror ecx,16 add cx,[right_panel_y.size_y] call calculate_for_draw_scroll_bar_3 popa ret ;--------------------------------------------------------------------- calculate_for_draw_scroll_bar: mov edx,0xeeeeee mov eax,13 pusha add ebx,1 shl 16 mov bx,14 add ecx,16 shl 16 sub cx,31 int 0x40 popa xor edx,edx push ebx mov bx,1 int 0x40 push ecx add ebx,15 shl 16 int 0x40 pop ecx pop ebx mov [draw_scroll_character],1 call draw_scroll_bar_srectangle xor eax,eax ret ;--------------------------------------------------------------------- calculate_for_draw_scroll_bar_1: shr eax,10 ror ecx,16 add cx,15 cmp [scroll_pointer_1],1 jne .right add ecx,[left_scroll_compens] jmp @f .right: add ecx,[right_scroll_compens] @@: add cx,ax rol ecx,16 mov [draw_scroll_character],2 call draw_scroll_bar_srectangle ret ;--------------------------------------------------------------------- calculate_for_draw_scroll_bar_2: sub ebx,[max_panel_line] cmp ebx,0 ja @f mov ebx,1 @@: xor edx,edx div ebx shl edx,1 cmp edx,ebx jb @f inc eax @@: ret ;--------------------------------------------------------------------- calculate_for_draw_scroll_bar_3: sub cx,16 rol ecx,16 mov [draw_scroll_character],3 call draw_scroll_bar_srectangle ret ;--------------------------------------------------------------------- ;calculate_for_draw_scroll_bar_4: ; push eax ; push ebx ;; shr eax,10 ; mov ebx,eax ; xor eax,eax ; mov ax,[left_panel_y.size_y] ; xor edx,edx ; div ebx ;; mov esi,eax ; pop ebx ; pop eax ; ret ;--------------------------------------------------------------------- draw_scroll_bar_srectangle: push ecx xor edx,edx mov eax,13 mov cx,1 cmp [draw_scroll_character],2 je .draw_center int 0x40 pusha add ecx,1 shl 16 add ebx,1 shl 16 mov cx,14 mov bx,14 mov edx,0xbbddff int 0x40 xor edx,edx cmp [draw_scroll_character],1 jne .draw_down add ebx,3 shl 16 mov bx,7 add ecx,8 shl 16 mov cx,1 int 0x40 sub ecx,1 shl 16 add ebx,1 shl 16 mov bx,5 int 0x40 sub ecx,1 shl 16 add ebx,1 shl 16 mov bx,3 int 0x40 sub ecx,1 shl 16 add ebx,1 shl 16 mov bx,1 int 0x40 jmp .continue .draw_down: add ebx,3 shl 16 mov bx,7 add ecx,5 shl 16 mov cx,1 int 0x40 add ecx,1 shl 16 add ebx,1 shl 16 mov bx,5 int 0x40 add ecx,1 shl 16 add ebx,1 shl 16 mov bx,3 int 0x40 add ecx,1 shl 16 add ebx,1 shl 16 mov bx,1 int 0x40 .continue: popa add ecx,15 shl 16 int 0x40 pop ecx ret .draw_center: pusha add ecx,1 shl 16 add ebx,1 shl 16 push ecx cmp [scroll_pointer_1],1 jne .right ror ecx,16 sub ecx,[left_scroll_compens] rol ecx,16 xor cx,cx add ecx,[left_scroll_compens] shl cx,1 jmp .draw_center_continue .right: ror ecx,16 sub ecx,[right_scroll_compens] rol ecx,16 xor cx,cx add ecx,[right_scroll_compens] shl cx,1 .draw_center_continue: mov bx,14 mov edx,0xbbddff int 0x40 xor edx,edx mov cx,1 sub ecx,1 shl 16 int 0x40 pop ecx cmp [scroll_pointer_1],1 jne .right_1 cmp [left_scroll_compens],8 jb .continue_1 jmp .draw_center_continue_1 .right_1: cmp [right_scroll_compens],8 jb .continue_1 .draw_center_continue_1: sub ecx,8 shl 16 add ebx,2 shl 16 mov bx,10 add ecx,4 shl 16 mov cx,1 int 0x40 add ecx,3 shl 16 sub ebx,1 shl 16 mov bx,12 int 0x40 add ebx,1 shl 16 mov bx,10 add ecx,3 shl 16 int 0x40 .continue_1: popa ror ecx,16 cmp [scroll_pointer_1],1 jne @f add ecx,[left_scroll_compens] jmp .draw_center_continue_2 @@: add ecx,[right_scroll_compens] .draw_center_continue_2: rol ecx,16 int 0x40 pop ecx ret ;---------------------------------------------------------------------