diff options
-rw-r--r-- | qt-mobile/qml/DiveDetailsView.qml | 7 | ||||
-rw-r--r-- | qt-mobile/qmlprofile.cpp | 35 | ||||
-rw-r--r-- | qt-mobile/qmlprofile.h | 7 |
3 files changed, 37 insertions, 12 deletions
diff --git a/qt-mobile/qml/DiveDetailsView.qml b/qt-mobile/qml/DiveDetailsView.qml index 519bd7a65..7fdbc2a2e 100644 --- a/qt-mobile/qml/DiveDetailsView.qml +++ b/qt-mobile/qml/DiveDetailsView.qml @@ -28,7 +28,6 @@ Item { GridLayout { id: mainLayout anchors { - //fill: parent top: parent.top left: parent.left right: parent.right @@ -118,9 +117,11 @@ Item { QMLProfile { id: qmlProfile Layout.fillWidth: true - Layout.minimumHeight: Layout.preferredHeight - Layout.preferredHeight: width * 0.66 + Layout.preferredHeight: Layout.minimumHeight + Layout.minimumHeight: width * 0.75 Layout.columnSpan: 4 + clip: false + devicePixelRatio: MobileComponents.Units.devicePixelRatio Rectangle { color: "transparent" opacity: 0.6 diff --git a/qt-mobile/qmlprofile.cpp b/qt-mobile/qmlprofile.cpp index 9c1fd32a9..2c50bad3e 100644 --- a/qt-mobile/qmlprofile.cpp +++ b/qt-mobile/qmlprofile.cpp @@ -40,21 +40,30 @@ void QMLProfile::setDiveId(const QString &diveId) static bool firstRun = true; static QTransform profileTransform; m_diveId = diveId; - double marginFactor = 0.013; // margin as proportion of profile display width struct dive *d = get_dive_by_uniq_id(m_diveId.toInt()); if (m_diveId.toInt() < 1) return; if (!d) return; - - qDebug() << "setDiveId called with pos/size" << x() << y() << width() << height(); + //qDebug() << "setDiveId called with pos/size" << x() << y() << width() << height(); // set the profile widget's geometry and scale the viewport so // the scene fills it, then plot the dive on that widget + // the profile widget doesn't handle subsequent geometry changes well, + // so only do it once, then scale the image to the item's dimension. if (firstRun) { firstRun = false; m_profileWidget->setGeometry(QRect(x(), y(), width(), height())); - profileTransform.scale(width() / 100, height() / 100); } + // scale the profile widget's image to devicePixelRatio and a magic number + qreal dpr = (80 * (m_devicePixelRatio > 2 ? m_devicePixelRatio : 1.0)); + qreal sx = width() / dpr; + qreal sy = height() / dpr; + // don't forget to reset, otherwise we're + // scaling scaled items, growing it bigger and bigger with every pass + profileTransform.reset(); + profileTransform.scale(sx, sy); + //qDebug() << "scale:" << sx << sy; + m_profileWidget->setTransform(profileTransform); qDebug() << "effective transformation:" << m_profileWidget->transform().m11() << @@ -66,10 +75,18 @@ void QMLProfile::setDiveId(const QString &diveId) m_profileWidget->transform().m31() << m_profileWidget->transform().m32() << m_profileWidget->transform().m33(); - m_profileWidget->plotDive(d); - // scale the profile to create a margin - // the profile height is ~2/3 the width, so to create an even margin, - // the scale reduction for height should be 3/2 the reduction for width - m_profileWidget->scale(1 - 2 * marginFactor, 1 - 3 * marginFactor); +} + +qreal QMLProfile::devicePixelRatio() const +{ + return m_devicePixelRatio; +} + +void QMLProfile::setDevicePixelRatio(qreal dpr) +{ + if (dpr != m_devicePixelRatio) { + m_devicePixelRatio = dpr; + emit devicePixelRatioChanged(); + } } diff --git a/qt-mobile/qmlprofile.h b/qt-mobile/qmlprofile.h index 8a1c63fe6..35332ce8d 100644 --- a/qt-mobile/qmlprofile.h +++ b/qt-mobile/qmlprofile.h @@ -9,6 +9,8 @@ class QMLProfile : public QQuickPaintedItem { Q_OBJECT Q_PROPERTY(QString diveId READ diveId WRITE setDiveId NOTIFY diveIdChanged) + Q_PROPERTY(qreal devicePixelRatio READ devicePixelRatio WRITE setDevicePixelRatio NOTIFY devicePixelRatioChanged) + public: explicit QMLProfile(QQuickItem *parent = 0); virtual ~QMLProfile(); @@ -17,15 +19,20 @@ public: QString diveId() const; void setDiveId(const QString &diveId); + qreal devicePixelRatio() const; + void setDevicePixelRatio(qreal dpr); + public slots: void setMargin(int margin); private: QString m_diveId; + qreal m_devicePixelRatio; int m_margin; ProfileWidget2 *m_profileWidget; signals: void rightAlignedChanged(); void diveIdChanged(); + void devicePixelRatioChanged(); }; #endif // QMLPROFILE_H |