#define TOIMAGE 1 #define TOCANVAS 2 struct Tool { int id; 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[7]; enum { TOOL_NONE = -1, TOOL_PENCIL, TOOL_PIPETTE, TOOL_FILL, TOOL_LINE, TOOL_RECT, TOOL_BAR, TOOL_SELECT }; #include "tools/pencil.h"; #include "tools/pipette.h"; #include "tools/fill.h"; #include "tools/selection.h"; #include "tools/simple_figure.h"; void initTools() { tools[TOOL_PENCIL].id = TOOL_PENCIL; tools[TOOL_PENCIL].onMouseEvent = #PencilTool_onMouseEvent; tools[TOOL_PENCIL].deactivate = #PencilTool_reset; tools[TOOL_PIPETTE].id = TOOL_PIPETTE; tools[TOOL_PIPETTE].activate = #PipetteTool_activate; tools[TOOL_PIPETTE].onMouseEvent = #PipetteTool_onMouseEvent; tools[TOOL_FILL].id = TOOL_FILL; tools[TOOL_FILL].onMouseEvent = #FillTool_onMouseEvent; tools[TOOL_LINE].id = TOOL_LINE; 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].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].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].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; } 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(); DrawLeftPanel(); DrawCanvas(); }