X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/0e0977894a66f5b3227d2864becaeae86a5e93c8..c50db84779471824160c5701a72ad4db9b35c2f2:/include/wx/mousestate.h diff --git a/include/wx/mousestate.h b/include/wx/mousestate.h index 14a75516d3..98ab291baf 100644 --- a/include/wx/mousestate.h +++ b/include/wx/mousestate.h @@ -11,8 +11,22 @@ #ifndef _WX_MOUSESTATE_H_ #define _WX_MOUSESTATE_H_ +#include "wx/gdicmn.h" // for wxPoint #include "wx/kbdstate.h" +// the symbolic names for the mouse buttons +enum wxMouseButton +{ + wxMOUSE_BTN_ANY = -1, + wxMOUSE_BTN_NONE = 0, + wxMOUSE_BTN_LEFT = 1, + wxMOUSE_BTN_MIDDLE = 2, + wxMOUSE_BTN_RIGHT = 3, + wxMOUSE_BTN_AUX1 = 4, + wxMOUSE_BTN_AUX2 = 5, + wxMOUSE_BTN_MAX +}; + // ---------------------------------------------------------------------------- // wxMouseState contains the information about mouse position, buttons and also // key modifiers @@ -24,9 +38,9 @@ class WXDLLIMPEXP_CORE wxMouseState : public wxKeyboardState { public: wxMouseState() - : m_x(0), m_y(0), - m_leftDown(false), m_middleDown(false), m_rightDown(false), - m_aux1Down(false), m_aux2Down(false) + : m_leftDown(false), m_middleDown(false), m_rightDown(false), + m_aux1Down(false), m_aux2Down(false), + m_x(0), m_y(0) { } @@ -37,17 +51,69 @@ public: wxCoord GetX() const { return m_x; } wxCoord GetY() const { return m_y; } wxPoint GetPosition() const { return wxPoint(m_x, m_y); } + void GetPosition(wxCoord *x, wxCoord *y) const + { + if ( x ) + *x = m_x; + if ( y ) + *y = m_y; + } + + // this overload is for compatibility only + void GetPosition(long *x, long *y) const + { + if ( x ) + *x = m_x; + if ( y ) + *y = m_y; + } // accessors for the pressed buttons - bool LeftDown() const { return m_leftDown; } - bool MiddleDown() const { return m_middleDown; } - bool RightDown() const { return m_rightDown; } - bool Aux1Down() const { return m_aux1Down; } - bool Aux2Down() const { return m_aux2Down; } + bool LeftIsDown() const { return m_leftDown; } + bool MiddleIsDown() const { return m_middleDown; } + bool RightIsDown() const { return m_rightDown; } + bool Aux1IsDown() const { return m_aux1Down; } + bool Aux2IsDown() const { return m_aux2Down; } + + bool ButtonIsDown(wxMouseButton but) const + { + switch ( but ) + { + case wxMOUSE_BTN_ANY: + return LeftIsDown() || MiddleIsDown() || RightIsDown() || + Aux1IsDown() || Aux2IsDown(); + + case wxMOUSE_BTN_LEFT: + return LeftIsDown(); + + case wxMOUSE_BTN_MIDDLE: + return MiddleIsDown(); + + case wxMOUSE_BTN_RIGHT: + return RightIsDown(); + + case wxMOUSE_BTN_AUX1: + return Aux1IsDown(); + + case wxMOUSE_BTN_AUX2: + return Aux2IsDown(); + + case wxMOUSE_BTN_NONE: + case wxMOUSE_BTN_MAX: + wxFAIL_MSG(wxS("invalid parameter")); + return false; + + default: + wxFAIL_MSG(wxS("unknown parameter")); + return false; + } + } + // these functions are mostly used by wxWidgets itself void SetX(wxCoord x) { m_x = x; } void SetY(wxCoord y) { m_y = y; } + void SetPosition(wxPoint pos) { m_x = pos.x, m_y = pos.y; } void SetLeftDown(bool down) { m_leftDown = down; } void SetMiddleDown(bool down) { m_middleDown = down; } @@ -55,7 +121,23 @@ public: void SetAux1Down(bool down) { m_aux1Down = down; } void SetAux2Down(bool down) { m_aux2Down = down; } -private: + // this mostly makes sense in the derived classes such as wxMouseEvent + void SetState(const wxMouseState& state) { *this = state; } + + // these functions are for compatibility only, they were used in 2.8 + // version of wxMouseState but their names are confusing as wxMouseEvent + // has methods with the same names which do something quite different so + // don't use them any more +#if WXWIN_COMPATIBILITY_2_8 + wxDEPRECATED_INLINE(bool LeftDown() const, return LeftIsDown(); ) + wxDEPRECATED_INLINE(bool MiddleDown() const, return MiddleIsDown(); ) + wxDEPRECATED_INLINE(bool RightDown() const, return RightIsDown(); ) +#endif // WXWIN_COMPATIBILITY_2_8 + + // for compatibility reasons these variables are public as the code using + // wxMouseEvent often uses them directly -- however they should not be + // accessed directly in this class, use the accessors above instead +// private: bool m_leftDown : 1; bool m_middleDown : 1; bool m_rightDown : 1;