1
0
Fork 0

Canvas window: increase drag accuracy.

This commit is contained in:
Thomas Geymayer 2013-07-26 23:48:13 +02:00
parent 02e66fd034
commit e79e70062e
3 changed files with 14 additions and 9 deletions

View file

@ -116,6 +116,7 @@ class DesktopGroup:
uint8_t _resize; uint8_t _resize;
int _last_cursor; int _last_cursor;
osg::Vec2 _drag_start;
float _last_x, float _last_x,
_last_y; _last_y;
double _last_scroll_time; double _last_scroll_time;
@ -302,7 +303,8 @@ bool DesktopGroup::handleMouse(const osgGA::GUIEventAdapter& ea)
_resize_window.reset(); _resize_window.reset();
break; break;
case osgGA::GUIEventAdapter::DRAG: case osgGA::GUIEventAdapter::DRAG:
_resize_window.lock()->handleResize(_resize, event->delta); _resize_window.lock()->handleResize( _resize,
event->screen_pos - _drag_start );
return true; return true;
default: default:
return false; return false;
@ -379,9 +381,10 @@ bool DesktopGroup::handleMouse(const osgGA::GUIEventAdapter& ea)
if( ea.getEventType() == osgGA::GUIEventAdapter::PUSH ) if( ea.getEventType() == osgGA::GUIEventAdapter::PUSH )
{ {
_resize_window = window_at_cursor; _resize_window = window_at_cursor;
_drag_start = event->screen_pos;
window_at_cursor->raise(); window_at_cursor->raise();
window_at_cursor->handleResize( _resize | canvas::Window::INIT, window_at_cursor->handleResize(_resize | canvas::Window::INIT);
event->delta );
} }
return true; return true;

View file

@ -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 ) if( mode == NONE )
{ {
@ -180,14 +181,14 @@ namespace canvas
} }
if( mode & BOTTOM ) if( mode & BOTTOM )
_resize_bottom += delta.y(); _resize_bottom = getRegion().b() + offset.y();
else if( mode & TOP ) else if( mode & TOP )
_resize_top += delta.y(); _resize_top = getRegion().t() + offset.y();
if( mode & canvas::Window::RIGHT ) if( mode & canvas::Window::RIGHT )
_resize_right += delta.x(); _resize_right = getRegion().r() + offset.x();
else if( mode & canvas::Window::LEFT ) else if( mode & canvas::Window::LEFT )
_resize_left += delta.x(); _resize_left = getRegion().l() + offset.x();
} }
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------

View file

@ -76,7 +76,8 @@ namespace canvas
*/ */
void raise(); 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: protected: