Subversion Repositories Kolibri OS

Rev

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

Rev 7155 Rev 7156
Line 3... Line 3...
3
 * Author: Leency
3
 * Author: Leency
4
 * Licence: GPL v2
4
 * Licence: GPL v2
5
*/
5
*/
Line 6... Line 6...
6
 
6
 
7
/*
7
/*
-
 
8
TODO:
-
 
9
arange tools
8
TODO/BUGS
10
window colors
9
Open with param 
11
enhance icon
Line 10... Line 12...
10
*/
12
*/
Line 11... Line 13...
11
 
13
 
Line 24... Line 26...
24
//                                                   //
26
//                                                   //
25
//                       DATA                        //
27
//                       DATA                        //
26
//                                                   //
28
//                                                   //
27
//===================================================//
29
//===================================================//
Line 28... Line 30...
28
 
30
 
Line 29... Line 31...
29
#define T_TITLE "Icon Editor 0.1"
31
#define T_TITLE "Icon Editor 0.15"
30
 
32
 
Line 31... Line 33...
31
#define TOOLBAR_H    24+8
33
#define TOOLBAR_H    24+8
Line 49... Line 51...
49
	BTN_FLIP_HOR,
51
	BTN_FLIP_HOR,
50
	BTN_FLIP_VER,
52
	BTN_FLIP_VER,
51
	BTN_ROTATE_LEFT,
53
	BTN_ROTATE_LEFT,
52
	BTN_ROTATE_RIGHT,
54
	BTN_ROTATE_RIGHT,
53
	BTN_PICK,
55
	BTN_PICK,
-
 
56
	BTN_FILL,
54
	BTN_ZOOM_IN,
57
	BTN_ZOOM_IN,
55
	BTN_ZOOM_OUT,
58
	BTN_ZOOM_OUT,
56
	BTNS_PALETTE_COLOR_MAS = 100,
59
	BTNS_PALETTE_COLOR_MAS = 100,
57
	BTNS_LAST_USED_COLORS = 400
60
	BTNS_LAST_USED_COLORS = 400
58
};
61
};
Line 59... Line 62...
59
 
62
 
Line 60... Line -...
60
proc_info Form;
-
 
61
 
-
 
62
bool pick_active = false;
63
proc_info Form;
Line 63... Line 64...
63
 
64
 
64
more_less_box zoom = { NULL, NULL, 11, 1, 40, BTN_ZOOM_IN, BTN_ZOOM_OUT, "Zoom" };
65
more_less_box zoom = { NULL, NULL, 11, 1, 40, BTN_ZOOM_IN, BTN_ZOOM_OUT, "Zoom" };
65
 
66
 
Line 81... Line 82...
81
 
82
 
Line 82... Line 83...
82
_image image;
83
_image image;
Line -... Line 84...
-
 
84
 
-
 
85
libimg_image open_image;
-
 
86
 
-
 
87
enum {
-
 
88
	PENCIL,
-
 
89
	FILL,
-
 
90
	PIPET
83
 
91
};
84
libimg_image open_image;
92
int active_tool = PENCIL;
85
 
93
 
86
//===================================================//
94
//===================================================//
87
//                                                   //
95
//                                                   //
Line 94... Line 102...
94
	word btn;
102
	word btn;
Line 95... Line 103...
95
 
103
 
96
	load_dll(libio,  #libio_init,  1);
104
	load_dll(libio,  #libio_init,  1);
97
	load_dll(libimg, #libimg_init, 1);
105
	load_dll(libimg, #libimg_init, 1);
-
 
106
	Libimg_LoadImage(#skin, "/sys/icons16.png");
98
	Libimg_LoadImage(#skin, "/sys/icons16.png");
107
	//system.color.get();
Line 99... Line 108...
99
	//Libimg_ReplaceColor(skin.image, skin.w, skin.h, 0xFFfffFFF, 0xff808080);
108
	//Libimg_ReplaceColor(skin.image, skin.w, skin.h, 0xFFfffFFF, system.color.work_text);
Line 100... Line -...
100
 
-
 
101
	image.create(32, 32);
109
 
102
 
110
	image.create(32, 32);
103
	/*
111
 
104
	if (param) {
112
	if (param[0]) {
105
		Libimg_LoadImage(#open_image, #param);
113
		Libimg_LoadImage(#open_image, #param);
106
		if (open_image.w==32) && (open_image.h==32) {
114
		if (open_image.w==32) && (open_image.h==32) {
107
			memmov(#image.mas, open_image.image, 32*32*3);
115
			image.set_image(open_image.imgsrc);
108
		}
116
		}
109
		else {
117
		else {
110
			notify("'Error: image format is unacceptable.\nOnly images created in IconEditor (BMP, 32x32x16b) can be opened!' -E");
-
 
Line 111... Line 118...
111
		}
118
			notify("'Error: image format is unacceptable.\nOnly images created in IconEditor (BMP, 32x32x16b) can be opened!' -E");
Line 112... Line 119...
112
	}
119
		}
113
	*/
120
	}
114
 
121
 
115
	SetEventMask(EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_MOUSE+EVM_MOUSE_FILTER);
122
	SetEventMask(EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_MOUSE+EVM_MOUSE_FILTER);
116
 
-
 
117
	loop() switch(WaitEvent())
123
 
118
	{
124
	loop() switch(WaitEvent())
119
		case evMouse:
125
	{
120
			mouse.get();
126
		case evMouse:
121
			if (pick_active) EventPickColor(mouse.lkm, mouse.pkm);
127
			mouse.get();
-
 
128
			if (mouse.vert) {
122
			else if (mouse.vert) {
129
				if (mouse.vert==65535) zoom.click(BTN_ZOOM_IN);
-
 
130
				if (mouse.vert==1) zoom.click(BTN_ZOOM_OUT);
-
 
131
				DrawEditArea();
-
 
132
			}
123
				if (mouse.vert==65535) zoom.click(BTN_ZOOM_IN);
133
			if (active_tool == PIPET)
124
				if (mouse.vert==1) zoom.click(BTN_ZOOM_OUT);
134
			{
125
				DrawEditArea();
135
				 EventPickColor(mouse.lkm, mouse.pkm);
126
			}
136
			}
127
			else {
137
			if (active_tool == PENCIL) {
128
				if (mouse.x>canvas.x) && (mouse.y>canvas.y) 
138
				if (mouse.x>canvas.x) && (mouse.y>canvas.y) 
129
				&& (mouse.y
139
				&& (mouse.y
130
				{
140
				{
131
					if (mouse.lkm) image.set_pixel(mouse.y-canvas.y/zoom.value, 
141
					if (mouse.lkm) image.set_pixel(mouse.y-canvas.y/zoom.value, 
132
						mouse.x-canvas.x/zoom.value, active_color_1);
142
						mouse.x-canvas.x/zoom.value, active_color_1);
-
 
143
					if (mouse.pkm) image.set_pixel(mouse.y-canvas.y/zoom.value, 
-
 
144
						mouse.x-canvas.x/zoom.value, active_color_2);
-
 
145
					DrawCanvas();
-
 
146
				}
-
 
147
			}
-
 
148
			if (active_tool == FILL) {
-
 
149
				if (mouse.x>canvas.x) && (mouse.y>canvas.y) 
-
 
150
				&& (mouse.y
-
 
151
				{
-
 
152
					if (mouse.lkm) EventFill(mouse.y-canvas.y/zoom.value, 
-
 
153
						mouse.x-canvas.x/zoom.value, active_color_1);
133
					if (mouse.pkm) image.set_pixel(mouse.y-canvas.y/zoom.value, 
154
					if (mouse.pkm) EventFill(mouse.y-canvas.y/zoom.value, 
Line 134... Line 155...
134
						mouse.x-canvas.x/zoom.value, active_color_2);
155
						mouse.x-canvas.x/zoom.value, active_color_2);
135
					DrawCanvas();
156
					DrawCanvas();
136
				}
157
				}
Line 176... Line 197...
176
					DrawCanvas();
197
					DrawCanvas();
177
					break;
198
					break;
178
				case BTN_PICK:
199
				case BTN_PICK:
179
					EventPickActivate();
200
					EventPickActivate();
180
					break;
201
					break;
-
 
202
				case BTN_FILL:
-
 
203
					EventFillActivate();
-
 
204
					break;
181
				case BTN_ZOOM_IN:
205
				case BTN_ZOOM_IN:
182
				case BTN_ZOOM_OUT:
206
				case BTN_ZOOM_OUT:
183
					zoom.click(btn);
207
					zoom.click(btn);
184
					DrawEditArea();
208
					DrawEditArea();
185
					break;
209
					break;
Line 200... Line 224...
200
			}
224
			}
201
			break;
225
			break;
Line 202... Line 226...
202
	  
226
	  
203
		case evKey:
227
		case evKey:
204
			GetKeys();
228
			GetKeys();
205
			if (key_scancode == SCAN_CODE_ESC) pick_active=false;
229
			if (key_scancode == SCAN_CODE_ESC) EventPickDeactivate();
-
 
230
			if (key_scancode == SCAN_CODE_KEY_I) EventPickActivate();
206
			if (key_scancode == SCAN_CODE_KEY_I) EventPickActivate();
231
			//if (key_scancode == SCAN_CODE_KEY_F) EventFillActivate();
207
			if (key_scancode == SCAN_CODE_MINUS) {zoom.click(BTN_ZOOM_OUT); DrawEditArea();}
232
			if (key_scancode == SCAN_CODE_MINUS) {zoom.click(BTN_ZOOM_OUT); DrawEditArea();}
208
			if (key_scancode == SCAN_CODE_PLUS)  {zoom.click(BTN_ZOOM_IN);  DrawEditArea();}
233
			if (key_scancode == SCAN_CODE_PLUS)  {zoom.click(BTN_ZOOM_IN);  DrawEditArea();}
Line 209... Line 234...
209
			break;
234
			break;
Line 257... Line 282...
257
	DrawToolbarButton(BTN_FLIP_VER,   tx.inc(TB_ICON_PADDING),   35);
282
	DrawToolbarButton(BTN_FLIP_VER,   tx.inc(TB_ICON_PADDING),   35);
258
	// DrawToolbarButton(BTN_ROTATE_LEFT,   tx.inc(TB_ICON_PADDING), 36); //not implemented
283
	// DrawToolbarButton(BTN_ROTATE_LEFT,   tx.inc(TB_ICON_PADDING), 36); //not implemented
259
	// DrawToolbarButton(BTN_ROTATE_RIGHT,  tx.inc(TB_ICON_PADDING), 37); //not implemented
284
	// DrawToolbarButton(BTN_ROTATE_RIGHT,  tx.inc(TB_ICON_PADDING), 37); //not implemented
Line 260... Line 285...
260
 
285
 
-
 
286
	DrawToolbarButton(BTN_PICK,   tx.inc(TB_ICON_PADDING+8), 38);
Line 261... Line 287...
261
	DrawToolbarButton(BTN_PICK,   tx.inc(TB_ICON_PADDING+8), 38);
287
	DrawToolbarButton(BTN_FILL,   tx.inc(TB_ICON_PADDING), 39);
Line 262... Line 288...
262
 
288
 
263
	DrawEditArea();
289
	DrawEditArea();
Line 375... Line 401...
375
//===================================================//
401
//===================================================//
Line 376... Line 402...
376
 
402
 
377
void EventPickActivate()
403
void EventPickActivate()
378
{
404
{
-
 
405
	SetEventMask(EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_MOUSE);
-
 
406
	active_tool = PIPET;
-
 
407
}
-
 
408
 
-
 
409
void EventPickDeactivate()
-
 
410
{
-
 
411
	active_tool = PENCIL;
-
 
412
}
-
 
413
 
-
 
414
void EventFillActivate()
379
	SetEventMask(EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_MOUSE);
415
{
380
	pick_active = true;
416
	active_tool = FILL;
Line 381... Line 417...
381
}
417
}
382
 
418
 
383
void EventPickColor(dword lkm_status, pkm_status)
419
void EventPickColor(dword lkm_status, pkm_status)
384
{
420
{
385
	active_color_1 = GetPixelColorFromScreen(mouse.x + Form.left + 5, mouse.y + Form.top + skin_height);
421
	active_color_1 = GetPixelColorFromScreen(mouse.x + Form.left + 5, mouse.y + Form.top + skin_height);
386
	DrawActiveColor(NULL);
422
	DrawActiveColor(NULL);
387
	if (mouse.down) && (mouse.key&MOUSE_LEFT) {
423
	if (mouse.down) && (mouse.key&MOUSE_LEFT) {
388
		pick_active = false;
424
		EventPickDeactivate();
389
		SetEventMask(EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_MOUSE+EVM_MOUSE_FILTER);
425
		SetEventMask(EVM_REDRAW+EVM_KEY+EVM_BUTTON+EVM_MOUSE+EVM_MOUSE_FILTER);
390
		EventSetActiveColor(1, active_color_1);
426
		EventSetActiveColor(1, active_color_1);
Line 418... Line 454...
418
	if (_number == 2) active_color_2 = _color;
454
	if (_number == 2) active_color_2 = _color;
Line 419... Line 455...
419
 
455
 
420
	DrawActiveColor(NULL);
456
	DrawActiveColor(NULL);
421
	DrawColorPallets(right_bar.x, right_bar.y + 30);
457
	DrawColorPallets(right_bar.x, right_bar.y + 30);
422
}
458
}
-
 
459
 
-
 
460
void EventFill(dword _r, _c, _color)
-
 
461
{
-
 
462
	#define MARKED 6
-
 
463
	int r, c, i, restart;
-
 
464
 
-
 
465
	dword old_color = image.get_pixel(_r, _c);
-
 
466
	image.set_pixel(_r, _c, MARKED);
-
 
467
 
-
 
468
	do {
-
 
469
		restart=false;	
-
 
470
		for (r = 0; r < image.rows; r++)
-
 
471
			for (c = 0; c < image.columns; c++)
-
 
472
			{
-
 
473
				IF (image.get_pixel(r,c) != old_color) continue;
-
 
474
				IF (image.get_pixel(r,c) == MARKED) continue;
-
 
475
				
-
 
476
				IF (c>0)               && (image.get_pixel(r,c-1) == MARKED) restart=true;
-
 
477
				IF (c
-
 
478
				IF (r>0)               && (image.get_pixel(r-1,c) == MARKED) restart=true;
-
 
479
				IF (r
-
 
480
				
-
 
481
				IF (restart == true) image.set_pixel(r,c,MARKED);
-
 
482
			}
-
 
483
	}while(restart);
-
 
484
 
-
 
485
	for (i=0; i
-
 
486
			IF (image.mas[i]==MARKED) image.mas[i] = _color;
-
 
487
}
-
 
488
>