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 |