fix mouse redraw in 'checkbox'

git-svn-id: svn://kolibrios.org@8568 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
IgorA
2021-02-02 22:32:19 +00:00
parent e594f133e1
commit aba76d1871
3 changed files with 59 additions and 70 deletions

View File

@@ -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 ;выйти и восстановим стек