forked from KolibriOS/kolibrios
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:
parent
293a74db28
commit
90de905a60
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user