sc::MouseEventPtr event(new sc::MouseEvent);
event->time = ea.getTime();
- event->pos.x() = 0.5 * (ea.getXnormalized() + 1) * _width + 0.5;
- event->pos.y() = 0.5 * (ea.getYnormalized() + 1) * _height + 0.5;
+ event->screen_pos.x() = 0.5 * (ea.getXnormalized() + 1) * _width + 0.5;
+ event->screen_pos.y() = 0.5 * (ea.getYnormalized() + 1) * _height + 0.5;
if( ea.getMouseYOrientation()
!= osgGA::GUIEventAdapter::Y_INCREASING_DOWNWARDS )
- event->pos.y() = _height - event->pos.y();
+ event->screen_pos.y() = _height - event->screen_pos.y();
- event->delta.x() = event->pos.x() - _last_x;
- event->delta.y() = event->pos.y() - _last_y;
+ event->delta.x() = event->getScreenX() - _last_x;
+ event->delta.y() = event->getScreenY() - _last_y;
- _last_x = event->pos.x();
- _last_y = event->pos.y();
+ _last_x = event->getScreenX();
+ _last_y = event->getScreenY();
+ event->client_pos = event->screen_pos;
event->button = ea.getButton();
event->state = ea.getButtonMask();
event->mod = ea.getModKeyMask();
canvas::WindowPtr window =
static_cast<WindowUserData*>(layer->getChild(j)->getUserData())
->window.lock();
- if( window->getRegion().contains(event->pos.x(), event->pos.y()) )
+ if( window->getRegion().contains( event->getScreenX(),
+ event->getScreenY() ) )
{
window_at_cursor = window;
break;
move_event->type = sc::Event::MOUSE_LEAVE;
// Let the event position be always relative to the top left window corner
- move_event->pos.x() -= last_mouse_over->getRegion().x();
- move_event->pos.y() -= last_mouse_over->getRegion().y();
+ move_event->client_pos.x() -= last_mouse_over->getRegion().x();
+ move_event->client_pos.y() -= last_mouse_over->getRegion().y();
last_mouse_over->handleMouseEvent(move_event);
}
if( target_window )
{
// Let the event position be always relative to the top left window corner
- event->pos.x() -= target_window->getRegion().x();
- event->pos.y() -= target_window->getRegion().y();
+ event->client_pos.x() -= target_window->getRegion().x();
+ event->client_pos.y() -= target_window->getRegion().y();
return target_window->handleMouseEvent(event);
}
#include <simgear/canvas/Canvas.hxx>
#include <simgear/canvas/MouseEvent.hxx>
-SGPropertyNode_ptr CanvasWidget::_time;
+SGPropertyNode_ptr CanvasWidget::_time,
+ CanvasWidget::_view_height;
//------------------------------------------------------------------------------
CanvasWidget::CanvasWidget( int x, int y,
_time = globals->get_props()->getNode("/sim/time/elapsed-sec");
event->time = _time->getDoubleValue();
- event->pos.set(x - abox.min[0], abox.max[1] - y);
- event->delta.set( event->pos.x() - _last_x,
- event->pos.y() - _last_y );
+ if( !_view_height )
+ _view_height = globals->get_props()->getNode("/sim/gui/canvas/size[1]");
+ event->screen_pos.set(x, _view_height->getIntValue() - y);
- _last_x = event->pos.x();
- _last_y = event->pos.y();
+ event->client_pos.set(x - abox.min[0], abox.max[1] - y);
+ event->delta.set( event->getScreenX() - _last_x,
+ event->getScreenY() - _last_y );
+
+ _last_x = event->getScreenX();
+ _last_y = event->getScreenY();
switch( button )
{
.method_func<&f_eventStopPropagation>("stopPropagation");
NasalMouseEvent::init("canvas.MouseEvent")
.bases<NasalEvent>()
- .member("x", &sc::MouseEvent::getPosX)
- .member("y", &sc::MouseEvent::getPosY)
+ .member("screenX", &sc::MouseEvent::getScreenX)
+ .member("screenY", &sc::MouseEvent::getScreenY)
+ .member("clientX", &sc::MouseEvent::getClientX)
+ .member("clientY", &sc::MouseEvent::getClientY)
.member("deltaX", &sc::MouseEvent::getDeltaX)
.member("deltaY", &sc::MouseEvent::getDeltaY)
.member("click_count", &sc::MouseEvent::getCurrentClickCount);