Subversion Repositories Kolibri OS

Rev

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