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 64 void beginEvent(); 65 void endEvent(); 66 void reset(); 67 68 static ToolBase* createToolObject(TOOLTYPE type); 69 }; 70 71 class ToolsModel 72 { 73 private: 74 int m_lineWidth; 75 int m_shapeStyle; 76 int m_brushStyle; 77 TOOLTYPE m_activeTool; 78 TOOLTYPE m_oldActiveTool; 79 int m_airBrushWidth; 80 int m_rubberRadius; 81 BOOL m_transpBg; 82 int m_zoom; 83 ToolBase* m_tools[TOOL_MAX + 1]; 84 ToolBase *m_pToolObject; 85 86 ToolBase *GetOrCreateTool(TOOLTYPE nTool); 87 88 void NotifyToolChanged(); 89 void NotifyToolSettingsChanged(); 90 void NotifyZoomChanged(); 91 92 public: 93 ToolsModel(); 94 ~ToolsModel(); 95 int GetLineWidth() const; 96 void SetLineWidth(int nLineWidth); 97 int GetShapeStyle() const; 98 void SetShapeStyle(int nShapeStyle); 99 int GetBrushStyle() const; 100 void SetBrushStyle(int nBrushStyle); 101 TOOLTYPE GetActiveTool() const; 102 TOOLTYPE GetOldActiveTool() const; 103 void SetActiveTool(TOOLTYPE nActiveTool); 104 int GetAirBrushWidth() const; 105 void SetAirBrushWidth(int nAirBrushWidth); 106 int GetRubberRadius() const; 107 void SetRubberRadius(int nRubberRadius); 108 BOOL IsBackgroundTransparent() const; 109 void SetBackgroundTransparent(BOOL bTransparent); 110 int GetZoom() const; 111 void SetZoom(int nZoom); 112 113 void OnButtonDown(BOOL bLeftButton, LONG x, LONG y, BOOL bDoubleClick); 114 void OnMouseMove(BOOL bLeftButton, LONG x, LONG y); 115 void OnButtonUp(BOOL bLeftButton, LONG x, LONG y); 116 void OnCancelDraw(); 117 118 void resetTool(); 119 void selectAll(); 120 }; 121