diff options
Diffstat (limited to 'src/other/panmodefilter.cpp')
-rw-r--r-- | src/other/panmodefilter.cpp | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/src/other/panmodefilter.cpp b/src/other/panmodefilter.cpp index 868d047..0757159 100644 --- a/src/other/panmodefilter.cpp +++ b/src/other/panmodefilter.cpp @@ -34,6 +34,8 @@ #include "mouseindicator.h" #include "widget.h" #include "application.h" +#include "widgetmanager.h" +#include "displaywidget.h" #include <QtGui/QGraphicsSceneEvent> @@ -50,7 +52,9 @@ PanModeFilter::~PanModeFilter() bool PanModeFilter::sceneEventFilter(QGraphicsItem *watched, QEvent *event) { Widget *widget = static_cast<Widget *>(watched); + const QRectF displayRect = widget->widgetManager()->display()->boundingRect(); QGraphicsSceneMouseEvent *ev = 0; + QPointF validPoint; QtSimulatorPrivate::TouchEventData touchEvent; switch (event->type()) { case QEvent::GraphicsSceneMousePress: @@ -107,13 +111,15 @@ bool PanModeFilter::sceneEventFilter(QGraphicsItem *watched, QEvent *event) break; case QEvent::GraphicsSceneMouseMove: ev = static_cast<QGraphicsSceneMouseEvent *>(event); + validPoint = constrainPointToRectangle(ev->pos(), displayRect); switch (mState) { case updateFirstPoint: - mValuePoints[0]->setCenter(ev->pos()); + mValuePoints[0]->setCenter(validPoint); return true; case updateSecondPoint: - mValuePoints[1]->setCenter(ev->pos()); - mValuePoints[0]->setCenter(mValuePoints[1]->center() - mPanDiff); + mValuePoints[1]->setCenter(validPoint); + validPoint = constrainPointToRectangle(ev->pos() - mPanDiff, displayRect); + mValuePoints[0]->setCenter(validPoint); touchEvent = createTouchEventFromMouseEvent(widget, ev); QtSimulatorPrivate::RemoteMetacall<void>::call(widget->owner->socket(), QtSimulatorPrivate::NoSync, |