kfar: add mouse double click events, fix mouse in menu

git-svn-id: svn://kolibrios.org@9039 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
IgorA 2021-07-08 20:45:01 +00:00
parent 293a74db28
commit 90de905a60
2 changed files with 144 additions and 94 deletions

View File

@ -151,85 +151,93 @@ align 4
mov eax,SF_MOUSE_GET
mov ebx,SSF_WINDOW_POSITION
int 0x40
cmp ax, word[skinh]
jl .event
sub ax, word[skinh]
xor dx,dx
mov bx, font_height
div bx
movzx edx,ax
shr eax,16
cmp ax, word[skinh]
jl .event
sub ax, word[skinh]
xor dx,dx
mov bx, font_height
div bx
movzx edx,ax
shr eax,16
sub eax, 5 ;window border
push edx
xor dx,dx
mov bx, font_width
div bx
movzx eax,ax
pop edx
push edx
xor dx,dx
mov bx, font_width
div bx
movzx eax,ax
pop edx
mov ebx, [esp+24h+8] ;DLGTEMPLATE* dlg
cmp edx, [ebx+dlgtemplate.y]
jl .event
cmp eax, [ebx+dlgtemplate.x]
jl .event
sub edx, [ebx+dlgtemplate.y]
sub eax, [ebx+dlgtemplate.x]
cmp edx, [ebx+dlgtemplate.height]
jge .event
cmp eax, [ebx+dlgtemplate.width]
jge .event
cmp dword[ebx+dlgtemplate.size], 0
jne .event ;¥á«¨ ¤¨ «®£®¢®¥ ®ª­® ­¥ áâ ­¤ àâ­®¥ (ᯨ᮪ §­ ç¥­¨©)
cmp edx, [ebx+dlgtemplate.y]
jl .event
cmp eax, [ebx+dlgtemplate.x]
jl .event
sub edx, [ebx+dlgtemplate.y]
sub eax, [ebx+dlgtemplate.x]
cmp edx, [ebx+dlgtemplate.height]
jge .event
cmp eax, [ebx+dlgtemplate.width]
jge .event
add ebx, dlgtemplate.size+12
mov ecx, [ebx-4]
or ecx, ecx
jz .event
or ecx, ecx
jz .event
push ebx ecx
.m_loop:
cmp [ebx+dlgitemtemplate.type], 2 ;button
je .m_comp
cmp [ebx+dlgitemtemplate.type], 3 ;edit
je .m_comp
;cmp [ebx+dlgitemtemplate.type], 5 ;check
;je .m_comp
jmp .m_next
cmp [ebx+dlgitemtemplate.type], 2 ;button
je .m_comp
cmp [ebx+dlgitemtemplate.type], 3 ;edit
je .m_comp
;cmp [ebx+dlgitemtemplate.type], 5 ;check
;je .m_comp
jmp .m_next
align 4
.m_comp:
cmp [ebx+dlgitemtemplate.x1], eax
jg .m_next
cmp [ebx+dlgitemtemplate.y1], edx
jg .m_next
cmp [ebx+dlgitemtemplate.x2], eax
jl .m_next
cmp [ebx+dlgitemtemplate.y2], edx
jl .m_next
mov eax, [ebx+dlgitemtemplate.flags]
and eax, 4
jnz .m_old_focus
mov eax, ebx
jmp .m_new_focus
cmp [ebx+dlgitemtemplate.x1], eax
jg .m_next
cmp [ebx+dlgitemtemplate.y1], edx
jg .m_next
cmp [ebx+dlgitemtemplate.x2], eax
jl .m_next
cmp [ebx+dlgitemtemplate.y2], edx
jl .m_next
cmp [ebx+dlgitemtemplate.type], 2 ;button
jne @f
mov [esp+28+8], ebx ;save to eax
pop ecx ebx
jmp .exit
@@:
mov eax, [ebx+dlgitemtemplate.flags]
and eax, 4
jnz .m_old_focus
mov eax, ebx
jmp .m_new_focus
align 4
.m_next:
add ebx, sizeof.DlgBtn
loop .m_loop
add ebx, sizeof.DlgBtn
loop .m_loop
.m_old_focus:
pop ecx ebx
jmp .event
pop ecx ebx
jmp .event
align 4
.m_new_focus:
pop ecx ebx
pop ecx ebx
call DlgClearFocus
or dword[eax+dlgitemtemplate.flags], 4
or dword[eax+dlgitemtemplate.flags], 4
sub ebx, dlgtemplate.size+12
sub ebx, dlgtemplate.size+12
push ebp
mov ebp, ebx
mov ebp, ebx
call ManagerDlgProc.dodraw
pop ebp
call draw_image
jmp .event
jmp .event
align 4
.exit:
popad
@ -253,10 +261,10 @@ DlgClearFocus:
push ebx ecx
@@:
and byte [ebx+dlgitemtemplate.flags], not 4
add ebx, sizeof.DlgBtn
loop @b
pop ecx ebx
ret
add ebx, sizeof.DlgBtn
loop @b
pop ecx ebx
ret
; int __stdcall ShowGenericBox(DLGTEMPLATE* dlg, void* DlgProc);
align 16
@ -438,6 +446,7 @@ draw_dialog_shadow:
ret
; void __stdcall DrawGenericBox(DLGDATA* dlg, void* DlgProc)
align 16
DrawGenericBox:
pushad
mov ebx, [esp+24h]
@ -720,6 +729,7 @@ restore_console_data:
; int __stdcall menu(void* variants, const char* title, unsigned flags);
; variants 㪠§ë¢ ¥â ­  ⥪ã騩 í«¥¬¥­â ¢ ¤¢ãá¢ï§­®¬ «¨­¥©­®¬ ᯨ᪥
align 16
menu:
pop eax
push [cur_height]
@ -734,11 +744,11 @@ menu_centered_in:
pushad
mov ecx, 60
; 40 bytes for dlgtemplate + additional:
; +40: dd cur_variant
; +44: dd num_variants
; +48: dd begin_variant
; +52: dd end_variant
; +56: dd cur_variant_idx
; +40: dd cur_variant - [???]
; +44: dd num_variants - ᪮«ìª® í«¥¬¥­â®¢ ¢« §¨â ¢ ®ª­®
; +48: dd begin_variant - [dd ..,..,???]
; +52: dd end_variant - [dd ..,..,???]
; +56: dd cur_variant_idx - ???
call xpgalloc
test eax, eax
jnz @f
@ -749,7 +759,7 @@ menu_centered_in:
@@:
mov ebx, eax
mov eax, 1
test byte [esp+20h+28], 1
test byte [esp+20h+28], 1 ;unsigned flags
jz @f
mov al, 3
@@:
@ -760,7 +770,7 @@ menu_centered_in:
; <EFBFBD> å®¤¨¬ è¨à¨­ã ¨ ¢ëá®âã ®ª­ 
xor eax, eax
xor ecx, ecx
mov esi, [esp+20h+20]
mov esi, [esp+20h+20] ;void* variants
mov [ebx+40], esi
mov dword [ebx+56], eax
@@:
@ -889,6 +899,7 @@ menu_centered_in:
popad
ret 28
align 16
MenuDlgProc:
mov eax, [esp+8]
cmp al, 1

View File

@ -819,34 +819,39 @@ mouse:
mov eax,SF_MOUSE_GET
mov ebx,SSF_BUTTON_EXT
int 0x40
mov byte[mousestate], 1
bt eax,24 ;left but. double click
jc @f
mov byte[mousestate], 0
bt eax,8 ;left but. down
jnc event
jc @f
jmp event
@@:
mov eax,SF_MOUSE_GET
mov ebx,SSF_WINDOW_POSITION
int 0x40
cmp ax, word[skinh]
jl event
sub ax, word[skinh]
xor dx,dx
mov bx, font_height
div bx
movzx edx,ax
dec edx ;¢¥àå­ïï à ¬ª 
dec edx ;§ £®«®¢ª¨
shr eax,16
cmp ax, word[skinh]
jl event
sub ax, word[skinh]
xor dx,dx
mov bx, font_height
div bx
movzx edx,ax
dec edx ;¢¥àå­ïï à ¬ª 
dec edx ;§ £®«®¢ª¨
shr eax,16
cmp edx, 0
jl .no_ch_pos
mov ebx, [cur_height]
sub ebx, 3
cmp edx, ebx
je .on_panel
sub ebx, 7-3
cmp edx, ebx
jge .no_ch_pos
push edx eax
jl .no_ch_pos
mov ebx, [cur_height]
sub ebx, 3
cmp edx, ebx
je .on_panel
sub ebx, 7-3
cmp edx, ebx
jge .no_ch_pos
push edx eax
mov ecx, [cur_width]
if font_width & 3
imul ecx, font_width
@ -897,9 +902,14 @@ end if
cmp edx, 0
jl @f
mov [ebp + PanelData.index], edx
cmp byte[mousestate], 0
je @f
call panels_OnKey.enter
jmp event
@@:
call draw_panel
jmp event
align 4
.on_panel:
call get_keybar_ind
lea eax, [panels_mouse+4*eax]
@ -908,7 +918,6 @@ end if
mov ebp, [active_panel]
mov ecx, [ebp + PanelData.index]
call dword[eax]
@@:
jmp event
;input:
@ -958,7 +967,7 @@ get_keybar_ind:
inc edx
@@:
cmp edx, edi
ja .ret
ja .ret
cmp edx, [cur_width]
ja .ret
cmp ecx, 12
@ -970,10 +979,18 @@ get_keybar_ind:
inc ecx
jmp .l
.ret:
lea eax, [esi+ecx-1]
lea eax, [esi+ecx-1]
pop edi esi edx ecx ebx
ret
align 4
OnMouse_ctrl_f39:
sub eax, panels_mouse.ctrl+8
shr eax, 2
add eax, 0x3D
call panels_OnKey.ctrl_f39
ret
align 16
process_ctrl_keys:
cmp byte [esi], 0
@ -1106,6 +1123,7 @@ enum_associations_callback:
xor eax, eax
ret 16
align 4
enum_plugins_callback:
; LongBool __stdcall callback(f_name,sec_name,key_name,key_value);
; [esp+4] = f_name, [esp+8] = sec_name, [esp+12] = key_name, [esp+16] = key_value
@ -3478,6 +3496,7 @@ close_plugin_panels:
jnz @b
ret
align 4
close_plugin_panel:
; close plugin and restore old directory
mov esi, [ebp + PanelData.parents]
@ -3515,6 +3534,7 @@ close_plugin_panel:
@@:
pop ebx edx
align 4
close_handle_if_unused:
; edx=hPlugin, ebx=hFile
push ebp
@ -3534,6 +3554,7 @@ close_handle_if_unused:
pop ebp
ret
align 4
panels_IsHandleUsed:
; edx=hPlugin, ebx=hFile
mov ebp, panel1
@ -3570,6 +3591,7 @@ panels_IsHandleUsed:
inc esi
ret
align 4
panels_OnExit:
; close plugin panels
mov ebp, panel1
@ -3578,6 +3600,7 @@ panels_OnExit:
call close_plugin_panels
ret
align 4
panels_OnRedraw:
or [cursor_x], -1
or [cursor_y], -1
@ -3590,6 +3613,7 @@ panels_OnRedraw:
call draw_panel
ret
align 4
init_console:
mov ecx, [console_data_ptr]
call pgfree
@ -3624,12 +3648,15 @@ init_console:
mov [panel2.height], eax
ret
align 4
get_curfile_folder_entry:
mov ecx, [ebp + PanelData.index]
shl ecx, 2
add ecx, [ebp + PanelData.files]
mov ecx, [ecx]
ret
align 4
get_curfile_name:
call get_curfile_folder_entry
add ecx, 40
@ -4970,6 +4997,7 @@ end if
sub ecx, edi
ret 8
align 4
get_file_color:
mov ah, [esi + 6]
cmp ebp, [active_panel]
@ -4989,6 +5017,7 @@ get_file_color:
@@:
ret
align 4
draw_name_column:
mov eax, [column_index]
mov [last_column_index], eax
@ -5151,6 +5180,7 @@ draw_name_column:
draw_empty_column:
ret
align 4
draw_size_column:
add edi, [column_width]
add edi, [column_width]
@ -5295,6 +5325,7 @@ end if
cld
ret
align 4
draw_date_column:
mov ecx, [column_height]
dec ecx
@ -5361,6 +5392,7 @@ draw_date_column:
cld
ret
align 4
draw_time_column:
mov ecx, [column_height]
dec ecx
@ -5445,6 +5477,7 @@ draw_time_column:
;@@: pop esi
; ret
align 4
read_folder:
mov eax, [ebp + PanelData.nfa]
mov [dirinfo.size], eax
@ -7530,8 +7563,12 @@ panels_mouse:
rd 4
dd panels_OnKey.shift_f5
rd 7
; Ctrl
rd 12
.ctrl:
rd 2
repeat 9-3+1
dd OnMouse_ctrl_f39
end repeat
rd 3
; Ctrl+Shift
rd 12
; Alt
@ -7929,6 +7966,8 @@ FolderShortcuts dd 0,0,0,0,0,0,0,0,0,0
bWasE0 db 0
ctrlstate db 0
mousestate db 0
align 4
MemForImage dd 0
restore_semicolon dd 0
bForHex db 0