1 /* 2 * PROJECT: PAINT for ReactOS 3 * LICENSE: LGPL 4 * FILE: base/applications/mspaint/toolsmodel.h 5 * PURPOSE: Keep track of tool parameters, notify listeners 6 * PROGRAMMERS: Benedikt Freisen 7 */ 8 9 #pragma once 10 11 enum TOOLTYPE 12 { 13 TOOL_FREESEL = 1, 14 TOOL_RECTSEL = 2, 15 TOOL_RUBBER = 3, 16 TOOL_FILL = 4, 17 TOOL_COLOR = 5, 18 TOOL_ZOOM = 6, 19 TOOL_PEN = 7, 20 TOOL_BRUSH = 8, 21 TOOL_AIRBRUSH = 9, 22 TOOL_TEXT = 10, 23 TOOL_LINE = 11, 24 TOOL_BEZIER = 12, 25 TOOL_RECT = 13, 26 TOOL_SHAPE = 14, 27 TOOL_ELLIPSE = 15, 28 TOOL_RRECT = 16, 29 TOOL_MAX = TOOL_RRECT, 30 }; 31 32 /* CLASSES **********************************************************/ 33 34 struct ToolBase 35 { 36 TOOLTYPE m_tool; 37 HDC m_hdc; 38 COLORREF m_fg, m_bg; 39 static INT pointSP; 40 static POINT pointStack[256]; 41 42 ToolBase(TOOLTYPE tool) : m_tool(tool), m_hdc(NULL) 43 { 44 } 45 46 virtual ~ToolBase() 47 { 48 } 49 50 virtual void OnButtonDown(BOOL bLeftButton, LONG x, LONG y, BOOL bDoubleClick) 51 { 52 } 53 54 virtual void OnMouseMove(BOOL bLeftButton, LONG x, LONG y) 55 { 56 } 57 58 virtual void OnButtonUp(BOOL bLeftButton, LONG x, LONG y) 59 { 60 } 61 62 virtual void OnCancelDraw(); 63 virtual void OnFinishDraw(); 64 65 void beginEvent(); 66 void endEvent(); 67 void reset(); 68 69 static ToolBase* createToolObject(TOOLTYPE type); 70 }; 71 72 class ToolsModel 73 { 74 private: 75 int m_lineWidth; 76 int m_shapeStyle; 77 int m_brushStyle; 78 TOOLTYPE m_activeTool; 79 TOOLTYPE m_oldActiveTool; 80 int m_airBrushWidth; 81 int m_rubberRadius; 82 BOOL m_transpBg; 83 int m_zoom; 84 ToolBase* m_tools[TOOL_MAX + 1]; 85 ToolBase *m_pToolObject; 86 87 ToolBase *GetOrCreateTool(TOOLTYPE nTool); 88 89 public: 90 ToolsModel(); 91 ~ToolsModel(); 92 int GetLineWidth() const; 93 void SetLineWidth(int nLineWidth); 94 int GetShapeStyle() const; 95 void SetShapeStyle(int nShapeStyle); 96 int GetBrushStyle() const; 97 void SetBrushStyle(int nBrushStyle); 98 TOOLTYPE GetActiveTool() const; 99 TOOLTYPE GetOldActiveTool() const; 100 void SetActiveTool(TOOLTYPE nActiveTool); 101 int GetAirBrushWidth() const; 102 void SetAirBrushWidth(int nAirBrushWidth); 103 int GetRubberRadius() const; 104 void SetRubberRadius(int nRubberRadius); 105 BOOL IsBackgroundTransparent() const; 106 void SetBackgroundTransparent(BOOL bTransparent); 107 int GetZoom() const; 108 void SetZoom(int nZoom); 109 110 void OnButtonDown(BOOL bLeftButton, LONG x, LONG y, BOOL bDoubleClick); 111 void OnMouseMove(BOOL bLeftButton, LONG x, LONG y); 112 void OnButtonUp(BOOL bLeftButton, LONG x, LONG y); 113 void OnCancelDraw(); 114 void OnFinishDraw(); 115 116 void resetTool(); 117 void selectAll(); 118 119 void NotifyToolChanged(); 120 void NotifyToolSettingsChanged(); 121 void NotifyZoomChanged(); 122 }; 123