diff --git a/src/GUI/CanvasWidget.cxx b/src/GUI/CanvasWidget.cxx
index 18bee716d..fe0119db5 100644
--- a/src/GUI/CanvasWidget.cxx
+++ b/src/GUI/CanvasWidget.cxx
@@ -113,11 +113,12 @@ void CanvasWidget::doHit(int button, int updown, int x, int y)
 
   namespace sc = simgear::canvas;
   sc::MouseEventPtr event(new sc::MouseEvent);
-  event->pos.set(x - abox.min[0], y - abox.min[1]);
-  event->delta.set(x - _last_x, y - _last_y);
+  event->pos.set(x - abox.min[0], abox.max[1] - y);
+  event->delta.set( event->pos.x() - _last_x,
+                    event->pos.y() - _last_y );
 
-  _last_x = x;
-  _last_y = y;
+  _last_x = event->pos.x();
+  _last_y = event->pos.y();
 
   switch( button )
   {
diff --git a/src/GUI/CanvasWidget.hxx b/src/GUI/CanvasWidget.hxx
index 976b336ae..f5fa0bf75 100644
--- a/src/GUI/CanvasWidget.hxx
+++ b/src/GUI/CanvasWidget.hxx
@@ -45,8 +45,8 @@ class CanvasWidget:
                        *_mouse_down,
                        *_mouse_drag;
 
-    int _last_x,
-        _last_y;
+    float _last_x,
+          _last_y;
 };
 
 #endif /* CANVASWIDGET_HXX_ */