mouse coordinates are now stored as doubles, not ints

This commit is contained in:
rdb 2012-08-03 12:00:08 +00:00
parent 1f20cfe19c
commit dcdc6d9877
5 changed files with 24 additions and 32 deletions

View File

@ -125,7 +125,7 @@ disable_pointer_events() {
// the given pixel coordinates. // the given pixel coordinates.
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
INLINE void GraphicsWindowInputDevice:: INLINE void GraphicsWindowInputDevice::
set_pointer_in_window(int x, int y, double time) { set_pointer_in_window(double x, double y, double time) {
// mutex is handled in set pointer .. convience function // mutex is handled in set pointer .. convience function
set_pointer(true, x, y, time); set_pointer(true, x, y, time);
} }

View File

@ -49,8 +49,6 @@ GraphicsWindowInputDevice(GraphicsWindow *host, const string &name, int flags) :
_event_sequence(0), _event_sequence(0),
_pointer_mode_enable(false), _pointer_mode_enable(false),
_pointer_speed(1.0), _pointer_speed(1.0),
_pointer_true_x(0.0),
_pointer_true_y(0.0),
_enable_pointer_events(false) _enable_pointer_events(false)
{ {
} }
@ -117,8 +115,6 @@ operator = (const GraphicsWindowInputDevice &copy)
_event_sequence = copy._event_sequence; _event_sequence = copy._event_sequence;
_pointer_mode_enable = copy._pointer_mode_enable; _pointer_mode_enable = copy._pointer_mode_enable;
_pointer_speed = copy._pointer_speed; _pointer_speed = copy._pointer_speed;
_pointer_true_x = copy._pointer_true_x;
_pointer_true_y = copy._pointer_true_y;
_enable_pointer_events = copy._enable_pointer_events; _enable_pointer_events = copy._enable_pointer_events;
_mouse_data = copy._mouse_data; _mouse_data = copy._mouse_data;
_true_mouse_data = copy._true_mouse_data; _true_mouse_data = copy._true_mouse_data;
@ -216,11 +212,9 @@ enable_pointer_mode(double speed) {
nassertv(_device_index != 0); nassertv(_device_index != 0);
_pointer_mode_enable = true; _pointer_mode_enable = true;
_pointer_speed = speed; _pointer_speed = speed;
_pointer_true_x = _host->get_x_size() * 0.5; _mouse_data._xpos = _host->get_x_size() * 0.5;
_pointer_true_y = _host->get_y_size() * 0.5; _mouse_data._ypos = _host->get_y_size() * 0.5;
_mouse_data._in_window = true; _mouse_data._in_window = true;
_mouse_data._xpos = int(_pointer_true_x + 0.5);
_mouse_data._ypos = int(_pointer_true_y + 0.5);
} }
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
@ -234,8 +228,6 @@ disable_pointer_mode() {
nassertv(_device_index != 0); nassertv(_device_index != 0);
_pointer_mode_enable = false; _pointer_mode_enable = false;
_pointer_speed = 1.0; _pointer_speed = 1.0;
_pointer_true_x = 0.0;
_pointer_true_y = 0.0;
_mouse_data = _true_mouse_data; _mouse_data = _true_mouse_data;
} }
@ -245,27 +237,29 @@ disable_pointer_mode() {
// Description: Records that a mouse movement has taken place. // Description: Records that a mouse movement has taken place.
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
void GraphicsWindowInputDevice:: void GraphicsWindowInputDevice::
set_pointer(bool inwin, int x, int y, double time) { set_pointer(bool inwin, double x, double y, double time) {
LightMutexHolder holder(_lock); LightMutexHolder holder(_lock);
int delta_x = x - _true_mouse_data._xpos; double delta_x = x - _true_mouse_data._xpos;
int delta_y = y - _true_mouse_data._ypos; double delta_y = y - _true_mouse_data._ypos;
_true_mouse_data._in_window = inwin; _true_mouse_data._in_window = inwin;
_true_mouse_data._xpos = x; _true_mouse_data._xpos = x;
_true_mouse_data._ypos = y; _true_mouse_data._ypos = y;
if (_pointer_mode_enable) { if (_pointer_mode_enable) {
_pointer_true_x += (delta_x * _pointer_speed); double pointer_x = _mouse_data._xpos;
_pointer_true_y += (delta_y * _pointer_speed); double pointer_y = _mouse_data._ypos;
pointer_x += (delta_x * _pointer_speed);
pointer_y += (delta_y * _pointer_speed);
double xhi = _host->get_x_size(); double xhi = _host->get_x_size();
double yhi = _host->get_y_size(); double yhi = _host->get_y_size();
if (_pointer_true_x < 0.0) _pointer_true_x = 0.0; if (pointer_x < 0.0) pointer_x = 0.0;
if (_pointer_true_y < 0.0) _pointer_true_y = 0.0; if (pointer_y < 0.0) pointer_y = 0.0;
if (_pointer_true_x > xhi) _pointer_true_x = xhi; if (pointer_x > xhi) pointer_x = xhi;
if (_pointer_true_y > yhi) _pointer_true_y = yhi; if (pointer_y > yhi) pointer_y = yhi;
_mouse_data._in_window = true; _mouse_data._in_window = true;
_mouse_data._xpos = int(_pointer_true_x + 0.5); _mouse_data._xpos = pointer_x;
_mouse_data._ypos = int(_pointer_true_y + 0.5); _mouse_data._ypos = pointer_y;
} else { } else {
_mouse_data = _true_mouse_data; _mouse_data = _true_mouse_data;
} }

View File

@ -82,9 +82,9 @@ PUBLISHED:
size_t highlight_end, size_t cursor_pos); size_t highlight_end, size_t cursor_pos);
void focus_lost(double time = ClockObject::get_global_clock()->get_frame_time()); void focus_lost(double time = ClockObject::get_global_clock()->get_frame_time());
INLINE void set_pointer_in_window(int x, int y, double time = ClockObject::get_global_clock()->get_frame_time()); INLINE void set_pointer_in_window(double x, double y, double time = ClockObject::get_global_clock()->get_frame_time());
INLINE void set_pointer_out_of_window(double time = ClockObject::get_global_clock()->get_frame_time()); INLINE void set_pointer_out_of_window(double time = ClockObject::get_global_clock()->get_frame_time());
void set_pointer(bool inwin, int x, int y, double time); void set_pointer(bool inwin, double x, double y, double time);
public: public:
// We need these methods to make VC++ happy when we try to // We need these methods to make VC++ happy when we try to
@ -112,8 +112,6 @@ private:
bool _pointer_mode_enable; bool _pointer_mode_enable;
double _pointer_speed; double _pointer_speed;
double _pointer_true_x;
double _pointer_true_y;
bool _enable_pointer_events; bool _enable_pointer_events;
MouseData _mouse_data; MouseData _mouse_data;

View File

@ -55,7 +55,7 @@ operator = (const MouseData &copy) {
// Access: Published // Access: Published
// Description: // Description:
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
INLINE int MouseData:: INLINE double MouseData::
get_x() const { get_x() const {
return _xpos; return _xpos;
} }
@ -65,7 +65,7 @@ get_x() const {
// Access: Published // Access: Published
// Description: // Description:
//////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////
INLINE int MouseData:: INLINE double MouseData::
get_y() const { get_y() const {
return _ypos; return _ypos;
} }

View File

@ -31,16 +31,16 @@ PUBLISHED:
INLINE MouseData(const MouseData &copy); INLINE MouseData(const MouseData &copy);
INLINE void operator = (const MouseData &copy); INLINE void operator = (const MouseData &copy);
INLINE int get_x() const; INLINE double get_x() const;
INLINE int get_y() const; INLINE double get_y() const;
INLINE bool get_in_window() const; INLINE bool get_in_window() const;
void output(ostream &out) const; void output(ostream &out) const;
public: public:
bool _in_window; bool _in_window;
int _xpos; double _xpos;
int _ypos; double _ypos;
}; };
INLINE ostream &operator << (ostream &out, const MouseData &md); INLINE ostream &operator << (ostream &out, const MouseData &md);