Subversion Repositories Kolibri OS

Rev

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