source: eviacam/trunk/fuentes/wxutil/mousecontrol.h @ 567

Last change on this file since 567 was 567, checked in by mabarracus, 4 years ago

updated sources to version 2.0.3

File size: 5.1 KB
Line 
1/////////////////////////////////////////////////////////////////////////////
2// Name:        mousecontrol.h
3// Purpose: cross platform mouse control api
4// Author:      Cesar Mauri Loba (cesar at crea-si dot com)
5// Modified by:
6// Created:     
7// Copyright:   (C) 2008-14 Cesar Mauri Loba - CREA Software Systems
8//
9//  This program is free software: you can redistribute it and/or modify
10//  it under the terms of the GNU General Public License as published by
11//  the Free Software Foundation, either version 3 of the License, or
12//  (at your option) any later version.
13//
14//  This program is distributed in the hope that it will be useful,
15//  but WITHOUT ANY WARRANTY; without even the implied warranty of
16//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17//  GNU General Public License for more details.
18//
19//  You should have received a copy of the GNU General Public License
20//  along with this program.  If not, see <http://www.gnu.org/licenses/>.
21/////////////////////////////////////////////////////////////////////////////
22#if !defined(MOUSECONTROL_H)
23#define MOUSECONTROL_H
24
25#include <stdlib.h>             // NULL
26#include <assert.h>            
27
28class CMouseControl
29{
30public:
31        CMouseControl(void* pDisplay= NULL);
32        virtual ~CMouseControl();
33
34        void SetRestrictedWorkingArea (bool value) { m_enabledRestrictedWorkingArea = value; }
35        bool GetRestrictedWorkingArea() const { return m_enabledRestrictedWorkingArea; }
36        void SetWorkingArea (float leftPercent, float rightPercent, float topPercent, float bottomPercent);
37       
38        void SetWrapPointer (bool value) { m_enabledWrapPointer = value; }
39        bool GetWrapPointer() const { return m_enabledWrapPointer; }
40
41        float GetTopPercent () const { return m_topPercent; }
42        void SetTopPercent (float topPercent) { 
43                //assert (0.009f < topPercent && topPercent <= 1.0f);
44                assert (0 <= topPercent && topPercent <= 1.0f);
45                m_topPercent = topPercent; 
46        }
47        float GetLeftPercent () const { return m_leftPercent; }
48        void SetLeftPercent (float leftPercent) { 
49                assert (0 <=  leftPercent && leftPercent <= 1.0f);
50                m_leftPercent = leftPercent; 
51        }
52        float GetRightPercent () const { return m_rightPercent; }
53        void SetRightPercent (float rightPercent) { 
54                assert (0 <=  rightPercent && rightPercent <= 1.0f);
55                m_rightPercent = rightPercent; 
56        }
57        float GetBottomPercent () const { return m_bottomPercent; }
58        void SetBottomPercent (float bottomPercent) { 
59                assert (0 <=  bottomPercent && bottomPercent <= 1.0f);
60                m_bottomPercent = bottomPercent;
61        }
62       
63        void SetAbsVirtualResolution (float xIni, float yIni, 
64                                                                  float width, float height);
65        void SetRelFactorX (float fDx) { m_fDx= fDx; }
66        void SetRelFactorY (float fDy) { m_fDy= fDy; }
67       
68        void SetRelFactors (float fDx, float fDy) {     SetRelFactorX (fDx); SetRelFactorY (fDy); }
69        void SetRelAcceleration2 (long delta0= 9999, float factor0= 1.0f,
70                                        long delta1= 9999, float factor1= 1.0f);
71
72        inline float GetRelDeltaThreshold () const;
73        inline void SetRelDeltaThreshold (float deltaThreshold);
74       
75        inline float GetLowPassFilterWeight () const;
76        inline void SetLowPassFilterWeight (float w);
77       
78        void MovePointerAbs (float x, float y);
79        void DoMovePointerAbs (long x, long y);
80        float MovePointerRel (float dx, float dy, int* dxRes= NULL, int* dyRes= NULL);
81       
82        void CenterPointer ();
83
84        // Click actions
85        void LeftDown ();
86        void LeftUp ();
87        void MiddleDown ();
88        void MiddleUp ();
89        void RightDown ();
90        void RightUp ();
91        void LeftClick ();
92        void MiddleClick ();
93        void RightClick ();
94        void LeftDblClick ();
95
96        void GetPointerLocation (int& x, int& y);
97
98        // Display properties change (resolution)
99        void OnDisplayChanged ();
100
101        void SetSendActionWait(unsigned int ms) { m_sendActionWait= ms; }
102        unsigned int GetSendActionWait() const { return m_sendActionWait; }
103
104protected:
105
106        void Virt2Fis (float virtX, float virtY, float &fisX, float &fisY);
107        bool EnforceWorkingAreaLimits (int &x, int &y);
108        void SendMouseCommand (long x, long y, int flags);
109       
110        void DoMovePointerRel (long dx, long dy);
111        void RecomputeWorkingArea ();
112
113        void GetScreenSize();
114
115private:       
116        int m_ScreenWidth, m_ScreenHeight;
117        int m_minScreenX, m_minScreenY, m_maxScreenX, m_maxScreenY;
118        float m_leftPercent, m_rightPercent, m_topPercent, m_bottomPercent;
119        float m_VirtualXIni, m_VirtualYIni;
120        float m_VirtualWidth, m_VirtualHeight;
121        float m_fDx, m_fDy;
122        float m_minDeltaThreshold;
123        float m_dxant, m_dyant;
124        // Motion low pass filter (relative motion)
125        float m_actualMotionWeight;
126        bool m_enabledRestrictedWorkingArea;
127        bool m_enabledWrapPointer;
128       
129#if !defined(WIN32)
130        bool m_closeDisplay;    // Destructor should close display connection?
131        void* m_pDisplay;
132#endif
133        enum { ACCEL_ARRAY_SIZE= 30 };
134        float m_accelArray[ACCEL_ARRAY_SIZE];
135
136        unsigned int m_sendActionWait;
137};
138
139inline float CMouseControl::GetLowPassFilterWeight () const
140{
141        return m_actualMotionWeight;
142}
143
144inline void CMouseControl::SetLowPassFilterWeight (float w)
145{ 
146        assert (0.0f<= w && 1.0f>= w);
147        m_actualMotionWeight= w; 
148}
149
150inline float CMouseControl::GetRelDeltaThreshold () const       
151{
152        return m_minDeltaThreshold;
153}
154
155inline void CMouseControl::SetRelDeltaThreshold (float deltaThreshold) 
156{
157        assert (deltaThreshold>= 0);
158
159        m_minDeltaThreshold= deltaThreshold;
160}
161
162#endif
Note: See TracBrowser for help on using the repository browser.