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 | > |