#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
{
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)
{
}
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:
+ break;
+ }
+
+ wxFAIL_MSG(wxS("invalid 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; }
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;