Subversion Repositories Kolibri OS

Rev

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
 
1717 IgorA 26
	mov edx,C_WND
1698 IgorA 27
	stdcall find_obj_in_file,edx ;eax - указатель на структуру окна
28
	cmp eax,0
29
	je .end_draw
30
	mov dword[obj_m_win],eax
31
 
32
	;4-width
33
	stdcall get_obj_text_col,[obj_m_win],4 ;edx = offset
34
	stdcall conv_str_to_int,edx
35
	mov ecx,eax ;ecx=width
36
 
37
	;5-height
38
	stdcall get_obj_text_col,[obj_m_win],5 ;edx = offset
39
	stdcall conv_str_to_int,edx
40
	;eax=height
41
 
42
	stdcall [buf2d_rect_by_size], buf_fon, 0,0,ecx,eax, dword[sc.frame] ;рисуем внешнюю рамку окна
43
	sub eax,2
44
	sub ecx,2
45
	stdcall [buf2d_filled_rect_by_size], buf_fon, 1,1,ecx,eax, dword[sc.grab] ;рисуем фон рамки окна
46
 
47
	sub eax,6
48
	sub ecx,6
49
	stdcall [buf2d_rect_by_size], buf_fon, 4,4,ecx,eax, dword[sc.frame] ;рисуем внутреннюю рамку окна
50
	sub eax,2
51
	sub ecx,2
52
	stdcall [buf2d_filled_rect_by_size], buf_fon, 5,5,ecx,eax, dword[sc.work] ;рисуем фон окна
53
 
54
;---;---;---
55
;jmp .end_skin
56
;---;---;---
57
 
58
	stdcall get_obj_text_col,[obj_m_win],1
59
	stdcall conv_str_to_int,edx ;eax = window style
60
	cmp eax,3
61
	jl .end_skin
62
		stdcall [buf2d_bit_blt], buf_fon, 0,0, buf_skin1 ;левый скин
63
		mov edi,buf_skin1
64
		mov eax,buf2d_w ;eax - позиция для рисования среднего скина
65
		mov edi,buf_skin2
66
		mov ebx,buf2d_w ;ebx - ширина левого скина
67
		sub ecx,ebx ;отнимаем от ширины окна ширину среднего скина
68
		@@:
69
			stdcall [buf2d_bit_blt], buf_fon, eax,0, buf_skin2 ;прорисовка среднего скина
70
			add eax,ebx
71
			cmp eax,ecx ;сравниваем позицию среднего скина с шириной окна
72
			jl @b
73
 
74
		;4-width
75
		stdcall get_obj_text_col,[obj_m_win],4 ;edx = offset
76
		stdcall conv_str_to_int,edx
77
		mov edi,buf_skin3
78
		sub eax,buf2d_w ;отнимаем ширину правого скина
79
		stdcall [buf2d_bit_blt], buf_fon, eax,0, buf_skin3 ;прорисовка правого скина
80
	.end_skin:
81
 
1717 IgorA 82
	;рисуем графические элементы
83
	mov edx,C_BUT
1698 IgorA 84
	stdcall draw_arr_objects, edx,draw_obj_but
1717 IgorA 85
	mov edx,C_EDB
1698 IgorA 86
	stdcall draw_arr_objects, edx,draw_obj_edit
1717 IgorA 87
	mov edx,C_CHB
1698 IgorA 88
	stdcall draw_arr_objects, edx,draw_obj_check
1717 IgorA 89
	mov edx,C_DTT
1698 IgorA 90
	stdcall draw_arr_objects, edx,draw_obj_text
1717 IgorA 91
	mov edx,C_REC
1698 IgorA 92
	stdcall draw_arr_objects, edx,draw_obj_rect_f13
93
 
94
	.end_draw:
95
popad
96
	ret
97
 
98
;функция рисует массивы определенных элементов
99
align 4
100
proc draw_arr_objects, obj_t:dword,p_fun_draw:dword
101
push eax ebx
102
	stdcall find_obj_in_file,[obj_t] ;eax - указатель на структуру объекта
103
	cmp eax,0
104
	je .end_draw_o
105
		mov ebx,[p_fun_draw]
106
		stdcall ebx,eax
107
		@@:
108
			stdcall find_obj_in_file_next,[obj_t] ;eax - указатель на структуру объекта
109
			cmp eax,0
110
			je .end_draw_o
111
				stdcall ebx,eax
112
		jmp @b
113
	.end_draw_o:
114
pop ebx eax
115
	ret
116
endp
117
 
118
;функция рисует объект кнопки, в окне конструктора
119
align 4
120
proc draw_obj_but, p_obj:dword
121
locals
122
	coor_x dd ?
123
	coor_y dd ?
124
endl
125
	pushad
126
		mov ebx,dword[p_obj]
127
		;1,2,3,4,5 - x,y,w,h,color
128
 
129
		stdcall get_obj_text_col,ebx,1
130
		stdcall conv_str_to_int,edx
131
		mov [coor_x],eax
132
		stdcall get_obj_text_col,ebx,2
133
		stdcall conv_str_to_int,edx
134
		mov [coor_y],eax
135
		move_to_skin [coor_x],[coor_y]
136
		stdcall get_obj_text_col,ebx,3
137
		stdcall conv_str_to_int,edx
138
		mov edi,eax
139
		stdcall get_obj_text_col,ebx,4
140
		stdcall conv_str_to_int,edx
141
		mov ecx,eax
142
		stdcall get_obj_text_col,ebx,5
143
		stdcall conv_str_to_int,edx
1717 IgorA 144
		test_bool_prop ebx,BIT_MOD_BUT_NFON
145
		jc .no_draw_fon
146
			stdcall [buf2d_filled_rect_by_size], buf_fon, dword[coor_x],dword[coor_y],edi,ecx,eax
147
			jmp @f
148
		.no_draw_fon: ;не прорисовываем кнопку
149
			stdcall [buf2d_rect_by_size], buf_fon, dword[coor_x],dword[coor_y],edi,ecx,eax
150
		@@:
1698 IgorA 151
	popad
152
	ret
153
endp
154
 
155
;функция рисует объект текстового поля, в окне конструктора
156
align 4
157
proc draw_obj_edit, p_obj:dword
158
locals
159
	coor_x dd ?
160
	coor_y dd ?
161
	col_txt dd ? ;цвет тектса
162
endl
163
	pushad
164
		mov ebx,dword[p_obj]
165
		;1,2,3,4,...,6,...8,...,10 - w,x,y,col_fon,...,col_frame,...,col_txt,...,txt
166
 
167
		stdcall get_obj_text_col,ebx,2
168
		stdcall conv_str_to_int,edx
169
		mov [coor_x],eax
170
		stdcall get_obj_text_col,ebx,3
171
		stdcall conv_str_to_int,edx
172
		mov [coor_y],eax
173
		move_to_skin [coor_x],[coor_y]
174
		stdcall get_obj_text_col,ebx,1
175
		stdcall conv_str_to_int,edx
176
		mov ecx,eax
177
		stdcall get_obj_text_col,ebx,6
178
		stdcall conv_str_to_int,edx
179
		stdcall [buf2d_rect_by_size], buf_fon, dword[coor_x],dword[coor_y],\
180
			ecx,15, eax
181
 
182
		inc dword[coor_x]
183
		inc dword[coor_y]
184
		sub ecx,2
185
		stdcall get_obj_text_col,ebx,4
186
		stdcall conv_str_to_int,edx
187
		stdcall [buf2d_filled_rect_by_size], buf_fon, dword[coor_x],dword[coor_y],\
188
			ecx,13, eax
189
 
190
		stdcall get_obj_text_col,ebx,8
191
		stdcall conv_str_to_int,edx
192
		mov [col_txt],eax
193
		add [coor_x],2-1 ;смещаем координату, что-бы
194
		add [coor_y],4-1 ;текст был в поле выровнен
195
		stdcall get_obj_text_col,ebx,10
196
		stdcall [buf2d_draw_text], buf_fon, buf_font,edx,dword[coor_x],dword[coor_y],\
197
			dword[col_txt] ;рисуем строку с текстом
198
 
199
	popad
200
	ret
201
endp
202
 
203
;функция рисует объект флажка, в окне конструктора
204
align 4
205
proc draw_obj_check, p_obj:dword
206
locals
207
	coor_x dd ?
208
	coor_y dd ?
209
	ot_txt dd ? ;отступ для текста
1720 IgorA 210
	size_w dd ? ;размер квадратика w
211
	size_h dd ? ;размер квадратика h
1698 IgorA 212
	col_txt dd ? ;цвет тектса
213
endl
214
	pushad
215
		mov ebx,dword[p_obj]
1720 IgorA 216
		;1,2,3,4,5, 6,7,8, 9 - ot_x,ot_y,w,h,ot_w_txt, col_fon,col_frame,col_txt, txt
1698 IgorA 217
 
1720 IgorA 218
		stdcall get_obj_text_col,ebx,1 ;ot_x
1698 IgorA 219
		stdcall conv_str_to_int,edx
220
		mov [coor_x],eax
1720 IgorA 221
		stdcall get_obj_text_col,ebx,2 ;ot_y
1698 IgorA 222
		stdcall conv_str_to_int,edx
223
		mov [coor_y],eax
224
		move_to_skin [coor_x],[coor_y]
1720 IgorA 225
		stdcall get_obj_text_col,ebx,5 ;ot_w_txt
1698 IgorA 226
		stdcall conv_str_to_int,edx
227
		mov [ot_txt],eax
1720 IgorA 228
		stdcall get_obj_text_col,ebx,3 ;w
1698 IgorA 229
		stdcall conv_str_to_int,edx
230
		dec eax ;размер меньше на 1 пиксель
1720 IgorA 231
		mov [size_w],eax
232
		stdcall get_obj_text_col,ebx,4 ;h
1698 IgorA 233
		stdcall conv_str_to_int,edx
1720 IgorA 234
		dec eax ;размер меньше на 1 пиксель
235
		mov [size_h],eax
236
		stdcall get_obj_text_col,ebx,7 ;col_frame
237
		stdcall conv_str_to_int,edx
1698 IgorA 238
		stdcall [buf2d_rect_by_size], buf_fon, dword[coor_x],dword[coor_y],\
1720 IgorA 239
			dword[size_w],dword[size_h], eax
1698 IgorA 240
 
1720 IgorA 241
		;заливка фона checkbox-а
1698 IgorA 242
		inc dword[coor_x]
243
		inc dword[coor_y]
1720 IgorA 244
		sub dword[size_w],2
245
		sub dword[size_h],2
246
		stdcall get_obj_text_col,ebx,6 ;col_fon
1698 IgorA 247
		stdcall conv_str_to_int,edx
248
		stdcall [buf2d_filled_rect_by_size], buf_fon, dword[coor_x],dword[coor_y],\
1720 IgorA 249
			dword[size_w],dword[size_h], eax
1698 IgorA 250
 
1720 IgorA 251
		test_bool_prop ebx,BIT_MOD_CHE
252
		jnc @f
253
			;рисование отметки в checkbox-е
254
			inc dword[coor_x]
255
			inc dword[coor_y]
256
			sub dword[size_w],2
257
			sub dword[size_h],2
258
			stdcall get_obj_text_col,ebx,7 ;col_frame
259
			stdcall conv_str_to_int,edx
260
			stdcall [buf2d_filled_rect_by_size], buf_fon, dword[coor_x],dword[coor_y],\
261
				dword[size_w],dword[size_h], eax
262
		@@:
263
 
264
		;востанавливаем положение и размеры
265
		stdcall get_obj_text_col,ebx,1 ;ot_x
1698 IgorA 266
		stdcall conv_str_to_int,edx
1720 IgorA 267
		mov [coor_x],eax
268
		stdcall get_obj_text_col,ebx,2 ;ot_y
269
		stdcall conv_str_to_int,edx
270
		mov [coor_y],eax
271
		move_to_skin [coor_x],[coor_y]
272
		stdcall get_obj_text_col,ebx,3 ;w
273
		stdcall conv_str_to_int,edx
274
		dec eax ;размер меньше на 1 пиксель
275
		mov [size_w],eax
276
		stdcall get_obj_text_col,ebx,4 ;h
277
		stdcall conv_str_to_int,edx
278
		dec eax ;размер меньше на 1 пиксель
279
		mov [size_h],eax
280
 
281
		stdcall get_obj_text_col,ebx,8 ;col_txt
282
		stdcall conv_str_to_int,edx
1698 IgorA 283
		mov [col_txt],eax
1720 IgorA 284
		mov eax,[coor_x]
285
		add eax,[size_w]
286
		add eax,[ot_txt] ;вычисляем координаты для текстовой подписи
287
 
288
		test_bool_prop ebx,BIT_MOD_CHE_T
289
		jc .end_txt_align ;if text aligment = top
290
 
291
		test_bool_prop ebx,BIT_MOD_CHE_M
292
		jnc @f
293
			shl [coor_y],1 ;умножаем на 2
294
			mov ecx,[size_h]
295
			add [coor_y],ecx ;добавляем высоту checkbox
296
			sub [coor_y],9 ;отнимаем высоту символа
297
			shr [coor_y],1 ;делим на получившееся 2, получаем отступ для стоящего по центру текста
298
			jmp .end_txt_align
299
		@@:
300
 
301
		test_bool_prop ebx,BIT_MOD_CHE_B
302
		jnc @f
303
			mov ecx,[size_h]
304
			add [coor_y],ecx ;добавляем высоту checkbox
305
			sub [coor_y],9 ;отнимаем высоту символа
306
				;получаем отступ для стоящего снизу текста
307
		@@:
308
		.end_txt_align:
309
 
310
		stdcall get_obj_text_col,ebx,9 ;txt
311
		stdcall [buf2d_draw_text], buf_fon, buf_font,edx,eax,dword[coor_y],\
1698 IgorA 312
			dword[col_txt] ;рисуем строку с текстом
313
	popad
314
	ret
315
endp
316
 
317
;функция рисует объект текстовой подписи, в окне конструктора
318
align 4
319
proc draw_obj_text, p_obj:dword
320
locals
321
	coor_x dd ?
322
	coor_y dd ?
323
	col_txt dd ? ;цвет тектса
324
endl
325
	pushad
326
		mov ebx,dword[p_obj]
327
		;0,1,2,3,... - txt,x,y,col_txt,...
328
 
329
		stdcall get_obj_text_col,ebx,1
330
		stdcall conv_str_to_int,edx
331
		mov [coor_x],eax
332
		stdcall get_obj_text_col,ebx,2
333
		stdcall conv_str_to_int,edx
334
		mov [coor_y],eax
335
		move_to_skin [coor_x],[coor_y]
336
 
337
		stdcall get_obj_text_col,ebx,3
338
		stdcall conv_str_to_int,edx
339
		mov [col_txt],eax
340
 
341
		stdcall get_obj_text_col,ebx,0
342
		stdcall [buf2d_draw_text], buf_fon, buf_font,edx,dword[coor_x],dword[coor_y],\
343
			dword[col_txt] ;рисуем строку с текстом
344
	popad
345
	ret
346
endp
347
 
348
;функция рисует объект прямоугольника (сисит. ф. 13)
349
align 4
350
proc draw_obj_rect_f13, p_obj:dword
351
locals
352
	coor_x dd ?
353
	coor_y dd ?
354
	color dd ? ;цвет тектса
355
endl
356
	pushad
357
		mov ebx,dword[p_obj]
358
		;0,1,2,3,4 - color,x,y,w,h
359
 
360
		stdcall get_obj_text_col,ebx,1
361
		stdcall conv_str_to_int,edx
362
		mov [coor_x],eax
363
		stdcall get_obj_text_col,ebx,2
364
		stdcall conv_str_to_int,edx
365
		mov [coor_y],eax
366
		move_to_skin [coor_x],[coor_y]
367
 
368
		stdcall get_obj_text_col,ebx,0
369
		stdcall conv_str_to_int,edx
370
		mov [color],eax
371
 
372
		stdcall get_obj_text_col,ebx,3
373
		stdcall conv_str_to_int,edx
374
		mov ecx,eax
375
 
376
		stdcall get_obj_text_col,ebx,4
377
		stdcall conv_str_to_int,edx
378
		mov esi,eax
379
 
380
		stdcall [buf2d_filled_rect_by_size], buf_fon,\
381
			dword[coor_x],dword[coor_y],ecx,esi,dword[color]
382
	popad
383
	ret
384
endp