1 /////////////////////////////////////////////////////////////////////////////// 2 // Name: wx/mousestate.h 3 // Purpose: Declaration of wxMouseState class 4 // Author: Vadim Zeitlin 5 // Created: 2008-09-19 (extracted from wx/utils.h) 6 // Copyright: (c) 2008 Vadim Zeitlin <vadim@wxwidgets.org> 7 // Licence: wxWindows licence 8 /////////////////////////////////////////////////////////////////////////////// 9 10 #ifndef _WX_MOUSESTATE_H_ 11 #define _WX_MOUSESTATE_H_ 12 13 #include "wx/gdicmn.h" // for wxPoint 14 #include "wx/kbdstate.h" 15 16 // the symbolic names for the mouse buttons 17 enum wxMouseButton 18 { 19 wxMOUSE_BTN_ANY = -1, 20 wxMOUSE_BTN_NONE = 0, 21 wxMOUSE_BTN_LEFT = 1, 22 wxMOUSE_BTN_MIDDLE = 2, 23 wxMOUSE_BTN_RIGHT = 3, 24 wxMOUSE_BTN_AUX1 = 4, 25 wxMOUSE_BTN_AUX2 = 5, 26 wxMOUSE_BTN_MAX 27 }; 28 29 // ---------------------------------------------------------------------------- 30 // wxMouseState contains the information about mouse position, buttons and also 31 // key modifiers 32 // ---------------------------------------------------------------------------- 33 34 // wxMouseState is used to hold information about button and modifier state 35 // and is what is returned from wxGetMouseState. 36 class WXDLLIMPEXP_CORE wxMouseState : public wxKeyboardState 37 { 38 public: wxMouseState()39 wxMouseState() 40 : m_leftDown(false), m_middleDown(false), m_rightDown(false), 41 m_aux1Down(false), m_aux2Down(false), 42 m_x(0), m_y(0) 43 { 44 } 45 46 // default copy ctor, assignment operator and dtor are ok 47 48 49 // accessors for the mouse position GetX()50 wxCoord GetX() const { return m_x; } GetY()51 wxCoord GetY() const { return m_y; } GetPosition()52 wxPoint GetPosition() const { return wxPoint(m_x, m_y); } GetPosition(wxCoord * x,wxCoord * y)53 void GetPosition(wxCoord *x, wxCoord *y) const 54 { 55 if ( x ) 56 *x = m_x; 57 if ( y ) 58 *y = m_y; 59 } 60 61 // this overload is for compatibility only GetPosition(long * x,long * y)62 void GetPosition(long *x, long *y) const 63 { 64 if ( x ) 65 *x = m_x; 66 if ( y ) 67 *y = m_y; 68 } 69 70 // accessors for the pressed buttons LeftIsDown()71 bool LeftIsDown() const { return m_leftDown; } MiddleIsDown()72 bool MiddleIsDown() const { return m_middleDown; } RightIsDown()73 bool RightIsDown() const { return m_rightDown; } Aux1IsDown()74 bool Aux1IsDown() const { return m_aux1Down; } Aux2IsDown()75 bool Aux2IsDown() const { return m_aux2Down; } 76 ButtonIsDown(wxMouseButton but)77 bool ButtonIsDown(wxMouseButton but) const 78 { 79 switch ( but ) 80 { 81 case wxMOUSE_BTN_ANY: 82 return LeftIsDown() || MiddleIsDown() || RightIsDown() || 83 Aux1IsDown() || Aux2IsDown(); 84 85 case wxMOUSE_BTN_LEFT: 86 return LeftIsDown(); 87 88 case wxMOUSE_BTN_MIDDLE: 89 return MiddleIsDown(); 90 91 case wxMOUSE_BTN_RIGHT: 92 return RightIsDown(); 93 94 case wxMOUSE_BTN_AUX1: 95 return Aux1IsDown(); 96 97 case wxMOUSE_BTN_AUX2: 98 return Aux2IsDown(); 99 100 case wxMOUSE_BTN_NONE: 101 case wxMOUSE_BTN_MAX: 102 break; 103 } 104 105 wxFAIL_MSG(wxS("invalid parameter")); 106 return false; 107 } 108 109 110 // these functions are mostly used by wxWidgets itself SetX(wxCoord x)111 void SetX(wxCoord x) { m_x = x; } SetY(wxCoord y)112 void SetY(wxCoord y) { m_y = y; } SetPosition(wxPoint pos)113 void SetPosition(wxPoint pos) { m_x = pos.x; m_y = pos.y; } 114 SetLeftDown(bool down)115 void SetLeftDown(bool down) { m_leftDown = down; } SetMiddleDown(bool down)116 void SetMiddleDown(bool down) { m_middleDown = down; } SetRightDown(bool down)117 void SetRightDown(bool down) { m_rightDown = down; } SetAux1Down(bool down)118 void SetAux1Down(bool down) { m_aux1Down = down; } SetAux2Down(bool down)119 void SetAux2Down(bool down) { m_aux2Down = down; } 120 121 // this mostly makes sense in the derived classes such as wxMouseEvent SetState(const wxMouseState & state)122 void SetState(const wxMouseState& state) { *this = state; } 123 124 // these functions are for compatibility only, they were used in 2.8 125 // version of wxMouseState but their names are confusing as wxMouseEvent 126 // has methods with the same names which do something quite different so 127 // don't use them any more 128 #if WXWIN_COMPATIBILITY_2_8 129 wxDEPRECATED_INLINE(bool LeftDown() const, return LeftIsDown(); ) 130 wxDEPRECATED_INLINE(bool MiddleDown() const, return MiddleIsDown(); ) 131 wxDEPRECATED_INLINE(bool RightDown() const, return RightIsDown(); ) 132 #endif // WXWIN_COMPATIBILITY_2_8 133 134 // for compatibility reasons these variables are public as the code using 135 // wxMouseEvent often uses them directly -- however they should not be 136 // accessed directly in this class, use the accessors above instead 137 // private: 138 bool m_leftDown : 1; 139 bool m_middleDown : 1; 140 bool m_rightDown : 1; 141 bool m_aux1Down : 1; 142 bool m_aux2Down : 1; 143 144 wxCoord m_x, 145 m_y; 146 }; 147 148 #endif // _WX_MOUSESTATE_H_ 149 150