pagelayout: Fix inaccuracy in marginsPixels and paintRectPixels
Do not use rounded value for conversion, which gives inaccurate result. Example case: typical margin for A4 paper size is 8.4 pt. At 600 dpi, the old code was using rounded point value of 8, which produces an incorrect result: 8 / (72.0 / 600) = 67 pixels The correct margin is of course: 8.4 / (72.0 / 600) = 70 pixels Change-Id: I44b2eeabb82fd3bf8e2dcfcba66ae96cde763875 Reviewed-by: David Faure <david.faure@kdab.com> Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> (cherry picked from commit e28a664ae12e22a2cecbd669d3d8562c742eb4a2) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
0aaa84b714
commit
0025362dd1
@ -82,7 +82,7 @@ public:
|
||||
void clampMargins(const QMarginsF &margins);
|
||||
|
||||
QMarginsF margins(QPageLayout::Unit units) const;
|
||||
QMargins marginsPoints() const;
|
||||
QMarginsF marginsPoints() const;
|
||||
QMargins marginsPixels(int resolution) const;
|
||||
|
||||
void setDefaultMargins(const QMarginsF &minMargins);
|
||||
@ -164,14 +164,14 @@ QMarginsF QPageLayoutPrivate::margins(QPageLayout::Unit units) const
|
||||
return qt_convertMargins(m_margins, m_units, units);
|
||||
}
|
||||
|
||||
QMargins QPageLayoutPrivate::marginsPoints() const
|
||||
QMarginsF QPageLayoutPrivate::marginsPoints() const
|
||||
{
|
||||
return qt_convertMargins(m_margins, m_units, QPageLayout::Point).toMargins();
|
||||
return qt_convertMargins(m_margins, m_units, QPageLayout::Point);
|
||||
}
|
||||
|
||||
QMargins QPageLayoutPrivate::marginsPixels(int resolution) const
|
||||
{
|
||||
return marginsPoints() / qt_pixelMultiplier(resolution);
|
||||
return QMarginsF(marginsPoints() / qt_pixelMultiplier(resolution)).toMargins();
|
||||
}
|
||||
|
||||
void QPageLayoutPrivate::setDefaultMargins(const QMarginsF &minMargins)
|
||||
@ -699,7 +699,7 @@ QMarginsF QPageLayout::margins(Unit units) const
|
||||
|
||||
QMargins QPageLayout::marginsPoints() const
|
||||
{
|
||||
return d->marginsPoints();
|
||||
return d->marginsPoints().toMargins();
|
||||
}
|
||||
|
||||
/*!
|
||||
@ -866,7 +866,7 @@ QRect QPageLayout::paintRectPoints() const
|
||||
if (!isValid())
|
||||
return QRect();
|
||||
return d->m_mode == FullPageMode ? d->fullRectPoints()
|
||||
: d->fullRectPoints() - d->marginsPoints();
|
||||
: d->fullRectPoints() - d->marginsPoints().toMargins();
|
||||
}
|
||||
|
||||
/*!
|
||||
|
@ -90,12 +90,14 @@ void tst_QPageLayout::basics()
|
||||
QCOMPARE(tenpoint.margins(QPageLayout::Millimeter), QMarginsF(3.53, 3.53, 3.53, 3.53));
|
||||
QCOMPARE(tenpoint.marginsPoints(), QMargins(10, 10, 10, 10));
|
||||
QCOMPARE(tenpoint.marginsPixels(72), QMargins(10, 10, 10, 10));
|
||||
QCOMPARE(tenpoint.marginsPixels(600), QMargins(83, 83, 83, 83));
|
||||
QCOMPARE(tenpoint.minimumMargins(), QMarginsF(0, 0, 0, 0));
|
||||
QCOMPARE(tenpoint.maximumMargins(), QMarginsF(595, 842, 595, 842));
|
||||
QCOMPARE(tenpoint.fullRect(), QRectF(0, 0, 595, 842));
|
||||
QCOMPARE(tenpoint.fullRect(QPageLayout::Millimeter), QRectF(0, 0, 210, 297));
|
||||
QCOMPARE(tenpoint.fullRectPoints(), QRect(0, 0, 595, 842));
|
||||
QCOMPARE(tenpoint.fullRectPixels(72), QRect(0, 0, 595, 842));
|
||||
QCOMPARE(tenpoint.fullRectPixels(600), QRect(0, 0, 4958, 7016));
|
||||
QCOMPARE(tenpoint.paintRect(), QRectF(10, 10, 575, 822));
|
||||
QCOMPARE(tenpoint.paintRect(QPageLayout::Millimeter), QRectF(3.53, 3.53, 202.94, 289.94));
|
||||
QCOMPARE(tenpoint.paintRect(QPageLayout::Millimeter).x(), 3.53);
|
||||
@ -108,6 +110,7 @@ void tst_QPageLayout::basics()
|
||||
QCOMPARE(tenpoint.paintRect(QPageLayout::Millimeter).bottom(), 293.47);
|
||||
QCOMPARE(tenpoint.paintRectPoints(), QRect(10, 10, 575, 822));
|
||||
QCOMPARE(tenpoint.paintRectPixels(72), QRect(10, 10, 575, 822));
|
||||
QCOMPARE(tenpoint.paintRectPixels(600), QRect(83, 83, 4792, 6850));
|
||||
|
||||
// Change orientation
|
||||
tenpoint.setOrientation(QPageLayout::Landscape);
|
||||
@ -119,10 +122,12 @@ void tst_QPageLayout::basics()
|
||||
QCOMPARE(tenpoint.fullRect(QPageLayout::Millimeter), QRectF(0, 0, 297, 210));
|
||||
QCOMPARE(tenpoint.fullRectPoints(), QRect(0, 0, 842, 595));
|
||||
QCOMPARE(tenpoint.fullRectPixels(72), QRect(0, 0, 842, 595));
|
||||
QCOMPARE(tenpoint.fullRectPixels(600), QRect(0, 0, 7016, 4958));
|
||||
QCOMPARE(tenpoint.paintRect(), QRectF(10, 10, 822, 575));
|
||||
QCOMPARE(tenpoint.paintRect(QPageLayout::Millimeter), QRectF(3.53, 3.53, 289.94, 202.94));
|
||||
QCOMPARE(tenpoint.paintRectPoints(), QRect(10, 10, 822, 575));
|
||||
QCOMPARE(tenpoint.paintRectPixels(72), QRect(10, 10, 822, 575));
|
||||
QCOMPARE(tenpoint.paintRectPixels(600), QRect(83, 83, 6850, 4792));
|
||||
|
||||
// Change mode
|
||||
QCOMPARE(tenpoint.mode(), QPageLayout::StandardMode);
|
||||
@ -136,10 +141,77 @@ void tst_QPageLayout::basics()
|
||||
QCOMPARE(tenpoint.fullRect(QPageLayout::Millimeter), QRectF(0, 0, 297, 210));
|
||||
QCOMPARE(tenpoint.fullRectPoints(), QRect(0, 0, 842, 595));
|
||||
QCOMPARE(tenpoint.fullRectPixels(72), QRect(0, 0, 842, 595));
|
||||
QCOMPARE(tenpoint.fullRectPixels(600), QRect(0, 0, 7016, 4958));
|
||||
QCOMPARE(tenpoint.paintRect(), QRectF(0, 0, 842, 595));
|
||||
QCOMPARE(tenpoint.paintRect(QPageLayout::Millimeter), QRectF(0, 0, 297, 210));
|
||||
QCOMPARE(tenpoint.paintRectPoints(), QRect(0, 0, 842, 595));
|
||||
QCOMPARE(tenpoint.paintRectPixels(72), QRect(0, 0, 842, 595));
|
||||
QCOMPARE(tenpoint.paintRectPixels(600), QRect(0, 0, 7016, 4958));
|
||||
|
||||
// A4, 8.4pt margins
|
||||
QPageLayout fraction = QPageLayout(QPageSize(QPageSize::A4), QPageLayout::Portrait, QMarginsF(8.4, 8.4, 8.4, 8.4));
|
||||
QCOMPARE(fraction.isValid(), true);
|
||||
QCOMPARE(fraction.margins(), QMarginsF(8.4, 8.4, 8.4, 8.4));
|
||||
QCOMPARE(fraction.margins(QPageLayout::Millimeter), QMarginsF(2.96, 2.96, 2.96, 2.96));
|
||||
QCOMPARE(fraction.marginsPoints(), QMarginsF(8, 8, 8, 8));
|
||||
QCOMPARE(fraction.marginsPixels(72), QMargins(8, 8, 8, 8));
|
||||
QCOMPARE(fraction.marginsPixels(600), QMargins(70, 70, 70, 70));
|
||||
QCOMPARE(fraction.minimumMargins(), QMarginsF(0, 0, 0, 0));
|
||||
QCOMPARE(fraction.maximumMargins(), QMarginsF(595, 842, 595, 842));
|
||||
QCOMPARE(fraction.fullRect(), QRectF(0, 0, 595, 842));
|
||||
QCOMPARE(fraction.fullRect(QPageLayout::Millimeter), QRectF(0, 0, 210, 297));
|
||||
QCOMPARE(fraction.fullRectPoints(), QRect(0, 0, 595, 842));
|
||||
QCOMPARE(fraction.fullRectPixels(72), QRect(0, 0, 595, 842));
|
||||
QCOMPARE(fraction.fullRectPixels(600), QRect(0, 0, 4958, 7016));
|
||||
QCOMPARE(fraction.paintRect(), QRectF(8.4, 8.4, 578.2, 825.2));
|
||||
QCOMPARE(fraction.paintRect(QPageLayout::Millimeter), QRectF(2.96, 2.96, 204.08, 291.08));
|
||||
QCOMPARE(fraction.paintRect(QPageLayout::Millimeter).x(), 2.96);
|
||||
QCOMPARE(fraction.paintRect(QPageLayout::Millimeter).y(), 2.96);
|
||||
QCOMPARE(fraction.paintRect(QPageLayout::Millimeter).width(), 204.08);
|
||||
QCOMPARE(fraction.paintRect(QPageLayout::Millimeter).height(), 291.08);
|
||||
QCOMPARE(fraction.paintRect(QPageLayout::Millimeter).left(), 2.96);
|
||||
QCOMPARE(fraction.paintRect(QPageLayout::Millimeter).right(), 207.04);
|
||||
QCOMPARE(fraction.paintRect(QPageLayout::Millimeter).top(), 2.96);
|
||||
QCOMPARE(fraction.paintRect(QPageLayout::Millimeter).bottom(), 294.04);
|
||||
QCOMPARE(fraction.paintRectPoints(), QRect(8, 8, 579, 826));
|
||||
QCOMPARE(fraction.paintRectPixels(72), QRect(8, 8, 579, 826));
|
||||
QCOMPARE(fraction.paintRectPixels(600), QRect(70, 70, 4818, 6876));
|
||||
|
||||
// Change orientation
|
||||
fraction.setOrientation(QPageLayout::Landscape);
|
||||
QCOMPARE(fraction.orientation(), QPageLayout::Landscape);
|
||||
QCOMPARE(fraction.margins(), QMarginsF(8.4, 8.4, 8.4, 8.4));
|
||||
QCOMPARE(fraction.minimumMargins(), QMarginsF(0, 0, 0, 0));
|
||||
QCOMPARE(fraction.maximumMargins(), QMarginsF(842, 595, 842, 595));
|
||||
QCOMPARE(fraction.fullRect(), QRectF(0, 0, 842, 595));
|
||||
QCOMPARE(fraction.fullRect(QPageLayout::Millimeter), QRectF(0, 0, 297, 210));
|
||||
QCOMPARE(fraction.fullRectPoints(), QRect(0, 0, 842, 595));
|
||||
QCOMPARE(fraction.fullRectPixels(72), QRect(0, 0, 842, 595));
|
||||
QCOMPARE(fraction.fullRectPixels(600), QRect(0, 0, 7016, 4958));
|
||||
QCOMPARE(fraction.paintRect(), QRectF(8.4, 8.4, 825.2, 578.2));
|
||||
QCOMPARE(fraction.paintRect(QPageLayout::Millimeter), QRectF(2.96, 2.96, 291.08, 204.08));
|
||||
QCOMPARE(fraction.paintRectPoints(), QRect(8, 8, 826, 579));
|
||||
QCOMPARE(fraction.paintRectPixels(72), QRect(8, 8, 826, 579));
|
||||
QCOMPARE(fraction.paintRectPixels(600), QRect(70, 70, 6876, 4818));
|
||||
|
||||
// Change mode
|
||||
QCOMPARE(fraction.mode(), QPageLayout::StandardMode);
|
||||
fraction.setMode(QPageLayout::FullPageMode);
|
||||
QCOMPARE(fraction.mode(), QPageLayout::FullPageMode);
|
||||
QCOMPARE(fraction.orientation(), QPageLayout::Landscape);
|
||||
QCOMPARE(fraction.margins(), QMarginsF(8.4, 8.4, 8.4, 8.4));
|
||||
QCOMPARE(fraction.minimumMargins(), QMarginsF(0, 0, 0, 0));
|
||||
QCOMPARE(fraction.maximumMargins(), QMarginsF(842, 595, 842, 595));
|
||||
QCOMPARE(fraction.fullRect(), QRectF(0, 0, 842, 595));
|
||||
QCOMPARE(fraction.fullRect(QPageLayout::Millimeter), QRectF(0, 0, 297, 210));
|
||||
QCOMPARE(fraction.fullRectPoints(), QRect(0, 0, 842, 595));
|
||||
QCOMPARE(fraction.fullRectPixels(72), QRect(0, 0, 842, 595));
|
||||
QCOMPARE(fraction.fullRectPixels(600), QRect(0, 0, 7016, 4958));
|
||||
QCOMPARE(fraction.paintRect(), QRectF(0, 0, 842, 595));
|
||||
QCOMPARE(fraction.paintRect(QPageLayout::Millimeter), QRectF(0, 0, 297, 210));
|
||||
QCOMPARE(fraction.paintRectPoints(), QRect(0, 0, 842, 595));
|
||||
QCOMPARE(fraction.paintRectPixels(72), QRect(0, 0, 842, 595));
|
||||
QCOMPARE(fraction.paintRectPixels(600), QRect(0, 0, 7016, 4958));
|
||||
}
|
||||
|
||||
void tst_QPageLayout::setGetMargins()
|
||||
|
Loading…
x
Reference in New Issue
Block a user