mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-28 21:20:19 +00:00
c0ac953242
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>
48 lines
1 KiB
C++
48 lines
1 KiB
C++
#include "qmlprofile.h"
|
|
#include "profile-widget/profilewidget2.h"
|
|
#include "subsurface-core/dive.h"
|
|
#include <QTransform>
|
|
|
|
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)
|
|
{
|
|
QTransform profileTransform;
|
|
profileTransform.scale(width() / 100, height() / 100);
|
|
m_profileWidget->setTransform(profileTransform);
|
|
m_profileWidget->render(painter);
|
|
}
|
|
|
|
QString QMLProfile::diveId() const
|
|
{
|
|
return m_diveId;
|
|
}
|
|
|
|
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);
|
|
}
|