kolibrios-fun/programs/cmm/iconedit/tools.h
Kirill Lipatov (Leency) babba2a8ce CMM new lib: events.h
IconEdit: use event model
netcheck: example of event model, can be used for network testing

git-svn-id: svn://kolibrios.org@7521 a494cfbc-eb01-0410-851d-a64ba20cac60
2018-11-01 21:48:33 +00:00

119 lines
3.4 KiB
C

#define TOIMAGE 1
#define TOCANVAS 2
struct Tool {
int id;
dword cursor;
void (*activate)();
void (*deactivate)();
void (*onMouseEvent)(int x, int y, int lkm, int pkm);
void (*onKeyEvent)(dword keycode);
void (*onCanvasDraw)();
};
int previousTool = -1;
int currentTool = -1;
Tool tools[8];
enum {
TOOL_NONE = -1,
TOOL_PENCIL,
TOOL_PIPETTE,
TOOL_FILL,
TOOL_LINE,
TOOL_RECT,
TOOL_BAR,
TOOL_SELECT,
TOOL_SCREEN_COPY
};
#include "tools/pencil.h";
#include "tools/pipette.h";
#include "tools/fill.h";
#include "tools/simple_figure.h";
#include "tools/selection.h";
#include "tools/screen_copy.h";
void initTools()
{
tools[TOOL_PENCIL].id = TOOL_PENCIL;
tools[TOOL_PENCIL].cursor = #CursorPencil;
tools[TOOL_PENCIL].onMouseEvent = #PencilTool_onMouseEvent;
tools[TOOL_PENCIL].deactivate = #PencilTool_reset;
tools[TOOL_PIPETTE].id = TOOL_PIPETTE;
tools[TOOL_PIPETTE].cursor = #CursorPipette;
tools[TOOL_PIPETTE].activate = #PipetteTool_activate;
tools[TOOL_PIPETTE].onMouseEvent = #PipetteTool_onMouseEvent;
tools[TOOL_PIPETTE].onKeyEvent = #PipetteTool_onKeyEvent;
tools[TOOL_FILL].id = TOOL_FILL;
tools[TOOL_FILL].cursor = #CursorFill;
tools[TOOL_FILL].onMouseEvent = #FillTool_onMouseEvent;
tools[TOOL_LINE].id = TOOL_LINE;
tools[TOOL_LINE].cursor = #CursorLine;
tools[TOOL_LINE].activate = #SimpleFigureTool_Reset;
tools[TOOL_LINE].deactivate = #SimpleFigureTool_Reset;
tools[TOOL_LINE].onMouseEvent = #SimpleFigureTool_onMouseEvent;
tools[TOOL_LINE].onCanvasDraw = #SimpleFigureTool_onCanvasDraw;
tools[TOOL_RECT].id = TOOL_RECT;
tools[TOOL_RECT].cursor = #CursorRectangle;
tools[TOOL_RECT].activate = #SimpleFigureTool_Reset;
tools[TOOL_RECT].deactivate = #SimpleFigureTool_Reset;
tools[TOOL_RECT].onMouseEvent = #SimpleFigureTool_onMouseEvent;
tools[TOOL_RECT].onCanvasDraw = #SimpleFigureTool_onCanvasDraw;
tools[TOOL_BAR].id = TOOL_BAR;
tools[TOOL_BAR].cursor = #CursorBar;
tools[TOOL_BAR].activate = #SimpleFigureTool_Reset;
tools[TOOL_BAR].deactivate = #SimpleFigureTool_Reset;
tools[TOOL_BAR].onMouseEvent = #SimpleFigureTool_onMouseEvent;
tools[TOOL_BAR].onCanvasDraw = #SimpleFigureTool_onCanvasDraw;
tools[TOOL_SELECT].id = TOOL_SELECT;
tools[TOOL_SELECT].cursor = #CursorSelect;
tools[TOOL_SELECT].activate = #SelectTool_activate;
tools[TOOL_SELECT].deactivate = #SelectTool_deactivate;
tools[TOOL_SELECT].onMouseEvent = #SelectTool_onMouseEvent;
tools[TOOL_SELECT].onCanvasDraw = #SelectTool_onCanvasDraw;
tools[TOOL_SELECT].onKeyEvent = #SelectTool_onKeyEvent;
tools[TOOL_SCREEN_COPY].id = TOOL_SCREEN_COPY;
tools[TOOL_SCREEN_COPY].cursor = NULL;
tools[TOOL_SCREEN_COPY].activate = #ScreenCopy_activate;
tools[TOOL_SCREEN_COPY].onMouseEvent = #ScreenCopy_onMouseEvent;
tools[TOOL_SCREEN_COPY].onKeyEvent = #ScreenCopy_onKeyEvent;
}
void resetCurrentTool() {
if ((currentTool != TOOL_NONE) && (tools[currentTool].deactivate != 0)) {
tools[currentTool].deactivate();
}
currentTool = TOOL_NONE;
}
void setCurrentTool(int index) {
previousTool = currentTool;
resetCurrentTool();
currentTool = index;
if ((index != TOOL_NONE) && (tools[index].activate != 0))
tools[index].activate();
Cursor.Restore();
if (wrapper.hovered()) SetCursor();
DrawCanvas();
}
void SetCursor()
{
if (tools[currentTool].cursor) && (!Cursor.CursorPointer) {
Cursor.Load(tools[currentTool].cursor);
Cursor.Set();
}
}