Subversion Repositories Kolibri OS

Rev

Rev 7150 | Rev 7152 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 7150 Rev 7151
Line 2... Line 2...
2
 * BACKGEN - Background generator
2
 * BACKGEN - Background generator
3
 * Author: Leency
3
 * Author: Leency
4
 * Licence: GPL v2
4
 * Licence: GPL v2
5
*/
5
*/
Line -... Line 6...
-
 
6
 
-
 
7
/*
-
 
8
TODO/BUGS
-
 
9
Flip first pixel doesn't work well
-
 
10
Open with param 
-
 
11
Set minimal window size
-
 
12
Scroll mouse, +/- keyboard
-
 
13
*/
6
 
14
 
Line 7... Line 15...
7
#define MEMSIZE 4096*40
15
#define MEMSIZE 4096*40
-
 
16
 
-
 
17
#include "../lib/gui.h"
8
 
18
#include "../lib/random.h"
9
#include "../lib/gui.h"
19
#include "../lib/mem.h"
10
#include "../lib/obj/libimg.h"
20
#include "../lib/obj/libimg.h"
Line -... Line 21...
-
 
21
#include "../lib/patterns/rgb.h"
-
 
22
#include "../lib/patterns/libimg_load_skin.h"
11
#include "../lib/patterns/rgb.h"
23
 
12
#include "../lib/patterns/libimg_load_skin.h"
24
#include "colors_mas.h"
13
 
25
 
14
//===================================================//
26
//===================================================//
15
//                                                   //
27
//                                                   //
Line 16... Line 28...
16
//                       DATA                        //
28
//                       DATA                        //
Line 17... Line -...
17
//                                                   //
-
 
18
//===================================================//
29
//                                                   //
19
 
30
//===================================================//
Line 20... Line 31...
20
#define T_TITLE "Icon Editor 0.05"
31
 
21
 
32
#define T_TITLE "Icon Editor 0.08"
-
 
33
 
Line 22... Line 34...
22
#define MAX_COLORS   32
34
#define TOOLBAR_H    24+9
23
#define TOOLBAR_H    24+8
35
#define PALLETE_SIZE 116
Line 24... Line 36...
24
#define PALLETE_SIZE 116
36
 
Line 47... Line 59...
47
 
59
 
Line 48... Line 60...
48
proc_info Form;
60
proc_info Form;
Line -... Line 61...
-
 
61
 
-
 
62
bool pick_active = false;
49
 
63
 
Line 50... Line 64...
50
bool pick_active = false;
64
#define ZOOM_IN 22
51
 
65
#define ZOOM_OUT 23
52
more_less_box zoom = { NULL, NULL, NULL, 1, MAX_COLORS, 22, 23, "Zoom" };
66
more_less_box zoom = { NULL, NULL, 11, 1, 40, ZOOM_IN, ZOOM_OUT, "Zoom" };
53
 
67
 
Line 61... Line 75...
61
0xFF6666,0xFFB266,0xFFFF66,0xB2FF66,0x66FF66,0x66FFB2,0x66FFFF,0x66B2FF,0x6666FF,0xB266FF,0xFF66FF,0xFF66B2,0xC0C0C0,
75
0xFF6666,0xFFB266,0xFFFF66,0xB2FF66,0x66FF66,0x66FFB2,0x66FFFF,0x66B2FF,0x6666FF,0xB266FF,0xFF66FF,0xFF66B2,0xC0C0C0,
62
0xFF9999,0xFFCC99,0xFFFF99,0xCCFF99,0x99FF99,0x99FFCC,0x99FFFF,0x99CCFF,0x9999FF,0xCC99FF,0xFF99FF,0xFF99CC,0xE0E0E0,
76
0xFF9999,0xFFCC99,0xFFFF99,0xCCFF99,0x99FF99,0x99FFCC,0x99FFFF,0x99CCFF,0x9999FF,0xCC99FF,0xFF99FF,0xFF99CC,0xE0E0E0,
63
0xFFCCCC,0xFFE5CC,0xFFFFCC,0xE5FFCC,0xCCFFCC,0xCCFFE5,0xCCFFFF,0xCCE5FF,0xCCCCFF,0xE5CCFF,0xFFCCFF,0xFFCCE5,0xFFFFFF	
77
0xFFCCCC,0xFFE5CC,0xFFFFCC,0xE5FFCC,0xCCFFCC,0xCCFFE5,0xCCFFFF,0xCCE5FF,0xCCCCFF,0xE5CCFF,0xFFCCFF,0xFFCCE5,0xFFFFFF	
64
};
78
};
Line -... Line 79...
-
 
79
 
-
 
80
_colors image;
-
 
81
 
Line 65... Line 82...
65
 
82
libimg_image open_image;
66
 
83
 
67
//===================================================//
84
//===================================================//
68
//                                                   //
85
//                                                   //
69
//                       CODE                        //
86
//                       CODE                        //
Line 70... Line -...
70
//                                                   //
-
 
71
//===================================================//
-
 
72
 
-
 
73
#include "colors_mas.h"
87
//                                                   //
74
_colors canvas;
88
//===================================================//
75
 
89
 
Line 76... Line 90...
76
void main()
90
void main()
77
{
91
{
78
	word btn;
92
	word btn;
Line 79... Line 93...
79
 
93
 
-
 
94
	load_dll(libio,  #libio_init,  1);
-
 
95
	load_dll(libimg, #libimg_init, 1);
-
 
96
	Libimg_LoadImage(#skin, "/sys/icons16.png");
80
	load_dll(libio,  #libio_init,  1);
97
 
-
 
98
	CreateCanvas();
-
 
99
 
-
 
100
	/*
-
 
101
	if (param) {
-
 
102
		Libimg_LoadImage(#open_image, #param);
-
 
103
		if (open_image.w==32) && (open_image.h==32) {
-
 
104
			memmov(#image.mas, open_image.image, 32*32*3);
-
 
105
		}
Line 81... Line 106...
81
	load_dll(libimg, #libimg_init, 1);
106
		else {
Line 82... Line 107...
82
	Libimg_LoadImage(#skin, "/sys/icons16.png");
107
			notify("'Error: image format is unacceptable.\nOnly images created in IconEditor (BMP, 32x32x16b) can be opened!' -E");
83
 
108
		}
84
	canvas.set_default_values();
109
	}
85
	zoom.value = canvas.cell_size;
110
	*/
86
 
111
 
87
	SetEventMask(EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_MOUSE+EVM_MOUSE_FILTER);
112
	SetEventMask(EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_MOUSE+EVM_MOUSE_FILTER);
88
 
-
 
89
	loop() switch(WaitEvent())
113
 
90
	{
114
	loop() switch(WaitEvent())
91
		case evMouse:
115
	{
92
			mouse.get();
116
		case evMouse:
93
			if (pick_active) EventPickColor(mouse.lkm, mouse.pkm);
117
			mouse.get();
-
 
118
			if (pick_active) EventPickColor(mouse.lkm, mouse.pkm);
-
 
119
			else {
94
			else {
120
				if (mouse.x>canvas.x) && (mouse.y>canvas.y) 
95
				if (mouse.lkm) 
121
				&& (mouse.y
96
				&& (mouse.x>canvas.x) && (mouse.y>canvas.y) 
122
				{
97
				&& (mouse.y
123
					if (mouse.lkm) image.set_pixel(mouse.y-canvas.y/zoom.value, 
Line 98... Line 124...
98
				{
124
						mouse.x-canvas.x/zoom.value, active_color_1);
99
					canvas.set_color(mouse.y-canvas.y/canvas.cell_size, 
125
					if (mouse.pkm) image.set_pixel(mouse.y-canvas.y/zoom.value, 
100
						mouse.x-canvas.x/canvas.cell_size, active_color_1);
126
						mouse.x-canvas.x/zoom.value, active_color_2);
101
					canvas.draw_all_cells();
127
					DrawCanvas();
-
 
128
				}
-
 
129
			}
-
 
130
			break;
-
 
131
 
-
 
132
		case evButton:
-
 
133
			btn = GetButtonID();
-
 
134
			switch(btn)
-
 
135
			{
-
 
136
				case BTN_NEW:
-
 
137
					CreateCanvas();
102
				}
138
					DrawCanvas();
103
			}
139
					break;
-
 
140
				case BTN_OPEN:
104
			break;
141
					RunProgram("/sys/lod", sprintf(#param, "*bmp* %s",#program_path));
105
 
142
					break;
106
		case evButton:
143
				case BTN_SAVE:
-
 
144
					EventSave();
107
			btn = GetButtonID();
145
					break;
108
			switch(btn)
146
				case BTN_MOVE_LEFT:
109
			{
147
					image.move(MOVE_LEFT);
-
 
148
					DrawCanvas();
110
				case BTN_MOVE_LEFT:
149
					break;
111
					canvas.move(DIRECTION_LEFT);
150
				case BTN_MOVE_RIGHT:
112
					break;
151
					image.move(MOVE_RIGHT);
-
 
152
					DrawCanvas();
-
 
153
					break;
-
 
154
				case BTN_MOVE_UP:
-
 
155
					image.move(MOVE_UP);
-
 
156
					DrawCanvas();
-
 
157
					break;
-
 
158
				case BTN_MOVE_DOWN:
-
 
159
					image.move(MOVE_DOWN);
-
 
160
					DrawCanvas();
113
				case BTN_MOVE_RIGHT:
161
					break;
114
					canvas.move(DIRECTION_RIGHT);
162
				case BTN_FLIP_VER:
115
					break;
163
					image.move(FLIP_VER);
116
				case BTN_MOVE_UP:
164
					DrawCanvas();
117
					canvas.move(DIRECTION_UP);
165
					break;
118
					break;
166
				case BTN_FLIP_HOR:
119
				case BTN_MOVE_DOWN:
167
					image.move(FLIP_HOR);
120
					canvas.move(DIRECTION_DOWN);
168
					DrawCanvas();
121
					break;
169
					break;
122
				case CLOSE_BTN:
170
				case CLOSE_BTN:
-
 
171
					ExitProcess();
123
					ExitProcess();
172
				case BTN_PICK:
124
				case BTN_PICK:
173
					EventPickActivate();
125
					EventPickActivate();
174
					break;
126
					break;
175
			}              
Line 127... Line 176...
127
			}              
176
			if (btn >= BTN_PALETTE_COLOR_MAS) && (btn < BTN_PALETTE_COLOR_MAS+PALLETE_SIZE) 
128
			if (btn >= BTN_PALETTE_COLOR_MAS) && (btn < BTN_PALETTE_COLOR_MAS+PALLETE_SIZE) 
177
			{ 
129
			{ 
178
				if (mouse.lkm) active_color_1 = palette_colors[btn-BTN_PALETTE_COLOR_MAS]; 
130
				active_color_1 = palette_colors[btn-BTN_PALETTE_COLOR_MAS]; 
179
				if (mouse.pkm) active_color_2 = palette_colors[btn-BTN_PALETTE_COLOR_MAS]; 
131
				DrawActiveColor(NULL); 
180
				DrawActiveColor(NULL); 
Line 132... Line 181...
132
			}
181
			}
133
			if (zoom.click(btn)) EventZoom();
182
			if (zoom.click(btn)) DrawEditArea();
Line 156... Line 205...
156
{
205
{
157
	zoom.y = wrapper.y + wrapper.h + 6;
206
	zoom.y = wrapper.y + wrapper.h + 6;
158
	zoom.x = wrapper.x;
207
	zoom.x = wrapper.x;
159
	zoom.draw();
208
	zoom.draw();
Line 160... Line 209...
160
 
209
 
161
	sprintf(#param,"Canvas: %ix%i", canvas.rows, canvas.columns);
210
	sprintf(#param,"Canvas: %ix%i", image.rows, image.columns);
162
	WriteText(wrapper.x+wrapper.w-calc(strlen(#param)*8), zoom.y+2, 0x90, system.color.work_text, #param);
211
	WriteText(wrapper.x+wrapper.w-calc(strlen(#param)*8), zoom.y+2, 0x90, system.color.work_text, #param);
Line 163... Line 212...
163
}
212
}
164
 
213
 
165
void draw_window()
214
void draw_window()
166
{
215
{
167
	#define TB_ICON_PADDING 26
216
	#define TB_ICON_PADDING 26
168
	incn tx;
217
	incn tx;
169
	system.color.get();
218
	system.color.get();
170
	DefineAndDrawWindow(215, 100, 700, 540, 0x33, system.color.work, T_TITLE, 0);
219
	DefineAndDrawWindow(115+random(100), 50+random(100), 700, 540, 0x33, system.color.work, T_TITLE, 0);
Line 171... Line 220...
171
	GetProcessInfo(#Form, SelfInfo);
220
	GetProcessInfo(#Form, SelfInfo);
172
	right_bar.x = Form.cwidth - right_bar.w;
221
	right_bar.x = Form.cwidth - right_bar.w;
173
 
222
 
174
	tx.n = wrapper.x - TB_ICON_PADDING;
223
	tx.n = wrapper.x - TB_ICON_PADDING;
175
	DrawToolbarButton(BTN_NEW,    tx.inc(TB_ICON_PADDING), 2); //not implemented
224
	DrawToolbarButton(BTN_NEW,    tx.inc(TB_ICON_PADDING), 2); //not implemented
176
	DrawToolbarButton(BTN_OPEN,   tx.inc(TB_ICON_PADDING), 0); //not implemented
225
	DrawToolbarButton(BTN_OPEN,   tx.inc(TB_ICON_PADDING), 0); //not implemented
177
	DrawToolbarButton(BTN_SAVE,   tx.inc(TB_ICON_PADDING), 5); //not implemented
226
	DrawToolbarButton(BTN_SAVE,   tx.inc(TB_ICON_PADDING), 5);
178
	DrawToolbarButton(BTN_MOVE_LEFT,  tx.inc(TB_ICON_PADDING+8),   30);
227
	DrawToolbarButton(BTN_MOVE_LEFT,  tx.inc(TB_ICON_PADDING+8),   30);
Line 188... Line 237...
188
	DrawToolbarButton(BTN_PICK,   tx.inc(TB_ICON_PADDING+8), 38);
237
	DrawToolbarButton(BTN_PICK,   tx.inc(TB_ICON_PADDING+8), 38);
Line 189... Line 238...
189
 
238
 
Line 190... Line 239...
190
	DrawEditArea();
239
	DrawEditArea();
191
 
240
 
Line 192... Line 241...
192
	DrawDefaultColors(right_bar.x, right_bar.y);
241
	DrawDefaultColors(right_bar.x, right_bar.y);
193
	DrawActiveColor(Form.cheight-40);
242
	DrawActiveColor(right_bar.y + 200);
Line 194... Line 243...
194
 
243
 
195
	DrawStatusBar();
244
	DrawStatusBar();
196
}
245
}
197
 
246
 
198
:void DrawEditArea()
247
void DrawEditArea()
Line 199... Line 248...
199
{
248
{
200
	dword color1=0xC0C0C0;
249
	dword color1=0xC0C0C0;
Line 201... Line 250...
201
	int left_padding;
250
	int left_padding;
-
 
251
	int top_padding;
-
 
252
 
-
 
253
	wrapper.w = Form.cwidth - right_bar.w - 30;
-
 
254
	wrapper.h = Form.cheight - TOOLBAR_H - 35;
-
 
255
 
-
 
256
	//canvas{
-
 
257
	canvas.w = image.columns * zoom.value;
202
	int top_padding;
258
	canvas.h = image.rows * zoom.value;
203
 
259
	if (canvas.w+2 > wrapper.w) || (canvas.h+2 > wrapper.h) { 
204
	wrapper.w = Form.cwidth - right_bar.w - 30;
260
		zoom.value--;
205
	wrapper.h = Form.cheight - TOOLBAR_H - 35;
261
		DrawEditArea();
206
 
262
		return;
Line 207... Line 263...
207
	//canvas{
263
	}
208
	canvas.x = -canvas.cell_size*canvas.columns+wrapper.w/2 + wrapper.x;
264
	canvas.x = -zoom.value*image.columns+wrapper.w/2 + wrapper.x;
Line 209... Line 265...
209
	canvas.y = -canvas.cell_size*canvas.rows+wrapper.h/2 + wrapper.y;
265
	canvas.y = -zoom.value*image.rows+wrapper.h/2 + wrapper.y;
Line 210... Line 266...
210
	DrawRectangle(canvas.x-1, canvas.y-1, canvas.w+1, canvas.h+1, 0x808080);
266
	DrawRectangle(canvas.x-1, canvas.y-1, canvas.w+1, canvas.h+1, 0x808080);
211
	canvas.draw_all_cells();	
267
	DrawCanvas();
212
	//}
268
	//}
213
 
269
 
214
	left_padding = canvas.x-wrapper.x-1;
270
	left_padding = canvas.x-wrapper.x-1;
215
	top_padding = canvas.y-wrapper.y-1;
271
	top_padding = canvas.y-wrapper.y-1;
216
 
272
 
217
	DrawRectangle(wrapper.x-1, wrapper.y-1, wrapper.w+1, wrapper.h+1, system.color.work_graph);
273
	DrawRectangle(wrapper.x-1, wrapper.y-1, wrapper.w+1, wrapper.h+1, system.color.work_graph);
218
 
274
 
219
	if (left_padding>0)
275
	if (left_padding>0)
220
	{
276
	{
Line 221... Line 277...
221
		DrawBar(wrapper.x, wrapper.y, wrapper.w, top_padding, color1);
277
		DrawBar(wrapper.x, wrapper.y, wrapper.w, top_padding, color1); //top
222
		DrawBar(wrapper.x, wrapper.y+wrapper.h-top_padding, wrapper.w, top_padding, color1);		
278
		DrawBar(wrapper.x, wrapper.y+wrapper.h-top_padding, wrapper.w, top_padding, color1); //bottom
Line 234... Line 290...
234
	if (iny != NULL) outy = iny;
290
	if (iny != NULL) outy = iny;
235
	DrawBar(right_bar.x, outy, 20, 20, active_color_1);
291
	DrawBar(right_bar.x, outy, 20, 20, active_color_1);
236
	sprintf(#param, "%A", active_color_1);
292
	sprintf(#param, "%A", active_color_1);
237
	EDI = system.color.work;
293
	EDI = system.color.work;
238
	WriteText(right_bar.x + 30, outy + 3, 0xD0, system.color.work_text, #param+4);
294
	WriteText(right_bar.x + 30, outy + 3, 0xD0, system.color.work_text, #param+4);
-
 
295
 
-
 
296
	DrawBar(right_bar.x+110, outy, 20, 20, active_color_2);
-
 
297
	sprintf(#param, "%A", active_color_2);
-
 
298
	EDI = system.color.work;
-
 
299
	WriteText(right_bar.x+110 + 30, outy + 3, 0xD0, system.color.work_text, #param+4);	
239
}
300
}
Line 240... Line 301...
240
 
301
 
241
void DrawDefaultColors(dword _x, _y)
302
void DrawDefaultColors(dword _x, _y)
242
{
303
{
Line 278... Line 339...
278
		pick_active = false;
339
		pick_active = false;
279
		SetEventMask(EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_MOUSE+EVM_MOUSE_FILTER);
340
		SetEventMask(EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_MOUSE+EVM_MOUSE_FILTER);
280
	}
341
	}
281
}
342
}
Line -... Line 343...
-
 
343
 
282
 
344
dword bmp_32x32x16_header[] = FROM "bmp32x32header";
283
void EventZoom()
345
void EventSave()
284
{
346
{
285
	canvas.cell_size = zoom.value;
347
	char save_buf[3126];
-
 
348
	dword image_buf = image.get_image();
-
 
349
	memmov(#save_buf, #bmp_32x32x16_header, sizeof(bmp_32x32x16_header));
-
 
350
	memmov(#save_buf+sizeof(bmp_32x32x16_header), image_buf, sizeof(save_buf)-sizeof(bmp_32x32x16_header));
-
 
351
	if (WriteFile(sizeof(save_buf), #save_buf, "/rd/1/saved_image.bmp")==0)
286
	canvas.w = canvas.columns * canvas.cell_size;
352
	{
-
 
353
		notify("'File saved as /rd/1/saved_image.bmp' -O");
-
 
354
	}
287
	canvas.h = canvas.rows * canvas.cell_size;
355
	else {
-
 
356
		notify("'Error saving BPM file, probably not enought space on ramdisk!' -E");
-
 
357
	}
-
 
358
}
-
 
359
 
-
 
360
void CreateCanvas()
-
 
361
{
288
	if (canvas.w+2 > wrapper.w) || (canvas.h+2 > wrapper.h) { 
362
	int i;
289
		zoom.click(23);
363
	image.columns = 32;
-
 
364
	image.rows = 32;
-
 
365
	for (i = 0; i < image.columns*image.rows; i++) image.mas[i]=0xBFCAD2;
-
 
366
}
-
 
367
 
-
 
368
void DrawCanvas()
290
		EventZoom();
369
{
-
 
370
	int r, c;
-
 
371
	for (r = 0; r < image.rows; r++)
-
 
372
	{
-
 
373
		for (c = 0; c < image.columns; c++)
-
 
374
		{
-
 
375
			DrawBar(c*zoom.value + canvas.x, r*zoom.value + canvas.y, 
-
 
376
				zoom.value, zoom.value, image.get_pixel(r, c));
291
		return;
377
		}
292
	}
-
 
293
	DrawEditArea();
378
	}