Subversion Repositories Kolibri OS

Rev

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

Rev 7200 Rev 7204
Line 26... Line 26...
26
//                                                   //
26
//                                                   //
27
//                       DATA                        //
27
//                       DATA                        //
28
//                                                   //
28
//                                                   //
29
//===================================================//
29
//===================================================//
Line 30... Line 30...
30
 
30
 
Line 31... Line 31...
31
#define T_TITLE "Icon Editor 0.35"
31
#define T_TITLE "Icon Editor 0.37"
32
 
32
 
33
#define TOOLBAR_H    24+8
33
#define TOOLBAR_H    24+8
34
#define PANEL_LEFT_W 16+5+5+3+3
34
#define PANEL_LEFT_W 16+5+5+3+3
Line 109... Line 109...
109
0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF
109
0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF,0xFFFFFF
110
};
110
};
Line 111... Line 111...
111
 
111
 
Line -... Line 112...
-
 
112
_image image;
-
 
113
 
112
_image image;
114
#include "actions_history.h"
-
 
115
 
Line 113... Line 116...
113
 
116
libimg_image open_image;
114
libimg_image open_image;
117
_ActionsHistory actionsHistory;
115
 
118
 
116
enum {
119
enum {
Line 143... Line 146...
143
}
146
}
Line 144... Line 147...
144
 
147
 
145
void setCurrentTool(int index) {
148
void setCurrentTool(int index) {
Line -... Line 149...
-
 
149
	resetCurrentTool();
-
 
150
 
146
	resetCurrentTool();
151
	currentTool = index;
147
	
152
	
Line 148... Line -...
148
	if ((index != TOOL_NONE) && (tools[index].activate != 0))
-
 
149
		tools[index].activate();
153
	if ((index != TOOL_NONE) && (tools[index].activate != 0))
150
 
154
		tools[index].activate();
Line 151... Line 155...
151
	currentTool = index;
155
 
152
	DrawLeftPanel();
156
	DrawLeftPanel();
Line 179... Line 183...
179
					mouseX-canvas.x/zoom.value, active_color_1);
183
					mouseX-canvas.x/zoom.value, active_color_1);
180
		if (fill2)
184
		if (fill2)
181
			EventFill(mouseY-canvas.y/zoom.value, 
185
			EventFill(mouseY-canvas.y/zoom.value, 
182
					mouseX-canvas.x/zoom.value, active_color_2);
186
					mouseX-canvas.x/zoom.value, active_color_2);
Line -... Line 187...
-
 
187
			
-
 
188
		if ((fill1) || (fill2))
-
 
189
			actionsHistory.saveCurrentState();
183
			
190
 
184
		DrawCanvas();
191
		DrawCanvas();
185
	}
192
	}
Line 186... Line 193...
186
}
193
}
Line 199... Line 206...
199
		
206
		
200
		setCurrentTool(TOOL_PENCIL);
207
		setCurrentTool(TOOL_PENCIL);
201
	}
208
	}
Line -... Line 209...
-
 
209
}
-
 
210
 
202
}
211
bool PencilTool_Drawing = false;
203
 
212
 
204
void PencilTool_onMouseEvent(int mouseX, int mouseY, int lkm, int pkm) {
213
void PencilTool_onMouseEvent(int mouseX, int mouseY, int lkm, int pkm) {
-
 
214
	if (canvas.hovered()) 
-
 
215
	{
-
 
216
		if ((PencilTool_Drawing == true) && (!lkm) && (!pkm)) {
-
 
217
			actionsHistory.saveCurrentState();
-
 
218
			PencilTool_Drawing = false;
205
	if (canvas.hovered()) 
219
		}
206
	{
220
 
207
		if (lkm) 
221
		if (lkm) 
208
			image.set_pixel(mouseY-canvas.y/zoom.value, 
222
			image.set_pixel(mouseY-canvas.y/zoom.value, 
209
				mouseX-canvas.x/zoom.value, active_color_1);
223
				mouseX-canvas.x/zoom.value, active_color_1);
210
		if (pkm) 
224
		if (pkm) 
Line -... Line 225...
-
 
225
			image.set_pixel(mouseY-canvas.y/zoom.value, 
-
 
226
				mouseX-canvas.x/zoom.value, active_color_2);
-
 
227
				
211
			image.set_pixel(mouseY-canvas.y/zoom.value, 
228
		if ((lkm) || (pkm))
212
				mouseX-canvas.x/zoom.value, active_color_2);
229
			PencilTool_Drawing = true;
213
				
230
 
Line -... Line 231...
-
 
231
		DrawCanvas();
-
 
232
	}
-
 
233
}
-
 
234
 
214
		DrawCanvas();
235
void PencilTool_reset() {
-
 
236
	PencilTool_Drawing = false;
-
 
237
}
-
 
238
 
-
 
239
// Line tool
-
 
240
struct SimpleFigureTool_State {
-
 
241
	int startX, startY;
-
 
242
	int lastTempPosX, lastTempPosY;
-
 
243
};
-
 
244
 
-
 
245
enum {
-
 
246
	TOOL_LINE_STATE,
-
 
247
	TOOL_RECT_STATE
Line 215... Line 248...
215
	}
248
};
216
}
249
 
217
 
250
dword currentFigToolState = -1;
-
 
251
SimpleFigureTool_State figTool_States[2];
218
// Line tool
252
 
219
 
253
void SimpleFigureTool_Reset() {
220
int LineTool_startX = -1;
-
 
221
int LineTool_startY = -1;
254
	if (currentTool == TOOL_LINE)
222
int LineTool_lastTempPosX = -1;
255
		currentFigToolState = TOOL_LINE_STATE;
223
int LineTool_lastTempPosY = -1;
256
	else if (currentTool == TOOL_RECT)
224
 
257
		currentFigToolState = TOOL_RECT_STATE;
225
void LineTool_reset() {
258
 
Line 226... Line 259...
226
	LineTool_startX = -1;
259
	figTool_States[currentFigToolState].startX = -1;
227
	LineTool_startY = -1;
260
	figTool_States[currentFigToolState].startY = -1;
228
	LineTool_lastTempPosX = -1;
261
	figTool_States[currentFigToolState].lastTempPosX = -1;
229
	LineTool_lastTempPosY = -1;
262
	figTool_States[currentFigToolState].lastTempPosY = -1;
230
}
263
}
231
 
264
 
232
void LineTool_onMouseEvent(int mouseX, int mouseY, int lkm, int pkm) {
265
void SimpleFigureTool_onMouseEvent(int mouseX, int mouseY, int lkm, int pkm) {
-
 
266
	if (canvas.hovered()) 
-
 
267
	{
-
 
268
		if (lkm) {
-
 
269
			if ((figTool_States[currentFigToolState].startX < 0) || (figTool_States[currentFigToolState].startY < 0)) {
-
 
270
				figTool_States[currentFigToolState].startX = mouseX;
-
 
271
				figTool_States[currentFigToolState].startY = mouseY;
-
 
272
			}
-
 
273
			else {
233
	if (canvas.hovered()) 
274
				if ((calc(mouseX - canvas.x/zoom.value) != figTool_States[currentFigToolState].lastTempPosX)
234
	{
275
					|| (calc(mouseY - canvas.y/zoom.value) != figTool_States[currentFigToolState].lastTempPosY)) 
-
 
276
				{
235
		if (mouse.down) && (mouse.key & MOUSE_LEFT) {
277
					DrawCanvas();
-
 
278
				}
236
			if ((LineTool_startX < 0) || (LineTool_startY < 0)) {
279
			}
237
				LineTool_startX = mouseX;
280
		}
238
				LineTool_startY = mouseY;
281
		else {
239
			}
282
			if ((figTool_States[currentFigToolState].startX >= 0) && (figTool_States[currentFigToolState].startY >= 0)) {
240
			else {
283
				// Draw line from start position to current position
241
				// Draw line from start position to current position
284
				if (currentTool == TOOL_LINE) {
242
				DrawLine(LineTool_startX - canvas.x/zoom.value, 
-
 
243
					LineTool_startY - canvas.y/zoom.value, 
-
 
244
					mouseX - canvas.x/zoom.value, 
-
 
245
					mouseY - canvas.y/zoom.value, 
-
 
246
					active_color_1, 
-
 
247
					1);
285
					DrawLine(figTool_States[currentFigToolState].startX - canvas.x/zoom.value, 
-
 
286
						figTool_States[currentFigToolState].startY - canvas.y/zoom.value, 
-
 
287
						mouseX - canvas.x/zoom.value, 
-
 
288
						mouseY - canvas.y/zoom.value, 
-
 
289
						active_color_1, 
-
 
290
						1);
248
				DrawCanvas();
291
				}
Line 249... Line -...
249
				
-
 
250
				// Reset start position
-
 
251
				LineTool_startX = -1;
-
 
252
				LineTool_startY = -1;
-
 
253
			}
292
				else if (currentTool == TOOL_RECT) {
-
 
293
					DrawRectangleInCanvas(figTool_States[currentFigToolState].startX - canvas.x/zoom.value, 
-
 
294
						figTool_States[currentFigToolState].startY - canvas.y/zoom.value, 
-
 
295
						mouseX - canvas.x/zoom.value, 
-
 
296
						mouseY - canvas.y/zoom.value, active_color_1, 1);
-
 
297
				}
-
 
298
 
254
		}
299
				DrawCanvas();
255
		
300
 
256
		if ((LineTool_startX >= 0) && (LineTool_startY >= 0)) {
301
				actionsHistory.saveCurrentState();
257
			if ((calc(mouseX - canvas.x/zoom.value) != LineTool_lastTempPosX)
302
 
Line 258... Line 303...
258
				|| (calc(mouseY - canvas.y/zoom.value) != LineTool_lastTempPosY)) 
303
				// Reset start position
259
			{
304
				figTool_States[currentFigToolState].startX = -1;
-
 
305
				figTool_States[currentFigToolState].startY = -1;
260
				DrawCanvas();
306
			}
261
			}
307
		}
262
		}
308
	}
263
	}
309
}
264
}
310
 
265
 
311
void SimpleFigureTool_onCanvasDraw() {
266
void LineTool_onCanvasDraw() {
-
 
267
	if ((LineTool_startX >= 0) && (LineTool_startY >= 0)) {
-
 
268
		DrawLine(LineTool_startX - canvas.x/zoom.value, 
-
 
269
			LineTool_startY - canvas.y/zoom.value, 
-
 
270
			mouse.x - canvas.x/zoom.value, 
-
 
271
			mouse.y - canvas.y/zoom.value, 
-
 
272
			active_color_1, 
-
 
273
			2);
-
 
274
		LineTool_lastTempPosX = mouse.x - canvas.x/zoom.value;
-
 
275
		LineTool_lastTempPosY = mouse.y - canvas.y/zoom.value;
-
 
276
	}
-
 
277
}
-
 
278
 
-
 
279
// Rect tool
-
 
280
int RectTool_startX = -1;
-
 
281
int RectTool_startY = -1;
-
 
282
int RectTool_lastTempPosX = -1;
-
 
283
int RectTool_lastTempPosY = -1;
-
 
284
 
-
 
285
void RectTool_reset() {
-
 
286
	RectTool_startX = -1;
-
 
287
	RectTool_startY = -1;
-
 
288
	RectTool_lastTempPosX = -1;
-
 
289
	RectTool_lastTempPosY = -1;
-
 
290
}
-
 
291
 
-
 
292
void RectTool_onMouseEvent(int mouseX, int mouseY, int lkm, int pkm) {
-
 
293
	if ((mouseX>canvas.x) && (mouseY>canvas.y) 
312
	if ((figTool_States[currentFigToolState].startX >= 0) && (figTool_States[currentFigToolState].startY >= 0) && (mouse.lkm)) {
294
		&& (mouseY
-
 
295
		&& (mouseX
-
 
296
	{
-
 
297
		if (mouse.down) && (mouse.key & MOUSE_LEFT) {
-
 
298
			if ((RectTool_startX < 0) || (RectTool_startY < 0)) {
-
 
299
				RectTool_startX = mouseX;
-
 
300
				RectTool_startY = mouseY;
-
 
301
			}
-
 
302
			else {
-
 
303
				// Draw line from start position to current position
-
 
304
				DrawRectangleInCanvas(RectTool_startX - canvas.x/zoom.value, 
-
 
305
					RectTool_startY - canvas.y/zoom.value, 
-
 
306
					mouseX - canvas.x/zoom.value, 
-
 
307
					mouseY - canvas.y/zoom.value, active_color_1, 1);
-
 
308
				
-
 
309
				DrawCanvas();
-
 
310
				
-
 
311
				// Reset start position
-
 
312
				RectTool_startX = -1;
-
 
313
				RectTool_startY = -1;
-
 
314
			}
-
 
315
		}
-
 
316
		
-
 
317
		if ((RectTool_startX >= 0) && (RectTool_startY >= 0)) {
-
 
318
			if ((calc(mouseX - canvas.x/zoom.value) != RectTool_lastTempPosX)
-
 
319
				|| (calc(mouseY - canvas.y/zoom.value) != RectTool_lastTempPosY)) 
313
		if (currentTool == TOOL_LINE) {
320
			{
-
 
321
				DrawCanvas();
314
			DrawLine(figTool_States[currentFigToolState].startX - canvas.x/zoom.value, 
322
			}
315
				figTool_States[currentFigToolState].startY - canvas.y/zoom.value, 
323
		}
316
				mouse.x - canvas.x/zoom.value, 
324
	}
317
				mouse.y - canvas.y/zoom.value, 
-
 
318
				active_color_1, 
Line 325... Line 319...
325
}
319
				2);
326
 
320
		}
327
void RectTool_onCanvasDraw() {
321
		else if (currentTool == TOOL_RECT) {
328
	if ((RectTool_startX >= 0) && (RectTool_startY >= 0)) {
322
			DrawRectangleInCanvas(figTool_States[currentFigToolState].startX - canvas.x/zoom.value, 
Line 329... Line 323...
329
		DrawRectangleInCanvas(RectTool_startX - canvas.x/zoom.value, 
323
				figTool_States[currentFigToolState].startY - canvas.y/zoom.value, 
330
			RectTool_startY - canvas.y/zoom.value, 
324
				mouse.x - canvas.x/zoom.value, 
331
			mouse.x - canvas.x/zoom.value, 
325
				mouse.y - canvas.y/zoom.value, active_color_1, 2);
332
			mouse.y - canvas.y/zoom.value, active_color_1, 2);
326
		}
-
 
327
 
Line 333... Line 328...
333
			
328
		figTool_States[currentFigToolState].lastTempPosX = mouse.x - canvas.x/zoom.value;
334
		RectTool_lastTempPosX = mouse.x - canvas.x/zoom.value;
329
		figTool_States[currentFigToolState].lastTempPosY = mouse.y - canvas.y/zoom.value;
335
		RectTool_lastTempPosY = mouse.y - canvas.y/zoom.value;
330
	}
Line 336... Line 331...
336
	}
331
}
337
}
332
 
Line 338... Line 333...
338
 
333
void initTools() 
339
void initTools() 
334
{
340
{
335
	tools[0].id = TOOL_PENCIL;
341
	tools[0].id = TOOL_PENCIL;
336
	tools[0].onMouseEvent = #PencilTool_onMouseEvent;
342
	tools[0].onMouseEvent = #PencilTool_onMouseEvent;
337
	tools[0].deactivate = #PencilTool_reset;
Line 343... Line 338...
343
	
338
	
344
	tools[1].id = TOOL_PIPETTE;
339
	tools[1].id = TOOL_PIPETTE;
345
	tools[1].activate = #PipetteTool_activate;
340
	tools[1].activate = #PipetteTool_activate;
346
	tools[1].onMouseEvent = #PipetteTool_onMouseEvent;
341
	tools[1].onMouseEvent = #PipetteTool_onMouseEvent;
347
	
342
	
348
	tools[2].id = TOOL_FILL;
343
	tools[2].id = TOOL_FILL;
Line 349... Line 344...
349
	tools[2].onMouseEvent = #FillTool_onMouseEvent;
344
	tools[2].onMouseEvent = #FillTool_onMouseEvent;
350
	
345
	
351
	tools[3].id = TOOL_PENCIL;
346
	tools[3].id = TOOL_LINE;
Line 381... Line 376...
381
		else {
376
		else {
382
			notify("'Error: image format is unacceptable (PNG, 32x32x16b expected)' -E");
377
			notify("'Error: image format is unacceptable (PNG, 32x32x16b expected)' -E");
383
		}
378
		}
384
	}
379
	}
Line -... Line 380...
-
 
380
 
-
 
381
	actionsHistory.init();
385
 
382
 
386
	initTools();
383
	initTools();
Line 387... Line 384...
387
	setCurrentTool(TOOL_PENCIL);
384
	setCurrentTool(TOOL_PENCIL);
Line 488... Line 485...
488
			if (key_scancode == SCAN_CODE_KEY_P) setCurrentTool(TOOL_PENCIL);
485
			if (key_scancode == SCAN_CODE_KEY_P) setCurrentTool(TOOL_PENCIL);
489
			if (key_scancode == SCAN_CODE_KEY_I) setCurrentTool(TOOL_PIPETTE);
486
			if (key_scancode == SCAN_CODE_KEY_I) setCurrentTool(TOOL_PIPETTE);
490
			if (key_scancode == SCAN_CODE_KEY_F) setCurrentTool(TOOL_FILL);
487
			if (key_scancode == SCAN_CODE_KEY_F) setCurrentTool(TOOL_FILL);
491
			if (key_scancode == SCAN_CODE_KEY_L) setCurrentTool(TOOL_LINE);
488
			if (key_scancode == SCAN_CODE_KEY_L) setCurrentTool(TOOL_LINE);
492
			if (key_scancode == SCAN_CODE_KEY_R) setCurrentTool(TOOL_RECT);
489
			if (key_scancode == SCAN_CODE_KEY_R) setCurrentTool(TOOL_RECT);
-
 
490
 
-
 
491
			if (key_scancode == SCAN_CODE_KEY_S) actionsHistory.undoLastAction();
-
 
492
			if (key_scancode == SCAN_CODE_KEY_C) actionsHistory.redoLastAction();
-
 
493
 
493
			if (key_scancode == SCAN_CODE_MINUS) {zoom.click(BTN_ZOOM_OUT); DrawEditArea();}
494
			if (key_scancode == SCAN_CODE_MINUS) {zoom.click(BTN_ZOOM_OUT); DrawEditArea();}
494
			if (key_scancode == SCAN_CODE_PLUS)  {zoom.click(BTN_ZOOM_IN);  DrawEditArea();}
495
			if (key_scancode == SCAN_CODE_PLUS)  {zoom.click(BTN_ZOOM_IN);  DrawEditArea();}
495
			break;
496
			break;
Line 496... Line 497...
496
		 
497