summaryrefslogtreecommitdiffstats
path: root/qt-mobile
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2016-01-15 13:55:42 -0800
committerGravatar Dirk Hohndel <dirk@hohndel.org>2016-01-15 13:55:42 -0800
commitdf9062bd2ecf5e7c2d392b55304ad6430b6bcd47 (patch)
tree6955f85e24bf7d14b9534241f9e44e152458f4a9 /qt-mobile
parentba111ce9a3a913bdbcc54f7eb2f96b3514a1673e (diff)
downloadsubsurface-df9062bd2ecf5e7c2d392b55304ad6430b6bcd47.tar.gz
QML UI: next attempt to address the profile scaling
It seems to be much more logical to address the size and scale right before rendering. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-mobile')
-rw-r--r--qt-mobile/qmlprofile.cpp47
1 files changed, 15 insertions, 32 deletions
diff --git a/qt-mobile/qmlprofile.cpp b/qt-mobile/qmlprofile.cpp
index 2c50bad3e..c617b73a3 100644
--- a/qt-mobile/qmlprofile.cpp
+++ b/qt-mobile/qmlprofile.cpp
@@ -22,6 +22,20 @@ QMLProfile::~QMLProfile()
void QMLProfile::paint(QPainter *painter)
{
+ m_profileWidget->setGeometry(QRect(0, 0, width(), height()));
+ // scale the profile widget's image to devicePixelRatio and a magic number
+ qreal dpr = 104; // that should give us 2% margin all around
+ qreal sx = width() / dpr;
+ qreal sy = height() / dpr;
+
+ qDebug() << "paint called; rect" << x() << y() << width() << height() << "dpr" << dpr << "sx/sy" << sx << sy;
+
+ QTransform profileTransform;
+ profileTransform.scale(sx, sy);
+ m_profileWidget->setTransform(profileTransform);
+ qDebug() << "viewportTransform" << m_profileWidget->viewportTransform();
+ qDebug() << "after scaling we have margin/rect" << m_profileWidget->contentsMargins() << m_profileWidget->contentsRect();
+ qDebug() << "size of the QMLProfile:" << this->contentsSize() << this->contentsScale();
m_profileWidget->render(painter);
}
@@ -37,44 +51,13 @@ QString QMLProfile::diveId() const
void QMLProfile::setDiveId(const QString &diveId)
{
- static bool firstRun = true;
- static QTransform profileTransform;
m_diveId = diveId;
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();
- // 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()));
- }
- // 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() <<
- m_profileWidget->transform().m12() <<
- m_profileWidget->transform().m13() <<
- m_profileWidget->transform().m21() <<
- m_profileWidget->transform().m22() <<
- m_profileWidget->transform().m23() <<
- m_profileWidget->transform().m31() <<
- m_profileWidget->transform().m32() <<
- m_profileWidget->transform().m33();
+ qDebug() << "setDiveId called with valid dive" << d->number;
m_profileWidget->plotDive(d);
}