fix mouse redraw in 'checkbox'
git-svn-id: svn://kolibrios.org@8568 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
;Последная модификация 08.12.2020
|
||||
;Последная модификация 02.02.2021
|
||||
;файл создан 13.02.2009 <Lrz> На код применена GPL2 лицензия
|
||||
;Checkbox
|
||||
|
||||
@@ -107,9 +107,9 @@ align 16
|
||||
check_box_mouse: ;обработка мыши
|
||||
pushad
|
||||
mov ebp,dword [esp+36] ;загружаем указатель на структуру, указатель мы передаем в стеке
|
||||
mcall SF_MOUSE_GET,SSF_BUTTON ;проверяем состояние клавиш мышки. Было ли событие нажатая клавиша на мышке.
|
||||
test eax,eax ;проверка если у нас в eax=0, выйдем
|
||||
jz .check_box_mouse_end ;обработка закончилась
|
||||
mcall SF_MOUSE_GET,SSF_BUTTON_EXT ;проверяем состояние клавиш мышки. Было ли событие нажатая клавиша на мышке.
|
||||
and eax, 3 shl 8 ;проверяем левую и правую кнопки
|
||||
jz .end ;обработка закончилась
|
||||
; Да событие: нажатие клавиши мышки произошло.
|
||||
@@:
|
||||
mcall SF_MOUSE_GET,SSF_WINDOW_POSITION ;получить координаты курсора относительно окна
|
||||
@@ -119,11 +119,11 @@ pushad
|
||||
mov ebx,ecx
|
||||
shr ebx,16 ;bx = координата по y
|
||||
cmp ax,bx
|
||||
jb .check_box_mouse_end ;указатель мышки меньше начальной координаты по y чем координата по Y у бокса
|
||||
jb .end ;указатель мышки меньше начальной координаты по y чем координата по Y у бокса
|
||||
;сравнение нижней точки по Y
|
||||
add cx,bx ;сложим длинну по y и координату верхней точки по y поличим координату нижней точки по Y
|
||||
cmp ax,cx
|
||||
ja .check_box_mouse_end ;указатель мышки больше конечной координаты по y чем координата по Y у бокса
|
||||
ja .end ;указатель мышки больше конечной координаты по y чем координата по Y у бокса
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
shr eax,16 ;сместим координату по Х в нижную часть регистра т.е. в ax
|
||||
;сравнение по начальной точке Х
|
||||
@@ -131,20 +131,20 @@ pushad
|
||||
mov ebx,ecx
|
||||
shr ebx,16 ;bx = координата по X
|
||||
cmp ax,bx
|
||||
jb .check_box_mouse_end ;указатель мышки меньше начальной координаты по X чем координата по X у бокса
|
||||
jb .end ;указатель мышки меньше начальной координаты по X чем координата по X у бокса
|
||||
;сравнение конечной точки по X
|
||||
add bx,cx ;сложим длинну по x и координату точки по х получим координату конечной точки по Х
|
||||
add bx,word ch_sz_str ;добавим длинну строки текста с отступом предвартиельно записав их в момент инициализации
|
||||
cmp ax,bx
|
||||
ja .check_box_mouse_end ;указатель мышки больше конечной координаты по х чем координата по Х у бокса
|
||||
ja .end ;указатель мышки больше конечной координаты по х чем координата по Х у бокса
|
||||
;если все проверки были успешно пройдены мы обязаны поменять состояние бокса
|
||||
btc dword ch_flags,1 ;перенос 2-го бита в cf и инверсия его
|
||||
jnc .enable_box ;если CF=1 то отобразим включенный бокс и выйдем
|
||||
push dword .check_box_mouse_end ;фокус -покус, вернемся после вызова check_box_clear_ch на метку check_box_mouse_end
|
||||
push dword .end ;фокус-покус, вернемся после вызова check_box_clear_ch на метку check_box_mouse.end
|
||||
jmp check_box_clear_ch ;выключить чек бокс т.е. на месте закрашенного прямоугольника отобразить цвет фона.
|
||||
|
||||
.enable_box:
|
||||
call check_box_draw_ch ;отобразить включенный чек бокс
|
||||
.check_box_mouse_end:
|
||||
.end:
|
||||
popad ;восстановить регистры из стека
|
||||
ret 4 ;выйти и восстановим стек
|
||||
|
||||
Reference in New Issue
Block a user