summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Sebastian Kügler <sebas@kde.org>2015-11-12 01:43:13 +0100
committerGravatar Dirk Hohndel <dirk@hohndel.org>2015-11-11 19:06:00 -0800
commit3da912cda8e89d1e7ab0d8bfbf9e4ebefc42c326 (patch)
tree35f8843caf873f9b7e366388549e49c3eb119250
parent52b8cb5aa98d8de1d41ce2a2b3fc16e542451df3 (diff)
downloadsubsurface-3da912cda8e89d1e7ab0d8bfbf9e4ebefc42c326.tar.gz
Cache diveprofile widget in the diveprofile QtQuick item
- paint() can become a hot path, especially when we think about repainting the item on size changes. In general, it's a really good idea to keep this function as fast as possible, as we want to be able to repaint the item when needed. Also, ProfileWidget is pretty heavy to set up, so rather spend a bit of memory there. - Rename profile to m_profileWidget, it already was member var. - Sizing ... I have to admit I don't understand the rendering of the ProfileWidget. I'd like it to do the following things: - render at native resolution, we don't want to resize it - react to item changes - we want to reset the size and re-render the widget into the item in those cases - perhaps be able to use a couple more of the profilewidget's features Signed-off-by: Sebastian Kügler <sebas@kde.org> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
-rw-r--r--qt-mobile/qmlprofile.cpp24
-rw-r--r--qt-mobile/qmlprofile.h4
2 files changed, 17 insertions, 11 deletions
diff --git a/qt-mobile/qmlprofile.cpp b/qt-mobile/qmlprofile.cpp
index 01b03d1c7..a4ff8a9d6 100644
--- a/qt-mobile/qmlprofile.cpp
+++ b/qt-mobile/qmlprofile.cpp
@@ -6,6 +6,15 @@
QMLProfile::QMLProfile(QQuickItem *parent) :
QQuickPaintedItem(parent)
{
+ m_profileWidget = new ProfileWidget2(0);
+ m_profileWidget->setProfileState();
+ m_profileWidget->setToolTipVisibile(false);
+ //m_profileWidget->setGeometry(this->geometry());
+}
+
+QMLProfile::~QMLProfile()
+{
+ m_profileWidget->deleteLater();
}
void QMLProfile::paint(QPainter *painter)
@@ -18,21 +27,16 @@ void QMLProfile::paint(QPainter *painter)
if (!d)
return;
-
- profile = new ProfileWidget2(0);
- profile->setProfileState();
- profile->setToolTipVisibile(false);
-
int old_animation_speed = prefs.animation_speed;
prefs.animation_speed = 0; // no animations while rendering the QGraphicsView
- profile->plotDive(d);
+
+ m_profileWidget->setGeometry(QRect(x(), y(), width(), height()));
+ m_profileWidget->plotDive(d);
QTransform profileTransform;
profileTransform.scale(this->height() / 100, this->height() / 100);
- profile->setTransform(profileTransform);
- profile->render(painter);
+ m_profileWidget->setTransform(profileTransform);
+ m_profileWidget->render(painter);
prefs.animation_speed = old_animation_speed;
-
- profile->deleteLater();
}
QString QMLProfile::diveId() const
diff --git a/qt-mobile/qmlprofile.h b/qt-mobile/qmlprofile.h
index b5192913a..6cbdd62ff 100644
--- a/qt-mobile/qmlprofile.h
+++ b/qt-mobile/qmlprofile.h
@@ -11,6 +11,8 @@ class QMLProfile : public QQuickPaintedItem
Q_PROPERTY(QString diveId READ diveId WRITE setDiveId NOTIFY diveIdChanged)
public:
explicit QMLProfile(QQuickItem *parent = 0);
+ virtual ~QMLProfile();
+
void paint(QPainter *painter);
QString diveId() const;
@@ -18,7 +20,7 @@ public:
private:
QString m_diveId;
- ProfileWidget2 *profile;
+ ProfileWidget2 *m_profileWidget;
signals:
void rightAlignedChanged();
void diveIdChanged();