aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2020-02-17 10:46:31 -0800
committerGravatar Dirk Hohndel <dirk@hohndel.org>2020-02-18 07:34:46 -0800
commit51100cb20e52d8d0d065d0cc49b28f432b3c151a (patch)
tree2f37817abdb7c01adb6f58ed1b9f477546b6b7e3
parent31afa976f3a6425b0cf8cdc77978c4156b726304 (diff)
downloadsubsurface-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>
-rw-r--r--profile-widget/qmlprofile.cpp29
-rw-r--r--profile-widget/qmlprofile.h5
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