mirror of
https://github.com/subsurface/subsurface.git
synced 2024-12-02 23:20:20 +00:00
7f22984d18
Scale the QML profile in two stages. Firstly, scale to fit. Secondly, scale again to 95% to create a margin around the profile. The previous method scales to fit a create a margin in one step. It appears more elegant, and the margin is calculated more rationally. Unfortunately on some devices, including mine, the resulting profile is cropped for no obvious reason. Signed-off-by: Rick Walsh <rickmwalsh@gmail.com> Signed-off-by: Dirk Hohndel <dirk@hohndel.org>
72 lines
1.9 KiB
C++
72 lines
1.9 KiB
C++
#include "qmlprofile.h"
|
|
#include "profile-widget/profilewidget2.h"
|
|
#include "subsurface-core/dive.h"
|
|
#include <QTransform>
|
|
|
|
QMLProfile::QMLProfile(QQuickItem *parent) :
|
|
QQuickPaintedItem(parent),
|
|
m_margin(0)
|
|
{
|
|
setAntialiasing(true);
|
|
m_profileWidget = new ProfileWidget2(0);
|
|
m_profileWidget->setProfileState();
|
|
m_profileWidget->setPrintMode(true);
|
|
m_profileWidget->setFontPrintScale(0.8);
|
|
//m_profileWidget->setGeometry(this->geometry());
|
|
}
|
|
|
|
QMLProfile::~QMLProfile()
|
|
{
|
|
m_profileWidget->deleteLater();
|
|
}
|
|
|
|
void QMLProfile::paint(QPainter *painter)
|
|
{
|
|
m_profileWidget->render(painter);
|
|
}
|
|
|
|
void QMLProfile::setMargin(int margin)
|
|
{
|
|
m_margin = margin;
|
|
}
|
|
|
|
QString QMLProfile::diveId() const
|
|
{
|
|
return m_diveId;
|
|
}
|
|
|
|
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
|
|
if (firstRun) {
|
|
firstRun = false;
|
|
m_profileWidget->setGeometry(QRect(x(), y(), width(), height()));
|
|
profileTransform.scale(width() / 100, height() / 100);
|
|
}
|
|
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();
|
|
|
|
m_profileWidget->plotDive(d);
|
|
// scale the profile to create a margin
|
|
m_profileWidget->scale(0.95, 0.95);
|
|
}
|