fixed: Ensure SDL mouse is cleaned up in the application cleanup, and not when the...
[xbmc:xbmc-antiquated.git] / guilib / common / Mouse.h
1 #ifndef MOUSE_H
2 #define MOUSE_H
3
4 /*
5  *      Copyright (C) 2005-2008 Team XBMC
6  *      http://www.xbmc.org
7  *
8  *  This Program is free software; you can redistribute it and/or modify
9  *  it under the terms of the GNU General Public License as published by
10  *  the Free Software Foundation; either version 2, or (at your option)
11  *  any later version.
12  *
13  *  This Program is distributed in the hope that it will be useful,
14  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  *  GNU General Public License for more details.
17  *
18  *  You should have received a copy of the GNU General Public License
19  *  along with XBMC; see the file COPYING.  If not, write to
20  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
21  *  http://www.gnu.org/copyleft/gpl.html
22  *
23  */
24
25 #include "../Geometry.h"
26
27 enum MOUSE_STATE { MOUSE_STATE_NORMAL = 1, MOUSE_STATE_FOCUS, MOUSE_STATE_DRAG, MOUSE_STATE_CLICK };
28 enum MOUSE_BUTTON { MOUSE_LEFT_BUTTON = 0, MOUSE_RIGHT_BUTTON, MOUSE_MIDDLE_BUTTON, MOUSE_EXTRA_BUTTON1, MOUSE_EXTRA_BUTTON2 };
29
30 struct MouseState
31 {
32   int x;            // x location
33   int y;            // y location
34   char dx;          // change in x
35   char dy;          // change in y
36   char dz;          // change in z (wheel)
37   bool button[5];   // true if a button is down
38   bool active;      // true if the mouse is active
39 };
40
41 class IMouseDevice
42 {
43 public:
44   virtual ~IMouseDevice() {}
45   virtual void Initialize(void *appData = NULL)=0;
46   virtual void Acquire()=0;
47   virtual bool Update(MouseState &state)=0;
48   virtual void ShowPointer(bool show)=0;
49 };
50
51 class CMouse
52 {
53 public:
54
55   CMouse();
56   virtual ~CMouse();
57
58   void Initialize(void *appData = NULL);
59   void Cleanup();
60   void Update();
61   void Acquire();
62   void SetResolution(int maxX, int maxY, float speedX, float speedY);
63   bool IsActive() const;
64   bool IsEnabled() const;
65   bool HasMoved() const;
66   void SetInactive();
67   void SetExclusiveAccess(DWORD dwControlID, DWORD dwWindowID, const CPoint &point);
68   void EndExclusiveAccess(DWORD dwControlID, DWORD dwWindowID);
69   DWORD GetExclusiveWindowID() const { return m_exclusiveWindowID; };
70   DWORD GetExclusiveControlID() const { return m_exclusiveControlID; };
71   const CPoint &GetExclusiveOffset() const { return m_exclusiveOffset; };
72   void SetState(DWORD state) { m_pointerState = state; };
73   void SetEnabled(bool enabled) { m_mouseEnabled = enabled; };
74   DWORD GetState() const { return m_pointerState; };
75   CPoint GetLocation() const;
76   void SetLocation(const CPoint &point, bool activate=false);
77   CPoint GetLastMove() const;
78   char GetWheel() const;
79   void UpdateMouseWheel(char dir);
80
81 private:
82   // exclusive access to mouse from a control
83   DWORD m_exclusiveWindowID;
84   DWORD m_exclusiveControlID;
85   CPoint m_exclusiveOffset;
86
87   // state of the mouse
88   DWORD m_pointerState;
89   MouseState m_mouseState;
90   bool m_mouseEnabled;
91   bool m_lastDown[5];
92
93   // mouse device
94   IMouseDevice *m_mouseDevice;
95
96   // mouse limits and speed
97   int m_maxX;
98   int m_maxY;
99   float m_speedX;
100   float m_speedY;
101
102   // active/click timers
103   DWORD m_lastActiveTime;
104   DWORD m_lastClickTime[5];
105
106 public:
107   // public access variables to button clicks etc.
108   bool bClick[5];
109   bool bDoubleClick[5];
110   bool bHold[5];
111 };
112
113 extern CMouse g_Mouse;
114
115 #endif
116
117
118