Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 7520 → Rev 7521

/programs/cmm/iconedit/iconedit.c
4,7 → 4,7
* Licence: GPL v2
*/
 
#define MEMSIZE 4096*500
#define MEMSIZE 1024*2000
 
#include "../lib/gui.h"
#include "../lib/random.h"
11,6 → 11,7
#include "../lib/mem.h"
#include "../lib/cursor.h"
#include "../lib/list_box.h"
#include "../lib/events.h"
 
#include "../lib/obj/libimg.h"
#include "../lib/obj/box_lib.h"
36,7 → 37,7
‡ ¬¥­¨âì ¢á¥ æ¢¥â  1 ­  2";
?define T_MENU_IMAGE "ˆª®­ª "
?define T_TEST_ICON "à®¢¥à¨âì ¨ª®­ªã"
?define T_TITLE "Icon Editor 0.59 Alpha"
?define T_TITLE "Icon Editor 0.60 Alpha"
#else
char image_menu_items[] =
"Count colors used
43,7 → 44,7
Replace all colors equal to 1 by 2";
?define T_MENU_IMAGE "Icon"
?define T_TEST_ICON "Test Icon"
?define T_TITLE "¥¤ ªâ®à ¨ª®­®ª 0.59 Alpha"
?define T_TITLE "¥¤ ªâ®à ¨ª®­®ª 0.60 Alpha"
#endif
 
 
81,32 → 82,10
signed priorHoverY;
bool canvasMouseMoved = false;
 
EVENTS button;
EVENTS key;
 
enum {
BTN_NEW = 40,
BTN_OPEN,
BTN_SAVE,
BTN_MOVE_LEFT,
BTN_MOVE_RIGHT,
BTN_MOVE_UP,
BTN_MOVE_DOWN,
BTN_FLIP_HOR,
BTN_FLIP_VER,
BTN_ROTATE_LEFT,
BTN_ROTATE_RIGHT,
BTN_TEST_ICON,
BTN_PENCIL,
BTN_PICK,
BTN_FILL,
BTN_LINE,
BTN_RECT,
BTN_BAR,
BTN_SELECT,
BTN_SCREEN_COPY,
BTN_ZOOM_IN,
BTN_ZOOM_OUT,
BTN_CANVAS_RESIZE,
BTN_CROP,
BTN_IMAGE_MENU,
BTNS_PALETTE_COLOR_MAS = 100,
BTNS_LAST_USED_COLORS = 400
};
272,116 → 251,12
 
if (zoom.click(btn)) DrawEditArea();
 
switch(btn)
{
case BTN_NEW:
EventCreateNewIcon();
break;
case BTN_OPEN:
EventOpenIcon();
break;
case BTN_SAVE:
EventSaveIconToFile();
break;
case BTN_MOVE_LEFT:
EventMove(MOVE_LEFT);
break;
case BTN_MOVE_RIGHT:
EventMove(MOVE_RIGHT);
break;
case BTN_MOVE_UP:
EventMove(MOVE_UP);
break;
case BTN_MOVE_DOWN:
EventMove(MOVE_DOWN);
break;
case BTN_FLIP_VER:
EventMove(FLIP_VER);
break;
case BTN_FLIP_HOR:
EventMove(FLIP_HOR);
break;
case BTN_ROTATE_LEFT:
EventMove(ROTATE_LEFT);
break;
case BTN_ROTATE_RIGHT:
EventMove(ROTATE_RIGHT);
break;
case BTN_TEST_ICON:
EventTestIcon();
break;
case BTN_PENCIL:
setCurrentTool(TOOL_PENCIL);
break;
case BTN_PICK:
setCurrentTool(TOOL_PIPETTE);
break;
case BTN_FILL:
setCurrentTool(TOOL_FILL);
break;
case BTN_LINE:
setCurrentTool(TOOL_LINE);
break;
case BTN_RECT:
setCurrentTool(TOOL_RECT);
break;
case BTN_BAR:
setCurrentTool(TOOL_BAR);
break;
case BTN_SELECT:
setCurrentTool(TOOL_SELECT);
break;
case BTN_SCREEN_COPY:
setCurrentTool(TOOL_SCREEN_COPY);
break;
case BTN_CANVAS_RESIZE:
notify("Sorry, not implemented yet.");
break;
case BTN_CROP:
EventCrop();
break;
case BTN_IMAGE_MENU:
EventShowImageMenu();
break;
case CLOSE_BTN:
EventExitIconEdit();
break;
}
break;
button.press(btn);
case evKey:
GetKeys();
 
if (key_modifier&KEY_LCTRL) || (key_modifier&KEY_RCTRL)
{
switch(key_scancode)
{
case SCAN_CODE_KEY_S:
EventSaveIconToFile();
break;
case SCAN_CODE_KEY_O:
EventOpenIcon();
break;
case SCAN_CODE_LEFT:
EventMove(MOVE_LEFT);
break;
case SCAN_CODE_RIGHT:
EventMove(MOVE_RIGHT);
break;
case SCAN_CODE_UP:
EventMove(MOVE_UP);
break;
case SCAN_CODE_DOWN:
EventMove(MOVE_DOWN);
break;
case SCAN_CODE_KEY_R:
EventMove(BTN_ROTATE_RIGHT);
break;
case SCAN_CODE_KEY_L:
EventMove(BTN_ROTATE_LEFT);
break;
}
}
if (key_modifier&KEY_LCTRL) || (key_modifier&KEY_RCTRL) key.press(ECTRL + key_scancode);
 
if (key_modifier&KEY_LSHIFT) || (key_modifier&KEY_RSHIFT) {
if (key_scancode == SCAN_CODE_DEL) EventCleanCanvas();
390,16 → 265,8
if (currentTool != TOOL_NONE) && (tools[currentTool].onKeyEvent != 0)
tools[currentTool].onKeyEvent(key_scancode);
 
if (key_scancode == SCAN_CODE_KEY_P) setCurrentTool(TOOL_PENCIL);
if (key_scancode == SCAN_CODE_KEY_I) setCurrentTool(TOOL_PIPETTE);
if (key_scancode == SCAN_CODE_KEY_F) setCurrentTool(TOOL_FILL);
if (key_scancode == SCAN_CODE_KEY_L) setCurrentTool(TOOL_LINE);
if (key_scancode == SCAN_CODE_KEY_R) setCurrentTool(TOOL_RECT);
if (key_scancode == SCAN_CODE_KEY_B) setCurrentTool(TOOL_BAR);
if (key_scancode == SCAN_CODE_KEY_S) setCurrentTool(TOOL_SELECT);
key.press(key_scancode);
 
if (key_scancode == SCAN_CODE_KEY_T) EventTestIcon();
 
if (key_scancode == SCAN_CODE_KEY_Z) actionsHistory.undoLastAction();
if (key_scancode == SCAN_CODE_KEY_Y) actionsHistory.redoLastAction();
 
416,7 → 283,7
}
}
 
void DrawTopPanelButton(dword _id, _x, _icon_n)
void DrawTopPanelButton(dword _event, _hotkey, _x, _icon_n)
{
DrawWideRectangle(_x, 4, 22, 22, 3, semi_white);
PutPixel(_x,4,system.color.work);
423,10 → 290,12
PutPixel(_x,4+21,system.color.work);
PutPixel(_x+21,4,system.color.work);
PutPixel(_x+21,4+21,system.color.work);
DefineHiddenButton(_x, 4, 21, 21, _id);
DefineHiddenButton(_x, 4, 21, 21, button.add(_event));
img_draw stdcall(top_icons.image, _x+3, 7, 16, 16, 0, _icon_n*16);
if (_hotkey) key.add_n(_hotkey, _event);
}
 
 
int DrawFlatPanelButton(dword _id, _x, _y, _text)
{
#define P 10
441,14 → 310,14
return w;
}
 
void DrawLeftPanelButton(dword _id, _y, _icon_n)
void DrawLeftPanelButton(dword _event, _hotkey, _y, _icon_n)
{
int x = 5;
DrawRectangle(x, _y, 22-1, 22-1, system.color.work);
DefineHiddenButton(x, _y, 21, 21, _id);
DefineHiddenButton(x, _y, 21, 21, button.add(_event));
img_draw stdcall(left_icons.image, x+3, _y+3, 16, 16, 0, _icon_n*16);
key.add_n(_hotkey, _event);
}
 
void DrawStatusBar()
{
zoom.draw(wrapper.x, wrapper.y + wrapper.h + 6);
459,7 → 328,7
zoom.y,
calc(strlen(#param)*8)+6,
18,
BTN_CANVAS_RESIZE,
button.add(#EventCanvasResize),
system.color.work_button,
system.color.work_button_text,
#param
466,11 → 335,14
);
}
 
 
void DrawWindow()
{
#define GAP 27
#define GAPH 27
#define GAPV 28
#define BLOCK_SPACE 10
incn tx;
incn ty;
system.color.get();
DefineAndDrawWindow(115+random(100), 50+random(100), 700, 540, 0x73, NULL, T_TITLE, 0);
GetProcessInfo(#Form, SelfInfo);
477,6 → 349,8
if (Form.status_window>2) return;
if (Form.width < 560) { MoveSize(OLD,OLD,560,OLD); return; }
if (Form.height < 430) { MoveSize(OLD,OLD,OLD,430); return; }
button.init(40);
key.init(40);
 
right_bar.x = Form.cwidth - right_bar.w;
b_color_gradient.x = b_last_colors.x = b_default_palette.x = right_bar.x;
483,33 → 357,43
DrawBar(0, 0, Form.cwidth, TOPBAR_H-1, system.color.work);
DrawBar(0, TOPBAR_H-1, Form.cwidth, 1, system.color.work_graph);
 
tx.n = 5-GAP;
DrawTopPanelButton(BTN_NEW, tx.inc(GAP), 2);
DrawTopPanelButton(BTN_OPEN, tx.inc(GAP), 0); //not implemented
DrawTopPanelButton(BTN_SAVE, tx.inc(GAP), 5);
DrawTopPanelButton(BTN_MOVE_LEFT, tx.inc(GAP+BLOCK_SPACE), 30);
DrawTopPanelButton(BTN_MOVE_RIGHT, tx.inc(GAP), 31);
DrawTopPanelButton(BTN_MOVE_UP, tx.inc(GAP), 32);
DrawTopPanelButton(BTN_MOVE_DOWN, tx.inc(GAP), 33);
tx.n = 5-GAPH;
DrawTopPanelButton(#EventCreateNewIcon, ECTRL + SCAN_CODE_KEY_N, tx.inc(GAPH), 2);
DrawTopPanelButton(#EventOpenIcon, ECTRL + SCAN_CODE_KEY_O, tx.inc(GAPH), 0);
DrawTopPanelButton(#EventSaveIconToFile, ECTRL + SCAN_CODE_KEY_S, tx.inc(GAPH), 5);
DrawTopPanelButton(#EventMoveLeft, ECTRL + SCAN_CODE_LEFT, tx.inc(GAPH+BLOCK_SPACE), 30);
DrawTopPanelButton(#EventMoveRight, ECTRL + SCAN_CODE_RIGHT, tx.inc(GAPH), 31);
DrawTopPanelButton(#EventMoveUp, ECTRL + SCAN_CODE_UP, tx.inc(GAPH), 32);
DrawTopPanelButton(#EventMoveDown, ECTRL + SCAN_CODE_DOWN, tx.inc(GAPH), 33);
DrawTopPanelButton(#EventFlipHor, 0, tx.inc(GAPH+BLOCK_SPACE), 34);
DrawTopPanelButton(#EventFlipVer, 0, tx.inc(GAPH), 35);
DrawTopPanelButton(#EventRotateLeft, ECTRL + SCAN_CODE_KEY_L, tx.inc(GAPH), 37);
DrawTopPanelButton(#EventRotateRight, ECTRL + SCAN_CODE_KEY_R, tx.inc(GAPH), 36);
DrawTopPanelButton(#EventTestIcon, ECTRL + SCAN_CODE_KEY_T, tx.inc(GAPH+BLOCK_SPACE), 12);
DrawTopPanelButton(#EventCrop, 0, tx.inc(GAPH+BLOCK_SPACE), 46);
DrawTopPanelButton(BTN_FLIP_HOR, tx.inc(GAP+BLOCK_SPACE), 34);
DrawTopPanelButton(BTN_FLIP_VER, tx.inc(GAP), 35);
DrawTopPanelButton(BTN_ROTATE_LEFT, tx.inc(GAP), 37);
DrawTopPanelButton(BTN_ROTATE_RIGHT, tx.inc(GAP), 36);
 
DrawTopPanelButton(BTN_TEST_ICON, tx.inc(GAP+BLOCK_SPACE), 12);
 
DrawTopPanelButton(BTN_CROP, tx.inc(GAP+BLOCK_SPACE), 46);
 
image_menu_btn.x = tx.n;
image_menu_btn.w = DrawFlatPanelButton(BTN_IMAGE_MENU, image_menu_btn.x, image_menu_btn.y, T_MENU_IMAGE);
image_menu_btn.w = DrawFlatPanelButton(button.add(#EventShowImageMenu), image_menu_btn.x, image_menu_btn.y, T_MENU_IMAGE);
//tx.inc(image_menu_btn.w + BLOCK_SPACE);
DrawEditArea();
 
DrawBar(0, TOPBAR_H, LEFTBAR_W-1, Form.cheight - TOPBAR_H, system.color.work);
DrawLeftPanel();
 
ty.n = right_bar.y - GAPV - 2;
 
DrawLeftPanelButton(#EventSelectToolPencil, SCAN_CODE_KEY_P, ty.inc(GAPV), 38);
DrawLeftPanelButton(#EventSelectToolPick, SCAN_CODE_KEY_I, ty.inc(GAPV), 39);
DrawLeftPanelButton(#EventSelectToolFill, SCAN_CODE_KEY_F, ty.inc(GAPV), 40);
DrawLeftPanelButton(#EventSelectToolLine, SCAN_CODE_KEY_L, ty.inc(GAPV), 41);
DrawLeftPanelButton(#EventSelectToolRect, SCAN_CODE_KEY_R, ty.inc(GAPV), 42);
DrawLeftPanelButton(#EventSelectToolBar, SCAN_CODE_KEY_B, ty.inc(GAPV), 43);
DrawLeftPanelButton(#EventSelectToolSelect, SCAN_CODE_KEY_S, ty.inc(GAPV), 44);
DrawLeftPanelButton(#EventSelectToolScrCopy,SCAN_CODE_KEY_Q, ty.inc(GAPV), 45);
DrawLeftPanelSelection();
 
button.add_n(1, #EventExitIconEdit);
 
DrawBar(wrapper.x+wrapper.w, TOPBAR_H, Form.cwidth-wrapper.x-wrapper.w,
Form.cheight - TOPBAR_H, system.color.work);
DrawActiveColor(right_bar.y);
521,20 → 405,10
DrawStatusBar();
}
 
void DrawLeftPanel()
void DrawLeftPanelSelection()
{
#define GAP 28
incn ty;
ty.n = right_bar.y - GAP - 2;
DrawLeftPanelButton(BTN_PENCIL, ty.inc(GAP), 38);
DrawLeftPanelButton(BTN_PICK, ty.inc(GAP), 39);
DrawLeftPanelButton(BTN_FILL, ty.inc(GAP), 40);
DrawLeftPanelButton(BTN_LINE, ty.inc(GAP), 41);
DrawLeftPanelButton(BTN_RECT, ty.inc(GAP), 42);
DrawLeftPanelButton(BTN_BAR, ty.inc(GAP), 43);
DrawLeftPanelButton(BTN_SELECT, ty.inc(GAP), 44);
DrawLeftPanelButton(BTN_SCREEN_COPY, ty.inc(GAP), 45);
DrawRectangle3D(5, currentTool*GAP+right_bar.y-2, 16+3+2, 16+3+2, 0x333333, 0x777777);
DrawRectangle3D(5, previousTool*GAPV+right_bar.y-2, 16+3+2, 16+3+2, system.color.work, system.color.work);
DrawRectangle3D(5, currentTool*GAPV+right_bar.y-2, 16+3+2, 16+3+2, 0x333333, 0x777777);
}
 
void DrawEditArea()
895,6 → 769,31
}
}
 
void EventCanvasResize()
{
notify("Sorry, not implemented yet.");
}
 
void EventMoveLeft() { EventMove(MOVE_LEFT); }
void EventMoveRight() { EventMove(MOVE_RIGHT); }
void EventMoveUp() { EventMove(MOVE_UP); }
void EventMoveDown() { EventMove(MOVE_DOWN); }
void EventFlipHor() { EventMove(FLIP_HOR); }
void EventFlipVer() { EventMove(FLIP_VER); }
void EventRotateLeft() { EventMove(ROTATE_LEFT); }
void EventRotateRight() { EventMove(ROTATE_RIGHT); }
 
void EventSelectToolPencil() { setCurrentTool(TOOL_PENCIL); DrawLeftPanelSelection(); }
void EventSelectToolPick() { setCurrentTool(TOOL_PIPETTE); DrawLeftPanelSelection(); }
void EventSelectToolFill() { setCurrentTool(TOOL_FILL); DrawLeftPanelSelection(); }
void EventSelectToolLine() { setCurrentTool(TOOL_LINE); DrawLeftPanelSelection(); }
void EventSelectToolRect() { setCurrentTool(TOOL_RECT); DrawLeftPanelSelection(); }
void EventSelectToolBar() { setCurrentTool(TOOL_BAR); DrawLeftPanelSelection(); }
void EventSelectToolSelect() { setCurrentTool(TOOL_SELECT); DrawLeftPanelSelection(); }
void EventSelectToolScrCopy() { setCurrentTool(TOOL_SCREEN_COPY); DrawLeftPanelSelection(); }
 
char test_icon_stak22[4096];
 
stop:
 
char test_icon_stak[4096];