From dc6d353a299d3eeaf57055486db12548198114a7 Mon Sep 17 00:00:00 2001 From: Laszlo Agocs Date: Tue, 10 Mar 2015 15:21:48 +0100 Subject: linuxfb: Add support for QCursor::setPos() Task-number: QTBUG-44856 Change-Id: I102137b3ccdfbea23eb470c38a47c807572d232d Reviewed-by: Shawn Rutledge Reviewed-by: Andy Nichols --- src/platformsupport/fbconvenience/qfbcursor.cpp | 26 ++++++++++++++++++------- src/platformsupport/fbconvenience/qfbcursor_p.h | 7 +++++-- 2 files changed, 24 insertions(+), 9 deletions(-) (limited to 'src/platformsupport') diff --git a/src/platformsupport/fbconvenience/qfbcursor.cpp b/src/platformsupport/fbconvenience/qfbcursor.cpp index 963d315998..c727d67e72 100644 --- a/src/platformsupport/fbconvenience/qfbcursor.cpp +++ b/src/platformsupport/fbconvenience/qfbcursor.cpp @@ -81,22 +81,34 @@ QRect QFbCursor::getCurrentRect() { QRect rect = mGraphic->image()->rect().translated(-mGraphic->hotspot().x(), -mGraphic->hotspot().y()); - rect.translate(QCursor::pos()); + rect.translate(m_pos); QPoint mScreenOffset = mScreen->geometry().topLeft(); rect.translate(-mScreenOffset); // global to local translation return rect; } +QPoint QFbCursor::pos() const +{ + return m_pos; +} -void QFbCursor::pointerEvent(const QMouseEvent & e) +void QFbCursor::setPos(const QPoint &pos) { - Q_UNUSED(e); - QPoint mScreenOffset = mScreen->geometry().topLeft(); + QGuiApplicationPrivate::inputDeviceManager()->setCursorPos(pos); + m_pos = pos; mCurrentRect = getCurrentRect(); - // global to local translation - if (mOnScreen || mScreen->geometry().intersects(mCurrentRect.translated(mScreenOffset))) { + if (mOnScreen || mScreen->geometry().intersects(mCurrentRect.translated(mScreen->geometry().topLeft()))) + setDirty(); +} + +void QFbCursor::pointerEvent(const QMouseEvent &e) +{ + if (e.type() != QEvent::MouseMove) + return; + m_pos = e.screenPos().toPoint(); + mCurrentRect = getCurrentRect(); + if (mOnScreen || mScreen->geometry().intersects(mCurrentRect.translated(mScreen->geometry().topLeft()))) setDirty(); - } } QRect QFbCursor::drawCursor(QPainter & painter) diff --git a/src/platformsupport/fbconvenience/qfbcursor_p.h b/src/platformsupport/fbconvenience/qfbcursor_p.h index fe3aeada4c..9c5506b455 100644 --- a/src/platformsupport/fbconvenience/qfbcursor_p.h +++ b/src/platformsupport/fbconvenience/qfbcursor_p.h @@ -81,9 +81,11 @@ public: virtual QRect drawCursor(QPainter &painter); // input methods - virtual void pointerEvent(const QMouseEvent &event) Q_DECL_OVERRIDE; + void pointerEvent(const QMouseEvent &event) Q_DECL_OVERRIDE; + QPoint pos() const Q_DECL_OVERRIDE; + void setPos(const QPoint &pos) Q_DECL_OVERRIDE; #ifndef QT_NO_CURSOR - virtual void changeCursor(QCursor *widgetCursor, QWindow *window) Q_DECL_OVERRIDE; + void changeCursor(QCursor *widgetCursor, QWindow *window) Q_DECL_OVERRIDE; #endif virtual void setDirty(); @@ -107,6 +109,7 @@ private: bool mOnScreen; QPlatformCursorImage *mGraphic; QFbCursorDeviceListener *mDeviceListener; + QPoint m_pos; }; QT_END_NAMESPACE -- cgit v1.2.3