Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
6198 leency 1
#ifndef INCLUDE_GUI_H
5598 pavelyakov 2
#define INCLUDE_GUI_H
5676 pavelyakov 3
#print "[include ]\n"
3107 leency 4
 
5598 pavelyakov 5
#ifndef INCLUDE_KOLIBRI_H
6
#include "../lib/kolibri.h"
7
#endif
8
 
9
#ifndef INCLUDE_STRING_H
10
#include "../lib/strings.h"
11
#endif
12
 
6176 leency 13
#ifndef INCLUDE_RGB_H
14
#include "../lib/patterns/rgb.h"
15
#endif
16
 
4005 leency 17
:void DrawRectangle(dword x,y,w,h,color1)
3067 leency 18
{
3225 leency 19
	if (w<=0) || (h<=0) return;
20
	DrawBar(x,y,w,1,color1);
21
	DrawBar(x,y+h,w,1,color1);
22
	DrawBar(x,y,1,h,color1);
23
	DrawBar(x+w,y,1,h+1,color1);
3067 leency 24
}
25
 
5738 leency 26
:void DrawWideRectangle(dword x,y,w,h,boder,color1)
27
{
28
	if (w<=0) || (h<=0) return;
29
	DrawBar(x, y, w, boder, color1);
30
	DrawBar(x, y+h-boder, w, boder, color1);
31
	DrawBar(x, y+boder, boder, h-boder-boder, color1);
32
	DrawBar(x+w-boder, y+boder, boder, h-boder-boder, color1);
33
}
34
 
4005 leency 35
:void DrawRectangle3D(dword x,y,w,h,color1,color2)
3067 leency 36
{
3225 leency 37
	if (w<=0) || (h<=0) return;
38
	DrawBar(x,y,w+1,1,color1);
39
	DrawBar(x,y+1,1,h-1,color1);
40
	DrawBar(x+w,y+1,1,h,color2);
41
	DrawBar(x,y+h,w,1,color2);
3067 leency 42
}
43
 
4005 leency 44
:void DrawCaptButton(dword x,y,w,h,id,color_b, color_t,text)
3067 leency 45
{
6209 leency 46
	dword tx = -strlen(text)*8+w/2+x;
47
	dword ty = h/2-7+y;
48
 
4846 leency 49
	if (id>0) DefineButton(x,y,w,h,id,color_b);
6198 leency 50
	WriteText(tx+1,ty+1,0x90,MixColors(color_b,0,230),text);
51
	WriteText(tx,ty,0x90,color_t,text);
3067 leency 52
}
53
 
6567 leency 54
:int DrawStandartCaptButton(dword x, y, id, color_b, color_t, text)
55
{
56
	int padding_v = 5;
57
	int padding_h = 15;
58
	int right_margin = 12;
59
	int tx = x + padding_h;
60
	int ty = y + padding_v;
61
	int h = padding_v + padding_v + 16; //16 font height
62
	int w = strlen(text)*8 + padding_h + padding_h;
63
 
64
	if (id>0) DefineButton(x,y,w,h,id,color_b);
65
	WriteText(tx+1,ty+1,0x90,MixColors(color_b,0,230),text);
66
	WriteText(tx,ty,0x90,color_t,text);
67
	return w + right_margin;
68
}
69
 
4846 leency 70
:void WriteTextCenter(dword x,y,w,color_t,text)
71
{
72
	WriteText(-strlen(text)*6+w/2+x+1,y,0x80,color_t,text);
73
}
74
 
5519 leency 75
:void DrawCircle(int x, y, r, color)
3067 leency 76
{
77
	int i;
78
	float px=0, py=r, ii = r * 3.1415926 * 2;
79
	FOR (i = 0; i < ii; i++)
80
	{
5519 leency 81
        PutPixel(px + x, y - py, color);
3067 leency 82
        px = py / r + px;
83
        py = -px / r + py;
84
	}
3076 leency 85
}
3106 leency 86
 
6271 leency 87
:unsigned char checkbox_flag[507] = {
6197 leency 88
	0xFC, 0xD4, 0x04, 0xFC, 0xD4, 0x04, 0xFC, 0xD4, 0x04, 0xFC, 0xD4, 0x04, 0xFC, 0xD4, 0x04, 0xFC,
89
	0xD4, 0x04, 0xFC, 0xD4, 0x04, 0xFC, 0xD4, 0x04, 0xFC, 0xD4, 0x04, 0xFC, 0xD4, 0x04, 0xFC, 0xD4,
90
	0x04, 0xFC, 0xD4, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xDC, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04,
91
	0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC,
92
	0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xB4, 0x04, 0xFC, 0xDC,
93
	0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xBC, 0x04,
94
	0xFC, 0xBC, 0x04, 0xFC, 0xBC, 0x04, 0xFC, 0xB4, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xA9, 0x04, 0xFC,
95
	0xB4, 0x04, 0xFC, 0xB4, 0x04, 0xFC, 0xD4, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xC8,
96
	0x04, 0xFC, 0xBC, 0x04, 0xFC, 0xBC, 0x04, 0xFC, 0xB4, 0x04, 0xFC, 0xB4, 0x04, 0xF9, 0x98, 0x04,
97
	0xFC, 0xF2, 0xD2, 0xFC, 0xF2, 0xD2, 0xFA, 0xA5, 0x04, 0xFC, 0xB4, 0x04, 0xFC, 0xD4, 0x04, 0xFC,
98
	0xB4, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xB4, 0x04, 0xFC, 0xB4, 0x04, 0xFC, 0xB4,
99
	0x04, 0xF9, 0x98, 0x04, 0xFF, 0xFF, 0xFF, 0xFD, 0xFD, 0xF6, 0xFC, 0xF9, 0xAF, 0xF9, 0x98, 0x04,
100
	0xFC, 0xB4, 0x04, 0xFC, 0xD4, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xF2, 0xD2, 0xFC, 0xF2, 0xD2, 0xF9,
101
	0x98, 0x04, 0xFC, 0xB4, 0x04, 0xF9, 0x98, 0x04, 0xFF, 0xFF, 0xFF, 0xFD, 0xFD, 0xF6, 0xF7, 0xE0,
102
	0x95, 0xBC, 0x64, 0x04, 0xF9, 0x98, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xD4, 0x04, 0xF9, 0x98, 0x04,
103
	0xFD, 0xFD, 0xF6, 0xFF, 0xFF, 0xFF, 0xFC, 0xDC, 0x2C, 0xF9, 0x98, 0x04, 0xFF, 0xFF, 0xFF, 0xFD,
104
	0xFD, 0xF6, 0xF7, 0xE0, 0x95, 0xBC, 0x64, 0x04, 0xF9, 0x98, 0x04, 0xFA, 0x9F, 0x04, 0xFC, 0xA9,
105
	0x04, 0xFC, 0xD4, 0x04, 0xF9, 0x98, 0x04, 0xF7, 0xE0, 0x95, 0xFD, 0xFD, 0xF6, 0xFF, 0xFF, 0xFF,
106
	0xFF, 0xFF, 0xFF, 0xFD, 0xFD, 0xF6, 0xF7, 0xE0, 0x95, 0xBC, 0x64, 0x04, 0xF9, 0x98, 0x04, 0xFA,
107
	0x9F, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xD4, 0x04, 0xF9, 0x98, 0x04, 0xBC, 0x64,
108
	0x04, 0xF7, 0xE0, 0x95, 0xFD, 0xFD, 0xF6, 0xFD, 0xFD, 0xF6, 0xF7, 0xE0, 0x95, 0xBC, 0x64, 0x04,
109
	0xF9, 0x98, 0x04, 0xFA, 0x9F, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xA9, 0x04, 0xFC,
110
	0xC8, 0x04, 0xFA, 0xA5, 0x04, 0xF9, 0x98, 0x04, 0xBC, 0x64, 0x04, 0xF7, 0xE0, 0x95, 0xF7, 0xE0,
111
	0x95, 0xBC, 0x64, 0x04, 0xF9, 0x98, 0x04, 0xFA, 0x9F, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xA9, 0x04,
112
	0xFC, 0xA9, 0x04, 0xFA, 0x9F, 0x04, 0xFC, 0xC8, 0x04, 0xFC, 0xA9, 0x04, 0xFA, 0x9F, 0x04, 0xF9,
113
	0x98, 0x04, 0xBC, 0x64, 0x04, 0xBC, 0x64, 0x04, 0xF9, 0x98, 0x04, 0xFA, 0x9F, 0x04, 0xFC, 0xA9,
114
	0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xA9, 0x04, 0xFA, 0x9F, 0x04, 0xFA, 0x9F, 0x04, 0xFC, 0xC8, 0x04,
115
	0xFC, 0xA9, 0x04, 0xFC, 0xA9, 0x04, 0xFA, 0x9F, 0x04, 0xF9, 0x98, 0x04, 0xF9, 0x98, 0x04, 0xFA,
116
	0x9F, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xA9, 0x04, 0xFC, 0xA9, 0x04, 0xFA, 0x9F, 0x04, 0xFA, 0x9F,
117
	0x04, 0xF9, 0x98, 0x04, 0xFC, 0xB4, 0x04, 0xF9, 0x98, 0x04, 0xF9, 0x98, 0x04, 0xF9, 0x98, 0x04,
118
	0xF9, 0x98, 0x04, 0xF9, 0x98, 0x04, 0xF9, 0x98, 0x04, 0xF9, 0x98, 0x04, 0xF9, 0x98, 0x04, 0xF9,
119
	0x98, 0x04, 0xF9, 0x98, 0x04, 0xF9, 0x98, 0x04, 0xF9, 0x98, 0x04
120
};
121
 
6176 leency 122
:void CheckBox(dword x,y,bt_id, text, is_checked)
3106 leency 123
{
6176 leency 124
	byte w=14, h=14;
6197 leency 125
	DefineButton(x-1, y-1, strlen(text)*8 + w + 17, h+2, bt_id+BT_HIDE+BT_NOFRAME, 0);
6278 leency 126
	EDI = system.color.work;
127
	WriteText(x+w+8, h / 2 + y -7, 0xD0, system.color.work_text, text);
6176 leency 128
	DrawRectangle(x, y, w, h, system.color.work_graph);
5477 leency 129
	if (is_checked == 0)
3106 leency 130
	{
5477 leency 131
		DrawRectangle3D(x+1, y+1, w-2, h-2, 0xDDDddd, 0xffffff);
132
		DrawBar(x+2, y+2, w-3, h-3, 0xffffff);
133
	}
134
	else if (is_checked == 1)
135
	{
6176 leency 136
		DrawWideRectangle(x+1, y+1, w-1, h-1, 2, 0xffffff);
6197 leency 137
		_PutImage(x+1, y+1, 13, 13, #checkbox_flag);
3106 leency 138
	}
5477 leency 139
	else if (is_checked == 2) //not active
3106 leency 140
	{
6176 leency 141
		DrawWideRectangle(x+1, y+1, w-1, h-1, 2, 0xffffff);
5526 leency 142
		DrawBar(x+3, y+3, w-5, h-5, 0x888888);
5477 leency 143
	}
6191 leency 144
	DrawRectangle3D(x-1,y-1,w+2,h+2,system.color.work_dark,system.color.work_light);
3114 leency 145
}
146
 
6176 leency 147
:void MoreLessBox(dword x,y, bt_id_more, bt_id_less, value, text)
5477 leency 148
{
6198 leency 149
	#define VALUE_FIELD_W 34
6176 leency 150
	#define SIZE 18
6198 leency 151
	dword value_text = itoa(value);
5542 leency 152
 
6176 leency 153
	DrawRectangle(x, y, VALUE_FIELD_W, SIZE, system.color.work_graph);
154
	DrawRectangle3D(x+1, y+1, VALUE_FIELD_W-2, SIZE-2, 0xDDDddd, 0xffffff);
155
	DrawBar(x+2, y+2, VALUE_FIELD_W-3, SIZE-3, 0xffffff);
6278 leency 156
	WriteText( -strlen(value_text)+3*8 + x+6, SIZE / 2 + y -6, 0x90, system.color.work_text, value_text);
5477 leency 157
 
6191 leency 158
	DrawCaptButton(VALUE_FIELD_W + x,     y, SIZE, SIZE, bt_id_more, system.color.work_button, system.color.work_button_text, "+");
159
	DrawCaptButton(VALUE_FIELD_W + x + SIZE, y, SIZE, SIZE, bt_id_less, system.color.work_button, system.color.work_button_text, "-");
6278 leency 160
	EDI = system.color.work;
161
	WriteText(x+VALUE_FIELD_W+SIZE+SIZE+10, SIZE / 2 + y -7, 0xD0, system.color.work_text, text);
6191 leency 162
	DrawRectangle3D(x-1,y-1,VALUE_FIELD_W+SIZE+SIZE+2,SIZE+2,system.color.work_dark,system.color.work_light);
5477 leency 163
}
164
 
6278 leency 165
:void DrawEditBox(dword edit_box_pointer)
6193 leency 166
{
6278 leency 167
	dword x,y,w,h,bg;
6193 leency 168
	ESI = edit_box_pointer;
169
	x = ESI.edit_box.left;
170
	y = ESI.edit_box.top;
171
	w = ESI.edit_box.width+1;
6278 leency 172
	if (ESI.edit_box.flags & 100000000000b) bg = 0xCACACA; else bg = 0xFFFfff;
6193 leency 173
	h = 15;
6278 leency 174
	DrawRectangle(x-1, y-1, w+2, h+2, bg);
175
	DrawRectangle3D(x-2, y-2, w+2, h+2, 0xDDDddd, bg);
6193 leency 176
	DrawRectangle(x-3, y-3, w+6, h+6, system.color.work_graph);
177
	DrawRectangle3D(x-4, y-4, w+8, h+8, system.color.work_dark, system.color.work_light);
6278 leency 178
	edit_box_draw  stdcall (edit_box_pointer);
6193 leency 179
}
180
 
4686 leency 181
:void DrawProgressBar(dword st_x, st_y, st_w, st_h, col_fon, col_border, col_fill, col_text, progress_percent)
3114 leency 182
{
3225 leency 183
	int progress_w;
3114 leency 184
	static int fill_old;
185
 
3363 leency 186
	//if (progress_percent<=0) {DrawBar(st_x,st_y, st_x + st_w + fill_old + 15,st_h+1, col_fon); fill_old=0; return;}
187
	if (progress_percent<=0) || (progress_percent>=100) return;
3114 leency 188
 
189
	DrawRectangle(st_x, st_y, st_w,st_h, col_border);
190
	DrawRectangle3D(st_x+1, st_y+1, st_w-2,st_h-2, 0xFFFfff, 0xFFFfff);
3225 leency 191
 
192
	if (progress_percent>0) && (progress_percent<=100)
193
	{
194
		progress_w = st_w - 3 * progress_percent / 100;
195
		DrawBar(st_x+2, st_y+2, progress_w, st_h-3, col_fill);
196
		DrawBar(st_x+2+progress_w, st_y+2, st_w-progress_w-3, st_h-3, 0xFFFfff);
197
	}
3363 leency 198
}
199
 
200
:void DrawLink(dword x,y,font_type,btn_id, inscription)
201
{
202
	int w;
203
	WriteText(x,y,font_type,0x4E00E7,inscription);
204
	if (font_type==0x80) w = strlen(inscription)*6; else w = strlen(inscription)*7;
205
	DefineButton(x-1,y-1,w,10,btn_id+BT_HIDE,0);
206
	DrawBar(x,y+8,w,1,0x4E00E7);
207
}
208
 
3991 leency 209
:void PutShadow(dword x,y,w,h,skinned,strength)
3363 leency 210
{
211
	proc_info wForm;
212
	dword shadow_buf, skin_height;
213
	shadow_buf = mem_Alloc(w*h*3);
214
 	GetProcessInfo(#wForm, SelfInfo);
3991 leency 215
	CopyScreen(shadow_buf, 5*skinned+x+wForm.left, GetSkinHeight()*skinned+y+wForm.top, w, h);
3363 leency 216
	ShadowImage(shadow_buf, w, h, strength);
217
	_PutImage(x,y,w,h,shadow_buf);
218
	mem_Free(shadow_buf);
219
}
220
 
3991 leency 221
:void DrawPopup(dword x,y,w,h,skinned, col_work,col_border)
222
{
223
	DrawRectangle(x,y,w,h,col_border);
3992 leency 224
	DrawBar(x+1,y+1,w-1,1,0xFFFfff);
4029 leency 225
	DrawBar(x+1,y+2,1,h-2,0xFFFfff);
3992 leency 226
	if (col_work!=-1) DrawBar(x+2,y+2,w-2,h-2,col_work);
3991 leency 227
	DrawPopupShadow(x,y,w,h-1,skinned);
228
}
229
 
5499 leency 230
:void DrawPopupShadow(dword x,y,w,h,skinned)
231
{
232
	PutShadow(w+x+1,y,1,h+2,skinned,2);
233
	PutShadow(w+x+2,y+1,1,h+2,skinned,1);
234
	PutShadow(x,y+h+2,w+2,1,skinned,2);
235
	PutShadow(x+1,y+h+3,w+1,1,skinned,1);
236
}
237
 
3363 leency 238
:void GrayScaleImage(dword color_image, w, h)
239
{
5761 leency 240
	dword i,gray,to,rr,gg,bb;
241
	to = w*h*3 + color_image;
242
	for (i = color_image; i < to; i+=3)
3363 leency 243
	{
5761 leency 244
		rr = DSBYTE[i];
245
		gg = DSBYTE[i+1];
246
		bb = DSBYTE[i+2];
3363 leency 247
		gray = rr*rr;
248
		gray += gg*gg;
249
		gray += bb*bb;
250
		gray = sqrt(gray) / 3;
5761 leency 251
		DSBYTE[i] = DSBYTE[i+1] = DSBYTE[i+2] = gray;
3363 leency 252
	}
253
}
254
 
255
:void ShadowImage(dword color_image, w, h, strength)
256
{
257
	dword col, to;
258
	strength = 10 - strength;
259
	to = w*h*3 + color_image;
260
	for ( ; color_image < to; color_image++)
261
	{
262
		col = strength * DSBYTE[color_image] / 10;
263
		DSBYTE[color_image] = col;
264
	}
5598 pavelyakov 265
}
266
 
5962 leency 267
:void WriteTextLines(dword x,y,byte fontType, dword color, text_pointer, line_h)
268
{
269
	dword next_word_pointer = strchr(text_pointer, '\n');
270
	if (next_word_pointer) WriteTextLines(dword x, y+line_h, byte fontType, dword color, next_word_pointer+2, line_h);
271
	ESBYTE[next_word_pointer] = NULL;
272
	WriteText(dword x, y, byte fontType, dword color, text_pointer);
273
	ESBYTE[next_word_pointer] = '\n';
274
}
275
 
6197 leency 276
//this function increase falue and return it
277
//useful for list of controls which goes one after one
278
struct incn
279
{
280
	dword n;
281
	dword inc(dword _addition);
282
};
283
 
284
dword incn::inc(dword _addition)
285
{
286
	n+=_addition;
287
	return n;
288
}
289
 
6264 leency 290
 
291
/*=========================================================
292
==
293
==                   TABS
294
==
295
/========================================================*/
296
 
297
#define TAB_PADDING 25
298
#define TAB_HEIGHT 25
299
 
6271 leency 300
:struct _tabs
6264 leency 301
{
302
	int active_tab;
303
	void draw();
304
	int click();
305
} tabs;
306
 
6271 leency 307
:void _tabs::draw(dword x,y, but_id, text)
6264 leency 308
{
309
	dword col_bg, col_text;
310
	dword w=strlen(text)*8+TAB_PADDING, h=TAB_HEIGHT;
311
	y -= h;
312
 
313
	if (but_id==active_tab)
314
	{
315
		col_bg=system.color.work_button;
316
		col_text=system.color.work_button_text;
317
	}
318
	else
319
	{
320
		col_bg=system.color.work;
321
		col_text=system.color.work_text;
322
	}
323
	DrawCaptButton(x,y, w-1,h+1, but_id, col_bg, col_text, text);
324
}
325
 
6271 leency 326
:int _tabs::click(int N)
6264 leency 327
{
328
	if (N==active_tab) return false;
329
	active_tab = N;
330
	return true;
331
}
332
 
333
 
334
 
5598 pavelyakov 335
#endif