Subversion Repositories Kolibri OS

Rev

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

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