1,6 → 1,6 |
; ìàêðîñ äëÿ ñèñòåìíîé áèáëèîòåêè box_lib.obj |
; ýëåìåíò TreeList äëÿ Kolibri OS |
; ôàéë ïîñëåäíèé ðàç èçìåíÿëñÿ 09.06.2010 IgorA |
; ôàéë ïîñëåäíèé ðàç èçìåíÿëñÿ 01.12.2010 IgorA |
; íà êîä ïðèìåíåíà GPL2 ëèöåíçèÿ |
|
|
918,87 → 918,87 |
; esi = coord of bottom border |
align 4 |
tl_draw_node: ;ðèñóåò óçåë ñ: êàðòèíêîé, ïîäïèñüþ, èêîíêîé îòêðûòèÿ/çàêðûòèÿ è ëèíèÿìè ê ðîäèò. óçëó |
push eax ebx ecx edx esi |
push eax ebx ecx edx esi |
|
mov ebx,1 ;1 - ìåñòî ïîä êóðñîð è ïîä çíàê +,- |
bt tl_style,2 ;tl_list_box_mode |
jc @f |
inc ebx ;+1 - ìåñòî ïîä çíàê +,- |
@@: |
add bl,byte[edx+2];get level |
imul bx,tl_img_cx |
add ebx,tl_box_left |
mov ebx,1 ;1 - ìåñòî ïîä êóðñîð |
bt tl_style,2 ;tl_list_box_mode |
jc @f |
inc ebx ;+1 - ìåñòî ïîä çíàê +,- |
add bl,byte[edx+2] ;äîáàâëÿåì óðîâåíü ýëåìåíòà äëÿ åãî ó÷åòà â ëåâîì îòñòóïå èêîíêè |
@@: |
imul bx,tl_img_cx |
add ebx,tl_box_left |
|
shl ebx,16 |
mov bx,tl_img_cx |
xor ecx,ecx |
mov cx,tl_img_cy |
imul ecx,eax |
add ecx,tl_box_top |
add cx,tl_capt_cy |
shl ebx,16 |
mov bx,tl_img_cx |
xor ecx,ecx |
mov cx,tl_img_cy |
imul ecx,eax |
add ecx,tl_box_top |
add cx,tl_capt_cy |
|
;crop image if on the border |
cmp esi,ecx ;åñëè óçåë âíèçó è åãî âîîáùå íå âèäíî |
jl .end_draw |
;crop image if on the border |
cmp esi,ecx ;åñëè óçåë âíèçó è åãî âîîáùå íå âèäíî |
jl .end_draw |
|
sub esi,ecx |
shl ecx,16 |
mov cx,tl_img_cy |
cmp si,tl_img_cy |
jge @f |
mov cx,si ;åñëè óçåë âèäåí ÷àñòè÷íî (ïîïàë íà íèæíþþ ãðàíèöó) |
jmp .crop ;ïðîïóñêàåì ðèñîâàíèå íàäïèñè, êîòîðàÿ ñêîðåå âñåãî òîæå âûëåçåò çà íèæíþþ ãðàíèöó |
@@: |
call tl_draw_node_caption |
.crop: |
mov esi,ecx ;save ecx |
sub esi,ecx |
shl ecx,16 |
mov cx,tl_img_cy |
cmp si,tl_img_cy |
jge @f |
mov cx,si ;åñëè óçåë âèäåí ÷àñòè÷íî (ïîïàë íà íèæíþþ ãðàíèöó) |
jmp .crop ;ïðîïóñêàåì ðèñîâàíèå íàäïèñè, êîòîðàÿ ñêîðåå âñåãî òîæå âûëåçåò çà íèæíþþ ãðàíèöó |
@@: |
call tl_draw_node_caption |
.crop: |
mov esi,ecx ;save ecx |
|
cmp tl_data_img,0 |
jne .draw_img_n |
push edx |
mov edx,tl_col_txt |
mov eax,13 |
int 0x40 ;draw node rect |
pop edx |
jmp @f |
.draw_img_n: |
push ebx edx esi |
xor esi,esi |
mov si,word[edx] ;get icon type |
mov edx,ebx |
ror ecx,16 |
mov dx,cx |
mov cx,bx |
ror ecx,16 |
mov ebx,3 ;rgb = 3 bytes |
imul bx,tl_img_cx |
imul bx,tl_img_cy |
imul ebx,esi ;esi = icon index |
add ebx,tl_data_img |
cmp tl_data_img,0 |
jne .draw_img_n |
push edx |
mov edx,tl_col_txt |
mov eax,13 |
int 0x40 ;draw node rect |
pop edx |
jmp @f |
.draw_img_n: |
push ebx edx esi |
xor esi,esi |
mov si,word[edx] ;get icon type |
mov edx,ebx |
ror ecx,16 |
mov dx,cx |
mov cx,bx |
ror ecx,16 |
mov ebx,3 ;rgb = 3 bytes |
imul bx,tl_img_cx |
imul bx,tl_img_cy |
imul ebx,esi ;esi = icon index |
add ebx,tl_data_img |
|
mov eax,7 |
int 0x40 ;draw node icon '-' |
pop esi edx ebx |
@@: |
mov eax,7 |
int 0x40 ;draw node icon '-' |
pop esi edx ebx |
@@: |
|
mov al,byte[edx+2] ;draw minus '-' |
mov ecx,tl_data_nodes |
add ecx,sizeof.TreeList |
mov al,byte[edx+2] ;draw minus '-' |
mov ecx,tl_data_nodes |
add ecx,sizeof.TreeList |
|
mov ah,10 ;get icon index '+' or '-' ? |
cmp byte[edx+3],1 |
jne .close |
dec ah |
.close: |
mov ah,10 ;get icon index '+' or '-' ? |
cmp byte[edx+3],1 |
jne .close |
dec ah |
.close: |
|
call tl_draw_node_icon_opn_clo ;ðèñîâàíèå èêîíêè îòêðûòîãî èëè çàêðûòîãî óçëà |
bt tl_style,1 |
jae .end_draw |
call tl_draw_node_icon_par_lin ;ðèñîâàíèå ëèíèè ê ðîäèòåëüñêîìó ýëåìåíòó |
call tl_draw_node_icon_par_lin_up ;ðèñîâàíèå âåðòèêàëüíîé ëèíèè ê ðîäèòåëüñêîìó ýëåìåíòó |
.end_draw: |
pop esi edx ecx ebx eax |
ret |
call tl_draw_node_icon_opn_clo ;ðèñîâàíèå èêîíêè îòêðûòîãî èëè çàêðûòîãî óçëà |
bt tl_style,1 |
jae .end_draw |
call tl_draw_node_icon_par_lin ;ðèñîâàíèå ëèíèè ê ðîäèòåëüñêîìó ýëåìåíòó |
call tl_draw_node_icon_par_lin_up ;ðèñîâàíèå âåðòèêàëüíîé ëèíèè ê ðîäèòåëüñêîìó ýëåìåíòó |
.end_draw: |
pop esi edx ecx ebx eax |
ret |
|
;input: |
; ecx = pointer to 1 node struct |