forked from KolibriOS/kolibrios
gui/mouse.inc:
+ new file for GUI-related mouse events handling (old mouse.inc renamed) gui/button.inc and gui/window.inc: * refactoring in regards of new mouse.inc: * obsolete code eliminated * old'n'ugly `check_buttons` and `checkwindows` removed * events handlers added gui/window.inc: * moved GUI-related syscalls and auxilary functions from kernel.asm * removed registers cross-ordering from syscall 67 (window move/resize) + more comments added known bugs include: 1. apps using syscall 67 (kfar etc.) may not redraw their old screen area leaving ghost images 2. possibility of mouse cursor artefacts may have increased (this *really* has to be reworked) git-svn-id: svn://kolibrios.org@1391 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
e79fad8794
commit
ddd29cc90f
@ -169,7 +169,7 @@ iglobal
|
||||
dd 0
|
||||
dd syscall_putimage_palette; 65-PutImagePalette
|
||||
dd sys_process_def ; 66-Process definitions - keyboard
|
||||
dd sys_window_move ; 67-Window move or resize
|
||||
dd 0
|
||||
dd 0
|
||||
dd 0
|
||||
dd file_system_lfn ; 70-Common file system interface, version 2
|
||||
@ -180,7 +180,7 @@ iglobal
|
||||
align 4
|
||||
servetable2:
|
||||
|
||||
dd sys_drawwindow ; 0-DrawWindow
|
||||
dd syscall_draw_window ; 0-DrawWindow
|
||||
dd syscall_setpixel ; 1-SetPixel
|
||||
dd sys_getkey ; 2-GetKey
|
||||
dd sys_clock ; 3-GetTime
|
||||
@ -247,11 +247,11 @@ iglobal
|
||||
dd sys_resize_app_memory ; 64-Resize application memory usage
|
||||
dd cross_order ; 65-PutImagePalette
|
||||
dd cross_order ; 66-Process definitions - keyboard
|
||||
dd cross_order ; 67-Window move or resize
|
||||
dd syscall_move_window ; 67-Window move or resize
|
||||
dd f68 ; 68-Some internal services
|
||||
dd sys_debug_services ; 69-Debug
|
||||
dd cross_order ; 70-Common file system interface, version 2
|
||||
dd syscall_windowsettings ; 71-Window settings
|
||||
dd syscall_window_settings ; 71-Window settings
|
||||
dd sys_sendwindowmsg ; 72-Send window message
|
||||
times 255 - ( ($-servetable2) /4 ) dd undefined_syscall
|
||||
dd sys_end ; -1-end application
|
||||
|
@ -1,6 +1,6 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2008. All rights reserved. ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2010. All rights reserved. ;;
|
||||
;; Copyright (C) MenuetOS 2000-2004 Ville Mikael Turjanmaa ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
@ -8,14 +8,12 @@
|
||||
|
||||
$Revision$
|
||||
|
||||
|
||||
button._.MAX_BUTTONS = 4095
|
||||
|
||||
|
||||
;==============================================================================
|
||||
;///// public functions ///////////////////////////////////////////////////////
|
||||
;==============================================================================
|
||||
|
||||
button.MAX_BUTTONS = 4095
|
||||
|
||||
struc SYS_BUTTON
|
||||
{
|
||||
.pslot dw ?
|
||||
@ -25,20 +23,13 @@ struc SYS_BUTTON
|
||||
.top dw ?
|
||||
.height dw ?
|
||||
.id_hi dw ?
|
||||
.align dw ?
|
||||
dw ?
|
||||
.sizeof:
|
||||
}
|
||||
virtual at 0
|
||||
SYS_BUTTON SYS_BUTTON
|
||||
end virtual
|
||||
|
||||
iglobal
|
||||
mx dw 0x0 ; keeps the x mouse's position when it was clicked
|
||||
my dw 0x0 ; keeps the y mouse's position when it was clicked
|
||||
bPressedMouseXY_B db 0x0
|
||||
btn_down_determ db 0x0
|
||||
endg
|
||||
|
||||
align 4
|
||||
;------------------------------------------------------------------------------
|
||||
syscall_button: ;///// system function 8 //////////////////////////////////////
|
||||
@ -67,7 +58,7 @@ syscall_button: ;///// system function 8 //////////////////////////////////////
|
||||
; do we have free button slots available?
|
||||
mov edi, [BTN_ADDR]
|
||||
mov eax, [edi]
|
||||
cmp eax, button._.MAX_BUTTONS
|
||||
cmp eax, button.MAX_BUTTONS
|
||||
jge .exit
|
||||
|
||||
; does it have positive size? (otherwise it doesn't have sense)
|
||||
@ -228,6 +219,7 @@ syscall_button.remove_button:
|
||||
add esi, edi
|
||||
xor ecx, ecx
|
||||
add ecx, -SYS_BUTTON.sizeof
|
||||
add esi, SYS_BUTTON.sizeof
|
||||
|
||||
.next_button:
|
||||
dec ebx
|
||||
@ -263,201 +255,123 @@ syscall_button.remove_button:
|
||||
|
||||
align 4
|
||||
;------------------------------------------------------------------------------
|
||||
check_buttons: ;///////////////////////////////////////////////////////////////
|
||||
sys_button_activate_handler: ;/////////////////////////////////////////////////
|
||||
;------------------------------------------------------------------------------
|
||||
;? <description>
|
||||
;------------------------------------------------------------------------------
|
||||
cmp byte[BTN_DOWN], 0 ; mouse buttons pressed
|
||||
jnz @f
|
||||
mov [bPressedMouseXY_B], 0
|
||||
ret
|
||||
;> eax = pack[8(process slot), 24(button id)]
|
||||
;> ebx = pack[16(button x coord), 16(button y coord)]
|
||||
;> cl = mouse button mask this system button was pressed with
|
||||
;------------------------------------------------------------------------------
|
||||
call button._.find_button
|
||||
or eax, eax
|
||||
jz .exit
|
||||
|
||||
@@: pushad
|
||||
xor esi, esi
|
||||
mov edi, [BTN_ADDR]
|
||||
mov edx, [edi]
|
||||
test edx, edx
|
||||
jne @f
|
||||
popad
|
||||
ret
|
||||
|
||||
;here i catch the coordinates when the mouse's button is clicked
|
||||
@@: push ax
|
||||
cmp [bPressedMouseXY_B], 0 ; FALSE
|
||||
jnz @f
|
||||
mov [bPressedMouseXY_B], 1 ; TRUE - it was already clicked
|
||||
mov ax, [MOUSE_X]
|
||||
mov [mx], ax
|
||||
mov ax, [MOUSE_Y]
|
||||
mov [my], ax
|
||||
@@: pop ax
|
||||
;and it is only refreshed after the mouse's button release
|
||||
|
||||
push esi
|
||||
inc edx
|
||||
push edx
|
||||
|
||||
.buttonnewcheck:
|
||||
pop edx
|
||||
pop esi
|
||||
inc esi
|
||||
cmp edx, esi
|
||||
jge .bch
|
||||
|
||||
popad
|
||||
ret
|
||||
|
||||
.bch:
|
||||
push esi
|
||||
push edx
|
||||
mov eax, esi
|
||||
shl eax, 4
|
||||
add eax, edi
|
||||
|
||||
; check that button is at top of windowing stack
|
||||
movzx ebx, [eax + SYS_BUTTON.pslot]
|
||||
movzx ecx, word[WIN_STACK + ebx * 2]
|
||||
cmp ecx, [TASK_COUNT]
|
||||
jne .buttonnewcheck
|
||||
|
||||
; check that button start is inside window x/y end
|
||||
shl ebx, 5
|
||||
|
||||
test [ebx + window_data + WDATA.fl_wstate], WSTATE_MINIMIZED
|
||||
jnz .buttonnewcheck
|
||||
|
||||
movzx edx, [eax + SYS_BUTTON.left]
|
||||
cmp edx, [window_data + ebx + WDATA.box.width] ;ecx
|
||||
jge .buttonnewcheck
|
||||
|
||||
movzx edx, [eax + SYS_BUTTON.top]
|
||||
cmp edx, [window_data + ebx + WDATA.box.height] ;ecx
|
||||
jge .buttonnewcheck
|
||||
|
||||
; check coordinates
|
||||
|
||||
; mouse x >= button x ?
|
||||
add ebx, window_data
|
||||
mov ecx, [ebx + WDATA.box.left]
|
||||
movzx edx, [eax + SYS_BUTTON.left]
|
||||
add edx, ecx
|
||||
mov cx, [mx] ;mov cx,[MOUSE_X]
|
||||
cmp edx, ecx
|
||||
jg .buttonnewcheck
|
||||
|
||||
movzx ebx, [eax + SYS_BUTTON.width]
|
||||
add edx, ebx
|
||||
cmp ecx, edx
|
||||
jg .buttonnewcheck
|
||||
|
||||
; mouse y >= button y ?
|
||||
movzx ebx, [eax + SYS_BUTTON.pslot]
|
||||
shl ebx, 5
|
||||
add ebx, window_data
|
||||
mov ecx, [ebx + WDATA.box.top]
|
||||
movzx edx, [eax + SYS_BUTTON.top]
|
||||
add edx, ecx
|
||||
mov cx, [my] ;mov cx,[MOUSE_Y]
|
||||
cmp edx, ecx
|
||||
jg .buttonnewcheck
|
||||
|
||||
movzx ebx, [eax + SYS_BUTTON.height]
|
||||
add edx, ebx
|
||||
cmp ecx, edx
|
||||
jg .buttonnewcheck
|
||||
|
||||
; mouse on button
|
||||
|
||||
pop edx
|
||||
pop esi
|
||||
|
||||
mov ebx, dword[eax + SYS_BUTTON.id_hi - 2] ; button id : bits 16-31
|
||||
mov bx, [eax + SYS_BUTTON.id_lo] ; button id : bits 00-16
|
||||
push ebx
|
||||
|
||||
mov byte[MOUSE_DOWN], 1 ; no mouse down checks
|
||||
mov ebx, dword[eax + SYS_BUTTON.id_hi - 2]
|
||||
call button._.negative_button
|
||||
|
||||
pushad
|
||||
push eax
|
||||
mov al, [BTN_DOWN]
|
||||
mov byte[btn_down_determ], al
|
||||
pop eax
|
||||
.exit:
|
||||
ret
|
||||
|
||||
.cbwaitmouseup:
|
||||
call checkidle
|
||||
call [draw_pointer]
|
||||
|
||||
pushad
|
||||
call stack_handler
|
||||
popad
|
||||
|
||||
cmp byte[BTN_DOWN], 0 ; mouse buttons pressed ?
|
||||
jnz .cbwaitmouseup
|
||||
popad
|
||||
align 4
|
||||
;------------------------------------------------------------------------------
|
||||
sys_button_deactivate_handler: ;///////////////////////////////////////////////
|
||||
;------------------------------------------------------------------------------
|
||||
;? <description>
|
||||
;------------------------------------------------------------------------------
|
||||
;> eax = pack[8(process slot), 24(button id)]
|
||||
;> ebx = pack[16(button x coord), 16(button y coord)]
|
||||
;> cl = mouse button mask this system button was pressed with
|
||||
;------------------------------------------------------------------------------
|
||||
call button._.find_button
|
||||
or eax, eax
|
||||
jz .exit
|
||||
|
||||
mov ebx, dword[eax + SYS_BUTTON.id_hi - 2]
|
||||
call button._.negative_button
|
||||
mov byte[MOUSE_BACKGROUND], 0 ; no mouse background
|
||||
mov byte[DONT_DRAW_MOUSE], 0 ; draw mouse
|
||||
|
||||
; check coordinates
|
||||
pusha
|
||||
.exit:
|
||||
ret
|
||||
|
||||
; mouse x >= button x ?
|
||||
movzx ebx, [eax + SYS_BUTTON.pslot]
|
||||
shl ebx, 5
|
||||
add ebx, window_data
|
||||
mov ecx, [ebx + WDATA.box.left]
|
||||
movzx edx, [eax + SYS_BUTTON.left]
|
||||
add edx, ecx
|
||||
mov cx, [MOUSE_X]
|
||||
cmp edx, ecx
|
||||
jg .no_on_button ;if we release the pointer out of the button area
|
||||
|
||||
movzx ebx, [eax + SYS_BUTTON.width]
|
||||
add edx, ebx
|
||||
cmp ecx, edx
|
||||
jg .no_on_button
|
||||
|
||||
; mouse y >= button y ?
|
||||
movzx ebx, [eax + SYS_BUTTON.pslot]
|
||||
shl ebx, 5
|
||||
add ebx, window_data
|
||||
mov ecx, [ebx + WDATA.box.top]
|
||||
movzx edx, [eax + SYS_BUTTON.top]
|
||||
add edx, ecx
|
||||
mov cx, [MOUSE_Y]
|
||||
cmp edx, ecx
|
||||
jg .no_on_button
|
||||
|
||||
movzx ebx, [eax + SYS_BUTTON.height]
|
||||
add edx, ebx
|
||||
cmp ecx, edx
|
||||
jg .no_on_button
|
||||
|
||||
popa
|
||||
|
||||
mov byte[BTN_COUNT], 1 ; no of buttons in buffer
|
||||
pop ebx
|
||||
mov [BTN_BUFF], ebx ; lets put the button id in buffer
|
||||
push ebx
|
||||
pusha
|
||||
jmp .yes_on_button
|
||||
|
||||
.no_on_button:
|
||||
mov byte[BTN_COUNT], 0 ; no of buttons in buffer
|
||||
|
||||
.yes_on_button:
|
||||
mov byte[MOUSE_DOWN], 0 ; mouse down -> do not draw
|
||||
popa
|
||||
pop ebx
|
||||
popa
|
||||
align 4
|
||||
;------------------------------------------------------------------------------
|
||||
sys_button_perform_handler: ;//////////////////////////////////////////////////
|
||||
;------------------------------------------------------------------------------
|
||||
;? <description>
|
||||
;------------------------------------------------------------------------------
|
||||
;> eax = pack[8(process slot), 24(button id)]
|
||||
;> ebx = pack[16(button x coord), 16(button y coord)]
|
||||
;> cl = mouse button mask this system button was pressed with
|
||||
;------------------------------------------------------------------------------
|
||||
shl eax, 8
|
||||
mov al, cl
|
||||
movzx ebx, byte[BTN_COUNT]
|
||||
mov [BTN_BUFF + ebx * 4], eax
|
||||
inc bl
|
||||
mov [BTN_COUNT], bl
|
||||
ret
|
||||
|
||||
;==============================================================================
|
||||
;///// private functions //////////////////////////////////////////////////////
|
||||
;==============================================================================
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
button._.find_button: ;////////////////////////////////////////////////////////
|
||||
;------------------------------------------------------------------------------
|
||||
;? Find system button by specified process slot, id and coordinates
|
||||
;------------------------------------------------------------------------------
|
||||
;> eax = pack[8(process slot), 24(button id)] or 0
|
||||
;> ebx = pack[16(button x coord), 16(button y coord)]
|
||||
;------------------------------------------------------------------------------
|
||||
;< eax = pointer to SYS_BUTTON struct or 0
|
||||
;------------------------------------------------------------------------------
|
||||
push ecx edx esi edi
|
||||
|
||||
mov edx, eax
|
||||
shr edx, 24
|
||||
and eax, 0x0ffffff
|
||||
|
||||
mov edi, [BTN_ADDR]
|
||||
mov ecx, [edi]
|
||||
imul esi, ecx, SYS_BUTTON.sizeof
|
||||
add esi, edi
|
||||
inc ecx
|
||||
add esi, SYS_BUTTON.sizeof
|
||||
|
||||
.next_button:
|
||||
dec ecx
|
||||
jz .not_found
|
||||
|
||||
add esi, -SYS_BUTTON.sizeof
|
||||
|
||||
; does it belong to our process?
|
||||
cmp dx, [esi + SYS_BUTTON.pslot]
|
||||
jne .next_button
|
||||
|
||||
; does id match?
|
||||
mov edi, dword[esi + SYS_BUTTON.id_hi - 2]
|
||||
mov di, [esi + SYS_BUTTON.id_lo]
|
||||
and edi, 0x0ffffff
|
||||
cmp eax, edi
|
||||
jne .next_button
|
||||
|
||||
; does coordinates match?
|
||||
mov edi, dword[esi + SYS_BUTTON.left - 2]
|
||||
mov di, [esi + SYS_BUTTON.top]
|
||||
cmp ebx, edi
|
||||
jne .next_button
|
||||
|
||||
; okay, return it
|
||||
mov eax, esi
|
||||
jmp .exit
|
||||
|
||||
.not_found:
|
||||
xor eax, eax
|
||||
|
||||
.exit:
|
||||
pop edi esi edx ecx
|
||||
ret
|
||||
|
||||
;------------------------------------------------------------------------------
|
||||
button._.dececx: ;/////////////////////////////////////////////////////////////
|
||||
;------------------------------------------------------------------------------
|
||||
@ -546,7 +460,7 @@ button._.button_dececx: ;//////////////////////////////////////////////////////
|
||||
;------------------------------------------------------------------------------
|
||||
button._.negative_button: ;////////////////////////////////////////////////////
|
||||
;------------------------------------------------------------------------------
|
||||
;? <description>
|
||||
;? Invert system button border
|
||||
;------------------------------------------------------------------------------
|
||||
; if requested, do not display button border on press.
|
||||
test ebx, 0x20000000
|
||||
|
@ -368,11 +368,13 @@ sys_sendwindowmsg: ;; f72
|
||||
cli
|
||||
sub ecx,2
|
||||
je .sendkey
|
||||
loop .retf
|
||||
dec ecx
|
||||
jnz .retf
|
||||
.sendbtn:
|
||||
cmp byte[BTN_COUNT],1
|
||||
jae .result ;overflow
|
||||
inc byte[BTN_COUNT]
|
||||
shl edx, 8
|
||||
mov [BTN_BUFF],edx
|
||||
jmp .result
|
||||
.sendkey:
|
||||
@ -467,7 +469,9 @@ get_event_for_app: ;; used from f10,f11,f23
|
||||
je .loop ; empty ???
|
||||
cmp edx,[TASK_COUNT]
|
||||
jne .loop ; not Top ???
|
||||
cmp dword[BTN_BUFF],0xFFFF ;-ID for Minimize-Button of Form
|
||||
mov edx, [BTN_BUFF]
|
||||
shr edx, 8
|
||||
cmp edx, 0xFFFF ;-ID for Minimize-Button of Form
|
||||
jne .result
|
||||
mov [window_minimize],1
|
||||
dec byte[BTN_COUNT]
|
||||
|
@ -1,250 +1,701 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
|
||||
;; Copyright (C) MenuetOS 2000-2004 Ville Mikael Turjanmaa ;;
|
||||
;; Copyright (C) KolibriOS team 2010. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
$Revision: -1 $
|
||||
|
||||
include 'mousepointer.inc'
|
||||
|
||||
iglobal
|
||||
;==============================================================================
|
||||
;///// public functions ///////////////////////////////////////////////////////
|
||||
;==============================================================================
|
||||
|
||||
mouse.LEFT_BUTTON_FLAG = 0001b
|
||||
mouse.RIGHT_BUTTON_FLAG = 0010b
|
||||
mouse.MIDDLE_BUTTON_FLAG = 0100b
|
||||
|
||||
mouse.BUTTONS_MASK = \
|
||||
mouse.LEFT_BUTTON_FLAG or \
|
||||
mouse.RIGHT_BUTTON_FLAG or \
|
||||
mouse.MIDDLE_BUTTON_FLAG
|
||||
|
||||
mouse.WINDOW_RESIZE_N_FLAG = 000001b
|
||||
mouse.WINDOW_RESIZE_W_FLAG = 000010b
|
||||
mouse.WINDOW_RESIZE_S_FLAG = 000100b
|
||||
mouse.WINDOW_RESIZE_E_FLAG = 001000b
|
||||
mouse.WINDOW_MOVE_FLAG = 010000b
|
||||
|
||||
mouse.WINDOW_RESIZE_SW_FLAG = \
|
||||
mouse.WINDOW_RESIZE_S_FLAG or \
|
||||
mouse.WINDOW_RESIZE_W_FLAG
|
||||
mouse.WINDOW_RESIZE_SE_FLAG = \
|
||||
mouse.WINDOW_RESIZE_S_FLAG or \
|
||||
mouse.WINDOW_RESIZE_E_FLAG
|
||||
|
||||
align 4
|
||||
mousepointer:
|
||||
db 0x00,0x00,0x00,0x74,0x74,0x74,0x6e,0x6e,0x6e,0x6f
|
||||
db 0x6f,0x6f,0x71,0x71,0x71,0x75,0x75,0x75,0x79,0x79
|
||||
db 0x79,0x7c,0x7c,0x7c,0x7e,0x7e,0x7e,0x80,0x80,0x80
|
||||
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
|
||||
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
|
||||
db 0x80,0x00,0x00,0x00,0x63,0x63,0x63,0x63,0x63,0x63
|
||||
db 0x66,0x66,0x66,0x6c,0x6c,0x6c,0x72,0x72,0x72,0x78
|
||||
db 0x78,0x78,0x7c,0x7c,0x7c,0x7e,0x7e,0x7e,0x80,0x80
|
||||
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
|
||||
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xc0
|
||||
db 0xc0,0xc0,0x00,0x00,0x00,0x54,0x54,0x54,0x57,0x57
|
||||
db 0x57,0x5f,0x5f,0x5f,0x68,0x68,0x68,0x71,0x71,0x71
|
||||
db 0x77,0x77,0x77,0x7c,0x7c,0x7c,0x7e,0x7e,0x7e,0x80
|
||||
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
|
||||
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xc0,0xc0,0xc0
|
||||
db 0xc0,0xc0,0xc0,0x00,0x00,0x00,0x47,0x47,0x47,0x50
|
||||
db 0x50,0x50,0x5b,0x5b,0x5b,0x67,0x67,0x67,0x70,0x70
|
||||
db 0x70,0x77,0x77,0x77,0x7c,0x7c,0x7c,0x7e,0x7e,0x7e
|
||||
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
|
||||
db 0x80,0x80,0x80,0x80,0x80,0xff,0xff,0xff,0xc0,0xc0
|
||||
db 0xc0,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x3f,0x3f,0x3f
|
||||
db 0x4b,0x4b,0x4b,0x59,0x59,0x59,0x66,0x66,0x66,0x70
|
||||
db 0x70,0x70,0x77,0x77,0x77,0x7c,0x7c,0x7c,0x7e,0x7e
|
||||
db 0x7e,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
|
||||
db 0x80,0x80,0x80,0xff,0xff,0xff,0xc0,0xc0,0xc0,0xc0
|
||||
db 0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x3a,0x3a
|
||||
db 0x3a,0x49,0x49,0x49,0x59,0x59,0x59,0x66,0x66,0x66
|
||||
db 0x70,0x70,0x70,0x77,0x77,0x77,0x7c,0x7c,0x7c,0x7e
|
||||
db 0x7e,0x7e,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
|
||||
db 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0xc0,0xc0
|
||||
db 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x39
|
||||
db 0x39,0x39,0x49,0x49,0x49,0x59,0x59,0x59,0x66,0x66
|
||||
db 0x66,0x71,0x71,0x71,0x78,0x78,0x78,0x7c,0x7c,0x7c
|
||||
db 0x7e,0x7e,0x7e,0x80,0x80,0x80,0x80,0x80,0x80,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xc0,0xc0,0xc0,0xc0,0xc0
|
||||
db 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0x00,0x00
|
||||
db 0x39,0x39,0x39,0x4a,0x4a,0x4a,0x5a,0x5a,0x5a,0x68
|
||||
db 0x68,0x68,0x72,0x72,0x72,0x79,0x79,0x79,0x7d,0x7d
|
||||
db 0x7d,0x7f,0x7f,0x7f,0x80,0x80,0x80,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0xc0,0xc0,0xc0
|
||||
db 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0x00
|
||||
db 0x00,0x3c,0x3c,0x3c,0x4e,0x4e,0x4e,0x5e,0x5e,0x5e
|
||||
db 0x6b,0x6b,0x6b,0x75,0x75,0x75,0x7a,0x7a,0x7a,0x7e
|
||||
db 0x7e,0x7e,0x80,0x80,0x80,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0
|
||||
db 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00
|
||||
db 0x00,0x00,0x43,0x43,0x43,0x55,0x55,0x55,0x64,0x64
|
||||
db 0x64,0x70,0x70,0x70,0x78,0x78,0x78,0x7d,0x7d,0x7d
|
||||
db 0x80,0x80,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xc0
|
||||
db 0xc0,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x4e,0x4e,0x4e,0x5f,0x5f,0x5f,0x6d
|
||||
db 0x6d,0x6d,0x76,0x76,0x76,0x7c,0x7c,0x7c,0x80,0x80
|
||||
db 0x80,0xff,0xff,0xff,0xc0,0xc0,0xc0,0x00,0x00,0x00
|
||||
db 0xff,0xff,0xff,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x14
|
||||
db 0x14,0x14,0x1b,0x1b,0x1b,0x29,0x29,0x29,0x3a,0x3a
|
||||
db 0x3a,0x4c,0x4c,0x4c,0x5d,0x5d,0x5d,0x6c,0x6c,0x6c
|
||||
db 0x75,0x75,0x75,0x7b,0x7b,0x7b,0x80,0x80,0x80,0xc0
|
||||
db 0xc0,0xc0,0x00,0x00,0x00,0x2f,0x2f,0x2f,0x80,0x80
|
||||
db 0x80,0xff,0xff,0xff,0xc0,0xc0,0xc0,0x00,0x00,0x00
|
||||
db 0x21,0x21,0x21,0x2e,0x2e,0x2e,0x40,0x40,0x40,0x52
|
||||
db 0x52,0x52,0x62,0x62,0x62,0x6f,0x6f,0x6f,0x77,0x77
|
||||
db 0x77,0x7c,0x7c,0x7c,0x80,0x80,0x80,0x00,0x00,0x00
|
||||
db 0x47,0x47,0x47,0x3b,0x3b,0x3b,0x80,0x80,0x80,0xff
|
||||
db 0xff,0xff,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x25,0x25
|
||||
db 0x25,0x30,0x30,0x30,0x42,0x42,0x42,0x54,0x54,0x54
|
||||
db 0x64,0x64,0x64,0x70,0x70,0x70,0x78,0x78,0x78,0x7d
|
||||
db 0x7d,0x7d,0x00,0x00,0x00,0x62,0x62,0x62,0x52,0x52
|
||||
db 0x52,0x4a,0x4a,0x4a,0x43,0x43,0x43,0x80,0x80,0x80
|
||||
db 0xff,0xff,0xff,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x33
|
||||
db 0x33,0x33,0x42,0x42,0x42,0x54,0x54,0x54,0x64,0x64
|
||||
db 0x64,0x71,0x71,0x71,0x79,0x79,0x79,0x7d,0x7d,0x7d
|
||||
db 0x72,0x72,0x72,0x6b,0x6b,0x6b,0x5f,0x5f,0x5f,0x5a
|
||||
db 0x5a,0x5a,0x54,0x54,0x54,0x80,0x80,0x80,0xff,0xff
|
||||
db 0xff,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x35,0x35,0x35
|
||||
db 0x41,0x41,0x41,0x53,0x53,0x53,0x63,0x63,0x63,0x70
|
||||
db 0x70,0x70,0x78,0x78,0x78,0x7d,0x7d,0x7d,0x77,0x77
|
||||
db 0x77,0x73,0x73,0x73,0x6c,0x6c,0x6c,0x68,0x68,0x68
|
||||
db 0x62,0x62,0x62,0x5a,0x5a,0x5a,0x80,0x80,0x80,0xff
|
||||
db 0xff,0xff,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x41,0x41
|
||||
db 0x41,0x52,0x52,0x52,0x62,0x62,0x62,0x6f,0x6f,0x6f
|
||||
db 0x78,0x78,0x78,0x7d,0x7d,0x7d,0x7b,0x7b,0x7b,0x79
|
||||
db 0x79,0x79,0x74,0x74,0x74,0x72,0x72,0x72,0x6e,0x6e
|
||||
db 0x6e,0x66,0x66,0x66,0x80,0x80,0x80,0xc0,0xc0,0xc0
|
||||
db 0xc0,0xc0,0xc0,0x00,0x00,0x00,0x44,0x44,0x44,0x52
|
||||
db 0x52,0x52,0x62,0x62,0x62,0x6e,0x6e,0x6e,0x77,0x77
|
||||
db 0x77,0x7c,0x7c,0x7c,0x7e,0x7e,0x7e,0x7c,0x7c,0x7c
|
||||
db 0x7a,0x7a,0x7a,0x79,0x79,0x79,0x75,0x75,0x75,0x6f
|
||||
db 0x6f,0x6f,0x65,0x65,0x65,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x48,0x48,0x48,0x4b,0x4b,0x4b,0x56,0x56,0x56
|
||||
db 0x65,0x65,0x65,0x70,0x70,0x70,0x78,0x78,0x78,0x7d
|
||||
db 0x7d,0x7d,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7e
|
||||
db 0x7e,0x7d,0x7d,0x7d,0x7a,0x7a,0x7a,0x76,0x76,0x76
|
||||
db 0x6f,0x6f,0x6f,0x65,0x65,0x65,0x5c,0x5c,0x5c,0x56
|
||||
db 0x56,0x56,0x58,0x58,0x58,0x60,0x60,0x60,0x6b,0x6b
|
||||
db 0x6b,0x73,0x73,0x73,0x7a,0x7a,0x7a,0x7d,0x7d,0x7d
|
||||
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f
|
||||
db 0x7f,0x7f,0x7d,0x7d,0x7d,0x7a,0x7a,0x7a,0x76,0x76
|
||||
db 0x76,0x70,0x70,0x70,0x6a,0x6a,0x6a,0x66,0x66,0x66
|
||||
db 0x66,0x66,0x66,0x6c,0x6c,0x6c,0x72,0x72,0x72,0x78
|
||||
db 0x78,0x78,0x7c,0x7c,0x7c,0x7e,0x7e,0x7e,0x80,0x80
|
||||
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
|
||||
db 0x7f,0x7f,0x7f,0x7d,0x7d,0x7d,0x7b,0x7b,0x7b,0x77
|
||||
db 0x77,0x77,0x73,0x73,0x73,0x71,0x71,0x71,0x71,0x71
|
||||
db 0x71,0x74,0x74,0x74,0x78,0x78,0x78,0x7b,0x7b,0x7b
|
||||
db 0x7d,0x7d,0x7d,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80
|
||||
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
|
||||
db 0x80,0x7f,0x7f,0x7f,0x7d,0x7d,0x7d,0x7c,0x7c,0x7c
|
||||
db 0x7a,0x7a,0x7a,0x78,0x78,0x78,0x78,0x78,0x78,0x7a
|
||||
db 0x7a,0x7a,0x7c,0x7c,0x7c,0x7e,0x7e,0x7e,0x7f,0x7f
|
||||
db 0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
|
||||
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
|
||||
db 0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e
|
||||
db 0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e
|
||||
db 0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80
|
||||
db 0x80,0x80
|
||||
;------------------------------------------------------------------------------
|
||||
mouse_check_events: ;//////////////////////////////////////////////////////////
|
||||
;------------------------------------------------------------------------------
|
||||
;? Check if mouse buttons state or cursor position has changed and call
|
||||
;? appropriate handlers
|
||||
;------------------------------------------------------------------------------
|
||||
push eax ebx
|
||||
|
||||
mousepointer1:
|
||||
db 0xff,0xff,0xff,0x06,0x06,0x06,0x0a,0x0a
|
||||
db 0x0a,0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0x19,0x19,0x19,0x16
|
||||
db 0x16,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2e,0x2e,0x2e
|
||||
db 0x23,0x23,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f
|
||||
db 0x3f,0x29,0x29,0x29,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x47
|
||||
db 0x47,0x47,0x2c,0x2c,0x2c,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0x48,0x48,0x48,0x2c,0x2c,0x2c,0x16,0x16,0x16,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0x48,0x48,0x48,0x2c,0x2c,0x2c,0x16,0x16,0x16
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0x48,0x48,0x48,0x2c,0x2c,0x2c,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0x48,0x48,0x48,0x2c,0x2c,0x2c,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0x47,0x47,0x47,0x29,0x29,0x29
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0x40,0x40,0x40,0x23,0x23
|
||||
db 0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xaa,0xaa,0xaa,0x9f,0x9f,0x9f,0x8c,0x8c,0x8c
|
||||
db 0x70,0x70,0x70,0x4f,0x4f,0x4f,0x30,0x30,0x30,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x8f,0x8f,0x8f
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0x9c,0x9c,0x9c,0x87,0x87,0x87,0x6c,0x6c
|
||||
db 0x6c,0x4f,0x4f,0x4f,0x32,0x32,0x32,0x19,0x19,0x19
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0x69,0x69,0x69,0x84,0x84,0x84,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0x92,0x92,0x92,0x79,0x79,0x79,0x59,0x59,0x59,0x3c
|
||||
db 0x3c,0x3c,0x24,0x24,0x24,0x11,0x11,0x11,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x37,0x37,0x37
|
||||
db 0x5d,0x5d,0x5d,0x70,0x70,0x70,0x76,0x76,0x76,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0x75,0x75,0x75,0x51,0x51,0x51,0x31,0x31,0x31
|
||||
db 0x19,0x19,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x16,0x16,0x16,0x2d,0x2d,0x2d,0x49,0x49
|
||||
db 0x49,0x53,0x53,0x53,0x54,0x54,0x54,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x78
|
||||
db 0x78,0x78,0x54,0x54,0x54,0x30,0x30,0x30,0x16,0x16
|
||||
db 0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x0f,0x0f,0x0f,0x1f,0x1f,0x1f,0x30,0x30,0x30,0x33
|
||||
db 0x33,0x33,0x33,0x33,0x33,0x3b,0x3b,0x3b,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0x62,0x62,0x62,0x3b,0x3b,0x3b,0x1c,0x1c,0x1c,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08
|
||||
db 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x24,0x24,0x24,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x6e,0x6e
|
||||
db 0x6e,0x48,0x48,0x48,0x25,0x25,0x25,0x0e,0x0e,0x0e
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x00
|
||||
db 0x00,0x00,0x0a,0x0a,0x0a,0x09,0x09,0x09,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x29,0x29,0x29,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0x7c,0x7c,0x7c,0x71,0x71,0x71,0x50
|
||||
db 0x50,0x50,0x2b,0x2b,0x2b,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x02,0x02,0x02,0x04,0x04,0x04,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x36,0x36,0x36,0x56,0x56
|
||||
db 0x56,0x69,0x69,0x69,0x64,0x64,0x64,0x4a,0x4a,0x4a
|
||||
db 0x28,0x28,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x05,0x05,0x05
|
||||
db 0x00,0x00,0x00,0x21,0x21,0x21,0x39,0x39,0x39,0x49
|
||||
db 0x49,0x49,0x48,0x48,0x48,0x35,0x35,0x35,0x1d,0x1d
|
||||
db 0x1d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x1d,0x1d,0x1d,0x27,0x27,0x27
|
||||
db 0x27,0x27,0x27,0x1d,0x1d,0x1d,0x0f,0x0f,0x0f,0x06
|
||||
db 0x06,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00
|
||||
mov al, [BTN_DOWN]
|
||||
mov bl, [mouse.state.buttons]
|
||||
and al, mouse.BUTTONS_MASK
|
||||
mov cl, al
|
||||
xchg cl, [mouse.state.buttons]
|
||||
xor bl, al
|
||||
push eax ebx
|
||||
|
||||
; did any mouse button changed its state?
|
||||
or bl, bl
|
||||
jz .check_position
|
||||
|
||||
; yes it did, is that the first button of all pressed down?
|
||||
or cl, cl
|
||||
jnz .check_buttons_released
|
||||
|
||||
; yes it is, activate window user is pointing at, if needed
|
||||
call mouse._.activate_sys_window_under_cursor
|
||||
|
||||
; NOTE: this code wouldn't be necessary if we knew window did
|
||||
; already redraw itself after call above
|
||||
or eax, eax
|
||||
jz @f
|
||||
|
||||
and [mouse.state.buttons], 0
|
||||
jmp .exit
|
||||
|
||||
; is there any system button under cursor?
|
||||
@@: call mouse._.find_sys_button_under_cursor
|
||||
or eax, eax
|
||||
jz .check_buttons_released
|
||||
|
||||
; yes there is, activate it and exit
|
||||
mov [mouse.active_sys_button.pbid], eax
|
||||
mov [mouse.active_sys_button.coord], ebx
|
||||
mov cl, [mouse.state.buttons]
|
||||
mov [mouse.active_sys_button.buttons], cl
|
||||
call sys_button_activate_handler
|
||||
jmp .exit
|
||||
|
||||
.check_buttons_released:
|
||||
cmp [mouse.state.buttons], 0
|
||||
jnz .buttons_changed
|
||||
|
||||
; did we press some button earlier?
|
||||
cmp [mouse.active_sys_button.pbid], 0
|
||||
je .buttons_changed
|
||||
|
||||
; yes we did, deactivate it
|
||||
xor eax, eax
|
||||
xchg eax, [mouse.active_sys_button.pbid]
|
||||
mov ebx, [mouse.active_sys_button.coord]
|
||||
mov cl, [mouse.active_sys_button.buttons]
|
||||
push eax ebx
|
||||
call sys_button_deactivate_handler
|
||||
pop edx ecx
|
||||
|
||||
; is the button under cursor the one we deactivated?
|
||||
call mouse._.find_sys_button_under_cursor
|
||||
cmp eax, ecx
|
||||
jne .exit
|
||||
cmp ebx, edx
|
||||
jne .exit
|
||||
|
||||
; yes it is, perform associated action
|
||||
mov cl, [mouse.active_sys_button.buttons]
|
||||
call sys_button_perform_handler
|
||||
jmp .exit
|
||||
|
||||
.buttons_changed:
|
||||
test byte[esp], mouse.LEFT_BUTTON_FLAG
|
||||
jz @f
|
||||
mov eax, [esp + 4]
|
||||
call .call_left_button_handler
|
||||
|
||||
@@: test byte[esp], mouse.RIGHT_BUTTON_FLAG
|
||||
jz @f
|
||||
mov eax, [esp + 4]
|
||||
call .call_right_button_handler
|
||||
|
||||
@@: test byte[esp], mouse.MIDDLE_BUTTON_FLAG
|
||||
jz .check_position
|
||||
mov eax, [esp + 4]
|
||||
call .call_middle_button_handler
|
||||
|
||||
.check_position:
|
||||
movzx eax, word[MOUSE_X]
|
||||
movzx ebx, word[MOUSE_Y]
|
||||
cmp eax, [mouse.state.pos.x]
|
||||
jne .position_changed
|
||||
cmp ebx, [mouse.state.pos.y]
|
||||
je .exit
|
||||
|
||||
.position_changed:
|
||||
xchg eax, [mouse.state.pos.x]
|
||||
xchg ebx, [mouse.state.pos.y]
|
||||
|
||||
call mouse._.move_handler
|
||||
|
||||
.exit:
|
||||
add esp, 8
|
||||
pop ebx eax
|
||||
ret
|
||||
|
||||
.call_left_button_handler:
|
||||
test eax, mouse.LEFT_BUTTON_FLAG
|
||||
jnz mouse._.left_button_press_handler
|
||||
jmp mouse._.left_button_release_handler
|
||||
|
||||
.call_right_button_handler:
|
||||
test eax, mouse.RIGHT_BUTTON_FLAG
|
||||
jnz mouse._.right_button_press_handler
|
||||
jmp mouse._.right_button_release_handler
|
||||
|
||||
.call_middle_button_handler:
|
||||
test eax, mouse.MIDDLE_BUTTON_FLAG
|
||||
jnz mouse._.middle_button_press_handler
|
||||
jmp mouse._.middle_button_release_handler
|
||||
|
||||
;==============================================================================
|
||||
;///// private functions //////////////////////////////////////////////////////
|
||||
;==============================================================================
|
||||
|
||||
uglobal
|
||||
mouse.state:
|
||||
.pos POINT
|
||||
.buttons db ?
|
||||
|
||||
; NOTE: since there's no unique and lifetime-constant button identifiers,
|
||||
; we're using two dwords to identify each of them:
|
||||
; * pbid - process slot (high 8 bits) and button id (low 24 bits) pack
|
||||
; * coord - left (high 16 bits) and top (low 16 bits) coordinates pack
|
||||
align 4
|
||||
mouse.active_sys_button:
|
||||
.pbid dd ?
|
||||
.coord dd ?
|
||||
.buttons db ?
|
||||
|
||||
align 4
|
||||
mouse.active_sys_window:
|
||||
.pslot dd ?
|
||||
.old_box BOX
|
||||
.new_box BOX
|
||||
.delta POINT
|
||||
.last_ticks dd ?
|
||||
.action db ?
|
||||
endg
|
||||
|
||||
align 4
|
||||
;------------------------------------------------------------------------------
|
||||
mouse._.left_button_press_handler: ;///////////////////////////////////////////
|
||||
;------------------------------------------------------------------------------
|
||||
;? Called when left mouse button has been pressed down
|
||||
;------------------------------------------------------------------------------
|
||||
test [mouse.state.buttons], not mouse.LEFT_BUTTON_FLAG
|
||||
jnz .exit
|
||||
|
||||
call mouse._.find_sys_window_under_cursor
|
||||
call mouse._.check_sys_window_actions
|
||||
mov [mouse.active_sys_window.action], al
|
||||
or eax, eax
|
||||
jz .exit
|
||||
|
||||
xchg eax, edx
|
||||
test dl, mouse.WINDOW_MOVE_FLAG
|
||||
jz @f
|
||||
|
||||
mov eax, [timer_ticks]
|
||||
mov ebx, eax
|
||||
xchg ebx, [mouse.active_sys_window.last_ticks]
|
||||
sub eax, ebx
|
||||
cmp eax, 50
|
||||
jg @f
|
||||
|
||||
mov [mouse.active_sys_window.last_ticks], 0
|
||||
call sys_window_maximize_handler
|
||||
jmp .exit
|
||||
|
||||
@@: test [edi + WDATA.fl_wstate], WSTATE_MAXIMIZED
|
||||
jnz .exit
|
||||
mov [mouse.active_sys_window.pslot], esi
|
||||
lea eax, [edi + WDATA.box]
|
||||
mov ebx, mouse.active_sys_window.old_box
|
||||
mov ecx, BOX.sizeof
|
||||
call memmove
|
||||
mov ebx, mouse.active_sys_window.new_box
|
||||
call memmove
|
||||
test edx, mouse.WINDOW_MOVE_FLAG
|
||||
jz @f
|
||||
|
||||
call .calculate_n_delta
|
||||
call .calculate_w_delta
|
||||
jmp .call_window_handler
|
||||
|
||||
@@: test dl, mouse.WINDOW_RESIZE_W_FLAG
|
||||
jz @f
|
||||
call .calculate_w_delta
|
||||
|
||||
@@: test dl, mouse.WINDOW_RESIZE_S_FLAG
|
||||
jz @f
|
||||
call .calculate_s_delta
|
||||
|
||||
@@: test dl, mouse.WINDOW_RESIZE_E_FLAG
|
||||
jz .call_window_handler
|
||||
call .calculate_e_delta
|
||||
|
||||
.call_window_handler:
|
||||
mov eax, mouse.active_sys_window.old_box
|
||||
call sys_window_start_moving_handler
|
||||
|
||||
.exit:
|
||||
ret
|
||||
|
||||
.calculate_n_delta:
|
||||
mov eax, [mouse.state.pos.y]
|
||||
sub eax, [mouse.active_sys_window.old_box.top]
|
||||
mov [mouse.active_sys_window.delta.y], eax
|
||||
ret
|
||||
|
||||
.calculate_w_delta:
|
||||
mov eax, [mouse.state.pos.x]
|
||||
sub eax, [mouse.active_sys_window.old_box.left]
|
||||
mov [mouse.active_sys_window.delta.x], eax
|
||||
ret
|
||||
|
||||
.calculate_s_delta:
|
||||
mov eax, [mouse.active_sys_window.old_box.top]
|
||||
add eax, [mouse.active_sys_window.old_box.height]
|
||||
sub eax, [mouse.state.pos.y]
|
||||
mov [mouse.active_sys_window.delta.y], eax
|
||||
ret
|
||||
|
||||
.calculate_e_delta:
|
||||
mov eax, [mouse.active_sys_window.old_box.left]
|
||||
add eax, [mouse.active_sys_window.old_box.width]
|
||||
sub eax, [mouse.state.pos.x]
|
||||
mov [mouse.active_sys_window.delta.x], eax
|
||||
ret
|
||||
|
||||
align 4
|
||||
;------------------------------------------------------------------------------
|
||||
mouse._.left_button_release_handler: ;/////////////////////////////////////////
|
||||
;------------------------------------------------------------------------------
|
||||
;? Called when left mouse button has been released
|
||||
;------------------------------------------------------------------------------
|
||||
xor esi, esi
|
||||
xchg esi, [mouse.active_sys_window.pslot]
|
||||
or esi, esi
|
||||
jz .exit
|
||||
|
||||
mov eax, esi
|
||||
shl eax, 5
|
||||
add eax, window_data + WDATA.box
|
||||
mov ebx, mouse.active_sys_window.old_box
|
||||
mov ecx, BOX.sizeof
|
||||
call memmove
|
||||
|
||||
mov eax, mouse.active_sys_window.old_box
|
||||
mov ebx, mouse.active_sys_window.new_box
|
||||
call sys_window_end_moving_handler
|
||||
|
||||
.exit:
|
||||
ret
|
||||
|
||||
align 4
|
||||
;------------------------------------------------------------------------------
|
||||
mouse._.right_button_press_handler: ;//////////////////////////////////////////
|
||||
;------------------------------------------------------------------------------
|
||||
;? Called when right mouse button has been pressed down
|
||||
;------------------------------------------------------------------------------
|
||||
test [mouse.state.buttons], not mouse.RIGHT_BUTTON_FLAG
|
||||
jnz .exit
|
||||
|
||||
call mouse._.find_sys_window_under_cursor
|
||||
call mouse._.check_sys_window_actions
|
||||
test al, mouse.WINDOW_MOVE_FLAG
|
||||
jz .exit
|
||||
|
||||
call sys_window_rollup_handler
|
||||
|
||||
.exit:
|
||||
ret
|
||||
|
||||
align 4
|
||||
;------------------------------------------------------------------------------
|
||||
mouse._.right_button_release_handler: ;////////////////////////////////////////
|
||||
;------------------------------------------------------------------------------
|
||||
;? Called when right mouse button has been released
|
||||
;------------------------------------------------------------------------------
|
||||
ret
|
||||
|
||||
align 4
|
||||
;------------------------------------------------------------------------------
|
||||
mouse._.middle_button_press_handler: ;/////////////////////////////////////////
|
||||
;------------------------------------------------------------------------------
|
||||
;? Called when middle mouse button has been pressed down
|
||||
;------------------------------------------------------------------------------
|
||||
ret
|
||||
|
||||
align 4
|
||||
;------------------------------------------------------------------------------
|
||||
mouse._.middle_button_release_handler: ;///////////////////////////////////////
|
||||
;------------------------------------------------------------------------------
|
||||
;? Called when middle mouse button has been released
|
||||
;------------------------------------------------------------------------------
|
||||
ret
|
||||
|
||||
align 4
|
||||
;------------------------------------------------------------------------------
|
||||
mouse._.move_handler: ;////////////////////////////////////////////////////////
|
||||
;------------------------------------------------------------------------------
|
||||
;? Called when cursor has been moved
|
||||
;------------------------------------------------------------------------------
|
||||
;> eax = old x coord
|
||||
;> ebx = old y coord
|
||||
;------------------------------------------------------------------------------
|
||||
cmp [mouse.active_sys_button.pbid], 0
|
||||
jnz .exit
|
||||
|
||||
mov esi, [mouse.active_sys_window.pslot]
|
||||
or esi, esi
|
||||
jz .exit
|
||||
|
||||
mov eax, mouse.active_sys_window.new_box
|
||||
mov ebx, mouse.active_sys_window.old_box
|
||||
mov ecx, BOX.sizeof
|
||||
call memmove
|
||||
|
||||
mov dl, [mouse.active_sys_window.action]
|
||||
test dl, mouse.WINDOW_MOVE_FLAG
|
||||
jz .check_resize_w
|
||||
|
||||
mov eax, [mouse.state.pos.x]
|
||||
sub eax, [mouse.active_sys_window.delta.x]
|
||||
mov [mouse.active_sys_window.new_box.left], eax
|
||||
mov eax, [mouse.state.pos.y]
|
||||
sub eax, [mouse.active_sys_window.delta.y]
|
||||
mov [mouse.active_sys_window.new_box.top], eax
|
||||
|
||||
mov eax, [mouse.active_sys_window.new_box.left]
|
||||
or eax, eax
|
||||
jge @f
|
||||
xor eax, eax
|
||||
mov [mouse.active_sys_window.new_box.left], eax
|
||||
@@: add eax, [mouse.active_sys_window.new_box.width]
|
||||
cmp eax, [Screen_Max_X]
|
||||
jl @f
|
||||
sub eax, [Screen_Max_X]
|
||||
sub [mouse.active_sys_window.new_box.left], eax
|
||||
@@: mov eax, [mouse.active_sys_window.new_box.top]
|
||||
or eax, eax
|
||||
jge @f
|
||||
xor eax, eax
|
||||
mov [mouse.active_sys_window.new_box.top], eax
|
||||
@@: add eax, [mouse.active_sys_window.new_box.height]
|
||||
cmp eax, [Screen_Max_Y]
|
||||
jle .call_window_handler
|
||||
sub eax, [Screen_Max_Y]
|
||||
sub [mouse.active_sys_window.new_box.top], eax
|
||||
jmp .call_window_handler
|
||||
|
||||
.check_resize_w:
|
||||
test dl, mouse.WINDOW_RESIZE_W_FLAG
|
||||
jz .check_resize_s
|
||||
|
||||
mov eax, [mouse.state.pos.x]
|
||||
sub eax, [mouse.active_sys_window.delta.x]
|
||||
mov [mouse.active_sys_window.new_box.left], eax
|
||||
sub eax, [mouse.active_sys_window.old_box.left]
|
||||
sub [mouse.active_sys_window.new_box.width], eax
|
||||
|
||||
mov eax, [mouse.active_sys_window.new_box.width]
|
||||
sub eax, 127
|
||||
jge @f
|
||||
add [mouse.active_sys_window.new_box.left], eax
|
||||
mov [mouse.active_sys_window.new_box.width], 127
|
||||
@@: mov eax, [mouse.active_sys_window.new_box.left]
|
||||
or eax, eax
|
||||
jge .check_resize_s
|
||||
add [mouse.active_sys_window.new_box.width], eax
|
||||
xor eax, eax
|
||||
mov [mouse.active_sys_window.new_box.left], eax
|
||||
|
||||
.check_resize_s:
|
||||
test dl, mouse.WINDOW_RESIZE_S_FLAG
|
||||
jz .check_resize_e
|
||||
|
||||
mov eax, [mouse.state.pos.y]
|
||||
add eax, [mouse.active_sys_window.delta.y]
|
||||
sub eax, [mouse.active_sys_window.old_box.top]
|
||||
mov [mouse.active_sys_window.new_box.height], eax
|
||||
|
||||
push eax
|
||||
mov edi, esi
|
||||
shl edi, 5
|
||||
add edi, window_data
|
||||
call window._.get_rolledup_height
|
||||
mov ecx, eax
|
||||
pop eax
|
||||
mov eax, [mouse.active_sys_window.new_box.height]
|
||||
cmp eax, ecx
|
||||
jge @f
|
||||
mov eax, ecx
|
||||
mov [mouse.active_sys_window.new_box.height], eax
|
||||
@@: add eax, [mouse.active_sys_window.new_box.top]
|
||||
cmp eax, [Screen_Max_Y]
|
||||
jle .check_resize_e
|
||||
sub eax, [Screen_Max_Y]
|
||||
neg eax
|
||||
add [mouse.active_sys_window.new_box.height], eax
|
||||
mov ecx, [Screen_Max_Y]
|
||||
cmp ecx, eax
|
||||
jge .check_resize_e
|
||||
mov [mouse.active_sys_window.new_box.height], ecx
|
||||
|
||||
.check_resize_e:
|
||||
test dl, mouse.WINDOW_RESIZE_E_FLAG
|
||||
jz .call_window_handler
|
||||
|
||||
mov eax, [mouse.state.pos.x]
|
||||
add eax, [mouse.active_sys_window.delta.x]
|
||||
sub eax, [mouse.active_sys_window.old_box.left]
|
||||
mov [mouse.active_sys_window.new_box.width], eax
|
||||
|
||||
mov eax, [mouse.active_sys_window.new_box.width]
|
||||
cmp eax, 127
|
||||
jge @f
|
||||
mov eax, 127
|
||||
mov [mouse.active_sys_window.new_box.width], eax
|
||||
@@: add eax, [mouse.active_sys_window.new_box.left]
|
||||
cmp eax, [Screen_Max_X]
|
||||
jle .call_window_handler
|
||||
sub eax, [Screen_Max_X]
|
||||
neg eax
|
||||
add [mouse.active_sys_window.new_box.width], eax
|
||||
mov ecx, [Screen_Max_X]
|
||||
cmp ecx, eax
|
||||
jge .call_window_handler
|
||||
mov [mouse.active_sys_window.new_box.width], ecx
|
||||
|
||||
.call_window_handler:
|
||||
mov eax, mouse.active_sys_window.old_box
|
||||
mov ebx, mouse.active_sys_window.new_box
|
||||
|
||||
push esi
|
||||
mov esi, mouse.active_sys_window.old_box
|
||||
mov edi, mouse.active_sys_window.new_box
|
||||
mov ecx, BOX.sizeof / 4
|
||||
repe
|
||||
cmpsd
|
||||
pop esi
|
||||
je .exit
|
||||
|
||||
mov [mouse.active_sys_window.last_ticks], 0
|
||||
call sys_window_moving_handler
|
||||
|
||||
.exit:
|
||||
ret
|
||||
|
||||
align 4
|
||||
;------------------------------------------------------------------------------
|
||||
mouse._.find_sys_window_under_cursor: ;////////////////////////////////////////
|
||||
;------------------------------------------------------------------------------
|
||||
;? Find system window object which is currently visible on screen and has
|
||||
;? mouse cursor within its bounds
|
||||
;------------------------------------------------------------------------------
|
||||
;< esi = process slot
|
||||
;< edi = pointer to WDATA struct
|
||||
;------------------------------------------------------------------------------
|
||||
mov esi, [Screen_Max_X]
|
||||
inc esi
|
||||
imul esi, [mouse.state.pos.y]
|
||||
add esi, [_WinMapAddress]
|
||||
add esi, [mouse.state.pos.x]
|
||||
movzx esi, byte[esi]
|
||||
mov edi, esi
|
||||
shl edi, 5
|
||||
add edi, window_data
|
||||
ret
|
||||
|
||||
align 4
|
||||
;------------------------------------------------------------------------------
|
||||
mouse._.activate_sys_window_under_cursor: ;////////////////////////////////////
|
||||
;------------------------------------------------------------------------------
|
||||
;? <description>
|
||||
;------------------------------------------------------------------------------
|
||||
; activate and redraw window under cursor (if necessary)
|
||||
call mouse._.find_sys_window_under_cursor
|
||||
movzx esi, word[WIN_STACK + esi * 2]
|
||||
lea esi, [WIN_POS + esi * 2]
|
||||
jmp waredraw
|
||||
|
||||
align 4
|
||||
;------------------------------------------------------------------------------
|
||||
mouse._.find_sys_button_under_cursor: ;////////////////////////////////////////
|
||||
;------------------------------------------------------------------------------
|
||||
;? Find system button object which is currently visible on screen and has
|
||||
;? mouse cursor within its bounds
|
||||
;------------------------------------------------------------------------------
|
||||
;< eax = pack[8(process slot), 24(button id)] or 0
|
||||
;< ebx = pack[16(button x coord), 16(button y coord)]
|
||||
;------------------------------------------------------------------------------
|
||||
push ecx edx esi edi
|
||||
|
||||
call mouse._.find_sys_window_under_cursor
|
||||
mov edx, esi
|
||||
|
||||
; check if any process button contains cursor
|
||||
mov eax, [BTN_ADDR]
|
||||
mov ecx, [eax]
|
||||
imul esi, ecx, SYS_BUTTON.sizeof
|
||||
add esi, eax
|
||||
inc ecx
|
||||
add esi, SYS_BUTTON.sizeof
|
||||
|
||||
.next_button:
|
||||
dec ecx
|
||||
jz .not_found
|
||||
|
||||
add esi, -SYS_BUTTON.sizeof
|
||||
|
||||
; does it belong to our process?
|
||||
cmp dx, [esi + SYS_BUTTON.pslot]
|
||||
jne .next_button
|
||||
|
||||
; does it contain cursor coordinates?
|
||||
mov eax, [mouse.state.pos.x]
|
||||
sub eax, [edi + WDATA.box.left]
|
||||
sub ax, [esi + SYS_BUTTON.left]
|
||||
jl .next_button
|
||||
sub ax, [esi + SYS_BUTTON.width]
|
||||
jge .next_button
|
||||
mov eax, [mouse.state.pos.y]
|
||||
sub eax, [edi + WDATA.box.top]
|
||||
sub ax, [esi + SYS_BUTTON.top]
|
||||
jl .next_button
|
||||
sub ax, [esi + SYS_BUTTON.height]
|
||||
jge .next_button
|
||||
|
||||
; okay, return it
|
||||
shl edx, 24
|
||||
mov eax, dword[esi + SYS_BUTTON.id_hi - 2]
|
||||
mov ax, [esi + SYS_BUTTON.id_lo]
|
||||
and eax, 0x0ffffff
|
||||
or eax, edx
|
||||
mov ebx, dword[esi + SYS_BUTTON.left - 2]
|
||||
mov bx, [esi + SYS_BUTTON.top]
|
||||
jmp .exit
|
||||
|
||||
.not_found:
|
||||
xor eax, eax
|
||||
xor ebx, ebx
|
||||
|
||||
.exit:
|
||||
pop edi esi edx ecx
|
||||
ret
|
||||
|
||||
align 4
|
||||
;------------------------------------------------------------------------------
|
||||
mouse._.check_sys_window_actions: ;////////////////////////////////////////////
|
||||
;------------------------------------------------------------------------------
|
||||
;? <description>
|
||||
;------------------------------------------------------------------------------
|
||||
;< eax = action flags or 0
|
||||
;------------------------------------------------------------------------------
|
||||
; is window movable?
|
||||
test byte[edi + WDATA.cl_titlebar + 3], 0x01
|
||||
jnz .no_action
|
||||
|
||||
mov eax, [mouse.state.pos.x]
|
||||
mov ebx, [mouse.state.pos.y]
|
||||
sub eax, [edi + WDATA.box.left]
|
||||
sub ebx, [edi + WDATA.box.top]
|
||||
|
||||
; is there a window titlebar under cursor?
|
||||
push eax
|
||||
call window._.get_titlebar_height
|
||||
cmp ebx, eax
|
||||
pop eax
|
||||
jl .move_action
|
||||
|
||||
; no there isn't, can it be resized then?
|
||||
mov dl, [edi + WDATA.fl_wstyle]
|
||||
and dl, 0x0f
|
||||
; NOTE: dangerous optimization, revise if window types changed;
|
||||
; this currently implies only types 2 and 3 could be resized
|
||||
test dl, 2
|
||||
jz .no_action
|
||||
|
||||
mov ecx, [edi + WDATA.box.width]
|
||||
add ecx, -window.BORDER_SIZE
|
||||
mov edx, [edi + WDATA.box.height]
|
||||
add edx, -window.BORDER_SIZE
|
||||
|
||||
; is it rolled up?
|
||||
test [edi + WDATA.fl_wstate], WSTATE_ROLLEDUP
|
||||
jnz .resize_w_or_e_action
|
||||
|
||||
cmp eax, window.BORDER_SIZE
|
||||
jl .resize_w_action
|
||||
cmp eax, ecx
|
||||
jg .resize_e_action
|
||||
cmp ebx, edx
|
||||
jle .no_action
|
||||
|
||||
.resize_s_action:
|
||||
cmp eax, window.BORDER_SIZE + 10
|
||||
jl .resize_sw_action
|
||||
add ecx, -10
|
||||
cmp eax, ecx
|
||||
jge .resize_se_action
|
||||
mov eax, mouse.WINDOW_RESIZE_S_FLAG
|
||||
jmp .exit
|
||||
|
||||
.resize_w_or_e_action:
|
||||
cmp eax, window.BORDER_SIZE + 10
|
||||
jl .resize_w_action.direct
|
||||
add ecx, -10
|
||||
cmp eax, ecx
|
||||
jg .resize_e_action.direct
|
||||
jmp .no_action
|
||||
|
||||
.resize_w_action:
|
||||
add edx, -10
|
||||
cmp ebx, edx
|
||||
jge .resize_sw_action
|
||||
.resize_w_action.direct:
|
||||
mov eax, mouse.WINDOW_RESIZE_W_FLAG
|
||||
jmp .exit
|
||||
|
||||
.resize_e_action:
|
||||
add edx, -10
|
||||
cmp ebx, edx
|
||||
jge .resize_se_action
|
||||
.resize_e_action.direct:
|
||||
mov eax, mouse.WINDOW_RESIZE_E_FLAG
|
||||
jmp .exit
|
||||
|
||||
.resize_sw_action:
|
||||
mov eax, mouse.WINDOW_RESIZE_SW_FLAG
|
||||
jmp .exit
|
||||
|
||||
.resize_se_action:
|
||||
mov eax, mouse.WINDOW_RESIZE_SE_FLAG
|
||||
jmp .exit
|
||||
|
||||
.move_action:
|
||||
mov eax, mouse.WINDOW_MOVE_FLAG
|
||||
jmp .exit
|
||||
|
||||
.no_action:
|
||||
xor eax, eax
|
||||
|
||||
.exit:
|
||||
ret
|
||||
|
250
kernel/trunk/gui/mousepointer.inc
Normal file
250
kernel/trunk/gui/mousepointer.inc
Normal file
@ -0,0 +1,250 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
|
||||
;; Copyright (C) MenuetOS 2000-2004 Ville Mikael Turjanmaa ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
$Revision$
|
||||
|
||||
|
||||
iglobal
|
||||
|
||||
align 4
|
||||
mousepointer:
|
||||
db 0x00,0x00,0x00,0x74,0x74,0x74,0x6e,0x6e,0x6e,0x6f
|
||||
db 0x6f,0x6f,0x71,0x71,0x71,0x75,0x75,0x75,0x79,0x79
|
||||
db 0x79,0x7c,0x7c,0x7c,0x7e,0x7e,0x7e,0x80,0x80,0x80
|
||||
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
|
||||
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
|
||||
db 0x80,0x00,0x00,0x00,0x63,0x63,0x63,0x63,0x63,0x63
|
||||
db 0x66,0x66,0x66,0x6c,0x6c,0x6c,0x72,0x72,0x72,0x78
|
||||
db 0x78,0x78,0x7c,0x7c,0x7c,0x7e,0x7e,0x7e,0x80,0x80
|
||||
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
|
||||
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xc0
|
||||
db 0xc0,0xc0,0x00,0x00,0x00,0x54,0x54,0x54,0x57,0x57
|
||||
db 0x57,0x5f,0x5f,0x5f,0x68,0x68,0x68,0x71,0x71,0x71
|
||||
db 0x77,0x77,0x77,0x7c,0x7c,0x7c,0x7e,0x7e,0x7e,0x80
|
||||
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
|
||||
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0xc0,0xc0,0xc0
|
||||
db 0xc0,0xc0,0xc0,0x00,0x00,0x00,0x47,0x47,0x47,0x50
|
||||
db 0x50,0x50,0x5b,0x5b,0x5b,0x67,0x67,0x67,0x70,0x70
|
||||
db 0x70,0x77,0x77,0x77,0x7c,0x7c,0x7c,0x7e,0x7e,0x7e
|
||||
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
|
||||
db 0x80,0x80,0x80,0x80,0x80,0xff,0xff,0xff,0xc0,0xc0
|
||||
db 0xc0,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x3f,0x3f,0x3f
|
||||
db 0x4b,0x4b,0x4b,0x59,0x59,0x59,0x66,0x66,0x66,0x70
|
||||
db 0x70,0x70,0x77,0x77,0x77,0x7c,0x7c,0x7c,0x7e,0x7e
|
||||
db 0x7e,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
|
||||
db 0x80,0x80,0x80,0xff,0xff,0xff,0xc0,0xc0,0xc0,0xc0
|
||||
db 0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x3a,0x3a
|
||||
db 0x3a,0x49,0x49,0x49,0x59,0x59,0x59,0x66,0x66,0x66
|
||||
db 0x70,0x70,0x70,0x77,0x77,0x77,0x7c,0x7c,0x7c,0x7e
|
||||
db 0x7e,0x7e,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
|
||||
db 0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0xc0,0xc0
|
||||
db 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x39
|
||||
db 0x39,0x39,0x49,0x49,0x49,0x59,0x59,0x59,0x66,0x66
|
||||
db 0x66,0x71,0x71,0x71,0x78,0x78,0x78,0x7c,0x7c,0x7c
|
||||
db 0x7e,0x7e,0x7e,0x80,0x80,0x80,0x80,0x80,0x80,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xc0,0xc0,0xc0,0xc0,0xc0
|
||||
db 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0x00,0x00
|
||||
db 0x39,0x39,0x39,0x4a,0x4a,0x4a,0x5a,0x5a,0x5a,0x68
|
||||
db 0x68,0x68,0x72,0x72,0x72,0x79,0x79,0x79,0x7d,0x7d
|
||||
db 0x7d,0x7f,0x7f,0x7f,0x80,0x80,0x80,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xc0,0xc0,0xc0,0xc0
|
||||
db 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00,0x00
|
||||
db 0x00,0x3c,0x3c,0x3c,0x4e,0x4e,0x4e,0x5e,0x5e,0x5e
|
||||
db 0x6b,0x6b,0x6b,0x75,0x75,0x75,0x7a,0x7a,0x7a,0x7e
|
||||
db 0x7e,0x7e,0x80,0x80,0x80,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0
|
||||
db 0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0x00
|
||||
db 0x00,0x00,0x43,0x43,0x43,0x55,0x55,0x55,0x64,0x64
|
||||
db 0x64,0x70,0x70,0x70,0x78,0x78,0x78,0x7d,0x7d,0x7d
|
||||
db 0x80,0x80,0x80,0xff,0xff,0xff,0xff,0xff,0xff,0xc0
|
||||
db 0xc0,0xc0,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x4e,0x4e,0x4e,0x5f,0x5f,0x5f,0x6d
|
||||
db 0x6d,0x6d,0x76,0x76,0x76,0x7c,0x7c,0x7c,0x80,0x80
|
||||
db 0x80,0xff,0xff,0xff,0xc0,0xc0,0xc0,0x00,0x00,0x00
|
||||
db 0xff,0xff,0xff,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x14
|
||||
db 0x14,0x14,0x1b,0x1b,0x1b,0x29,0x29,0x29,0x3a,0x3a
|
||||
db 0x3a,0x4c,0x4c,0x4c,0x5d,0x5d,0x5d,0x6c,0x6c,0x6c
|
||||
db 0x75,0x75,0x75,0x7b,0x7b,0x7b,0x80,0x80,0x80,0xc0
|
||||
db 0xc0,0xc0,0x00,0x00,0x00,0x2f,0x2f,0x2f,0x80,0x80
|
||||
db 0x80,0xff,0xff,0xff,0xc0,0xc0,0xc0,0x00,0x00,0x00
|
||||
db 0x21,0x21,0x21,0x2e,0x2e,0x2e,0x40,0x40,0x40,0x52
|
||||
db 0x52,0x52,0x62,0x62,0x62,0x6f,0x6f,0x6f,0x77,0x77
|
||||
db 0x77,0x7c,0x7c,0x7c,0x80,0x80,0x80,0x00,0x00,0x00
|
||||
db 0x47,0x47,0x47,0x3b,0x3b,0x3b,0x80,0x80,0x80,0xff
|
||||
db 0xff,0xff,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x25,0x25
|
||||
db 0x25,0x30,0x30,0x30,0x42,0x42,0x42,0x54,0x54,0x54
|
||||
db 0x64,0x64,0x64,0x70,0x70,0x70,0x78,0x78,0x78,0x7d
|
||||
db 0x7d,0x7d,0x00,0x00,0x00,0x62,0x62,0x62,0x52,0x52
|
||||
db 0x52,0x4a,0x4a,0x4a,0x43,0x43,0x43,0x80,0x80,0x80
|
||||
db 0xff,0xff,0xff,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x33
|
||||
db 0x33,0x33,0x42,0x42,0x42,0x54,0x54,0x54,0x64,0x64
|
||||
db 0x64,0x71,0x71,0x71,0x79,0x79,0x79,0x7d,0x7d,0x7d
|
||||
db 0x72,0x72,0x72,0x6b,0x6b,0x6b,0x5f,0x5f,0x5f,0x5a
|
||||
db 0x5a,0x5a,0x54,0x54,0x54,0x80,0x80,0x80,0xff,0xff
|
||||
db 0xff,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x35,0x35,0x35
|
||||
db 0x41,0x41,0x41,0x53,0x53,0x53,0x63,0x63,0x63,0x70
|
||||
db 0x70,0x70,0x78,0x78,0x78,0x7d,0x7d,0x7d,0x77,0x77
|
||||
db 0x77,0x73,0x73,0x73,0x6c,0x6c,0x6c,0x68,0x68,0x68
|
||||
db 0x62,0x62,0x62,0x5a,0x5a,0x5a,0x80,0x80,0x80,0xff
|
||||
db 0xff,0xff,0xc0,0xc0,0xc0,0x00,0x00,0x00,0x41,0x41
|
||||
db 0x41,0x52,0x52,0x52,0x62,0x62,0x62,0x6f,0x6f,0x6f
|
||||
db 0x78,0x78,0x78,0x7d,0x7d,0x7d,0x7b,0x7b,0x7b,0x79
|
||||
db 0x79,0x79,0x74,0x74,0x74,0x72,0x72,0x72,0x6e,0x6e
|
||||
db 0x6e,0x66,0x66,0x66,0x80,0x80,0x80,0xc0,0xc0,0xc0
|
||||
db 0xc0,0xc0,0xc0,0x00,0x00,0x00,0x44,0x44,0x44,0x52
|
||||
db 0x52,0x52,0x62,0x62,0x62,0x6e,0x6e,0x6e,0x77,0x77
|
||||
db 0x77,0x7c,0x7c,0x7c,0x7e,0x7e,0x7e,0x7c,0x7c,0x7c
|
||||
db 0x7a,0x7a,0x7a,0x79,0x79,0x79,0x75,0x75,0x75,0x6f
|
||||
db 0x6f,0x6f,0x65,0x65,0x65,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x48,0x48,0x48,0x4b,0x4b,0x4b,0x56,0x56,0x56
|
||||
db 0x65,0x65,0x65,0x70,0x70,0x70,0x78,0x78,0x78,0x7d
|
||||
db 0x7d,0x7d,0x80,0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7e
|
||||
db 0x7e,0x7d,0x7d,0x7d,0x7a,0x7a,0x7a,0x76,0x76,0x76
|
||||
db 0x6f,0x6f,0x6f,0x65,0x65,0x65,0x5c,0x5c,0x5c,0x56
|
||||
db 0x56,0x56,0x58,0x58,0x58,0x60,0x60,0x60,0x6b,0x6b
|
||||
db 0x6b,0x73,0x73,0x73,0x7a,0x7a,0x7a,0x7d,0x7d,0x7d
|
||||
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x7f
|
||||
db 0x7f,0x7f,0x7d,0x7d,0x7d,0x7a,0x7a,0x7a,0x76,0x76
|
||||
db 0x76,0x70,0x70,0x70,0x6a,0x6a,0x6a,0x66,0x66,0x66
|
||||
db 0x66,0x66,0x66,0x6c,0x6c,0x6c,0x72,0x72,0x72,0x78
|
||||
db 0x78,0x78,0x7c,0x7c,0x7c,0x7e,0x7e,0x7e,0x80,0x80
|
||||
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
|
||||
db 0x7f,0x7f,0x7f,0x7d,0x7d,0x7d,0x7b,0x7b,0x7b,0x77
|
||||
db 0x77,0x77,0x73,0x73,0x73,0x71,0x71,0x71,0x71,0x71
|
||||
db 0x71,0x74,0x74,0x74,0x78,0x78,0x78,0x7b,0x7b,0x7b
|
||||
db 0x7d,0x7d,0x7d,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80
|
||||
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
|
||||
db 0x80,0x7f,0x7f,0x7f,0x7d,0x7d,0x7d,0x7c,0x7c,0x7c
|
||||
db 0x7a,0x7a,0x7a,0x78,0x78,0x78,0x78,0x78,0x78,0x7a
|
||||
db 0x7a,0x7a,0x7c,0x7c,0x7c,0x7e,0x7e,0x7e,0x7f,0x7f
|
||||
db 0x7f,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
|
||||
db 0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80,0x80
|
||||
db 0x80,0x80,0x7f,0x7f,0x7f,0x7e,0x7e,0x7e,0x7e,0x7e
|
||||
db 0x7e,0x7d,0x7d,0x7d,0x7d,0x7d,0x7d,0x7e,0x7e,0x7e
|
||||
db 0x7e,0x7e,0x7e,0x7f,0x7f,0x7f,0x80,0x80,0x80,0x80
|
||||
db 0x80,0x80
|
||||
|
||||
mousepointer1:
|
||||
db 0xff,0xff,0xff,0x06,0x06,0x06,0x0a,0x0a
|
||||
db 0x0a,0x08,0x08,0x08,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0x19,0x19,0x19,0x16
|
||||
db 0x16,0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x2e,0x2e,0x2e
|
||||
db 0x23,0x23,0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x3f,0x3f
|
||||
db 0x3f,0x29,0x29,0x29,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x47
|
||||
db 0x47,0x47,0x2c,0x2c,0x2c,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0x48,0x48,0x48,0x2c,0x2c,0x2c,0x16,0x16,0x16,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0x48,0x48,0x48,0x2c,0x2c,0x2c,0x16,0x16,0x16
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0x48,0x48,0x48,0x2c,0x2c,0x2c,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0x48,0x48,0x48,0x2c,0x2c,0x2c,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0x47,0x47,0x47,0x29,0x29,0x29
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0x40,0x40,0x40,0x23,0x23
|
||||
db 0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xaa,0xaa,0xaa,0x9f,0x9f,0x9f,0x8c,0x8c,0x8c
|
||||
db 0x70,0x70,0x70,0x4f,0x4f,0x4f,0x30,0x30,0x30,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x8f,0x8f,0x8f
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0x9c,0x9c,0x9c,0x87,0x87,0x87,0x6c,0x6c
|
||||
db 0x6c,0x4f,0x4f,0x4f,0x32,0x32,0x32,0x19,0x19,0x19
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0x69,0x69,0x69,0x84,0x84,0x84,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0x92,0x92,0x92,0x79,0x79,0x79,0x59,0x59,0x59,0x3c
|
||||
db 0x3c,0x3c,0x24,0x24,0x24,0x11,0x11,0x11,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0xff,0xff,0xff,0x37,0x37,0x37
|
||||
db 0x5d,0x5d,0x5d,0x70,0x70,0x70,0x76,0x76,0x76,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0xff,0x75,0x75,0x75,0x51,0x51,0x51,0x31,0x31,0x31
|
||||
db 0x19,0x19,0x19,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x16,0x16,0x16,0x2d,0x2d,0x2d,0x49,0x49
|
||||
db 0x49,0x53,0x53,0x53,0x54,0x54,0x54,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x78
|
||||
db 0x78,0x78,0x54,0x54,0x54,0x30,0x30,0x30,0x16,0x16
|
||||
db 0x16,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x0f,0x0f,0x0f,0x1f,0x1f,0x1f,0x30,0x30,0x30,0x33
|
||||
db 0x33,0x33,0x33,0x33,0x33,0x3b,0x3b,0x3b,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
|
||||
db 0x62,0x62,0x62,0x3b,0x3b,0x3b,0x1c,0x1c,0x1c,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x08,0x08
|
||||
db 0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x24,0x24,0x24,0xff,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0x6e,0x6e
|
||||
db 0x6e,0x48,0x48,0x48,0x25,0x25,0x25,0x0e,0x0e,0x0e
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x04,0x00
|
||||
db 0x00,0x00,0x0a,0x0a,0x0a,0x09,0x09,0x09,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x29,0x29,0x29,0xff,0xff,0xff
|
||||
db 0xff,0xff,0xff,0x7c,0x7c,0x7c,0x71,0x71,0x71,0x50
|
||||
db 0x50,0x50,0x2b,0x2b,0x2b,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x02,0x02,0x02,0x04,0x04,0x04,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x36,0x36,0x36,0x56,0x56
|
||||
db 0x56,0x69,0x69,0x69,0x64,0x64,0x64,0x4a,0x4a,0x4a
|
||||
db 0x28,0x28,0x28,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x05,0x05,0x05
|
||||
db 0x00,0x00,0x00,0x21,0x21,0x21,0x39,0x39,0x39,0x49
|
||||
db 0x49,0x49,0x48,0x48,0x48,0x35,0x35,0x35,0x1d,0x1d
|
||||
db 0x1d,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x01,0x01,0x01,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x1d,0x1d,0x1d,0x27,0x27,0x27
|
||||
db 0x27,0x27,0x27,0x1d,0x1d,0x1d,0x0f,0x0f,0x0f,0x06
|
||||
db 0x06,0x06,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
|
||||
db 0x00,0x00,0x00,0x00
|
||||
|
||||
endg
|
File diff suppressed because it is too large
Load Diff
@ -1035,9 +1035,8 @@ boot_log:
|
||||
align 32
|
||||
osloop:
|
||||
call [draw_pointer]
|
||||
call check_buttons
|
||||
call checkwindows
|
||||
; call check_window_move_request
|
||||
call window_check_events
|
||||
call mouse_check_events
|
||||
call checkmisc
|
||||
call checkVga_N13
|
||||
call stack_handler
|
||||
@ -2675,11 +2674,7 @@ sys_getbutton:
|
||||
test eax, eax
|
||||
jz .exit
|
||||
mov eax, [BTN_BUFF]
|
||||
shl eax, 8
|
||||
; // Alver 22.06.2008 // {
|
||||
mov al, byte [btn_down_determ]
|
||||
and al,0xFE ; delete left button bit
|
||||
; } \\ Alver \\
|
||||
and al, 0xFE ; delete left button bit
|
||||
mov [BTN_COUNT], byte 0
|
||||
mov [esp + 32], eax
|
||||
.exit:
|
||||
@ -2911,480 +2906,6 @@ sys_redrawstat:
|
||||
srl1:
|
||||
ret
|
||||
|
||||
|
||||
sys_drawwindow:
|
||||
|
||||
mov eax,edx
|
||||
shr eax,16+8
|
||||
and eax,15
|
||||
|
||||
; cmp eax,0 ; type I - original style
|
||||
jne nosyswI
|
||||
inc [mouse_pause]
|
||||
call [_display.disable_mouse]
|
||||
call sys_set_window
|
||||
call [_display.disable_mouse]
|
||||
call drawwindow_I
|
||||
;dec [mouse_pause]
|
||||
;call [draw_pointer]
|
||||
;ret
|
||||
jmp draw_window_caption.2
|
||||
nosyswI:
|
||||
|
||||
cmp al,1 ; type II - only reserve area, no draw
|
||||
jne nosyswII
|
||||
inc [mouse_pause]
|
||||
call [_display.disable_mouse]
|
||||
call sys_set_window
|
||||
call [_display.disable_mouse]
|
||||
call sys_window_mouse
|
||||
dec [mouse_pause]
|
||||
call [draw_pointer]
|
||||
ret
|
||||
nosyswII:
|
||||
|
||||
cmp al,2 ; type III - new style
|
||||
jne nosyswIII
|
||||
inc [mouse_pause]
|
||||
call [_display.disable_mouse]
|
||||
call sys_set_window
|
||||
call [_display.disable_mouse]
|
||||
call drawwindow_III
|
||||
;dec [mouse_pause]
|
||||
;call [draw_pointer]
|
||||
;ret
|
||||
jmp draw_window_caption.2
|
||||
nosyswIII:
|
||||
|
||||
cmp al,3 ; type IV - skinned window
|
||||
je draw_skin_window
|
||||
cmp al,4 ; type V - skinned window not sized! {not_sized_skin_window}
|
||||
jne nosyswV
|
||||
draw_skin_window:
|
||||
|
||||
inc [mouse_pause]
|
||||
call [_display.disable_mouse]
|
||||
call sys_set_window
|
||||
call [_display.disable_mouse]
|
||||
mov eax, [TASK_COUNT]
|
||||
movzx eax, word [WIN_POS + eax*2]
|
||||
cmp eax, [CURRENT_TASK]
|
||||
setz al
|
||||
movzx eax, al
|
||||
push eax
|
||||
call drawwindow_IV
|
||||
;dec [mouse_pause]
|
||||
;call [draw_pointer]
|
||||
;ret
|
||||
jmp draw_window_caption.2
|
||||
nosyswV:
|
||||
|
||||
ret
|
||||
|
||||
|
||||
draw_window_caption:
|
||||
inc [mouse_pause]
|
||||
call [_display.disable_mouse]
|
||||
|
||||
xor eax,eax
|
||||
mov edx,[TASK_COUNT]
|
||||
movzx edx,word[WIN_POS+edx*2]
|
||||
cmp edx,[CURRENT_TASK]
|
||||
jne @f
|
||||
inc eax
|
||||
@@: mov edx,[CURRENT_TASK]
|
||||
shl edx,5
|
||||
add edx,window_data
|
||||
movzx ebx,[edx+WDATA.fl_wstyle]
|
||||
and bl,0x0F
|
||||
cmp bl,3
|
||||
je .draw_caption_style_3 ;{for 3 and 4 style write caption}
|
||||
cmp bl,4
|
||||
je .draw_caption_style_3
|
||||
|
||||
jmp .not_style_3
|
||||
.draw_caption_style_3:
|
||||
|
||||
push edx
|
||||
call drawwindow_IV_caption
|
||||
add esp,4
|
||||
jmp .2
|
||||
|
||||
.not_style_3:
|
||||
cmp bl,2
|
||||
jne .not_style_2
|
||||
|
||||
call drawwindow_III_caption
|
||||
jmp .2
|
||||
|
||||
.not_style_2:
|
||||
cmp bl,0
|
||||
jne .2
|
||||
|
||||
call drawwindow_I_caption
|
||||
|
||||
;--------------------------------------------------------------
|
||||
.2: ;jmp @f
|
||||
mov edi,[CURRENT_TASK]
|
||||
shl edi,5
|
||||
test [edi+window_data+WDATA.fl_wstyle],WSTYLE_HASCAPTION
|
||||
jz @f
|
||||
mov edx,[edi*8+SLOT_BASE+APPDATA.wnd_caption]
|
||||
or edx,edx
|
||||
jz @f
|
||||
|
||||
movzx eax,[edi+window_data+WDATA.fl_wstyle]
|
||||
and al,0x0F
|
||||
cmp al,3
|
||||
je .skinned
|
||||
cmp al,4
|
||||
je .skinned
|
||||
|
||||
jmp .not_skinned
|
||||
.skinned:
|
||||
mov ebp,[edi+window_data+WDATA.box.left-2]
|
||||
mov bp,word[edi+window_data+WDATA.box.top]
|
||||
movzx eax,word[edi+window_data+WDATA.box.width]
|
||||
sub ax,[_skinmargins.left]
|
||||
sub ax,[_skinmargins.right]
|
||||
push edx
|
||||
cwde
|
||||
cdq
|
||||
mov ebx,6
|
||||
idiv ebx
|
||||
pop edx
|
||||
or eax,eax
|
||||
js @f
|
||||
mov esi,eax
|
||||
mov ebx,dword[_skinmargins.left-2]
|
||||
mov bx,word[_skinh]
|
||||
sub bx,[_skinmargins.bottom]
|
||||
sub bx,[_skinmargins.top]
|
||||
sar bx,1
|
||||
adc bx,0
|
||||
add bx,[_skinmargins.top]
|
||||
add bx,-3
|
||||
add ebx,ebp
|
||||
jmp .dodraw
|
||||
|
||||
.not_skinned:
|
||||
cmp al,1
|
||||
je @f
|
||||
|
||||
mov ebp,[edi+window_data+WDATA.box.left-2]
|
||||
mov bp,word[edi+window_data+WDATA.box.top]
|
||||
movzx eax,word[edi+window_data+WDATA.box.width]
|
||||
sub eax,16
|
||||
push edx
|
||||
cwde
|
||||
cdq
|
||||
mov ebx,6
|
||||
idiv ebx
|
||||
pop edx
|
||||
or eax,eax
|
||||
js @f
|
||||
mov esi,eax
|
||||
mov ebx,0x00080007
|
||||
add ebx,ebp
|
||||
.dodraw:
|
||||
mov ecx,[common_colours+16];0x00FFFFFF
|
||||
or ecx, 0x80000000
|
||||
xor edi,edi
|
||||
; // Alver 22.06.2008 // {
|
||||
; call dtext
|
||||
call dtext_asciiz_esi
|
||||
; } \\ Alver \\
|
||||
|
||||
@@:
|
||||
;--------------------------------------------------------------
|
||||
dec [mouse_pause]
|
||||
call [draw_pointer]
|
||||
ret
|
||||
|
||||
iglobal
|
||||
align 4
|
||||
window_topleft dd \
|
||||
1, 21,\ ;type 0
|
||||
0, 0,\ ;type 1
|
||||
5, 20,\ ;type 2
|
||||
5, ?,\ ;type 3 {set by skin}
|
||||
5, ? ;type 4 {set by skin}
|
||||
endg
|
||||
|
||||
set_window_clientbox:
|
||||
push eax ecx edi
|
||||
|
||||
mov eax,[_skinh]
|
||||
mov [window_topleft+4*7],eax
|
||||
mov [window_topleft+4*9],eax
|
||||
|
||||
mov ecx,edi
|
||||
sub edi,window_data
|
||||
shl edi,3
|
||||
test [ecx+WDATA.fl_wstyle],WSTYLE_CLIENTRELATIVE
|
||||
jz @f
|
||||
|
||||
movzx eax,[ecx+WDATA.fl_wstyle]
|
||||
and eax,0x0F
|
||||
mov eax,[eax*8+window_topleft+0]
|
||||
mov [edi+SLOT_BASE+APPDATA.wnd_clientbox.left],eax
|
||||
shl eax,1
|
||||
neg eax
|
||||
add eax,[ecx+WDATA.box.width]
|
||||
mov [edi+SLOT_BASE+APPDATA.wnd_clientbox.width],eax
|
||||
|
||||
movzx eax,[ecx+WDATA.fl_wstyle]
|
||||
and eax,0x0F
|
||||
push [eax*8+window_topleft+0]
|
||||
mov eax,[eax*8+window_topleft+4]
|
||||
mov [edi+SLOT_BASE+APPDATA.wnd_clientbox.top],eax
|
||||
neg eax
|
||||
sub eax,[esp]
|
||||
add eax,[ecx+WDATA.box.height]
|
||||
mov [edi+SLOT_BASE+APPDATA.wnd_clientbox.height],eax
|
||||
add esp,4
|
||||
|
||||
pop edi ecx eax
|
||||
ret
|
||||
@@:
|
||||
xor eax,eax
|
||||
mov [edi+SLOT_BASE+APPDATA.wnd_clientbox.left],eax
|
||||
mov [edi+SLOT_BASE+APPDATA.wnd_clientbox.top],eax
|
||||
mov eax,[ecx+WDATA.box.width]
|
||||
mov [edi+SLOT_BASE+APPDATA.wnd_clientbox.width],eax
|
||||
mov eax,[ecx+WDATA.box.height]
|
||||
mov [edi+SLOT_BASE+APPDATA.wnd_clientbox.height],eax
|
||||
|
||||
pop edi ecx eax
|
||||
ret
|
||||
|
||||
sys_set_window:
|
||||
|
||||
mov eax,[CURRENT_TASK]
|
||||
shl eax,5
|
||||
add eax,window_data
|
||||
|
||||
; colors
|
||||
mov [eax+WDATA.cl_workarea],edx
|
||||
mov [eax+WDATA.cl_titlebar],esi
|
||||
mov [eax+WDATA.cl_frames],edi
|
||||
|
||||
mov edi, eax
|
||||
|
||||
; check flag (?)
|
||||
test [edi+WDATA.fl_wdrawn],1
|
||||
jnz newd
|
||||
|
||||
mov eax,[timer_ticks] ;[0xfdf0]
|
||||
add eax,100
|
||||
mov [new_window_starting],eax
|
||||
|
||||
movsx eax,bx
|
||||
mov [edi+WDATA.box.width],eax
|
||||
movsx eax,cx
|
||||
mov [edi+WDATA.box.height],eax
|
||||
sar ebx,16
|
||||
sar ecx,16
|
||||
mov [edi+WDATA.box.left],ebx
|
||||
mov [edi+WDATA.box.top],ecx
|
||||
|
||||
call check_window_position
|
||||
|
||||
push ecx esi edi ; save for window fullscreen/resize
|
||||
;mov esi,edi
|
||||
|
||||
mov cl, [edi+WDATA.fl_wstyle]
|
||||
mov eax, [edi+WDATA.cl_frames]
|
||||
|
||||
sub edi,window_data
|
||||
shl edi,3
|
||||
add edi,SLOT_BASE
|
||||
|
||||
and cl,0x0F
|
||||
mov [edi+APPDATA.wnd_caption],0
|
||||
cmp cl,3
|
||||
je set_APPDATA_wnd_caption
|
||||
cmp cl,4 ; {SPraid.simba}
|
||||
je set_APPDATA_wnd_caption
|
||||
|
||||
jmp @f
|
||||
set_APPDATA_wnd_caption:
|
||||
mov [edi+APPDATA.wnd_caption],eax
|
||||
@@: mov esi,[esp+0]
|
||||
|
||||
add edi, APPDATA.saved_box
|
||||
movsd
|
||||
movsd
|
||||
movsd
|
||||
movsd
|
||||
pop edi esi ecx
|
||||
|
||||
mov esi, [CURRENT_TASK]
|
||||
movzx esi, word [WIN_STACK+esi*2]
|
||||
lea esi, [WIN_POS+esi*2]
|
||||
call waredraw
|
||||
|
||||
;;; mov ebx, 1
|
||||
;;; call delay_hs
|
||||
mov eax, [edi+WDATA.box.left]
|
||||
mov ebx, [edi+WDATA.box.top]
|
||||
mov ecx, [edi+WDATA.box.width]
|
||||
mov edx, [edi+WDATA.box.height]
|
||||
add ecx, eax
|
||||
add edx, ebx
|
||||
call calculatescreen
|
||||
|
||||
mov [KEY_COUNT],byte 0 ; empty keyboard buffer
|
||||
mov [BTN_COUNT],byte 0 ; empty button buffer
|
||||
|
||||
newd:
|
||||
call set_window_clientbox
|
||||
|
||||
mov [edi+WDATA.fl_redraw],byte 0 ; no redraw
|
||||
mov edx,edi
|
||||
|
||||
ret
|
||||
|
||||
syscall_windowsettings:
|
||||
|
||||
.set_window_caption:
|
||||
dec ebx ; subfunction #1 - set window caption
|
||||
jnz .exit_fail
|
||||
|
||||
; NOTE: only window owner thread can set its caption,
|
||||
; so there's no parameter for PID/TID
|
||||
|
||||
mov edi,[CURRENT_TASK]
|
||||
shl edi,5
|
||||
|
||||
; have to check if caption is within application memory limit
|
||||
; check is trivial, and if application resizes its memory,
|
||||
; caption still can become over bounds
|
||||
; diamond, 31.10.2006: check removed because with new memory manager
|
||||
; there can be valid data after APPDATA.mem_size bound
|
||||
; mov ecx,[edi*8+SLOT_BASE+APPDATA.mem_size]
|
||||
; add ecx,255 ; max caption length
|
||||
; cmp ebx,ecx
|
||||
; ja .exit_fail
|
||||
|
||||
mov [edi*8+SLOT_BASE+APPDATA.wnd_caption],ecx
|
||||
or [edi+window_data+WDATA.fl_wstyle],WSTYLE_HASCAPTION
|
||||
|
||||
call draw_window_caption
|
||||
|
||||
xor eax,eax ; eax = 0 (success)
|
||||
ret
|
||||
|
||||
; .get_window_caption:
|
||||
; dec eax ; subfunction #2 - get window caption
|
||||
; jnz .exit_fail
|
||||
|
||||
; not implemented yet
|
||||
|
||||
.exit_fail:
|
||||
xor eax,eax
|
||||
inc eax ; eax = 1 (fail)
|
||||
ret
|
||||
|
||||
|
||||
sys_window_move:
|
||||
|
||||
mov edi,[CURRENT_TASK]
|
||||
shl edi,5
|
||||
add edi,window_data
|
||||
|
||||
test [edi+WDATA.fl_wstate],WSTATE_MAXIMIZED
|
||||
jnz .window_move_return
|
||||
|
||||
push dword [edi + WDATA.box.left] ; save old coordinates
|
||||
push dword [edi + WDATA.box.top]
|
||||
push dword [edi + WDATA.box.width]
|
||||
push dword [edi + WDATA.box.height]
|
||||
|
||||
cmp eax,-1 ; set new position and size
|
||||
je .no_x_reposition
|
||||
mov [edi + WDATA.box.left], eax
|
||||
.no_x_reposition:
|
||||
cmp ebx,-1
|
||||
je .no_y_reposition
|
||||
mov [edi + WDATA.box.top], ebx
|
||||
.no_y_reposition:
|
||||
|
||||
test [edi+WDATA.fl_wstate],WSTATE_ROLLEDUP
|
||||
jnz .no_y_resizing
|
||||
|
||||
cmp ecx,-1
|
||||
je .no_x_resizing
|
||||
mov [edi + WDATA.box.width], ecx
|
||||
.no_x_resizing:
|
||||
cmp edx,-1
|
||||
je .no_y_resizing
|
||||
mov [edi + WDATA.box.height], edx
|
||||
.no_y_resizing:
|
||||
|
||||
call check_window_position
|
||||
call set_window_clientbox
|
||||
|
||||
pushad ; save for window fullscreen/resize
|
||||
mov esi,edi
|
||||
sub edi,window_data
|
||||
shr edi,5
|
||||
shl edi,8
|
||||
add edi, SLOT_BASE + APPDATA.saved_box
|
||||
mov ecx,4
|
||||
cld
|
||||
rep movsd
|
||||
popad
|
||||
|
||||
pushad ; calculcate screen at new position
|
||||
mov eax, [edi + WDATA.box.left]
|
||||
mov ebx, [edi + WDATA.box.top]
|
||||
mov ecx, [edi + WDATA.box.width]
|
||||
mov edx, [edi + WDATA.box.height]
|
||||
add ecx,eax
|
||||
add edx,ebx
|
||||
|
||||
call calculatescreen
|
||||
popad
|
||||
|
||||
pop edx ; calculcate screen at old position
|
||||
pop ecx
|
||||
pop ebx
|
||||
pop eax
|
||||
add ecx,eax
|
||||
add edx,ebx
|
||||
mov [draw_limits.left],eax ; save for drawlimits
|
||||
mov [draw_limits.top],ebx
|
||||
mov [draw_limits.right],ecx
|
||||
mov [draw_limits.bottom],edx
|
||||
call calculatescreen
|
||||
|
||||
mov [edi + WDATA.fl_redraw], 1 ; flag the process as redraw
|
||||
|
||||
mov eax,edi ; redraw screen at old position
|
||||
xor esi,esi
|
||||
call redrawscreen
|
||||
|
||||
mov [DONT_DRAW_MOUSE],byte 0 ; mouse pointer
|
||||
mov [MOUSE_BACKGROUND],byte 0 ; no mouse under
|
||||
mov [MOUSE_DOWN],byte 0 ; react to mouse up/down
|
||||
|
||||
call [draw_pointer]
|
||||
|
||||
mov [window_move_pr],0
|
||||
|
||||
.window_move_return:
|
||||
|
||||
ret
|
||||
|
||||
uglobal
|
||||
window_move_pr dd 0x0
|
||||
window_move_eax dd 0x0
|
||||
window_move_ebx dd 0x0
|
||||
window_move_ecx dd 0x0
|
||||
window_move_edx dd 0x0
|
||||
endg
|
||||
|
||||
;ok - 100% work
|
||||
;nt - not tested
|
||||
;---------------------------------------------------------------------------------------------
|
||||
|
@ -41,11 +41,21 @@ $Revision$
|
||||
; display 'not used dt: ',`.,13,10
|
||||
; end if }
|
||||
|
||||
struc POINT {
|
||||
.x dd ?
|
||||
.y dd ?
|
||||
.sizeof:
|
||||
}
|
||||
virtual at 0
|
||||
POINT POINT
|
||||
end virtual
|
||||
|
||||
struc RECT {
|
||||
.left dd ?
|
||||
.top dd ?
|
||||
.right dd ?
|
||||
.bottom dd ?
|
||||
.sizeof:
|
||||
}
|
||||
virtual at 0
|
||||
RECT RECT
|
||||
@ -56,6 +66,7 @@ struc BOX {
|
||||
.top dd ?
|
||||
.width dd ?
|
||||
.height dd ?
|
||||
.sizeof:
|
||||
}
|
||||
virtual at 0
|
||||
BOX BOX
|
||||
|
Loading…
Reference in New Issue
Block a user