forked from KolibriOS/kolibrios
KFM: use build-in icons
git-svn-id: svn://kolibrios.org@7996 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
@@ -4,8 +4,8 @@ hscrl_capt dd -1
|
||||
body_capt dd -1
|
||||
s_status dd 0
|
||||
lineHeight dd LINEH
|
||||
charWidth dd 6
|
||||
scale db 0
|
||||
charWidth dd 8
|
||||
scale db 0x10
|
||||
ins_mode db 1
|
||||
|
||||
sz app_fasm ,'/rd/1/develop/fasm',0
|
||||
|
||||
@@ -52,7 +52,7 @@ ASEPC = '-' ; separator character (char)
|
||||
ATOPH = 19 ; menu bar height (pixels)
|
||||
SCRLW = 16 ; scrollbar widht/height (pixels)
|
||||
ATABW = 8 ; tab key indent width (chars)
|
||||
LINEH = 10 ; line height (pixels)
|
||||
LINEH = 16+1 ; line height (pixels)
|
||||
PATHL = 256 ; maximum path length (chars) !!! don't change !!!
|
||||
AMINS = 8 ; minimal scroll thumb size (pixels)
|
||||
LCHGW = 3 ; changed/saved marker width (pixels)
|
||||
|
||||
@@ -1620,22 +1620,22 @@ endp
|
||||
;---------------------------------------------------------------
|
||||
proc key.ctrl_plus ;///// ZOOM IN //////////////////////////////
|
||||
;---------------------------------------------------------------
|
||||
cmp [scale],7
|
||||
cmp [scale],0x17
|
||||
jz @f
|
||||
inc [scale]
|
||||
add [lineHeight],LINEH
|
||||
add [charWidth],6
|
||||
add [lineHeight], LINEH
|
||||
add [charWidth], 8
|
||||
jmp draw_editor
|
||||
endp
|
||||
|
||||
;---------------------------------------------------------------
|
||||
proc key.ctrl_minus ;///// ZOOM OUT ////////////////////////////
|
||||
;---------------------------------------------------------------
|
||||
cmp [scale],0
|
||||
cmp [scale],0x10
|
||||
jz @f
|
||||
dec [scale]
|
||||
sub [lineHeight],LINEH
|
||||
sub [charWidth],6
|
||||
sub [lineHeight], LINEH
|
||||
sub [charWidth], 8
|
||||
jmp draw_editor
|
||||
@@:
|
||||
ret
|
||||
|
||||
@@ -1,375 +1,388 @@
|
||||
diff16 'tp-mouse.asm',0,$
|
||||
|
||||
proc check_mouse_in_edit_area
|
||||
mcall 37,1
|
||||
mov ebx,eax
|
||||
and ebx,0x0000FFFF
|
||||
shr eax,16
|
||||
mov ecx,[cur_editor.Bounds.Top]
|
||||
inc ecx
|
||||
pushd [cur_editor.Bounds.Left] ecx [cur_editor.Bounds.Right] ecx
|
||||
popd [__rc+0xC] [__rc+0x8] [__rc+0x4] [__rc+0x0]
|
||||
sub [__rc+0x8],SCRLW+6
|
||||
mov ecx,[cur_editor.Gutter.Width]
|
||||
add [__rc+0x0],ecx
|
||||
mov ecx,[lines.scr]
|
||||
imul ecx,[lineHeight]
|
||||
dec ecx
|
||||
add [__rc+0xC],ecx
|
||||
mov ecx,__rc
|
||||
call pt_in_rect
|
||||
ret
|
||||
mcall 37,1
|
||||
mov ebx,eax
|
||||
and ebx,0x0000FFFF
|
||||
shr eax,16
|
||||
mov ecx,[cur_editor.Bounds.Top]
|
||||
inc ecx
|
||||
pushd [cur_editor.Bounds.Left] ecx [cur_editor.Bounds.Right] ecx
|
||||
popd [__rc+0xC] [__rc+0x8] [__rc+0x4] [__rc+0x0]
|
||||
sub [__rc+0x8],SCRLW+6
|
||||
mov ecx,[cur_editor.Gutter.Width]
|
||||
add [__rc+0x0],ecx
|
||||
mov ecx,[lines.scr]
|
||||
imul ecx,[lineHeight]
|
||||
dec ecx
|
||||
add [__rc+0xC],ecx
|
||||
mov ecx,__rc
|
||||
call pt_in_rect
|
||||
ret
|
||||
endp
|
||||
|
||||
proc get_mouse_event
|
||||
mcall 37,2
|
||||
and al,3
|
||||
mov bl,[ecx]
|
||||
cmp [ecx],al
|
||||
mov [ecx],al
|
||||
jne @f
|
||||
mcall 37,7
|
||||
or eax,eax
|
||||
jz .mv
|
||||
add [ecx+6],ax
|
||||
shr eax,16
|
||||
add [ecx+4],ax
|
||||
mov eax,MEV_WHEEL
|
||||
ret
|
||||
.mv: mov eax,MEV_MOVE
|
||||
ret
|
||||
@@: mov bh,al
|
||||
and ebx,0x0101
|
||||
cmp bl,bh
|
||||
je .rb
|
||||
test al,1
|
||||
jz @f
|
||||
mov eax,MEV_LDOWN
|
||||
ret
|
||||
@@: mov eax,MEV_LUP
|
||||
ret
|
||||
.rb: test al,2
|
||||
jz @f
|
||||
mov eax,MEV_RDOWN
|
||||
ret
|
||||
@@: mov eax,MEV_RUP
|
||||
ret
|
||||
mcall 37,2
|
||||
and al,3
|
||||
mov bl,[ecx]
|
||||
cmp [ecx],al
|
||||
mov [ecx],al
|
||||
jne @f
|
||||
mcall 37,7
|
||||
or eax,eax
|
||||
jz .mv
|
||||
add [ecx+6],ax
|
||||
shr eax,16
|
||||
add [ecx+4],ax
|
||||
mov eax,MEV_WHEEL
|
||||
ret
|
||||
.mv: mov eax,MEV_MOVE
|
||||
ret
|
||||
@@: mov bh,al
|
||||
and ebx,0x0101
|
||||
cmp bl,bh
|
||||
je .rb
|
||||
test al,1
|
||||
jz @f
|
||||
mov eax,MEV_LDOWN
|
||||
ret
|
||||
@@: mov eax,MEV_LUP
|
||||
ret
|
||||
.rb: test al,2
|
||||
jz @f
|
||||
mov eax,MEV_RDOWN
|
||||
ret
|
||||
@@: mov eax,MEV_RUP
|
||||
ret
|
||||
endp
|
||||
|
||||
mouse_ev dd mouse.l_down,mouse.l_up,mouse.r_down,mouse.r_up,mouse.wheel,mouse.move
|
||||
|
||||
mouse:
|
||||
|
||||
mcall 9,p_info,-1
|
||||
|
||||
mov eax,[p_info+70] ;status of window
|
||||
test eax,100b
|
||||
jne still.skip_write
|
||||
|
||||
mov ecx,mst
|
||||
call get_mouse_event
|
||||
cmp [bot_mode],0
|
||||
je @f
|
||||
mov ah,al
|
||||
mov al,4
|
||||
call [bot_dlg_handler]
|
||||
jmp still.skip_write
|
||||
@@: cmp al,MEV_MOVE
|
||||
jne .no_move
|
||||
cmp [popup_active],1
|
||||
je @f
|
||||
mcall 9,p_info,-1
|
||||
|
||||
mov eax,[p_info+70] ;status of window
|
||||
test eax,100b
|
||||
jne still.skip_write
|
||||
|
||||
mov ecx,mst
|
||||
call get_mouse_event
|
||||
cmp [bot_mode],0
|
||||
je @f
|
||||
mov ah,al
|
||||
mov al,4
|
||||
call [bot_dlg_handler]
|
||||
jmp still.skip_write
|
||||
@@: cmp al,MEV_MOVE
|
||||
jne .no_move
|
||||
cmp [popup_active],1
|
||||
je @f
|
||||
.no_move:
|
||||
mov [s_status],0
|
||||
mov [s_status],0
|
||||
|
||||
push eax
|
||||
mcall 9,p_info,-1
|
||||
cmp ax,[p_info.window_stack_position]
|
||||
pop eax
|
||||
jne still.skip_write
|
||||
push eax
|
||||
mcall 9,p_info,-1
|
||||
cmp ax,[p_info.window_stack_position]
|
||||
pop eax
|
||||
jne still.skip_write
|
||||
@@:
|
||||
;!!! cmp [just_from_popup],0
|
||||
;!!! je @f
|
||||
;!!! cmp al,MEV_LUP
|
||||
;!!! jne still.skip_write
|
||||
@@: mov [mev],al
|
||||
jmp [mouse_ev+eax*4-4]
|
||||
@@: mov [mev],al
|
||||
jmp [mouse_ev+eax*4-4]
|
||||
|
||||
.wheel:
|
||||
movsx eax,word[mst+4]
|
||||
lea eax,[eax*3]
|
||||
add [cur_editor.TopLeft.X],eax
|
||||
movsx eax,word[mst+6]
|
||||
lea eax,[eax*3]
|
||||
add [cur_editor.TopLeft.Y],eax
|
||||
xor eax,eax
|
||||
mov [mst+4],eax
|
||||
call check_bottom_right
|
||||
call draw_editor
|
||||
jmp still.skip_write
|
||||
test [shi], 0x0C ; left or right ctrl key pressed
|
||||
jnz .wheel_ctrl
|
||||
movsx eax,word[mst+4]
|
||||
lea eax,[eax*3]
|
||||
add [cur_editor.TopLeft.X],eax
|
||||
movsx eax,word[mst+6]
|
||||
lea eax,[eax*3]
|
||||
add [cur_editor.TopLeft.Y],eax
|
||||
xor eax,eax
|
||||
mov [mst+4],eax
|
||||
call check_bottom_right
|
||||
call draw_editor
|
||||
jmp still.skip_write
|
||||
|
||||
.wheel_ctrl:
|
||||
cmp word[mst+6], 0 ; vertical scroll?
|
||||
je still.skip_write
|
||||
test word[mst+6], 0x8000 ; scroll up or down?
|
||||
jnz .wheel_ctrl_down
|
||||
call key.ctrl_plus ; zoom in
|
||||
jmp still.skip_write
|
||||
.wheel_ctrl_down:
|
||||
call key.ctrl_minus ; zoom out
|
||||
jmp still.skip_write
|
||||
|
||||
.move:
|
||||
mcall 37,1
|
||||
movsx ebx,ax
|
||||
sar eax,16
|
||||
cmp [body_capt],0
|
||||
jge .check_body.2
|
||||
cmp [vscrl_capt],0
|
||||
jge .check_vscroll.2
|
||||
cmp [hscrl_capt],0
|
||||
jge .check_hscroll.2
|
||||
mcall 37,1
|
||||
movsx ebx,ax
|
||||
sar eax,16
|
||||
cmp [body_capt],0
|
||||
jge .check_body.2
|
||||
cmp [vscrl_capt],0
|
||||
jge .check_vscroll.2
|
||||
cmp [hscrl_capt],0
|
||||
jge .check_hscroll.2
|
||||
|
||||
cmp [do_not_draw],0
|
||||
jne still.skip_write
|
||||
mov eax,[mi_cur]
|
||||
call get_active_menu_item
|
||||
cmp eax,[mi_cur]
|
||||
je still.skip_write
|
||||
push [mi_cur]
|
||||
cmp [popup_active],0
|
||||
je @f
|
||||
mov [mi_cur],eax
|
||||
@@: call draw_main_menu
|
||||
pop [mi_cur]
|
||||
cmp [popup_active],0
|
||||
je still.skip_write
|
||||
mov ecx,[mi_cur]
|
||||
or ecx,ecx
|
||||
js still.skip_write
|
||||
mov eax,[main_menu.popups+ecx*4-4]
|
||||
mov edx,main_menu
|
||||
call dword[main_menu.onshow+ecx*4-4]
|
||||
call setup_main_menu_popup
|
||||
mcall 60,2,[h_popup],POPUP_STACK,4
|
||||
|
||||
call draw_main_menu
|
||||
cmp [do_not_draw],0
|
||||
jne still.skip_write
|
||||
mov eax,[mi_cur]
|
||||
call get_active_menu_item
|
||||
cmp eax,[mi_cur]
|
||||
je still.skip_write
|
||||
push [mi_cur]
|
||||
cmp [popup_active],0
|
||||
je @f
|
||||
mov [mi_cur],eax
|
||||
@@: call draw_main_menu
|
||||
pop [mi_cur]
|
||||
cmp [popup_active],0
|
||||
je still.skip_write
|
||||
mov ecx,[mi_cur]
|
||||
or ecx,ecx
|
||||
js still.skip_write
|
||||
mov eax,[main_menu.popups+ecx*4-4]
|
||||
mov edx,main_menu
|
||||
call dword[main_menu.onshow+ecx*4-4]
|
||||
call setup_main_menu_popup
|
||||
mcall 60,2,[h_popup],POPUP_STACK,4
|
||||
|
||||
call draw_main_menu
|
||||
|
||||
jmp still.skip_write
|
||||
jmp still.skip_write
|
||||
|
||||
|
||||
.r_down:
|
||||
@@: cmp [popup_active],0
|
||||
je @f
|
||||
mcall 5,1
|
||||
jmp @b
|
||||
@@: cmp [mouse_captured],0
|
||||
jne still.skip_write
|
||||
call check_mouse_in_edit_area
|
||||
jnc still.skip_write
|
||||
mcall 37,0
|
||||
mov [mm.Edit+POPUP.pos],eax
|
||||
@@: mcall 37,2
|
||||
cmp eax,ebx
|
||||
jnz @f
|
||||
mcall 5,1
|
||||
jmp @b
|
||||
@@: and [mst],0xFD
|
||||
call onshow.edit
|
||||
mov dword[POPUP_STACK],mm.Edit
|
||||
mcall 51,1,popup_thread_start,POPUP_STACK
|
||||
mov [h_popup],eax
|
||||
jmp still.skip_write
|
||||
@@: cmp [popup_active],0
|
||||
je @f
|
||||
mcall 5,1
|
||||
jmp @b
|
||||
@@: cmp [mouse_captured],0
|
||||
jne still.skip_write
|
||||
call check_mouse_in_edit_area
|
||||
jnc still.skip_write
|
||||
mcall 37,0
|
||||
mov [mm.Edit+POPUP.pos],eax
|
||||
@@: mcall 37,2
|
||||
cmp eax,ebx
|
||||
jnz @f
|
||||
mcall 5,1
|
||||
jmp @b
|
||||
@@: and [mst],0xFD
|
||||
call onshow.edit
|
||||
mov dword[POPUP_STACK],mm.Edit
|
||||
mcall 51,1,popup_thread_start,POPUP_STACK
|
||||
mov [h_popup],eax
|
||||
jmp still.skip_write
|
||||
|
||||
.r_up:
|
||||
jmp still.skip_write
|
||||
jmp still.skip_write
|
||||
|
||||
.l_down:
|
||||
call check_mouse_in_edit_area
|
||||
jnc .check_vscroll
|
||||
mov [mouse_captured],1
|
||||
mov [body_capt],1
|
||||
call check_mouse_in_edit_area
|
||||
jnc .check_vscroll
|
||||
mov [mouse_captured],1
|
||||
mov [body_capt],1
|
||||
|
||||
call clear_selection
|
||||
call clear_selection
|
||||
|
||||
.check_body.2:
|
||||
sub eax,[cur_editor.Bounds.Left]
|
||||
sub ebx,[cur_editor.Bounds.Top]
|
||||
sub eax,[cur_editor.Gutter.Width]
|
||||
sub eax,LCHGW
|
||||
sub ebx,2
|
||||
push eax
|
||||
mov eax,ebx
|
||||
cdq
|
||||
mov ecx,[lineHeight]
|
||||
idiv ecx
|
||||
@@: add eax,[cur_editor.TopLeft.Y]
|
||||
mov ebx,eax
|
||||
pop eax
|
||||
cdq
|
||||
mov ecx,[charWidth]
|
||||
idiv ecx
|
||||
@@: add eax,[cur_editor.TopLeft.X]
|
||||
mov ecx, ebx
|
||||
call get_line_offset
|
||||
cmp eax,[esi]
|
||||
jl @f
|
||||
mov eax,[esi]
|
||||
@@: cmp ebx,[cur_editor.Lines.Count]
|
||||
jl @f
|
||||
mov ebx,[cur_editor.Lines.Count]
|
||||
dec ebx
|
||||
sub eax,[cur_editor.Bounds.Left]
|
||||
sub ebx,[cur_editor.Bounds.Top]
|
||||
sub eax,[cur_editor.Gutter.Width]
|
||||
sub eax,LCHGW
|
||||
sub ebx,2
|
||||
push eax
|
||||
mov eax,ebx
|
||||
cdq
|
||||
mov ecx,[lineHeight]
|
||||
idiv ecx
|
||||
@@: add eax,[cur_editor.TopLeft.Y]
|
||||
mov ebx,eax
|
||||
pop eax
|
||||
cdq
|
||||
mov ecx,[charWidth]
|
||||
idiv ecx
|
||||
@@: add eax,[cur_editor.TopLeft.X]
|
||||
mov ecx, ebx
|
||||
call get_line_offset
|
||||
cmp eax,[esi]
|
||||
jl @f
|
||||
mov eax,[esi]
|
||||
@@: cmp ebx,[cur_editor.Lines.Count]
|
||||
jl @f
|
||||
mov ebx,[cur_editor.Lines.Count]
|
||||
dec ebx
|
||||
@@:
|
||||
cmp [cur_editor.Caret.X],eax
|
||||
jne .change_cur_pos
|
||||
cmp [cur_editor.Caret.Y],ebx
|
||||
jne .change_cur_pos
|
||||
call editor_check_for_changes
|
||||
jmp still.skip_write
|
||||
cmp [cur_editor.Caret.X],eax
|
||||
jne .change_cur_pos
|
||||
cmp [cur_editor.Caret.Y],ebx
|
||||
jne .change_cur_pos
|
||||
call editor_check_for_changes
|
||||
jmp still.skip_write
|
||||
|
||||
.change_cur_pos:
|
||||
mov [cur_editor.Caret.X],eax
|
||||
mov [cur_editor.Caret.Y],ebx
|
||||
call editor_check_for_changes
|
||||
jmp still
|
||||
mov [cur_editor.Caret.X],eax
|
||||
mov [cur_editor.Caret.Y],ebx
|
||||
call editor_check_for_changes
|
||||
jmp still
|
||||
|
||||
.check_vscroll:
|
||||
mov ecx,[cur_editor.Bounds.Right]
|
||||
sub ecx,SCRLW-1
|
||||
pushd ecx [cur_editor.Bounds.Top] ecx [cur_editor.Bounds.Bottom]
|
||||
popd [__rc+0xC] [__rc+0x8] [__rc+0x4] [__rc+0x0]
|
||||
add [__rc+0x8],SCRLW-2
|
||||
add [__rc+0x4],SCRLW-1
|
||||
sub [__rc+0xC],SCRLW*2+1
|
||||
mov ecx,__rc
|
||||
call pt_in_rect
|
||||
jnc .check_hscroll
|
||||
mov ecx,[cur_editor.Bounds.Right]
|
||||
sub ecx,SCRLW-1
|
||||
pushd ecx [cur_editor.Bounds.Top] ecx [cur_editor.Bounds.Bottom]
|
||||
popd [__rc+0xC] [__rc+0x8] [__rc+0x4] [__rc+0x0]
|
||||
add [__rc+0x8],SCRLW-2
|
||||
add [__rc+0x4],SCRLW-1
|
||||
sub [__rc+0xC],SCRLW*2+1
|
||||
mov ecx,__rc
|
||||
call pt_in_rect
|
||||
jnc .check_hscroll
|
||||
|
||||
.check_vscroll.2:
|
||||
sub ebx,[cur_editor.Bounds.Top]
|
||||
sub ebx,SCRLW
|
||||
cmp [vscrl_capt],0
|
||||
jge .vcaptured
|
||||
mov eax,[cur_editor.VScroll.Top]
|
||||
cmp ebx,eax
|
||||
jb .center_vcapture
|
||||
add eax,[cur_editor.VScroll.Size]
|
||||
cmp ebx,eax
|
||||
jae .center_vcapture
|
||||
mov eax,ebx
|
||||
sub eax,[cur_editor.VScroll.Top]
|
||||
dec eax
|
||||
mov [vscrl_capt],eax
|
||||
dec ebx
|
||||
jmp .vcaptured
|
||||
sub ebx,[cur_editor.Bounds.Top]
|
||||
sub ebx,SCRLW
|
||||
cmp [vscrl_capt],0
|
||||
jge .vcaptured
|
||||
mov eax,[cur_editor.VScroll.Top]
|
||||
cmp ebx,eax
|
||||
jb .center_vcapture
|
||||
add eax,[cur_editor.VScroll.Size]
|
||||
cmp ebx,eax
|
||||
jae .center_vcapture
|
||||
mov eax,ebx
|
||||
sub eax,[cur_editor.VScroll.Top]
|
||||
dec eax
|
||||
mov [vscrl_capt],eax
|
||||
dec ebx
|
||||
jmp .vcaptured
|
||||
.center_vcapture:
|
||||
mov eax,[cur_editor.VScroll.Size]
|
||||
shr eax,1
|
||||
mov [vscrl_capt],eax
|
||||
mov eax,[cur_editor.VScroll.Size]
|
||||
shr eax,1
|
||||
mov [vscrl_capt],eax
|
||||
.vcaptured:
|
||||
sub ebx,[vscrl_capt]
|
||||
jns @f
|
||||
xor ebx,ebx
|
||||
@@: mov [mouse_captured],1
|
||||
mov eax,[cur_editor.Bounds.Bottom]
|
||||
sub eax,[cur_editor.Bounds.Top]
|
||||
sub eax,[cur_editor.VScroll.Size]
|
||||
sub eax,SCRLW*3
|
||||
cmp eax,ebx
|
||||
jge @f
|
||||
mov ebx,eax
|
||||
sub ebx,[vscrl_capt]
|
||||
jns @f
|
||||
xor ebx,ebx
|
||||
@@: mov [mouse_captured],1
|
||||
mov eax,[cur_editor.Bounds.Bottom]
|
||||
sub eax,[cur_editor.Bounds.Top]
|
||||
sub eax,[cur_editor.VScroll.Size]
|
||||
sub eax,SCRLW*3
|
||||
cmp eax,ebx
|
||||
jge @f
|
||||
mov ebx,eax
|
||||
@@:
|
||||
mov [cur_editor.VScroll.Top],ebx
|
||||
mov eax,[cur_editor.Lines.Count]
|
||||
sub eax,[lines.scr]
|
||||
imul ebx
|
||||
mov ebx,[cur_editor.Bounds.Bottom]
|
||||
sub ebx,[cur_editor.Bounds.Top]
|
||||
sub ebx,SCRLW*3
|
||||
sub ebx,[cur_editor.VScroll.Size]
|
||||
idiv ebx
|
||||
cmp eax,[cur_editor.TopLeft.Y]
|
||||
je still.skip_write
|
||||
mov [cur_editor.TopLeft.Y],eax
|
||||
call check_bottom_right
|
||||
call draw_editor
|
||||
jmp still.skip_write
|
||||
mov [cur_editor.VScroll.Top],ebx
|
||||
mov eax,[cur_editor.Lines.Count]
|
||||
sub eax,[lines.scr]
|
||||
imul ebx
|
||||
mov ebx,[cur_editor.Bounds.Bottom]
|
||||
sub ebx,[cur_editor.Bounds.Top]
|
||||
sub ebx,SCRLW*3
|
||||
sub ebx,[cur_editor.VScroll.Size]
|
||||
idiv ebx
|
||||
cmp eax,[cur_editor.TopLeft.Y]
|
||||
je still.skip_write
|
||||
mov [cur_editor.TopLeft.Y],eax
|
||||
call check_bottom_right
|
||||
call draw_editor
|
||||
jmp still.skip_write
|
||||
|
||||
.check_hscroll:
|
||||
pushd [cur_editor.Bounds.Left] [cur_editor.Bounds.Bottom] [cur_editor.Bounds.Right] [cur_editor.Bounds.Bottom]
|
||||
popd [__rc+0xC] [__rc+0x8] [__rc+0x4] [__rc+0x0]
|
||||
add [__rc+0x8],-SCRLW*2-1
|
||||
add [__rc+0x4],-SCRLW+1
|
||||
add [__rc+0xC],-1
|
||||
add [__rc+0x0],SCRLW+1
|
||||
mov ecx,__rc
|
||||
call pt_in_rect
|
||||
jnc .check_main_menu
|
||||
pushd [cur_editor.Bounds.Left] [cur_editor.Bounds.Bottom] [cur_editor.Bounds.Right] [cur_editor.Bounds.Bottom]
|
||||
popd [__rc+0xC] [__rc+0x8] [__rc+0x4] [__rc+0x0]
|
||||
add [__rc+0x8],-SCRLW*2-1
|
||||
add [__rc+0x4],-SCRLW+1
|
||||
add [__rc+0xC],-1
|
||||
add [__rc+0x0],SCRLW+1
|
||||
mov ecx,__rc
|
||||
call pt_in_rect
|
||||
jnc .check_main_menu
|
||||
|
||||
.check_hscroll.2:
|
||||
mov ebx,eax
|
||||
sub ebx,SCRLW+1
|
||||
sub ebx,[cur_editor.Bounds.Left]
|
||||
cmp [hscrl_capt],0
|
||||
jge .hcaptured
|
||||
mov eax,[cur_editor.HScroll.Top]
|
||||
cmp ebx,eax
|
||||
jl .center_hcapture
|
||||
add eax,[cur_editor.HScroll.Size]
|
||||
cmp ebx,eax
|
||||
jge .center_hcapture
|
||||
mov eax,ebx
|
||||
sub eax,[cur_editor.HScroll.Top]
|
||||
dec eax
|
||||
mov [hscrl_capt],eax
|
||||
dec ebx
|
||||
jmp .hcaptured
|
||||
mov ebx,eax
|
||||
sub ebx,SCRLW+1
|
||||
sub ebx,[cur_editor.Bounds.Left]
|
||||
cmp [hscrl_capt],0
|
||||
jge .hcaptured
|
||||
mov eax,[cur_editor.HScroll.Top]
|
||||
cmp ebx,eax
|
||||
jl .center_hcapture
|
||||
add eax,[cur_editor.HScroll.Size]
|
||||
cmp ebx,eax
|
||||
jge .center_hcapture
|
||||
mov eax,ebx
|
||||
sub eax,[cur_editor.HScroll.Top]
|
||||
dec eax
|
||||
mov [hscrl_capt],eax
|
||||
dec ebx
|
||||
jmp .hcaptured
|
||||
.center_hcapture:
|
||||
mov eax,[cur_editor.HScroll.Size]
|
||||
shr eax,1
|
||||
mov [hscrl_capt],eax
|
||||
mov eax,[cur_editor.HScroll.Size]
|
||||
shr eax,1
|
||||
mov [hscrl_capt],eax
|
||||
.hcaptured:
|
||||
sub ebx,[hscrl_capt]
|
||||
jns @f
|
||||
xor ebx,ebx
|
||||
@@: mov [mouse_captured],1
|
||||
mov eax,[cur_editor.Bounds.Right]
|
||||
sub eax,[cur_editor.HScroll.Size]
|
||||
sub eax,SCRLW*3+1
|
||||
cmp eax,ebx
|
||||
jge @f
|
||||
mov ebx,eax
|
||||
sub ebx,[hscrl_capt]
|
||||
jns @f
|
||||
xor ebx,ebx
|
||||
@@: mov [mouse_captured],1
|
||||
mov eax,[cur_editor.Bounds.Right]
|
||||
sub eax,[cur_editor.HScroll.Size]
|
||||
sub eax,SCRLW*3+1
|
||||
cmp eax,ebx
|
||||
jge @f
|
||||
mov ebx,eax
|
||||
@@:
|
||||
mov [cur_editor.HScroll.Top],ebx
|
||||
mov eax,[cur_editor.Columns.Count]
|
||||
sub eax,[columns.scr]
|
||||
imul ebx
|
||||
mov ebx,[cur_editor.Bounds.Right]
|
||||
sub ebx,SCRLW*3+1
|
||||
sub ebx,[cur_editor.HScroll.Size]
|
||||
idiv ebx
|
||||
cmp eax,[cur_editor.TopLeft.X]
|
||||
je still.skip_write
|
||||
mov [cur_editor.TopLeft.X],eax
|
||||
call check_bottom_right
|
||||
call draw_editor
|
||||
jmp still.skip_write
|
||||
mov [cur_editor.HScroll.Top],ebx
|
||||
mov eax,[cur_editor.Columns.Count]
|
||||
sub eax,[columns.scr]
|
||||
imul ebx
|
||||
mov ebx,[cur_editor.Bounds.Right]
|
||||
sub ebx,SCRLW*3+1
|
||||
sub ebx,[cur_editor.HScroll.Size]
|
||||
idiv ebx
|
||||
cmp eax,[cur_editor.TopLeft.X]
|
||||
je still.skip_write
|
||||
mov [cur_editor.TopLeft.X],eax
|
||||
call check_bottom_right
|
||||
call draw_editor
|
||||
jmp still.skip_write
|
||||
|
||||
.check_main_menu:
|
||||
cmp [do_not_draw],0
|
||||
jne .capture_off
|
||||
cmp [do_not_draw],0
|
||||
jne .capture_off
|
||||
|
||||
@@: mcall 37,2
|
||||
test eax,0x01
|
||||
jz @f
|
||||
mcall 5,1
|
||||
jmp @b
|
||||
@@: and [mst],0xFE
|
||||
@@: mcall 37,2
|
||||
test eax,0x01
|
||||
jz @f
|
||||
mcall 5,1
|
||||
jmp @b
|
||||
@@: and [mst],0xFE
|
||||
|
||||
cmp [mi_cur],0
|
||||
jle .capture_off
|
||||
mov ecx,[mi_cur]
|
||||
mov eax,[main_menu.popups+ecx*4-4]
|
||||
mov edx,main_menu
|
||||
call dword[main_menu.onshow+ecx*4-4]
|
||||
call setup_main_menu_popup
|
||||
mcall 51,1,popup_thread_start,POPUP_STACK
|
||||
mov [h_popup],eax
|
||||
cmp [mi_cur],0
|
||||
jle .capture_off
|
||||
mov ecx,[mi_cur]
|
||||
mov eax,[main_menu.popups+ecx*4-4]
|
||||
mov edx,main_menu
|
||||
call dword[main_menu.onshow+ecx*4-4]
|
||||
call setup_main_menu_popup
|
||||
mcall 51,1,popup_thread_start,POPUP_STACK
|
||||
mov [h_popup],eax
|
||||
|
||||
.l_up:
|
||||
.capture_off:
|
||||
or eax,-1
|
||||
mov [vscrl_capt],eax
|
||||
mov [hscrl_capt],eax
|
||||
mov [body_capt],eax
|
||||
mov [mouse_captured],0
|
||||
or eax,-1
|
||||
mov [vscrl_capt],eax
|
||||
mov [hscrl_capt],eax
|
||||
mov [body_capt],eax
|
||||
mov [mouse_captured],0
|
||||
;!!! mov [just_from_popup],0
|
||||
jmp still.skip_write
|
||||
jmp still.skip_write
|
||||
|
||||
Reference in New Issue
Block a user