forked from KolibriOS/kolibrios
old version 'check_box' deleted from 'box_lib.obj'
git-svn-id: svn://kolibrios.org@3178 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
include 'editbox.mac' ;macro which should make life easier :) specially for editbox
|
||||
include 'checkbox.mac' ;macro implements checkbox old version
|
||||
include 'checkbox2.mac' ;macro implements checkbox version 2
|
||||
include 'optionbox.mac' ;macro implements optionbox
|
||||
include 'scrollbar.mac' ;macro implements scrollbar
|
||||
|
||||
@@ -36,14 +36,6 @@ use_editbox_key ;macro reveals processing function of the keypad.
|
||||
align 16
|
||||
use_editbox_mouse ;macro reveals processing function of the mouse.
|
||||
|
||||
;----------------------------------------------------
|
||||
;CheckBox old version
|
||||
;----------------------------------------------------
|
||||
align 16
|
||||
use_checkbox_draw ;macro reveals the function of the display.
|
||||
align 16
|
||||
use_checkbox_mouse ;macro reveals processing function of the mouse.
|
||||
|
||||
;----------------------------------------------------
|
||||
;CheckBox2
|
||||
;----------------------------------------------------
|
||||
@@ -248,16 +240,11 @@ dd sz_edit_box_mouse, edit_box_mouse
|
||||
dd sz_edit_box_set_text, edit_box_set_text
|
||||
dd szVersion_ed, 0x00000001
|
||||
|
||||
dd sz_check_box_draw, check_box_draw
|
||||
dd sz_check_box_mouse, check_box_mouse
|
||||
dd szVersion_ch, 0x00000001
|
||||
|
||||
dd sz_init_checkbox2, init_checkbox2
|
||||
dd sz_check_box_draw2, check_box_draw2
|
||||
dd sz_check_box_mouse2, check_box_mouse2
|
||||
dd szVersion_ch2, 0x00000002
|
||||
|
||||
|
||||
dd sz_option_box_draw, option_box_draw
|
||||
dd sz_option_box_mouse, option_box_mouse
|
||||
dd szVersion_op, 0x00000001
|
||||
@@ -352,10 +339,6 @@ sz_edit_box_mouse db 'edit_box_mouse',0
|
||||
sz_edit_box_set_text db 'edit_box_set_text',0
|
||||
szVersion_ed db 'version_ed',0
|
||||
|
||||
sz_check_box_draw db 'check_box_draw',0
|
||||
sz_check_box_mouse db 'check_box_mouse',0
|
||||
szVersion_ch db 'version_ch',0
|
||||
|
||||
sz_init_checkbox2 db 'init_checkbox2',0
|
||||
sz_check_box_draw2 db 'check_box_draw2',0
|
||||
sz_check_box_mouse2 db 'check_box_mouse2',0
|
||||
|
||||
@@ -104,58 +104,19 @@ macro edit_boxes_set_sys_color start,end,color_table
|
||||
add edi,ed_struc_size
|
||||
loop @b
|
||||
}
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;Basic macros for use CheckBox ;
|
||||
;Last change 17.01.2013 ;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
ch_struc_size=36
|
||||
ch_flag_en=10b ;í«¥¬¥â ¢ë¡à
|
||||
|
||||
ch_left equ [edi] ;ª®®à¤¨ â ç « à¨á®¢ ¨ï ¯® å
|
||||
ch_top equ [edi+2] ;ª®®à¤¨ â ç « à¨á®¢ ¨ï ¯® ã
|
||||
ch_text_margin equ [edi+4] ;=4 à ááâ®ï¨¥ ®â ¯àאַ㣮«ì¨ª 祪 ¡®ªá ¤® ¤¯¨á¨
|
||||
ch_size equ [edi+8] ;12 à §¬¥à ª¢ ¤à â 祪 ¡®ªá
|
||||
ch_text_margin equ [edi+8] ;=4 à ááâ®ï¨¥ ®â ¯àאַ㣮«ì¨ª 祪 ¡®ªá ¤® ¤¯¨á¨
|
||||
ch_color equ [edi+12] ;梥⠢ãâਠcheckbox
|
||||
ch_border_color equ [edi+16] ; or [edi+4] ;梥â à ¬ª¨ checkbox ¥¥ ¬®¦® § ¤ âì á ¬®áâ®ï⥫ì®
|
||||
ch_text_color equ [edi+20] ;[edi+4] ;梥â ⥪áâ
|
||||
ch_text_ptr equ [edi+24] ;㪠§ ⥫ì ç «® ⥪á⮢®© áâப¨
|
||||
ch_text_length equ [edi+28]
|
||||
ch_flags equ [edi+32] ;ä« £¨
|
||||
ch_flags equ [edi+28] ;ä« £¨
|
||||
|
||||
struc check_box left,top,ch_text_margin,ch_size,color,border_color,text_color,text,ch_text_length,flags
|
||||
{ ;áâàãªâãà ¯ à ¬¥â஢ ¤«ï 祪 ¡®ªá
|
||||
.left: dw left ;+0 ¯®«®¦¥¨¥ ¯® å
|
||||
.top: dw top ;+2 ¯®«®¦¥¨¥ ¯® ã
|
||||
.ch_text_margin: dd ch_text_margin ;à ááâ®ï¨¥ ®â ¯àאַ㣮«ì¨ª 祪 ¡®ªá ¤® ¤¯¨á¨
|
||||
.ch_size: dd ch_size ;à §¬¥à ª¢ ¤à â 祪 ¡®ªá , ¤«ï ¯à¨¬¥à 12
|
||||
.color: dd color ;梥⠢ãâਠ祪¡®ªá
|
||||
.border_color: dd border_color ;梥â à ¬ª¨
|
||||
.text_color: dd text_color ;梥⠤¯¨á¨
|
||||
.text: dd text ; ¤à¥á ¢ ª®¤¥ ¯à®£à ¬¬ë £¤¥ à ᯮ«®¦¥ ⥪áâ
|
||||
.ch_text_length: dd ch_text_length ;¤«¨ áâப¨ á ᨬ¢®« ¬¨
|
||||
.flags: dd flags+0 ; ä« £¨
|
||||
}
|
||||
|
||||
macro check_boxes_set_sys_color start,end,color_table
|
||||
{
|
||||
mov edi,start
|
||||
mov ecx,((end-start)/ch_struc_size)
|
||||
mov esi,color_table
|
||||
@@:
|
||||
; push dword [esi+20] ;梥â à ¡®ç¥© ®¡« á⨠®ª
|
||||
; pop dword ch_color
|
||||
push dword [esi+32] ;梥â ⥪áâ ¢ à ¡®ç¥© ®¡« á⨠®ª
|
||||
pop dword ch_text_color
|
||||
push dword [esi+36] ;梥⠣à 䨪¨ ¢ ®ª¥ (à §¤¥«¨â¥«ìë¥ «¨¨¨ ¨ â.¯.)
|
||||
pop dword ch_border_color
|
||||
add edi,ch_struc_size
|
||||
loop @b
|
||||
}
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;Basic macros for use CheckBox ;
|
||||
;Last change 12.10.2010 ;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
ch_struc_size=36 ;à §¬¥à áâàãªâãàë
|
||||
ch_flag_en=10b ;ä« £ ãáâ ®¢«¥®£® 祪 ¡®ªá .
|
||||
ch_flag_top=0x0 ;ä« £ à ᯮ«®¦¥¨ï ⥪áâ ¢¢¥àåã â.¥. 3-© ¡¨â
|
||||
@@ -186,39 +147,60 @@ struc check_box2 left_s,top_s,ch_text_margin,color,border_color,text_color,text,
|
||||
}
|
||||
|
||||
;Œ ªà®á ¯à®¢¥àª¨ é¥«çª ¬ë誨 ¤ £à㯯®© checkboxes.
|
||||
macro init_checkboxes2 start,end
|
||||
macro init_checkboxes2 start,end_cb
|
||||
{
|
||||
if start+ch_struc_size eq end_cb
|
||||
;ª®£¤ ®¤¨ í«¥¬¥â
|
||||
push start ;㪠§ ⥫ì checkbox
|
||||
call [init_checkbox] ; áâனª checkbox'
|
||||
else
|
||||
;ª®£¤ ¥áª®«ìª® í«¥¬¥â®¢
|
||||
mov ebp,start
|
||||
mov ecx,((end-start)/ch_struc_size)
|
||||
mov ecx,((end_cb-start)/ch_struc_size)
|
||||
@@:
|
||||
push ebp ;㪠§ â¥«ì ¯¥à¢ë© checkbox
|
||||
call [init_checkbox] ;¬ ªà®á ¯à®¢¥àª¨ ¬ë誨 ¤ checkbox'®¬
|
||||
call [init_checkbox] ; áâனª checkbox'®¢
|
||||
add ebp,ch_struc_size
|
||||
loop @b
|
||||
end if
|
||||
}
|
||||
|
||||
;Œ ªà®á ¯à®¢¥àª¨ ¬ë誨 £à㯯ë checkboxes.
|
||||
macro checkboxes_mouse2 start,end
|
||||
macro checkboxes_mouse2 start,end_cb
|
||||
{
|
||||
if start+ch_struc_size eq end_cb
|
||||
;ª®£¤ ®¤¨ í«¥¬¥â
|
||||
push start ;㪠§ ⥫ì checkbox
|
||||
call [check_box_mouse] ;¬ ªà®á ¯à®¢¥àª¨ ¬ë誨 ¤ checkbox'®¬
|
||||
else
|
||||
;ª®£¤ ¥áª®«ìª® í«¥¬¥â®¢
|
||||
mov ebp,start
|
||||
mov ecx,((end-start)/ch_struc_size)
|
||||
mov ecx,((end_cb-start)/ch_struc_size)
|
||||
@@:
|
||||
push ebp ;㪠§ â¥«ì ¯¥à¢ë© checkbox
|
||||
call [check_box_mouse] ; à¨á®¢ âì checkbox
|
||||
call [check_box_mouse] ;¬ ªà®á ¯à®¢¥àª¨ ¬ë誨 ¤ checkbox' ¬¨
|
||||
add ebp,ch_struc_size
|
||||
loop @b
|
||||
end if
|
||||
}
|
||||
|
||||
;Œ ªà®á ®âà¨á®¢ª¨ £à㯯ë checkboxes.
|
||||
macro checkboxes_draw2 start,end
|
||||
macro checkboxes_draw2 start,end_cb
|
||||
{
|
||||
if start+ch_struc_size eq end_cb
|
||||
;ª®£¤ ®¤¨ í«¥¬¥â
|
||||
push start ;㪠§ ⥫ì checkbox
|
||||
call [check_box_draw] ; à¨á®¢ âì checkbox
|
||||
else
|
||||
;ª®£¤ ¥áª®«ìª® í«¥¬¥â®¢
|
||||
mov ebp,start
|
||||
mov ecx,((end-start)/ch_struc_size)
|
||||
mov ecx,((end_cb-start)/ch_struc_size)
|
||||
@@:
|
||||
push ebp ;㪠§ â¥«ì ¯¥à¢ë© checkbox
|
||||
call [check_box_draw] ; à¨á®¢ âì checkbox
|
||||
call [check_box_draw] ; à¨á®¢ âì checkbox'ë
|
||||
add ebp,ch_struc_size
|
||||
loop @b
|
||||
end if
|
||||
}
|
||||
|
||||
macro check_boxes_set_sys_color2 start,end,color_table
|
||||
|
||||
@@ -1,142 +0,0 @@
|
||||
;файл создан 13.02.2009 <Lrz> На код применена GPL2 лицензия
|
||||
;Макрос для системной библиотеки box_lib.obj
|
||||
;Checkbox
|
||||
|
||||
macro use_checkbox_draw
|
||||
{
|
||||
check_box_draw:
|
||||
pusha ;сохраним все регистры
|
||||
mov edi,dword [esp+36]
|
||||
mov eax,13
|
||||
movzx ebx,word ch_left
|
||||
shl ebx,16
|
||||
add ebx,ch_size
|
||||
mov ecx,ch_top
|
||||
shl ecx,16
|
||||
add ecx,dword ch_size
|
||||
mov edx,dword ch_border_color
|
||||
mcall ;рисуем рамку
|
||||
|
||||
mov edx,dword ch_color
|
||||
add ebx,1 shl 16 - 2
|
||||
add ecx,1 shl 16 - 2
|
||||
mcall ;закрашиваем внутренности чекбокса
|
||||
|
||||
test dword ch_flags,2 ;достать значение бита из переменной и поместить в флаг CF
|
||||
jz @f ;в если CF=1, то выполним следующую процедуру иначе перейти на нижнюю @@
|
||||
call check_box_draw_ch ;нарисовать включенный чек бокс
|
||||
@@:
|
||||
;----------------------------
|
||||
;расчет куда будет произведен вывод текста
|
||||
;----------------------------
|
||||
movzx ebx,word ch_left ;загрузить значение х для чек бокса
|
||||
add ebx,dword ch_size
|
||||
add ebx,dword ch_text_margin;добавить размер стороны и расстояние на котором начнется вывод текста
|
||||
shl ebx,16 ;сдвинем на 16 разрядов в лево (умножим на 65536)
|
||||
mov bx,word ch_top ;загрузим значение по y
|
||||
mov eax,ch_size
|
||||
shr eax,1
|
||||
add eax,4
|
||||
add ebx,eax
|
||||
mov ecx,dword ch_text_color ;загрузим цвет надписи + flags
|
||||
sub ebx,7 ;добавим значение длины стороны -9+2
|
||||
|
||||
mov edx,dword ch_text_ptr ;укажем адрес от куда нужно выводить строку
|
||||
mov esi,dword ch_text_length
|
||||
;внесем в eax значение вывода надписи на канву
|
||||
mov eax,4
|
||||
mcall ;Вывод
|
||||
popa ;восстановить значения регистров из стека
|
||||
ret 4 ;выйдем из процедуры
|
||||
|
||||
check_box_clear_ch: ;очистка чек бокса
|
||||
mov edx,dword ch_color ;цвет внутри чек бокса
|
||||
jmp @f ;безусловный прыжок на нижнюю метку @@
|
||||
check_box_draw_ch: ;нарисовать включенный чек бокс
|
||||
mov edx,dword ch_border_color ;загрузить цвет
|
||||
@@:
|
||||
movzx ebx,word ch_left ;загрузить координату по х
|
||||
mov eax,dword ch_size
|
||||
mov bp,ax
|
||||
shr eax,2
|
||||
push ax
|
||||
|
||||
push ax
|
||||
add ebx,eax
|
||||
shl ebx,16 ;сдвинем на 16 разрядов в лево (умножим на 65536)
|
||||
pop ax
|
||||
lea eax,[eax*2]
|
||||
sub bp,ax ;сохраним регистр bx в регистре указателя базы
|
||||
mov bx,bp
|
||||
|
||||
movzx ecx,word ch_top ;загрузить координату по у
|
||||
pop ax
|
||||
add cx,ax
|
||||
shl ecx,16 ;сдвинем на 16 разрядов в лево (умножим на 65536)
|
||||
mov cx,bp ;загрузим значения регистра указателя базы в cx
|
||||
mov eax,13 ;в eax - значения функции для вывода полосы т.е. по сути прямоугольника, который отображает включенный компонент чек бокс
|
||||
mcall ;вывод
|
||||
ret ;выйти из процедуры
|
||||
}
|
||||
|
||||
|
||||
macro use_checkbox_mouse
|
||||
{
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;Обработчик mouse
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
check_box_mouse: ;обработка мыши
|
||||
pusha
|
||||
mov edi,dword [esp+36]
|
||||
mov eax,37 ;будем что то делать если у нас что - нить нажато
|
||||
mov ebx,2 ;внести в регистр значение 2
|
||||
mcall ;проверка не нажал ли пользователь кнопку мышки
|
||||
test eax,eax ;проверка если у нас в eax=0, то установим флаг и выйдем
|
||||
jnz @f ;перейти на нижнюю метку @@
|
||||
btr dword ch_flags,2 ;извлечение значения заданного бита в флаг cf и изменение его значения на нулевое.
|
||||
jmp check_box_mouse_end
|
||||
|
||||
@@:
|
||||
bts dword ch_flags,2 ;проверка флага т.е. перенос в cf значение бита и установка бита в состояние включено
|
||||
jc check_box_mouse_end ;если CF=1 то перейти в конец т.е. это выход
|
||||
mov esi,dword ch_text_length ;загрузить кол-во символов в текстовой строке
|
||||
;Умножение на 6 Быстрое умножение можно воспользоваться любым мз методов, но на старых Процессорах (386,486,P1)быстрее будет с инструкцией Lea
|
||||
lea esi,[eax*3]
|
||||
shl esi,1
|
||||
; imul esi,6 ; или можно и так умножить на 6
|
||||
add esi,dword ch_text_margin ;добавить 3 - расстояние от чек бокса до надписи
|
||||
|
||||
mov eax,37 ;получим координаты мышки
|
||||
mov ebx,1 ;добавить 1
|
||||
mcall ;получить координаты курсора относительно окна
|
||||
|
||||
movzx ebx,word ch_top ;загрузить в bx значение координаты у
|
||||
cmp ax,bx ;сравнить с с координатой курсора
|
||||
jl check_box_mouse_end ;SF <> OF если меньше
|
||||
add ebx,dword ch_size ;добавить размер
|
||||
cmp ax,bx ;сравнить
|
||||
jg check_box_mouse_end ;ZF = 0 и SF = OF если больше
|
||||
|
||||
shr eax,16 ;разделим на 65536 или просто сдвинем биты на 16 значений
|
||||
movzx ebx,word ch_left ;произведем аналогичное сравнение
|
||||
cmp ax,bx ;сравнить регистры
|
||||
jl check_box_mouse_end ;если меньше
|
||||
add ebx,dword ch_size ;добавить длину стороны прямоугольника
|
||||
add ebx,esi ;Учесть в значении по х еще и длину надписи к чекбоксу
|
||||
cmp ax,bx ;стравнить регистры
|
||||
jg check_box_mouse_end ;если больше
|
||||
|
||||
bts dword ch_flags,1 ;извлечение значения заданного бита в флаг cf и изменение его значения на 1.
|
||||
jc @f ;CF=1 то перейти на нижнюю @@
|
||||
|
||||
call check_box_draw_ch ;отобразить включенный чек бокс
|
||||
; mov dword [esp+24],1 ;дальнейшая проверка чек боксов бесмыслена, по этому в стек, где располагается ecx поместитм 0
|
||||
jmp check_box_mouse_end ;выйти
|
||||
@@:
|
||||
btr word ch_flags,1 ;извлечение значения заданного бита в флаг cf и изменение его значения на нулевое.
|
||||
call check_box_clear_ch ;выключить чек бокс т.е. на месте закрашенного прямоугольника отобразить цвет фона.
|
||||
check_box_mouse_end:
|
||||
popa ;восстановить регистры из стека
|
||||
ret 4 ;выйти
|
||||
}
|
||||
Reference in New Issue
Block a user