Subversion Repositories Kolibri OS

Rev

Rev 1698 | Rev 1717 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1698 IgorA 1
;
2
; в этом файле собраны функции рисующие окно конструктора
3
;
4
 
5
macro move_to_skin coord_x,coord_y
6
{
7
	add coord_x,SKIN_W1
8
	add coord_y,SKIN_H
9
}
10
 
11
;перерисовка окна конструктора
12
align 4
13
draw_constructor:
14
	stdcall [buf2d_clear], buf_fon,0xffffff
15
 
16
pushad
17
	cmp [err_ini1],1
18
	jne @f
19
		stdcall [buf2d_draw_text], buf_fon, buf_font,txtErrIni1,10,10,\
20
			0xff0000 ;рисуем строку с текстом
21
		stdcall [buf2d_draw_text], buf_fon, buf_font,fp_obj_opt,10,20,\
22
			0xff0000 ;рисуем строку с текстом
23
		jmp .end_draw
24
	@@:
25
 
26
	xor edx,edx
1714 IgorA 27
	mov dl,C_WND
1698 IgorA 28
	stdcall find_obj_in_file,edx ;eax - указатель на структуру окна
29
	cmp eax,0
30
	je .end_draw
31
	mov dword[obj_m_win],eax
32
 
33
	;4-width
34
	stdcall get_obj_text_col,[obj_m_win],4 ;edx = offset
35
	stdcall conv_str_to_int,edx
36
	mov ecx,eax ;ecx=width
37
 
38
	;5-height
39
	stdcall get_obj_text_col,[obj_m_win],5 ;edx = offset
40
	stdcall conv_str_to_int,edx
41
	;eax=height
42
 
43
	stdcall [buf2d_rect_by_size], buf_fon, 0,0,ecx,eax, dword[sc.frame] ;рисуем внешнюю рамку окна
44
	sub eax,2
45
	sub ecx,2
46
	stdcall [buf2d_filled_rect_by_size], buf_fon, 1,1,ecx,eax, dword[sc.grab] ;рисуем фон рамки окна
47
 
48
	sub eax,6
49
	sub ecx,6
50
	stdcall [buf2d_rect_by_size], buf_fon, 4,4,ecx,eax, dword[sc.frame] ;рисуем внутреннюю рамку окна
51
	sub eax,2
52
	sub ecx,2
53
	stdcall [buf2d_filled_rect_by_size], buf_fon, 5,5,ecx,eax, dword[sc.work] ;рисуем фон окна
54
 
55
;---;---;---
56
;jmp .end_skin
57
;---;---;---
58
 
59
	stdcall get_obj_text_col,[obj_m_win],1
60
	stdcall conv_str_to_int,edx ;eax = window style
61
	cmp eax,3
62
	jl .end_skin
63
		stdcall [buf2d_bit_blt], buf_fon, 0,0, buf_skin1 ;левый скин
64
		mov edi,buf_skin1
65
		mov eax,buf2d_w ;eax - позиция для рисования среднего скина
66
		mov edi,buf_skin2
67
		mov ebx,buf2d_w ;ebx - ширина левого скина
68
		sub ecx,ebx ;отнимаем от ширины окна ширину среднего скина
69
		@@:
70
			stdcall [buf2d_bit_blt], buf_fon, eax,0, buf_skin2 ;прорисовка среднего скина
71
			add eax,ebx
72
			cmp eax,ecx ;сравниваем позицию среднего скина с шириной окна
73
			jl @b
74
 
75
		;4-width
76
		stdcall get_obj_text_col,[obj_m_win],4 ;edx = offset
77
		stdcall conv_str_to_int,edx
78
		mov edi,buf_skin3
79
		sub eax,buf2d_w ;отнимаем ширину правого скина
80
		stdcall [buf2d_bit_blt], buf_fon, eax,0, buf_skin3 ;прорисовка правого скина
81
	.end_skin:
82
 
83
	xor edx,edx ;рисуем графические элементы
1714 IgorA 84
	mov dl,C_BUT
1698 IgorA 85
	stdcall draw_arr_objects, edx,draw_obj_but
1714 IgorA 86
	mov dl,C_EDB
1698 IgorA 87
	stdcall draw_arr_objects, edx,draw_obj_edit
1714 IgorA 88
	mov dl,C_CHB
1698 IgorA 89
	stdcall draw_arr_objects, edx,draw_obj_check
1714 IgorA 90
	mov dl,C_DTT
1698 IgorA 91
	stdcall draw_arr_objects, edx,draw_obj_text
1714 IgorA 92
	mov dl,C_REC
1698 IgorA 93
	stdcall draw_arr_objects, edx,draw_obj_rect_f13
94
 
95
	.end_draw:
96
popad
97
	ret
98
 
99
;функция рисует массивы определенных элементов
100
align 4
101
proc draw_arr_objects, obj_t:dword,p_fun_draw:dword
102
push eax ebx
103
	stdcall find_obj_in_file,[obj_t] ;eax - указатель на структуру объекта
104
	cmp eax,0
105
	je .end_draw_o
106
		mov ebx,[p_fun_draw]
107
		stdcall ebx,eax
108
		@@:
109
			stdcall find_obj_in_file_next,[obj_t] ;eax - указатель на структуру объекта
110
			cmp eax,0
111
			je .end_draw_o
112
				stdcall ebx,eax
113
		jmp @b
114
	.end_draw_o:
115
pop ebx eax
116
	ret
117
endp
118
 
119
;функция рисует объект кнопки, в окне конструктора
120
align 4
121
proc draw_obj_but, p_obj:dword
122
locals
123
	coor_x dd ?
124
	coor_y dd ?
125
endl
126
	pushad
127
		mov ebx,dword[p_obj]
128
		;1,2,3,4,5 - x,y,w,h,color
129
 
130
		stdcall get_obj_text_col,ebx,1
131
		stdcall conv_str_to_int,edx
132
		mov [coor_x],eax
133
		stdcall get_obj_text_col,ebx,2
134
		stdcall conv_str_to_int,edx
135
		mov [coor_y],eax
136
		move_to_skin [coor_x],[coor_y]
137
		stdcall get_obj_text_col,ebx,3
138
		stdcall conv_str_to_int,edx
139
		mov edi,eax
140
		stdcall get_obj_text_col,ebx,4
141
		stdcall conv_str_to_int,edx
142
		mov ecx,eax
143
		stdcall get_obj_text_col,ebx,5
144
		stdcall conv_str_to_int,edx
145
		stdcall [buf2d_rect_by_size], buf_fon, dword[coor_x],dword[coor_y],edi,ecx,eax
146
	popad
147
	ret
148
endp
149
 
150
;функция рисует объект текстового поля, в окне конструктора
151
align 4
152
proc draw_obj_edit, p_obj:dword
153
locals
154
	coor_x dd ?
155
	coor_y dd ?
156
	col_txt dd ? ;цвет тектса
157
endl
158
	pushad
159
		mov ebx,dword[p_obj]
160
		;1,2,3,4,...,6,...8,...,10 - w,x,y,col_fon,...,col_frame,...,col_txt,...,txt
161
 
162
		stdcall get_obj_text_col,ebx,2
163
		stdcall conv_str_to_int,edx
164
		mov [coor_x],eax
165
		stdcall get_obj_text_col,ebx,3
166
		stdcall conv_str_to_int,edx
167
		mov [coor_y],eax
168
		move_to_skin [coor_x],[coor_y]
169
		stdcall get_obj_text_col,ebx,1
170
		stdcall conv_str_to_int,edx
171
		mov ecx,eax
172
		stdcall get_obj_text_col,ebx,6
173
		stdcall conv_str_to_int,edx
174
		stdcall [buf2d_rect_by_size], buf_fon, dword[coor_x],dword[coor_y],\
175
			ecx,15, eax
176
 
177
		inc dword[coor_x]
178
		inc dword[coor_y]
179
		sub ecx,2
180
		stdcall get_obj_text_col,ebx,4
181
		stdcall conv_str_to_int,edx
182
		stdcall [buf2d_filled_rect_by_size], buf_fon, dword[coor_x],dword[coor_y],\
183
			ecx,13, eax
184
 
185
		stdcall get_obj_text_col,ebx,8
186
		stdcall conv_str_to_int,edx
187
		mov [col_txt],eax
188
		add [coor_x],2-1 ;смещаем координату, что-бы
189
		add [coor_y],4-1 ;текст был в поле выровнен
190
		stdcall get_obj_text_col,ebx,10
191
		stdcall [buf2d_draw_text], buf_fon, buf_font,edx,dword[coor_x],dword[coor_y],\
192
			dword[col_txt] ;рисуем строку с текстом
193
 
194
	popad
195
	ret
196
endp
197
 
198
;функция рисует объект флажка, в окне конструктора
199
align 4
200
proc draw_obj_check, p_obj:dword
201
locals
202
	coor_x dd ?
203
	coor_y dd ?
204
	ot_txt dd ? ;отступ для текста
205
	size_wh dd ? ;размер квадратика
206
	col_txt dd ? ;цвет тектса
207
endl
208
	pushad
209
		mov ebx,dword[p_obj]
210
		;1,2,3, 4,5,6, 7,8 - x,y,txt, col_fon,col_frame,col_txt, w_txt,w_h
211
 
212
		stdcall get_obj_text_col,ebx,1
213
		stdcall conv_str_to_int,edx
214
		mov [coor_x],eax
215
		stdcall get_obj_text_col,ebx,2
216
		stdcall conv_str_to_int,edx
217
		mov [coor_y],eax
218
		move_to_skin [coor_x],[coor_y]
219
		stdcall get_obj_text_col,ebx,7
220
		stdcall conv_str_to_int,edx
221
		mov [ot_txt],eax
222
		stdcall get_obj_text_col,ebx,8
223
		stdcall conv_str_to_int,edx
224
		dec eax ;размер меньше на 1 пиксель
225
		mov [size_wh],eax
226
		stdcall get_obj_text_col,ebx,5
227
		stdcall conv_str_to_int,edx
228
		stdcall [buf2d_rect_by_size], buf_fon, dword[coor_x],dword[coor_y],\
229
			dword[size_wh],dword[size_wh], eax
230
 
231
		inc dword[coor_x]
232
		inc dword[coor_y]
233
		sub dword[size_wh],2
234
		stdcall get_obj_text_col,ebx,4
235
		stdcall conv_str_to_int,edx
236
		stdcall [buf2d_filled_rect_by_size], buf_fon, dword[coor_x],dword[coor_y],\
237
			dword[size_wh],dword[size_wh], eax
238
 
239
		stdcall get_obj_text_col,ebx,6
240
		stdcall conv_str_to_int,edx
241
		mov [col_txt],eax
242
		mov eax,[ot_txt]
243
		add eax,[size_wh]
244
		add eax,2-1 ;sub dword[size_wh],2 ;inc dword[coor_x]
245
		add [coor_x],eax ;вычисляем координаты для текстовой подписи
246
		add [coor_y],5-1 ;inc dword[coor_y]
247
		stdcall get_obj_text_col,ebx,3
248
		stdcall [buf2d_draw_text], buf_fon, buf_font,edx,dword[coor_x],dword[coor_y],\
249
			dword[col_txt] ;рисуем строку с текстом
250
	popad
251
	ret
252
endp
253
 
254
;функция рисует объект текстовой подписи, в окне конструктора
255
align 4
256
proc draw_obj_text, p_obj:dword
257
locals
258
	coor_x dd ?
259
	coor_y dd ?
260
	col_txt dd ? ;цвет тектса
261
endl
262
	pushad
263
		mov ebx,dword[p_obj]
264
		;0,1,2,3,... - txt,x,y,col_txt,...
265
 
266
		stdcall get_obj_text_col,ebx,1
267
		stdcall conv_str_to_int,edx
268
		mov [coor_x],eax
269
		stdcall get_obj_text_col,ebx,2
270
		stdcall conv_str_to_int,edx
271
		mov [coor_y],eax
272
		move_to_skin [coor_x],[coor_y]
273
 
274
		stdcall get_obj_text_col,ebx,3
275
		stdcall conv_str_to_int,edx
276
		mov [col_txt],eax
277
 
278
		stdcall get_obj_text_col,ebx,0
279
		stdcall [buf2d_draw_text], buf_fon, buf_font,edx,dword[coor_x],dword[coor_y],\
280
			dword[col_txt] ;рисуем строку с текстом
281
	popad
282
	ret
283
endp
284
 
285
;функция рисует объект прямоугольника (сисит. ф. 13)
286
align 4
287
proc draw_obj_rect_f13, p_obj:dword
288
locals
289
	coor_x dd ?
290
	coor_y dd ?
291
	color dd ? ;цвет тектса
292
endl
293
	pushad
294
		mov ebx,dword[p_obj]
295
		;0,1,2,3,4 - color,x,y,w,h
296
 
297
		stdcall get_obj_text_col,ebx,1
298
		stdcall conv_str_to_int,edx
299
		mov [coor_x],eax
300
		stdcall get_obj_text_col,ebx,2
301
		stdcall conv_str_to_int,edx
302
		mov [coor_y],eax
303
		move_to_skin [coor_x],[coor_y]
304
 
305
		stdcall get_obj_text_col,ebx,0
306
		stdcall conv_str_to_int,edx
307
		mov [color],eax
308
 
309
		stdcall get_obj_text_col,ebx,3
310
		stdcall conv_str_to_int,edx
311
		mov ecx,eax
312
 
313
		stdcall get_obj_text_col,ebx,4
314
		stdcall conv_str_to_int,edx
315
		mov esi,eax
316
 
317
		stdcall [buf2d_filled_rect_by_size], buf_fon,\
318
			dword[coor_x],dword[coor_y],ecx,esi,dword[color]
319
	popad
320
	ret
321
endp