|
|
|
@@ -1,220 +1,193 @@
|
|
|
|
|
; This program shows state of mouse buttons ;
|
|
|
|
|
; to compile: nasm -f bin mstate.asm -o mstate ;
|
|
|
|
|
ORG 0
|
|
|
|
|
BITS 32
|
|
|
|
|
; ---------------------------------------------------------------------------- ;
|
|
|
|
|
PATH_SIZE equ 256
|
|
|
|
|
PARAMS_SIZE equ 256
|
|
|
|
|
STACK_SIZE equ 256
|
|
|
|
|
; ---------------------------------------------------------------------------- ;
|
|
|
|
|
TEXT_WIDTH equ 6
|
|
|
|
|
TEXT_HEIGHT equ 9
|
|
|
|
|
; ---------------------------------------------------------------------------- ;
|
|
|
|
|
MOUSE_LEFT_BUTTON_MASK equ 1b
|
|
|
|
|
MOUSE_RIGHT_BUTTON_MASK equ 10b
|
|
|
|
|
MOUSE_MIDDLE_BUTTON_MASK equ 100b
|
|
|
|
|
; ---------------------------------------------------------------------------- ;
|
|
|
|
|
EM_REDRAW equ 1b
|
|
|
|
|
EM_KEY equ 10b
|
|
|
|
|
EM_BUTTON equ 100b
|
|
|
|
|
EM_RESERVED0 equ 1000b
|
|
|
|
|
EM_REDRAW_BACKGROUND equ 10000b
|
|
|
|
|
EM_MOUSE equ 100000b
|
|
|
|
|
EM_IPC equ 1000000b
|
|
|
|
|
EM_NETWORK equ 10000000b
|
|
|
|
|
EM_DEBUG equ 100000000b
|
|
|
|
|
; ---------------------------------------------------------------------------- ;
|
|
|
|
|
WINDOW_STYLE_SKINNED_FIXED equ 0x4000000
|
|
|
|
|
WINDOW_STYLE_COORD_CLIENT equ 0x20000000
|
|
|
|
|
WINDOW_STYLE_CAPTION equ 0x10000000
|
|
|
|
|
; ---------------------------------------------------------------------------- ;
|
|
|
|
|
WINDOW_BORDER_SIZE equ 5
|
|
|
|
|
; ---------------------------------------------------------------------------- ;
|
|
|
|
|
WINDOW_STYLE equ WINDOW_STYLE_SKINNED_FIXED | WINDOW_STYLE_COORD_CLIENT | WINDOW_STYLE_CAPTION
|
|
|
|
|
; ---------------------------------------------------------------------------- ;
|
|
|
|
|
MOUSE_BODY_COLOR equ 0x007C7C96
|
|
|
|
|
MOUSE_LEFT_BUTTON_COLOR equ 0x008293A4
|
|
|
|
|
MOUSE_RIGHT_BUTTON_COLOR equ 0x008293A4
|
|
|
|
|
MOUSE_MIDDLE_BUTTON_COLOR equ 0x00A48293
|
|
|
|
|
MOUSE_LEFT_BUTTON_PRESSED_COLOR equ 0x00568EC7
|
|
|
|
|
MOUSE_RIGHT_BUTTON_PRESSED_COLOR equ 0x00568EC7
|
|
|
|
|
MOUSE_MIDDLE_BUTTON_PRESSED_COLOR equ 0x00C7568E
|
|
|
|
|
WINDOW_BACK_COLOR equ 0x00EFEFEF
|
|
|
|
|
; ---------------------------------------------------------------------------- ;
|
|
|
|
|
MOUSE_WIDTH equ 120
|
|
|
|
|
MOUSE_HEIGHT equ 240
|
|
|
|
|
MOUSE_MARGIN equ 4
|
|
|
|
|
BUTTONS_MARGIN equ 2
|
|
|
|
|
; ---------------------------------------------------------------------------- ;
|
|
|
|
|
MOUSE_LEFT equ MOUSE_MARGIN
|
|
|
|
|
MOUSE_TOP equ MOUSE_MARGIN
|
|
|
|
|
WINDOW_WIDTH equ MOUSE_WIDTH + WINDOW_BORDER_SIZE * 2 + MOUSE_MARGIN * 2
|
|
|
|
|
MOUSE_BODY_HEIGHT equ (MOUSE_HEIGHT - BUTTONS_MARGIN) / 2
|
|
|
|
|
MOUSE_BODY_TOP equ MOUSE_HEIGHT - MOUSE_BODY_HEIGHT + MOUSE_TOP
|
|
|
|
|
LEFT_BUTTON_HEIGHT equ MOUSE_HEIGHT - MOUSE_BODY_HEIGHT - BUTTONS_MARGIN
|
|
|
|
|
RIGHT_BUTTON_HEIGHT equ MOUSE_HEIGHT - MOUSE_BODY_HEIGHT - BUTTONS_MARGIN
|
|
|
|
|
LEFT_BUTTON_WIDTH equ (MOUSE_WIDTH - BUTTONS_MARGIN) / 2
|
|
|
|
|
RIGHT_BUTTON_WIDTH equ MOUSE_WIDTH - LEFT_BUTTON_WIDTH - BUTTONS_MARGIN
|
|
|
|
|
LEFT_BUTTON_LEFT equ MOUSE_LEFT
|
|
|
|
|
RIGHT_BUTTON_LEFT equ LEFT_BUTTON_LEFT + LEFT_BUTTON_WIDTH + BUTTONS_MARGIN
|
|
|
|
|
MIDDLE_BUTTON_WIDTH equ MOUSE_WIDTH / 10
|
|
|
|
|
MIDDLE_BUTTON_HEIGHT equ MOUSE_HEIGHT / 6
|
|
|
|
|
MIDDLE_BUTTON_LEFT equ (MOUSE_WIDTH - MIDDLE_BUTTON_WIDTH) / 2 + MOUSE_LEFT
|
|
|
|
|
MIDDLE_BUTTON_TOP equ (MOUSE_WIDTH / 2 - MIDDLE_BUTTON_WIDTH) / 2 + MOUSE_TOP
|
|
|
|
|
; ---------------------------------------------------------------------------- ;
|
|
|
|
|
%define SZ_BUTTONS_STATE "Buttons state:"
|
|
|
|
|
%define SZ_BIN "bin:"
|
|
|
|
|
%define SZ_HEX "hex:0x"
|
|
|
|
|
%strlen LEN_SZ_BUTTONS_STATE SZ_BUTTONS_STATE
|
|
|
|
|
%strlen LEN_SZ_BIN SZ_BIN
|
|
|
|
|
%strlen LEN_SZ_HEX SZ_HEX
|
|
|
|
|
; ---------------------------------------------------------------------------- ;
|
|
|
|
|
STATE_VALUES_HEIGHT equ 3 * TEXT_HEIGHT ; we have three lines of text
|
|
|
|
|
STATE_VALUES_WIDTH equ LEN_SZ_BUTTONS_STATE * TEXT_WIDTH
|
|
|
|
|
STATE_VALUES_TOP equ (MOUSE_BODY_HEIGHT - STATE_VALUES_HEIGHT) / 2 + MOUSE_BODY_TOP
|
|
|
|
|
STATE_VALUES_LEFT equ (MOUSE_WIDTH - STATE_VALUES_WIDTH) / 2 + MOUSE_LEFT
|
|
|
|
|
; ---------------------------------------------------------------------------- ;
|
|
|
|
|
MENUET01 db 'MENUET01'
|
|
|
|
|
version dd 1
|
|
|
|
|
program.start dd START
|
|
|
|
|
program.end dd _END
|
|
|
|
|
program.memory dd _END + PATH_SIZE + PARAMS_SIZE + STACK_SIZE
|
|
|
|
|
program.stack dd _END + PATH_SIZE + PARAMS_SIZE + STACK_SIZE
|
|
|
|
|
program.params dd _END + PATH_SIZE
|
|
|
|
|
program.path dd _END
|
|
|
|
|
; ---------------------------------------------------------------------------- ;
|
|
|
|
|
mouse_body_color dd MOUSE_BODY_COLOR
|
|
|
|
|
; SPDX-License-Identifier: GPL-2.0-only
|
|
|
|
|
; SPDX-FileCopyrightText: 2024 KolibriOS-NG Team
|
|
|
|
|
|
|
|
|
|
format binary as ""
|
|
|
|
|
use32
|
|
|
|
|
org 0
|
|
|
|
|
db 'MENUET01' ; signature
|
|
|
|
|
dd 1 ; header version
|
|
|
|
|
dd start ; entry point
|
|
|
|
|
dd _image_end ; end of image
|
|
|
|
|
dd _memory ; required memory size
|
|
|
|
|
dd _stacktop ; address of stack top
|
|
|
|
|
dd 0 ; buffer for command line arguments
|
|
|
|
|
dd 0 ; buffer for path
|
|
|
|
|
|
|
|
|
|
include '../../macros.inc'
|
|
|
|
|
include '../../KOSfuncs.inc'
|
|
|
|
|
|
|
|
|
|
TEXT_WIDTH = 8
|
|
|
|
|
TEXT_HEIGHT = 16
|
|
|
|
|
|
|
|
|
|
MOUSE_LEFT_BUTTON_MASK = 1b
|
|
|
|
|
MOUSE_RIGHT_BUTTON_MASK = 10b
|
|
|
|
|
MOUSE_MIDDLE_BUTTON_MASK = 100b
|
|
|
|
|
|
|
|
|
|
WINDOW_STYLE_SKINNED_FIXED = 0x4000000
|
|
|
|
|
WINDOW_STYLE_COORD_CLIENT = 0x20000000
|
|
|
|
|
WINDOW_STYLE_CAPTION = 0x10000000
|
|
|
|
|
|
|
|
|
|
WINDOW_BORDER_SIZE = 5
|
|
|
|
|
WINDOW_STYLE = (WINDOW_STYLE_SKINNED_FIXED or WINDOW_STYLE_COORD_CLIENT or WINDOW_STYLE_CAPTION)
|
|
|
|
|
|
|
|
|
|
MOUSE_BODY_COLOR = 0x007C7C96
|
|
|
|
|
MOUSE_LEFT_BUTTON_COLOR = 0x008293A4
|
|
|
|
|
MOUSE_RIGHT_BUTTON_COLOR = 0x008293A4
|
|
|
|
|
MOUSE_MIDDLE_BUTTON_COLOR = 0x00A48293
|
|
|
|
|
MOUSE_LEFT_BUTTON_PRESSED_COLOR = 0x00568EC7
|
|
|
|
|
MOUSE_RIGHT_BUTTON_PRESSED_COLOR = 0x00568EC7
|
|
|
|
|
MOUSE_MIDDLE_BUTTON_PRESSED_COLOR = 0x00C7568E
|
|
|
|
|
WINDOW_BACK_COLOR = 0x00EFEFEF
|
|
|
|
|
|
|
|
|
|
MOUSE_WIDTH = 180
|
|
|
|
|
MOUSE_HEIGHT = 240
|
|
|
|
|
MOUSE_MARGIN = 4
|
|
|
|
|
BUTTONS_MARGIN = 2
|
|
|
|
|
|
|
|
|
|
MOUSE_LEFT = MOUSE_MARGIN
|
|
|
|
|
MOUSE_TOP = MOUSE_MARGIN
|
|
|
|
|
WINDOW_WIDTH = MOUSE_WIDTH + WINDOW_BORDER_SIZE * 2 + MOUSE_MARGIN * 2
|
|
|
|
|
MOUSE_BODY_HEIGHT = (MOUSE_HEIGHT - BUTTONS_MARGIN) / 2
|
|
|
|
|
MOUSE_BODY_TOP = MOUSE_HEIGHT - MOUSE_BODY_HEIGHT + MOUSE_TOP
|
|
|
|
|
LEFT_BUTTON_HEIGHT = MOUSE_HEIGHT - MOUSE_BODY_HEIGHT - BUTTONS_MARGIN
|
|
|
|
|
RIGHT_BUTTON_HEIGHT = MOUSE_HEIGHT - MOUSE_BODY_HEIGHT - BUTTONS_MARGIN
|
|
|
|
|
LEFT_BUTTON_WIDTH = (MOUSE_WIDTH - BUTTONS_MARGIN) / 2
|
|
|
|
|
RIGHT_BUTTON_WIDTH = MOUSE_WIDTH - LEFT_BUTTON_WIDTH - BUTTONS_MARGIN
|
|
|
|
|
LEFT_BUTTON_LEFT = MOUSE_LEFT
|
|
|
|
|
RIGHT_BUTTON_LEFT = LEFT_BUTTON_LEFT + LEFT_BUTTON_WIDTH + BUTTONS_MARGIN
|
|
|
|
|
MIDDLE_BUTTON_WIDTH = MOUSE_WIDTH / 10
|
|
|
|
|
MIDDLE_BUTTON_HEIGHT = MOUSE_HEIGHT / 6
|
|
|
|
|
MIDDLE_BUTTON_LEFT = (MOUSE_WIDTH - MIDDLE_BUTTON_WIDTH) / 2 + MOUSE_LEFT
|
|
|
|
|
MIDDLE_BUTTON_TOP = (MOUSE_WIDTH / 2 - MIDDLE_BUTTON_WIDTH) / 2 + MOUSE_TOP
|
|
|
|
|
|
|
|
|
|
; data:
|
|
|
|
|
mouse_left_button_color dd MOUSE_LEFT_BUTTON_COLOR
|
|
|
|
|
mouse_right_button_color dd MOUSE_RIGHT_BUTTON_COLOR
|
|
|
|
|
mouse_middle_button_color dd MOUSE_MIDDLE_BUTTON_COLOR
|
|
|
|
|
; ---------------------------------------------------------------------------- ;
|
|
|
|
|
mouse.button dd 0
|
|
|
|
|
; ---------------------------------------------------------------------------- ;
|
|
|
|
|
sz_caption db "MouseState",0
|
|
|
|
|
; ---------------------------------------------------------------------------- ;
|
|
|
|
|
sz_button_state db SZ_BUTTONS_STATE,0
|
|
|
|
|
sz_bin db SZ_BIN,0
|
|
|
|
|
sz_hex db SZ_HEX,0
|
|
|
|
|
; ---------------------------------------------------------------------------- ;
|
|
|
|
|
%macro DrawMouseBody 0
|
|
|
|
|
; draw.rectangle
|
|
|
|
|
mov eax, 13
|
|
|
|
|
mov ebx, MOUSE_LEFT << 16 | MOUSE_WIDTH
|
|
|
|
|
mov ecx, MOUSE_BODY_TOP << 16 | MOUSE_BODY_HEIGHT
|
|
|
|
|
mov edx, [mouse_body_color]
|
|
|
|
|
int 64
|
|
|
|
|
; texts
|
|
|
|
|
mov eax, 4
|
|
|
|
|
mov ecx, 1100b << 28 | WINDOW_BACK_COLOR
|
|
|
|
|
mov edi, [mouse_body_color]
|
|
|
|
|
; draw.text
|
|
|
|
|
mov ebx, (STATE_VALUES_LEFT << 16) | STATE_VALUES_TOP
|
|
|
|
|
mov edx, sz_button_state
|
|
|
|
|
int 64
|
|
|
|
|
; draw.text
|
|
|
|
|
add ebx, TEXT_HEIGHT
|
|
|
|
|
mov edx, sz_bin
|
|
|
|
|
int 64
|
|
|
|
|
; draw.text
|
|
|
|
|
add ebx, TEXT_HEIGHT
|
|
|
|
|
mov edx, sz_hex
|
|
|
|
|
int 64
|
|
|
|
|
%endmacro
|
|
|
|
|
; ---------------------------------------------------------------------------- ;
|
|
|
|
|
|
|
|
|
|
mouse_button dd 0
|
|
|
|
|
sz_caption db "MouseState", 0
|
|
|
|
|
|
|
|
|
|
sz_button_state db "Buttons state:", 0
|
|
|
|
|
STATE_VALUES_WIDTH = ($ - sz_button_state - 1)*TEXT_WIDTH
|
|
|
|
|
sz_bin db "bin: ", 0
|
|
|
|
|
LEN_SZ_BIN = $ - sz_bin - 1
|
|
|
|
|
sz_hex db "hex: 0x", 0
|
|
|
|
|
LEN_SZ_HEX = $ - sz_hex - 1
|
|
|
|
|
|
|
|
|
|
STATE_VALUES_HEIGHT = 3*TEXT_HEIGHT ; we have three lines of text
|
|
|
|
|
STATE_VALUES_TOP = ((MOUSE_BODY_HEIGHT - STATE_VALUES_HEIGHT) / 2 + MOUSE_BODY_TOP)
|
|
|
|
|
STATE_VALUES_LEFT = ((MOUSE_WIDTH - STATE_VALUES_WIDTH) / 2 + MOUSE_LEFT)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
align 4
|
|
|
|
|
DrawMouseButtons:
|
|
|
|
|
mov eax, 13
|
|
|
|
|
; draw.rectangle
|
|
|
|
|
mov ebx, LEFT_BUTTON_LEFT << 16 | LEFT_BUTTON_WIDTH
|
|
|
|
|
mov ecx, MOUSE_TOP << 16 | LEFT_BUTTON_HEIGHT
|
|
|
|
|
draw_mouse_buttons:
|
|
|
|
|
mov eax, SF_DRAW_RECT
|
|
|
|
|
|
|
|
|
|
mov ebx, (LEFT_BUTTON_LEFT shl 16) or LEFT_BUTTON_WIDTH
|
|
|
|
|
mov ecx, (MOUSE_TOP shl 16) or LEFT_BUTTON_HEIGHT
|
|
|
|
|
mov edx, [mouse_left_button_color]
|
|
|
|
|
int 64
|
|
|
|
|
; draw.rectangle
|
|
|
|
|
mov ebx, RIGHT_BUTTON_LEFT << 16 | RIGHT_BUTTON_WIDTH
|
|
|
|
|
mov ecx, MOUSE_TOP << 16 | RIGHT_BUTTON_HEIGHT
|
|
|
|
|
mcall
|
|
|
|
|
|
|
|
|
|
mov ebx, (RIGHT_BUTTON_LEFT shl 16) or RIGHT_BUTTON_WIDTH
|
|
|
|
|
mov ecx, (MOUSE_TOP shl 16) or RIGHT_BUTTON_HEIGHT
|
|
|
|
|
mov edx, [mouse_right_button_color]
|
|
|
|
|
int 64
|
|
|
|
|
; draw.rectangle
|
|
|
|
|
mov ebx, MIDDLE_BUTTON_LEFT << 16 | MIDDLE_BUTTON_WIDTH
|
|
|
|
|
mov ecx, MIDDLE_BUTTON_TOP << 16 | MIDDLE_BUTTON_HEIGHT
|
|
|
|
|
mcall
|
|
|
|
|
|
|
|
|
|
mov ebx, (MIDDLE_BUTTON_LEFT shl 16) or MIDDLE_BUTTON_WIDTH
|
|
|
|
|
mov ecx, (MIDDLE_BUTTON_TOP shl 16) or MIDDLE_BUTTON_HEIGHT
|
|
|
|
|
mov edx, [mouse_middle_button_color]
|
|
|
|
|
int 64
|
|
|
|
|
; Draw State Values
|
|
|
|
|
mov eax, 47
|
|
|
|
|
mov esi, 0100b << 28 | WINDOW_BACK_COLOR
|
|
|
|
|
mov ecx, [mouse.button]
|
|
|
|
|
mov edi, [mouse_body_color]
|
|
|
|
|
; draw.number
|
|
|
|
|
mov ebx, (10 << 16) | (2 << 8) ; 10 digits, base2
|
|
|
|
|
mov edx, (LEN_SZ_BIN * TEXT_WIDTH + STATE_VALUES_LEFT) << 16 | (STATE_VALUES_TOP + TEXT_HEIGHT)
|
|
|
|
|
int 64
|
|
|
|
|
; draw.number
|
|
|
|
|
mov ebx, (8 << 16) | (1 << 8) ; 8 digits, base16
|
|
|
|
|
mov edx, (LEN_SZ_HEX * TEXT_WIDTH + STATE_VALUES_LEFT) << 16 | (STATE_VALUES_TOP + TEXT_HEIGHT * 2)
|
|
|
|
|
int 64
|
|
|
|
|
mcall
|
|
|
|
|
; draw state values
|
|
|
|
|
mov eax, SF_DRAW_NUMBER
|
|
|
|
|
mov esi, (0101b shl 28) or WINDOW_BACK_COLOR
|
|
|
|
|
mov ecx, [mouse_button]
|
|
|
|
|
mov edi, MOUSE_BODY_COLOR
|
|
|
|
|
|
|
|
|
|
mov ebx, (10 shl 16) or (2 shl 8) ; 10 digits, base2
|
|
|
|
|
mov edx, ((LEN_SZ_BIN * TEXT_WIDTH + STATE_VALUES_LEFT) shl 16) or (STATE_VALUES_TOP + TEXT_HEIGHT)
|
|
|
|
|
mcall
|
|
|
|
|
|
|
|
|
|
mov ebx, (8 shl 16) or (1 shl 8) ; 8 digits, base16
|
|
|
|
|
mov edx, ((LEN_SZ_HEX * TEXT_WIDTH + STATE_VALUES_LEFT) shl 16) or (STATE_VALUES_TOP + TEXT_HEIGHT * 2)
|
|
|
|
|
mcall
|
|
|
|
|
ret
|
|
|
|
|
; ---------------------------------------------------------------------------- ;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
align 4
|
|
|
|
|
START:
|
|
|
|
|
; get.screen.size
|
|
|
|
|
mov eax, 61
|
|
|
|
|
mov ebx, 1
|
|
|
|
|
int 64
|
|
|
|
|
start:
|
|
|
|
|
mcall SF_GET_GRAPHICAL_PARAMS, SSF_SCREEN_SIZE
|
|
|
|
|
mov edx, eax
|
|
|
|
|
movzx ecx, ax
|
|
|
|
|
shr edx, 16
|
|
|
|
|
; skin.height
|
|
|
|
|
mov eax, 48
|
|
|
|
|
mov ebx, 4
|
|
|
|
|
int 64
|
|
|
|
|
|
|
|
|
|
mcall SF_STYLE_SETTINGS, SSF_GET_SKIN_HEIGHT
|
|
|
|
|
add eax, MOUSE_HEIGHT + WINDOW_BORDER_SIZE + MOUSE_MARGIN * 2 - 1
|
|
|
|
|
mov esi, eax
|
|
|
|
|
sub edx, (WINDOW_WIDTH - 1)
|
|
|
|
|
sub ecx, eax
|
|
|
|
|
shr edx, 1
|
|
|
|
|
shr ecx, 1
|
|
|
|
|
; set.event
|
|
|
|
|
mov eax, 40
|
|
|
|
|
mov ebx, EM_REDRAW | EM_BUTTON | EM_MOUSE
|
|
|
|
|
int 64
|
|
|
|
|
; ---------------------------------------------------------------------------- ;
|
|
|
|
|
|
|
|
|
|
mov eax, SF_SET_EVENTS_MASK
|
|
|
|
|
mov ebx, EVM_REDRAW or EVM_BUTTON or EVM_MOUSE
|
|
|
|
|
mcall
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
align 4
|
|
|
|
|
on_redraw:
|
|
|
|
|
; redraw.start
|
|
|
|
|
mov eax, 12
|
|
|
|
|
mov ebx, 1
|
|
|
|
|
int 64
|
|
|
|
|
; draw.window
|
|
|
|
|
xor eax, eax
|
|
|
|
|
mcall SF_REDRAW, SSF_BEGIN_DRAW
|
|
|
|
|
xor eax, eax ; SF_CREATE_WINDOW
|
|
|
|
|
mov ebx, edx ; window.left
|
|
|
|
|
; ecx = window.top
|
|
|
|
|
shl ebx, 16
|
|
|
|
|
shl ecx, 16
|
|
|
|
|
or ebx, (WINDOW_WIDTH - 1)
|
|
|
|
|
or ecx, esi ; window.height
|
|
|
|
|
mov edx, WINDOW_STYLE | WINDOW_BACK_COLOR
|
|
|
|
|
mov edx, WINDOW_STYLE or WINDOW_BACK_COLOR
|
|
|
|
|
mov edi, sz_caption
|
|
|
|
|
xor esi, esi
|
|
|
|
|
int 64
|
|
|
|
|
; redraw.finish
|
|
|
|
|
mov eax, 12
|
|
|
|
|
mov ebx, 2
|
|
|
|
|
int 64
|
|
|
|
|
DrawMouseBody
|
|
|
|
|
call DrawMouseButtons
|
|
|
|
|
mcall
|
|
|
|
|
|
|
|
|
|
mcall SF_REDRAW, SSF_END_DRAW
|
|
|
|
|
; draw mouse body:
|
|
|
|
|
mov eax, SF_DRAW_RECT
|
|
|
|
|
mov ebx, (MOUSE_LEFT shl 16) or MOUSE_WIDTH
|
|
|
|
|
mov ecx, (MOUSE_BODY_TOP shl 16) or MOUSE_BODY_HEIGHT
|
|
|
|
|
mov edx, MOUSE_BODY_COLOR
|
|
|
|
|
mcall
|
|
|
|
|
|
|
|
|
|
mov eax, SF_DRAW_TEXT
|
|
|
|
|
mov ecx, (1101b shl 28) or WINDOW_BACK_COLOR
|
|
|
|
|
mov edi, MOUSE_BODY_COLOR
|
|
|
|
|
|
|
|
|
|
mov ebx, (STATE_VALUES_LEFT shl 16) or STATE_VALUES_TOP
|
|
|
|
|
mov edx, sz_button_state
|
|
|
|
|
mcall
|
|
|
|
|
|
|
|
|
|
add ebx, TEXT_HEIGHT
|
|
|
|
|
mov edx, sz_bin
|
|
|
|
|
mcall
|
|
|
|
|
|
|
|
|
|
add ebx, TEXT_HEIGHT
|
|
|
|
|
mov edx, sz_hex
|
|
|
|
|
mcall
|
|
|
|
|
call draw_mouse_buttons
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
align 4
|
|
|
|
|
wait.event:
|
|
|
|
|
mov eax, 10 ; redraw = 001b; 001b & 110b = 000b
|
|
|
|
|
int 64 ; button = 011b; 011b & 110b = 010b
|
|
|
|
|
test eax, 110b ; mouse = 110b; 110b & 110b = 110b
|
|
|
|
|
jz on_redraw
|
|
|
|
|
jnp on_button
|
|
|
|
|
; get.mouse.button
|
|
|
|
|
mov eax, 37
|
|
|
|
|
mov ebx, 2
|
|
|
|
|
int 64
|
|
|
|
|
cmp [mouse.button], eax ; if equal
|
|
|
|
|
je wait.event ; then no need update
|
|
|
|
|
wait_event:
|
|
|
|
|
mcall SF_WAIT_EVENT
|
|
|
|
|
cmp eax, EV_REDRAW
|
|
|
|
|
je on_redraw
|
|
|
|
|
cmp eax, EV_BUTTON
|
|
|
|
|
je on_button
|
|
|
|
|
; otherwise mouse:
|
|
|
|
|
|
|
|
|
|
mcall SF_MOUSE_GET, SSF_BUTTON
|
|
|
|
|
cmp [mouse_button], eax ; if equal, then no need update
|
|
|
|
|
je wait_event
|
|
|
|
|
mov ebx, dword MOUSE_LEFT_BUTTON_COLOR
|
|
|
|
|
mov ecx, dword MOUSE_RIGHT_BUTTON_COLOR
|
|
|
|
|
mov edx, dword MOUSE_MIDDLE_BUTTON_COLOR
|
|
|
|
@@ -234,13 +207,21 @@ wait.event:
|
|
|
|
|
mov [mouse_left_button_color], ebx
|
|
|
|
|
mov [mouse_right_button_color], ecx
|
|
|
|
|
mov [mouse_middle_button_color], edx
|
|
|
|
|
mov [mouse.button], eax
|
|
|
|
|
call DrawMouseButtons
|
|
|
|
|
jmp wait.event
|
|
|
|
|
mov [mouse_button], eax
|
|
|
|
|
call draw_mouse_buttons
|
|
|
|
|
jmp wait_event
|
|
|
|
|
|
|
|
|
|
align 4
|
|
|
|
|
on_button: ; terminate because we have only one button(close button)
|
|
|
|
|
or eax, -1
|
|
|
|
|
int 64
|
|
|
|
|
; ---------------------------------------------------------------------------- ;
|
|
|
|
|
align 4
|
|
|
|
|
_END:
|
|
|
|
|
on_button:
|
|
|
|
|
; terminate because we have only one button (close)
|
|
|
|
|
mcall SF_TERMINATE_PROCESS
|
|
|
|
|
|
|
|
|
|
align 16
|
|
|
|
|
_image_end:
|
|
|
|
|
|
|
|
|
|
; reserve for stack:
|
|
|
|
|
rb 256
|
|
|
|
|
align 16
|
|
|
|
|
_stacktop:
|
|
|
|
|
_memory:
|
|
|
|
|
|
|
|
|
|