diff options
author | Dirk Hohndel <dirk@hohndel.org> | 2020-02-17 10:46:31 -0800 |
---|---|---|
committer | Dirk Hohndel <dirk@hohndel.org> | 2020-02-18 07:34:46 -0800 |
commit | 51100cb20e52d8d0d065d0cc49b28f432b3c151a (patch) | |
tree | 2f37817abdb7c01adb6f58ed1b9f477546b6b7e3 /profile-widget | |
parent | 31afa976f3a6425b0cf8cdc77978c4156b726304 (diff) | |
download | subsurface-51100cb20e52d8d0d065d0cc49b28f432b3c151a.tar.gz |
mobile/profile: add x/y offsets to widget
This will allow us to pan the profile around in the QML UI.
Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'profile-widget')
-rw-r--r-- | profile-widget/qmlprofile.cpp | 29 | ||||
-rw-r--r-- | profile-widget/qmlprofile.h | 5 |
2 files changed, 30 insertions, 4 deletions
diff --git a/profile-widget/qmlprofile.cpp b/profile-widget/qmlprofile.cpp index f1012aca4..52ac799ca 100644 --- a/profile-widget/qmlprofile.cpp +++ b/profile-widget/qmlprofile.cpp @@ -12,9 +12,12 @@ QMLProfile::QMLProfile(QQuickItem *parent) : QQuickPaintedItem(parent), m_devicePixelRatio(1.0), m_margin(0), - m_profileWidget(new ProfileWidget2) + m_profileWidget(new ProfileWidget2), + m_xOffset(0.0), + m_yOffset(0.0) { setAntialiasing(true); + setFlags(QQuickItem::ItemClipsChildrenToShape | QQuickItem::ItemHasContents ); m_profileWidget->setProfileState(); m_profileWidget->setPrintMode(true); m_profileWidget->setFontPrintScale(0.8); @@ -58,7 +61,7 @@ void QMLProfile::paint(QPainter *painter) QTransform profileTransform = QTransform(); profileTransform.scale(sx, sy); QTransform painterTransform = painter->transform(); - painterTransform.translate(-painterRect.width() * magicShiftFactor ,-painterRect.height() * magicShiftFactor); + painterTransform.translate(dpr * m_xOffset - painterRect.width() * magicShiftFactor, dpr * m_yOffset - painterRect.height() * magicShiftFactor); #if defined(PROFILE_SCALING_DEBUG) // some debugging messages to help adjust this in case the magic above is insufficient @@ -79,7 +82,7 @@ void QMLProfile::paint(QPainter *painter) // finally, render the profile m_profileWidget->render(painter); if (verbose) - qDebug() << "finished rendering profile in" << timer.elapsed() << "ms"; + qDebug() << "finished rendering profile with offset" << QString::number(m_xOffset, 'f', 1) << "/" << QString::number(m_yOffset, 'f', 1) << "in" << timer.elapsed() << "ms"; } void QMLProfile::setMargin(int margin) @@ -98,7 +101,7 @@ void QMLProfile::updateProfile() if (!d) return; if (verbose) - qDebug() << "update profile for dive #" << d->number; + qDebug() << "update profile for dive #" << d->number << "offeset" << QString::number(m_xOffset, 'f', 1) << "/" << QString::number(m_yOffset, 'f', 1); m_profileWidget->plotDive(d, true); } @@ -125,6 +128,24 @@ void QMLProfile::setDevicePixelRatio(qreal dpr) } } +// don't update the profile here, have the user update x and y and then manually trigger an update +void QMLProfile::setXOffset(qreal value) +{ + if (IS_FP_SAME(value, m_xOffset)) + return; + m_xOffset = value; + emit xOffsetChanged(); +} + +// don't update the profile here, have the user update x and y and then manually trigger an update +void QMLProfile::setYOffset(qreal value) +{ + if (IS_FP_SAME(value, m_yOffset)) + return; + m_yOffset = value; + emit yOffsetChanged(); +} + void QMLProfile::screenChanged(QScreen *screen) { setDevicePixelRatio(screen->devicePixelRatio()); diff --git a/profile-widget/qmlprofile.h b/profile-widget/qmlprofile.h index 6074fb846..2798fa733 100644 --- a/profile-widget/qmlprofile.h +++ b/profile-widget/qmlprofile.h @@ -10,6 +10,8 @@ class QMLProfile : public QQuickPaintedItem Q_OBJECT Q_PROPERTY(int diveId MEMBER m_diveId WRITE setDiveId) Q_PROPERTY(qreal devicePixelRatio READ devicePixelRatio WRITE setDevicePixelRatio NOTIFY devicePixelRatioChanged) + Q_PROPERTY(qreal xOffset MEMBER m_xOffset WRITE setXOffset NOTIFY xOffsetChanged) + Q_PROPERTY(qreal yOffset MEMBER m_yOffset WRITE setYOffset NOTIFY yOffsetChanged) public: explicit QMLProfile(QQuickItem *parent = 0); @@ -30,12 +32,15 @@ private: int m_diveId; qreal m_devicePixelRatio; int m_margin; + qreal m_xOffset, m_yOffset; QScopedPointer<ProfileWidget2> m_profileWidget; void updateProfile(); signals: void rightAlignedChanged(); void devicePixelRatioChanged(); + void xOffsetChanged(); + void yOffsetChanged(); }; #endif // QMLPROFILE_H |