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>
This commit is contained in:
Sebastian Kügler 2015-11-12 01:43:13 +01:00 committed by Dirk Hohndel
parent 52b8cb5aa9
commit 3da912cda8
2 changed files with 17 additions and 11 deletions

View file

@ -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

View file

@ -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();