00001
00024 #ifndef INC_MGUI_TOOLCROSSHAIR_H
00025 #define INC_MGUI_TOOLCROSSHAIR_H
00026
00027 #ifndef INC_MGUI_TOOLBASE_H
00028 #include <mgui/toolbase.h>
00029 #endif
00030
00031 namespace MGUI {
00032
00034 class TOOL_CROSSHAIR : public MGUI::TOOL_LIMITED {
00035 public:
00036
00038 explicit TOOL_CROSSHAIR (
00039 TOOLCANVAS *canvas
00040 );
00041
00043 virtual ~TOOL_CROSSHAIR ();
00044
00046 TOOL_CROSSHAIR& operator= (
00047 const DPOINT2D& rhs
00048 ) { SetPoint(rhs,true); return (*this); }
00049
00051 double GetAngleRotate () const
00052 { return (m_AngleRotate); }
00053
00055 double GetAngleShear () const
00056 { return (m_AngleShear); }
00057
00059 const DPOINT2D& GetPoint () const
00060 { return (m_PtCenter); }
00061
00063 void SetPoint (
00064 const DPOINT2D& pt,
00065 bool reset = true
00066 );
00067
00068 private:
00069 #ifndef GENERATING_DOXYGEN_OUTPUT
00070
00071
00072 enum ZONE {
00073 ZONE_NoFunction = 0,
00074 ZONE_Inside,
00075 ZONE_Axis0,
00076 ZONE_Axis90,
00077 ZONE_Axis180,
00078 ZONE_Axis270,
00079 };
00080
00081 DPOINT2D m_PtCenter;
00082 DPOINT2D m_PtEnd0;
00083 DPOINT2D m_PtEnd90;
00084 DPOINT2D m_PtEnd180;
00085 DPOINT2D m_PtEnd270;
00086 double m_AngleRotate;
00087 double m_AngleShear;
00088
00089 ZONE m_PointerZone;
00090
00091 void ComputeEndPoints ();
00092 void ComputePointerZone (MGUI::POINT ptCanvas);
00093 bool DoRotate (MGUI::POINT ptCanvas);
00094 bool DoShear (MGUI::POINT ptCanvas);
00095 void UpdateCursor ();
00096
00097
00098 virtual void v_DoDraw ();
00099 virtual int v_GenerateRegion (REGION2D& region) const;
00100 virtual void v_DoMove (double dx, double dy, ADJUSTFLAGS flags);
00101 virtual void v_OnClear ();
00102 virtual bool v_OnPointerButtonDown (MGUI::POINT point, POINTERBUTTON button, KEYSTATE keystate);
00103 virtual void v_OnPointerMove (MGUI::POINT point, POINTERBUTTON button, KEYSTATE keystate);
00104
00105 #endif // GENERATING_DOXYGEN_OUTPUT
00106 };
00107
00108 }
00109
00110
00111 #endif // INC_MGUI_TOOLCROSSHAIR_H