From e79e70062e11e34842a4ee42ce31df6fabea0eb7 Mon Sep 17 00:00:00 2001 From: Thomas Geymayer Date: Fri, 26 Jul 2013 23:48:13 +0200 Subject: [PATCH] Canvas window: increase drag accuracy. --- src/Canvas/gui_mgr.cxx | 9 ++++++--- src/Canvas/window.cxx | 11 ++++++----- src/Canvas/window.hxx | 3 ++- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/src/Canvas/gui_mgr.cxx b/src/Canvas/gui_mgr.cxx index 3188430e3..b501a2a40 100644 --- a/src/Canvas/gui_mgr.cxx +++ b/src/Canvas/gui_mgr.cxx @@ -116,6 +116,7 @@ class DesktopGroup: uint8_t _resize; int _last_cursor; + osg::Vec2 _drag_start; float _last_x, _last_y; double _last_scroll_time; @@ -302,7 +303,8 @@ bool DesktopGroup::handleMouse(const osgGA::GUIEventAdapter& ea) _resize_window.reset(); break; case osgGA::GUIEventAdapter::DRAG: - _resize_window.lock()->handleResize(_resize, event->delta); + _resize_window.lock()->handleResize( _resize, + event->screen_pos - _drag_start ); return true; default: return false; @@ -379,9 +381,10 @@ bool DesktopGroup::handleMouse(const osgGA::GUIEventAdapter& ea) if( ea.getEventType() == osgGA::GUIEventAdapter::PUSH ) { _resize_window = window_at_cursor; + _drag_start = event->screen_pos; + window_at_cursor->raise(); - window_at_cursor->handleResize( _resize | canvas::Window::INIT, - event->delta ); + window_at_cursor->handleResize(_resize | canvas::Window::INIT); } return true; diff --git a/src/Canvas/window.cxx b/src/Canvas/window.cxx index 653427272..ab02db9ad 100644 --- a/src/Canvas/window.cxx +++ b/src/Canvas/window.cxx @@ -163,7 +163,8 @@ namespace canvas } //---------------------------------------------------------------------------- - void Window::handleResize(uint8_t mode, const osg::Vec2f& delta) + void Window::handleResize( uint8_t mode, + const osg::Vec2f& offset ) { if( mode == NONE ) { @@ -180,14 +181,14 @@ namespace canvas } if( mode & BOTTOM ) - _resize_bottom += delta.y(); + _resize_bottom = getRegion().b() + offset.y(); else if( mode & TOP ) - _resize_top += delta.y(); + _resize_top = getRegion().t() + offset.y(); if( mode & canvas::Window::RIGHT ) - _resize_right += delta.x(); + _resize_right = getRegion().r() + offset.x(); else if( mode & canvas::Window::LEFT ) - _resize_left += delta.x(); + _resize_left = getRegion().l() + offset.x(); } //---------------------------------------------------------------------------- diff --git a/src/Canvas/window.hxx b/src/Canvas/window.hxx index 23c483522..ece277281 100644 --- a/src/Canvas/window.hxx +++ b/src/Canvas/window.hxx @@ -76,7 +76,8 @@ namespace canvas */ void raise(); - void handleResize(uint8_t mode, const osg::Vec2f& delta = osg::Vec2f()); + void handleResize( uint8_t mode, + const osg::Vec2f& offset = osg::Vec2f() ); protected: -- 2.39.5