summaryrefslogtreecommitdiffstats
path: root/qt-mobile/qmlprofile.cpp
diff options
context:
space:
mode:
authorGravatar Dirk Hohndel <dirk@hohndel.org>2015-12-01 15:22:38 -0800
committerGravatar Dirk Hohndel <dirk@hohndel.org>2015-12-01 15:32:16 -0800
commitc0ac9532427dee713c8ba96a1ceb10ee78b2bfc8 (patch)
tree1a66c8f01201f0e2c755c91c634465990cac66a6 /qt-mobile/qmlprofile.cpp
parent9dd26a00e86eb0c7e5f0f9650f021b24e73d67df (diff)
downloadsubsurface-c0ac9532427dee713c8ba96a1ceb10ee78b2bfc8.tar.gz
QML UI: call plot dive when we set the dive
The asynchronous nature of the profile bites us here. plotDive() signals that it changes model data and expects the rest of the data structures to respond to that. Very neat and it seems to work perfectly well on the desktop, but on Android calling render() right after plotDive() resulted in paint() functions being called before all the elements had been calculated as a result of the signals being emitted in the model change. That's why so often the profile was missing parts. Now admittedly this makes me nervous. Do we now know that all calculations have finished by the time render() gets called? Not really. It just seems that in my testing we tend to get lucky and things work out. But that does not feel like a sane architecture to me. Messing around with the animation speed is silly as we render the profile into a pixmap, so let's turn this off globally. Also, the scaling of the pixmap is still completely bogus. Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
Diffstat (limited to 'qt-mobile/qmlprofile.cpp')
-rw-r--r--qt-mobile/qmlprofile.cpp28
1 files changed, 13 insertions, 15 deletions
diff --git a/qt-mobile/qmlprofile.cpp b/qt-mobile/qmlprofile.cpp
index a4ff8a9d6..a55bf8d32 100644
--- a/qt-mobile/qmlprofile.cpp
+++ b/qt-mobile/qmlprofile.cpp
@@ -19,24 +19,10 @@ QMLProfile::~QMLProfile()
void QMLProfile::paint(QPainter *painter)
{
- if (m_diveId.toInt() < 1)
- return;
-
- struct dive *d;
- d = get_dive_by_uniq_id(m_diveId.toInt());
- if (!d)
- return;
-
- int old_animation_speed = prefs.animation_speed;
- prefs.animation_speed = 0; // no animations while rendering the QGraphicsView
-
- m_profileWidget->setGeometry(QRect(x(), y(), width(), height()));
- m_profileWidget->plotDive(d);
QTransform profileTransform;
- profileTransform.scale(this->height() / 100, this->height() / 100);
+ profileTransform.scale(width() / 100, height() / 100);
m_profileWidget->setTransform(profileTransform);
m_profileWidget->render(painter);
- prefs.animation_speed = old_animation_speed;
}
QString QMLProfile::diveId() const
@@ -47,4 +33,16 @@ QString QMLProfile::diveId() const
void QMLProfile::setDiveId(const QString &diveId)
{
m_diveId = diveId;
+ int no = -1;
+ struct dive *d = get_dive_by_uniq_id(m_diveId.toInt());
+ if (d)
+ no = d->number;
+ if (m_diveId.toInt() < 1)
+ return;
+
+ if (!d)
+ return;
+
+ m_profileWidget->setGeometry(QRect(x(), y(), width(), height()));
+ m_profileWidget->plotDive(d);
}