1) some fixes in functions 'tl_mouse'

2) added documentation for the 'scrollbar'
3) small improvements 't_edit'

git-svn-id: svn://kolibrios.org@1390 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
IgorA
2010-02-05 11:17:26 +00:00
parent 2038403213
commit e79fad8794
6 changed files with 170 additions and 678 deletions
@@ -20,7 +20,7 @@
<li><a href="editbox\info_editbox.htm">editbox</a></li>
<li><a href="checkbox\info_checkbox.htm">checkbox</a></li>
<li>optionbox</li>
<li>scrollbar</li>
<li><a href="scrollbar\scrollbar.htm">scrollbar</a></li>
<li>d_button</li>
<li>menubar</li>
<li>filebrowser</li>
@@ -36,6 +36,6 @@
<p>Игорь Афанасьев aka IgorA</p>
<hr>
<p>Документация обновлялась последний раз 10.01.10.</p>
<p>Документация обновлялась последний раз 05.02.10.</p>
</body>
</html>
@@ -0,0 +1,93 @@
<html>
<head>
<title>элемент Scroll Bar</title>
<meta http-equiv="content-type" content="text/html; charset=WINDOWS-1251">
<link href="../style.css" type=text/css rel=stylesheet>
</head>
<body>
<p><a href="../box_lib.htm">На главную &uarr;</a></p>
<h1>Оглавление</h1>
<p><a href="#vveden">Введение</a></p>
<p><a href="#funct">Функции</a></p>
<ul>
<li><a href="#fun_v_draw">scrollbar_v_draw</a></li>
<li><a href="#fun_v_mouse">scrollbar_v_mouse</a></li>
<li><a href="#fun_h_draw">scrollbar_h_draw</a></li>
<li><a href="#fun_h_mouse">scrollbar_h_mouse</a></li>
<li><a href="#version">version_ch</a></li>
</ul>
<p><a href="#struc_scrollbar">Структура scrollbar</a></p>
<h1><a name="vveden">Введение</a></h1>
<p>Скроллбар, используется при выводе информации, не помещающейся в окно. Может быть вертикальным и горизонтальным.</p>
<h1><a name="funct">Функции</a></h1>
<h2><a name="fun_v_draw">scrollbar_v_draw</a></h2>
<p>Рисование вертикального скроллинга.</p>
<h2><a name="fun_v_mouse">scrollbar_v_mouse</a></h2>
<p>Эта функция должна вызыватся для вертикального скроллинга при движении мышей.</p>
<h2><a name="fun_h_draw">scrollbar_h_draw</a></h2>
<p>Рисование горизонтального скроллинга.</p>
<h2><a name="fun_h_mouse">scrollbar_h_mouse</a></h2>
<p>Эта функция должна вызыватся для горизонтального скроллинга при движении мышей.</p>
<h2><a name="version">version_ch</a></h2>
<p>Версия элемента</p>
<h1><a name="struc_scrollbar">Структура scrollbar</a></h1>
<p>Макроса для создания структуры для скроллбара нет. Потому данные для нее задаются вручную.
Есть макрос use_scroll_bar он дает возможность понять какие данные нужны для скроллинга.</p>
<pre>macro use_scroll_bar
{
scroll_bar:
sb_size_x equ [edi]
sb_start_x equ [edi+ 2]
sb_size_y equ [edi+ 4]
sb_start_y equ [edi+ 6]
sb_btn_high equ [edi+ 8]
sb_type equ [edi+12]
sb_max_area equ [edi+16]
sb_cur_area equ [edi+20]
sb_position equ [edi+24]
sb_bckg_col equ [edi+28]
sb_frnt_col equ [edi+32]
sb_line_col equ [edi+36]
sb_redraw equ [edi+40]
sb_delta equ [edi+44]
sb_delta2 equ [edi+46]
sb_r_size_x equ [edi+48]
sb_r_start_x equ [edi+50]
sb_r_size_y equ [edi+52]
sb_r_start_y equ [edi+54]
sb_m_pos equ [edi+56]
sb_m_pos_2 equ [edi+60]
sb_m_keys equ [edi+64]
sb_run_size equ [edi+68]
sb_position2 equ [edi+72]
sb_work_size equ [edi+76]
sb_all_redraw equ [edi+80]
sb_ar_offset equ [edi+84]
}</pre>
<p><b>sb_btn_high</b> - высота боковых кнопок (левая и правая для гориз. и верхняя и нижняя для верт.)</p>
<p><b>sb_type</b> - зарезервировано для будущих типов, если скроллбар будет дорабатываться.</p>
<p><b>sb_max_area</b> - область максимальная, актуально когда не влазит в
отображаемую область, т.е. случай активности компонента (весь максимальный размер документа)</p>
<p><b>sb_cur_area</b> - область отображаемая (какая часть документа влазит в экран)</p>
<p><b>sb_position</b> - позиция бегунка изменяемая от 0 до значения (sb_max_area-sb_cur_area)</p>
<p><b>sb_bckg_col</b> - цвет внутренний, применяется для областей между бегунком и кноками</p>
<p><b>sb_frnt_col</b> - цвет наружный, применяется для областей отличных от применяемых в sb_bckg_col</p>
<p><b>sb_line_col</b> - цвет линий и стрелок на кнопках</p>
<p><b>sb_redraw</b> - индикатор необходимости перерисовки управляемой области учитывая изменение sb_position и sb_cur_area</p>
<p><b>sb_delta2</b> - индикатор захвата фокуса скроллбаром (удержание бегунка)</p>
<p><b>sb_all_redraw</b> - флаг устанавливаемый в 1 для перерисовки всего компонента, если поставить 0, то перерисовка происходит только для области бегунка. Введено для ускорения отрисовки, поскольку не во всех случаях требуется принудитеьно отрисовывать все части компонента. Когда вызывается по событию мыши всегда отрисовывается самим компонентом со значением 0.</p>
<p><b>sb_ar_offset</b> - величина смещения при однократном нажатии боковой кнопки.</p>
<hr>
<p>Документация обновлялась последний раз 05.02.10.</p>
</body>
</html>
@@ -1,6 +1,6 @@
; макрос для системной библиотеки box_lib.obj
; элемент TreeList для Kolibri OS
; файл последний раз изменялся 23.12.2009 IgorA
; файл последний раз изменялся 05.02.2010 IgorA
; на код применена GPL2 лицензия
@@ -317,16 +317,9 @@ align 4
tl_mouse: ;реакция на мышь
push ebp
mov ebp,esp
push eax ebx ecx edx edi esi
pushad
mov edi,dword[ebp+8]
mov eax,37
mov ebx,2
int 0x40
bt eax,0 ;left mouse button press
jae .no_draw
mov eax,37
mov ebx,1
int 0x40
@@ -334,23 +327,33 @@ tl_mouse: ;
mov ebx,tl_box_left
shl ebx,16
cmp eax,ebx ;левая граница окна
jl .no_in_wnd
jl .test_scroll
mov ebx,tl_box_left
add ebx,tl_box_width
shl ebx,16
cmp eax,ebx ;правая граница окна
jg .test_scroll ;.no_in_wnd
jg .test_scroll
mov ebx,tl_box_top
add ebx,tl_box_height
cmp ax,bx ;нижняя граница окна
jg .no_in_wnd
jg .test_scroll
sub ebx,tl_box_height
add bx,tl_capt_cy
cmp ax,bx ;верхняя граница окна + высота подписи
jl .no_in_wnd
jl .test_scroll
push eax ebx
mov eax,37
mov ebx,2
int 0x40
bt eax,0 ;left mouse button press
pop ebx eax
jae .no_draw
mov esi,tl_el_focus
mov dword[esi],edi ;set focus
@@ -446,7 +449,13 @@ tl_mouse: ;
cmp dword[edx+46],0 ;+46 .delta2
jne .no_draw ;попали на скроллинг - не снимаем фокус с TreeList
;-------------------------------------------------------------------------------
.no_in_wnd: ;не попали в окно - потеря фокуса (при условии что фокус был на данном эелементе)
.no_in_wnd: ;не попали в окно - потеря фокуса (при условии что фокус был на данном эелементе)
mov eax,37 ;проверяем нажатость любых кнопок
mov ebx,2
int 0x40
cmp eax,0 ;ниче не нажали eax=0
je .no_draw
mov ebx,tl_el_focus
cmp dword[ebx],edi
jne .no_draw ;элемент не в фокусе
@@ -456,7 +465,7 @@ tl_mouse: ;
call tl_draw_cursor ;рисуем курсор с потеряным фокусом
.no_draw:
pop esi edi edx ecx ebx eax
popad
pop ebp
ret 4
@@ -653,6 +662,13 @@ tl_draw: ;
@@:
call tl_draw_cursor
mov edi,tl_p_scrol ;рисуем дочерний скроллинг
cmp edi,0 ;для того что-бы его не пришлось рисовать в пользовательской программе
je .end_draw ;если нет скроллинга выходим
push dword edi
call scroll_bar_vertical.draw
.end_draw:
pop esi edi edx ecx ebx eax
pop ebp
@@ -2330,7 +2346,7 @@ tl_load_mem:
; pop ebx
; add esi,ebx
.beg_cycle:
cmp dword[esi],0x65657274 ;0x65657274 = 'tree'
cmp dword[esi],'tree'
jne .no_tree
xor ebx,ebx
mov bx,word[esi+4]
@@ -2341,7 +2357,7 @@ tl_load_mem:
loop .beg_cycle
@@:
cmp dword[esi],0x65657274 ;0x65657274 = 'tree'
cmp dword[esi],'tree'
jne .no_tree
bt word[ebp+18],1 ;load in add mode
jc @f
@@ -2410,7 +2426,7 @@ tl_get_mem_size: ;
mov esi,dword[ebp+ 8]
mov edi,dword[ebp+12]
@@:
cmp dword[esi],0x65657274 ;0x65657274 = 'tree'
cmp dword[esi],'tree'
jne @f
xor ebx,ebx
mov bx,word[esi+4]