- CSSOffsets outset = _outset.getAbsOffsets(getTextureDimensions());
-
- event.reset( new MouseEvent(*event) );
- event->client_pos += osg::Vec2f(outset.l, outset.t);
- event->client_pos.x() *= src_canvas->getViewWidth()
- / (_region.width() + outset.l + outset.r);
- event->client_pos.y() *= src_canvas->getViewHeight()
- / (_region.height() + outset.t + outset.b);
+ mouse_event.reset( new MouseEvent(*mouse_event) );
+ event = mouse_event;
+
+ mouse_event->client_pos = mouse_event->local_pos
+ - toOsg(_region.getMin());
+
+ osg::Vec2f size(_region.width(), _region.height());
+ if( _outset.valid )
+ {
+ CSSOffsets outset = _outset.getAbsOffsets(getTextureDimensions());
+
+ mouse_event->client_pos += osg::Vec2f(outset.l, outset.t);
+ size.x() += outset.l + outset.r;
+ size.y() += outset.t + outset.b;
+ }
+
+ // Scale event pos according to canvas view size vs. displayed/screen size
+ mouse_event->client_pos.x() *= src_canvas->getViewWidth() / size.x();
+ mouse_event->client_pos.y() *= src_canvas->getViewHeight()/ size.y();
+ mouse_event->local_pos = mouse_event->client_pos;