Subversion Repositories Kolibri OS

Rev

Rev 205 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
205 heavyiron 1
;--------------------------------------------------------------------
2
;--- рисование кнопки с текстом в середине --------------------------
3
;--------------------------------------------------------------------
4
macro use_txt_button
5
{
6
txt_button:
7
.draw:
8
pusha
9
;--- прорисовка самой кнопки ---
10
        mov     eax,8
11
        mov     ebx,[edi] ; [but.width]
12
        mov     ecx,[edi+4] ;[but.height]
13
        mov     edx,[edi+8];[but.id]
14
        mov     esi,[edi+12];[but.color]
493 Lrz 15
        mcall
205 heavyiron 16
;--- текст на ней ---
17
        ; считаем количество символов
18
        mov     edx,[edi+20]
19
        xor     esi,esi
20
.check_next_symbol:
21
        cmp     [edx+esi],byte 0
22
        je      .str_end
23
        inc     esi      ; в esi длина строки в символах
24
        jmp     .check_next_symbol
25
.str_end:
26
 
27
        ; вычисляем координаты
28
        lea     ebx,[esi*2+esi]
29
        lea     ebx,[ebx*2] ; в ebx длина строки в пикселях
30
 
31
        ;not     ebx
32
        neg     ebx
33
        add     bx,[edi] ; [but.width]
34
        sar     bx,1
35
        inc     bx
36
        add     bx,[edi+2];[but.left]  ; в bx позиция слева
37
        shl     ebx,16
38
 
39
 
40
        mov     bx,[edi+4];[but.height]
41
        sub     bx,8-1
42
        sar     bx,1
43
        add     bx,[edi+6];[but.top]   ; в bx позиция сверху
44
 
45
        ; рисуем строку текста
46
        mov     ecx,[edi+16] ;[but.text_color]
47
        shr     eax,1
493 Lrz 48
        mcall
205 heavyiron 49
popa
50
ret
51
}
52
 
53
struc txt_button width,left,height,top,id,color,text_color,text_ptr,\
54
proc_addres
55
{
56
.width dw width ;+0
57
.left dw left   ;+2
58
.height dw height ;+4
59
.top dw top       ;+6
60
.id dd id         ;+8
61
.color dd color   ;+12
62
.text_color dd text_color  ;+16
63
.text_ptr dd text_ptr      ;+20
64
.proc_addres dd proc_addres+0 ;+24
65
}
66
but_struc_size=24+4
67
macro draw_txt_buttons start,end
68
{
69
        mov     edi,start
70
        mov     ecx,((end-start)/but_struc_size)
71
@@:
72
        call    txt_button.draw
73
        add     edi,but_struc_size
74
        loop    @b
75
}
76
 
77
macro txt_but_set_sys_color start,end,color_table
78
{
79
        mov     edi,start
80
        mov     esi,color_table
81
        mov     ecx,((end-start)/but_struc_size)
82
@@:
83
        push    dword [esi+24]
84
        pop     dword [edi+12]
85
        push    dword [esi+28]
86
        pop     dword [edi+16]
87
        add     edi,but_struc_size
88
        loop    @b
89
}
90
 
91
macro txt_but_ev start,end
92
{
93
        mov     edi,start
94
        mov     ecx,((end-start)/but_struc_size)
95
.txt_but_next:
96
        cmp     ah,[edi+8]
97
        jne     @f
98
        cmp     dword [edi+24],0
99
        je      @f
100
        pusha
101
        call    dword [edi+24]
102
        popa
103
@@:
104
        add     edi,but_struc_size
105
        loop    .txt_but_next
106
}
107
 
108
macro draw_txt_button ptr
109
{
110
        mov     edi,ptr
111
        call    txt_button.draw
112
}
113
 
114
macro set_sys_colors_txt_button but,sc
115
{
116
        mov     esi,sc
117
        mov     edi,but
118
        push    dword [esi+24]
119
        pop     dword [edi+12]
120
        push    dword [esi+28]
121
        pop     dword [edi+16]
122
}
123
 
124
macro event_txt_button but,sc
125
{
126
 
127
}