profile: pass printFontScale on creation of the profile

Not having to readjust the scale on-demand will make the
code distinctly simpler. Let's just pass it once.

Signed-off-by: Berthold Stoeger <bstoeger@mail.tuwien.ac.at>
This commit is contained in:
Berthold Stoeger 2021-05-31 22:29:00 +02:00 committed by Dirk Hohndel
parent 5df0efbc7f
commit a14f740df0
7 changed files with 15 additions and 23 deletions

View file

@ -52,9 +52,8 @@ static void exportProfile(ProfileWidget2 *profile, const struct dive *dive, cons
static std::unique_ptr<ProfileWidget2> getPrintProfile() static std::unique_ptr<ProfileWidget2> getPrintProfile()
{ {
auto profile = std::make_unique<ProfileWidget2>(nullptr, nullptr); auto profile = std::make_unique<ProfileWidget2>(nullptr, (double)profileScale, nullptr);
profile->setPrintMode(true); profile->setPrintMode(true);
profile->setFontPrintScale((double)profileScale);
return profile; return profile;
} }

View file

@ -609,7 +609,7 @@ void PlannerWidgets::printDecoPlan()
painter.setRenderHint(QPainter::Antialiasing); painter.setRenderHint(QPainter::Antialiasing);
painter.setRenderHint(QPainter::SmoothPixmapTransform); painter.setRenderHint(QPainter::SmoothPixmapTransform);
auto profile = std::make_unique<ProfileWidget2>(DivePlannerPointsModel::instance(), nullptr); auto profile = std::make_unique<ProfileWidget2>(DivePlannerPointsModel::instance(), 1.0, nullptr);
profile->setPlanState(&displayed_dive, 0); profile->setPlanState(&displayed_dive, 0);
profile->plotDive(&displayed_dive, 0, true, true); profile->plotDive(&displayed_dive, 0, true, true);
profile->setPrintMode(true); profile->setPrintMode(true);

View file

@ -102,8 +102,14 @@ void Printer::flowRender()
void Printer::render(int pages) void Printer::render(int pages)
{ {
auto profile = std::make_unique<ProfileWidget2>(nullptr, nullptr); // get all refereces to diveprofile class in the Html template
double printFontScale = 1.0; QWebElementCollection collection = webView->page()->mainFrame()->findAllElements(".diveprofile");
// A "standard" profile has about 600 pixels in height.
// Scale the fonts in the printed profile accordingly.
// This is arbitrary, but it seems to work reasonably well.
double printFontScale = collection.count() > 0 ? collection[0].geometry().size().height() / 600.0 : 1.0;
auto profile = std::make_unique<ProfileWidget2>(nullptr, printFontScale, nullptr);
// apply printing settings to profile // apply printing settings to profile
profile->setFrameStyle(QFrame::NoFrame); profile->setFrameStyle(QFrame::NoFrame);
@ -116,18 +122,6 @@ void Printer::render(int pages)
painter.setRenderHint(QPainter::Antialiasing); painter.setRenderHint(QPainter::Antialiasing);
painter.setRenderHint(QPainter::SmoothPixmapTransform); painter.setRenderHint(QPainter::SmoothPixmapTransform);
// get all refereces to diveprofile class in the Html template
QWebElementCollection collection = webView->page()->mainFrame()->findAllElements(".diveprofile");
if (collection.count() > 0) {
// A "standard" profile has about 600 pixels in height.
// Scale the fonts in the printed profile accordingly.
// This is arbitrary, but it seems to work reasonably.
QSize size = collection[0].geometry().size();
printFontScale = size.height() / 600.0;
}
profile->setFontPrintScale(printFontScale);
int elemNo = 0; int elemNo = 0;
for (int i = 0; i < pages; i++) { for (int i = 0; i < pages; i++) {
// render the base Html template // render the base Html template

View file

@ -26,7 +26,7 @@ ProfileWidget::ProfileWidget()
ui.profHR, // very few dive computers support this ui.profHR, // very few dive computers support this
ui.profTissues }; // maybe less frequently used ui.profTissues }; // maybe less frequently used
view.reset(new ProfileWidget2(DivePlannerPointsModel::instance(), this)); view.reset(new ProfileWidget2(DivePlannerPointsModel::instance(), 1.0, this));
QToolBar *toolBar = new QToolBar(this); QToolBar *toolBar = new QToolBar(this);
for (QAction *a: toolbarActions) for (QAction *a: toolbarActions)
toolBar->addAction(a); toolBar->addAction(a);

View file

@ -95,7 +95,7 @@ T *ProfileWidget2::createItem(const DiveCartesianAxis &vAxis, int vColumn, int z
return res; return res;
} }
ProfileWidget2::ProfileWidget2(DivePlannerPointsModel *plannerModelIn, QWidget *parent) : QGraphicsView(parent), ProfileWidget2::ProfileWidget2(DivePlannerPointsModel *plannerModelIn, double fontPrintScale, QWidget *parent) : QGraphicsView(parent),
currentState(INVALID), currentState(INVALID),
dataModel(new DivePlotDataModel(this)), dataModel(new DivePlotDataModel(this)),
plannerModel(plannerModelIn), plannerModel(plannerModelIn),
@ -139,7 +139,7 @@ ProfileWidget2::ProfileWidget2(DivePlannerPointsModel *plannerModelIn, QWidget *
#endif #endif
tankItem(new TankItem(*timeAxis)), tankItem(new TankItem(*timeAxis)),
shouldCalculateMax(true), shouldCalculateMax(true),
fontPrintScale(1.0) fontPrintScale(fontPrintScale)
{ {
init_plot_info(&plotInfo); init_plot_info(&plotInfo);

View file

@ -66,7 +66,7 @@ public:
}; };
// Pass null as plannerModel if no support for planning required // Pass null as plannerModel if no support for planning required
ProfileWidget2(DivePlannerPointsModel *plannerModel, QWidget *parent = 0); ProfileWidget2(DivePlannerPointsModel *plannerModel, double fontPrintScale, QWidget *parent = 0);
~ProfileWidget2(); ~ProfileWidget2();
void resetZoom(); void resetZoom();
void scale(qreal sx, qreal sy); void scale(qreal sx, qreal sy);

View file

@ -28,10 +28,9 @@ QMLProfile::QMLProfile(QQuickItem *parent) :
void QMLProfile::createProfileView() void QMLProfile::createProfileView()
{ {
m_profileWidget.reset(new ProfileWidget2(nullptr, nullptr)); m_profileWidget.reset(new ProfileWidget2(nullptr, fontScale * m_devicePixelRatio, nullptr));
m_profileWidget->setProfileState(nullptr, 0); m_profileWidget->setProfileState(nullptr, 0);
m_profileWidget->setPrintMode(true); m_profileWidget->setPrintMode(true);
m_profileWidget->setFontPrintScale(fontScale * m_devicePixelRatio);
} }
// we need this so we can connect update() to the scaleChanged() signal - which the connect above cannot do // we need this so we can connect update() to the scaleChanged() signal - which the connect above cannot do