kolibrios-fun/programs/other/t_edit/t_draw.inc
IgorA 44e780f476 fixed position of signatures when pressing [f1]
update 'asm' syntax file

git-svn-id: svn://kolibrios.org@6087 a494cfbc-eb01-0410-851d-a64ba20cac60
2016-01-21 22:22:11 +00:00

352 lines
6.6 KiB
PHP

align 4
draw_but_toolbar: ;ôóíêöèÿ äëÿ ðèñîâàíèÿ ïàíåëè èíñòðóìåíòîâ
pushad
mov edi,tedit0
mov ecx,0x40000000
mov edx,5*65536+25
call draw_but_icon
inc cx
mov edx,30*65536+25
call draw_but_icon
stdcall [ted_can_save],edi
cmp al,1
je @f
and ecx,0xffff
@@:
inc cx
mov edx,55*65536+25
call draw_but_icon
or ecx,0x40000000
inc cx
mov edx,85*65536+25
call draw_but_icon
call [ted_is_select]
cmp al,0
jne @f
and ecx,0xffff
@@:
inc cx ; Cut
mov edx,110*65536+25
call draw_but_icon
inc cx ; Copy
mov edx,135*65536+25
call draw_but_icon
mov cx,10 ; Upper
mov edx,265*65536+25
call draw_but_icon
inc cx ; Lower
mov edx,290*65536+25
call draw_but_icon
inc cx ; reverse
mov edx,315*65536+25
call draw_but_icon
or ecx,0x40000000
cmp dword[buf],0
jne @f
and ecx,0xffff
@@:
mov cx,6 ; Paste
mov edx,160*65536+25
call draw_but_icon
or ecx,0x40000000
inc cx
mov edx,185*65536+25
call draw_but_icon
inc cx
mov edx,210*65536+25
call draw_but_icon
inc cx
mov edx,235*65536+25
call draw_but_icon
mov ebx,ted_tim_undo
cmp ted_tim_ch,ebx
jg @f
and ecx,0xffff
@@:
mov cx,13
mov edx,345*65536+25
call draw_but_icon
or ecx,0x40000000
cmp ted_tim_undo,1
jge @f
and ecx,0xffff
@@:
inc cx
mov edx,370*65536+25
call draw_but_icon
or ecx,0x40000000
inc cx
mov edx,400*65536+25
call draw_but_icon
inc cx
mov edx,425*65536+25
call draw_but_icon
mov cx,17 ;âûáîð ôàéëà ïîäñâåòêè
mov edx,450*65536+25
call draw_but_icon
mov cx,18 ;cp 1251 -> 866
mov edx,480*65536+25
call draw_but_icon
mov cx,19 ;cp 866 -> 1251
mov edx,505*65536+25
call draw_but_icon
popad
ret
;txtBUp db 24
;txtBDn db 25
;txtBRi db 26
;txtBLe db 27
;input:
; edi = pointer to tedit struct
align 4
proc draw_panel_find
cmp ted_panel_id,TED_PANEL_FIND ;if not panel
jne @f
push eax ebx ecx edx
mov ecx,ted_wnd_t
shl ecx,16
mov cx,20
mcall SF_DRAW_RECT,TED_PANEL_WIDTH,,[sc.work]
mov ebx,30*65536+25
add ebx,ted_wnd_t
mov ecx,[sc.work_text]
or ecx,0x80000000
mcall SF_DRAW_TEXT,,,txtFindCapt
stdcall [edit_box_draw], edit2
mov ecx,ted_wnd_t
add cx,20+15 ; 15 - height text box
shl ecx,16
add ecx,ted_wnd_h
mov edx,ted_scr_h
add cx,word[edx+sb_offs_size_y]
sub cx,20+15-1 ; 15 - height text box
mcall SF_DRAW_RECT,TED_PANEL_WIDTH,,[sc.work]
mov ecx,ted_wnd_t
add cx,20+15+5
shl ecx,16
mov cx,20
mcall SF_DEFINE_BUTTON,5*65536+85,,201,[sc.work_button] ;201 - button id
mov ebx,15*65536+(20+15+10)
add ebx,ted_wnd_t
mov ecx,[sc.work_text]
or ecx,0x80000000
mcall SF_DRAW_TEXT,,,txtFindNext
pop edx ecx ebx eax
jmp .end_f
@@:
push eax edx
mov edx,201
or edx,0x80000000
mcall SF_DEFINE_BUTTON
pop edx eax
.end_f:
ret
endp
;input:
; edi = pointer to tedit struct
align 4
proc draw_panel_syntax
cmp ted_panel_id,TED_PANEL_SYNTAX ;if not panel
jne @f
pushad
mov ecx,ted_wnd_t
shl ecx,16
mov cx,20
mcall SF_DRAW_RECT,TED_PANEL_WIDTH,,[sc.work] ;ðèñîâàíèå âåðõíåãî ôîíîâîãî ïðÿìîóãîëüíèêà
stdcall dword[tl_draw], tree1
mov [ws_dir_lbox.all_redraw],1 ;äëÿ ïîëíîé ïåðåðèñîâêè äî÷åðíåãî ñêðîëëèíãà
stdcall dword[scrollbar_ver_draw], dword ws_dir_lbox
ror ecx,16
add ecx,dword[tree1.box_height]
add ecx,20
and ecx,0xffff
ror ecx,16
add ecx,ted_wnd_h
mov esi,ted_scr_h
add cx,word[esi+sb_offs_size_y]
sub cx,20
sub ecx,dword[tree1.box_height]
inc cx
int 0x40 ;ðèñîâàíèå íèæíåãî ôîíîâîãî ïðÿìîóãîëüíèêà
mov ecx,ted_wnd_t
add ecx,25
add ecx,dword[tree1.box_height]
shl ecx,16
mov cx,20
mcall SF_DEFINE_BUTTON,(5 shl 16)+65,,200,[sc.work_button] ;200 - button id
mov ebx,(30 shl 16)+5
add ebx,ted_wnd_t
mov ecx,[sc.work_text]
or ecx,0x80000000
mcall SF_DRAW_TEXT,,,txtFormatCapt
mov ebx,(10 shl 16)+31
add ebx,dword[tree1.box_height]
add ebx,ted_wnd_t
mcall ,,,txtFormatApply
popad
jmp .end_f
@@:
push eax edx
mov edx,200
or edx,0x80000000
mcall SF_DEFINE_BUTTON ;åñëè íåò ïàíåëè òî óäàëÿåì êíîïêó
pop edx eax
.end_f:
ret
endp
MIN_M_WND_H equ 100 ;ìèíèìàëüíàÿ âûñîòà ãëàâíîãî îêíà
;input:
; edi = pointer to tedit struct
align 4
EvSize:
pushad
mov ebx,ted_scr_h
mov esi,ted_scr_w
m2m ted_wnd_w,[procinfo.client_box.width] ;ñòàâèì øèðèíó îêíà ðåäàêòîðà ðàâíîé øèðèíå âñåãî îêíà
mov eax,ted_wnd_l
sub ted_wnd_w,eax ;îòíèìàåì îòñòóï ñëåâà
movzx eax,word[esi+sb_offs_size_x]
sub ted_wnd_w,eax ;îòíèìàåì øèðèíó âåðò. ñêðîëëèíãà
m2m ted_wnd_h,[procinfo.client_box.height] ;ñòàâèì âûñîòó îêíà ðåäàêòîðà ðàâíîé âûñîòå âñåãî îêíà
cmp ted_wnd_h,MIN_M_WND_H
jg @f
mov ted_wnd_h,MIN_M_WND_H
@@:
movzx eax,word[ebx+sb_offs_size_y]
sub ted_wnd_h,eax ;îòíèìàåì âûñîòó ãîðèç. ñêðîëëèíãà
mov eax,ted_wnd_t
sub ted_wnd_h,eax ;îòíèìàåì îòñòóï ñâåðõó
stdcall [ted_init_scroll_bars], tedit0,2
mov eax,ted_wnd_t
mov edi,dword tree1
mov tl_box_top,eax ;=ted_wnd_t
add tl_box_top,20
mov [edit2.top],eax ;=ted_wnd_t
add dword[edit2.top],20
popad
ret
;input:
; ecx = 0x4000____
; cx = icon index
; edx = x*2^16+y
align 4
draw_but_icon:
push eax ebx
mov eax,SF_DEFINE_BUTTON
push ecx edx esi
mov ebx,edx
mov edx,ecx
add edx,3
mov cx,bx
shl ecx,16
mov cx,19 ;=20-1
mov bx,19 ;=20-1
mov esi,ebx
shr esi,16
add esi,20
cmp esi,[procinfo.client_box.width]
jge @f ;êíîïêà íå âëåçëà â îêíî
mov esi,[sc.work_button]
int 0x40 ;ñòàâèì êíîïêó
mov eax,SF_PUT_IMAGE
@@:
pop esi edx ecx
cmp eax,SF_PUT_IMAGE
jne @f ;êíîïêà íå âëåçëà â îêíî
mov ebx,[bmp_icon]
bt ecx,30 ;if (ecx & 0x40000000)
jc .gray
add ebx,TOOLBAR_ICONS_SIZE ;ïåðåìåùàåìñÿ íà ñåðûå êíîïêè
.gray:
push ecx
and ecx,0xffff
imul ecx,1200
add ebx,ecx
mov ecx,20
shl ecx,16
add ecx,20
int 0x40 ;ñòàâèì ðèñóíîê íà êíîïêó
pop ecx
@@:
pop ebx eax
ret
;descrition:
; ôóíêöèÿ äëÿ ãåíåðèðîâàíèÿ ñåðûõ èêîíîê
;input:
; buf_rgb - áóôåð ñ âõîäíûì 24 áèòíûì öâåòíûì èçîáðàæåíèåì
; buf_g24 - áóôåð ñ âûõîäíûì 24 áèòíûì ñåðûì èçîáðàæåíèåì
; pixels - ÷èñëî ïèêñåëåé â èçîáðàæåíèè
align 4
proc img_to_gray, buf_rgb:dword, buf_g24:dword, pixels:dword
pushad
mov esi,[buf_rgb]
mov edi,[buf_g24]
mov ecx,[pixels]
mov ebx,3
@@:
movzx eax,byte[esi]
movzx edx,byte[esi+1]
add eax,edx
movzx edx,byte[esi+2]
add eax,edx
xor edx,edx
div ebx ;shr eax,2
mov ah,al
mov word[edi],ax
mov byte[edi+2],al
add esi,3
add edi,3
loop @b
popad
ret
endp