diff options
Diffstat (limited to 'src/gui/painting/qpagelayout.cpp')
-rw-r--r-- | src/gui/painting/qpagelayout.cpp | 82 |
1 files changed, 51 insertions, 31 deletions
diff --git a/src/gui/painting/qpagelayout.cpp b/src/gui/painting/qpagelayout.cpp index 7ae117e423..15d98828bf 100644 --- a/src/gui/painting/qpagelayout.cpp +++ b/src/gui/painting/qpagelayout.cpp @@ -50,11 +50,6 @@ QT_BEGIN_NAMESPACE -static qreal qt_clamp(qreal value, qreal min, qreal max) -{ - return qMin(qMax(value, min), max); -} - // Multiplier for converting units to points. Q_GUI_EXPORT qreal qt_pointMultiplier(QPageLayout::Unit unit) { @@ -221,10 +216,10 @@ bool QPageLayoutPrivate::isValid() const void QPageLayoutPrivate::clampMargins(const QMarginsF &margins) { - m_margins = QMarginsF(qt_clamp(margins.left(), m_minMargins.left(), m_maxMargins.left()), - qt_clamp(margins.top(), m_minMargins.top(), m_maxMargins.top()), - qt_clamp(margins.right(), m_minMargins.right(), m_maxMargins.right()), - qt_clamp(margins.bottom(), m_minMargins.bottom(), m_maxMargins.bottom())); + m_margins = QMarginsF(qBound(m_minMargins.left(), margins.left(), m_maxMargins.left()), + qBound(m_minMargins.top(), margins.top(), m_maxMargins.top()), + qBound(m_minMargins.right(), margins.right(), m_maxMargins.right()), + qBound(m_minMargins.bottom(), margins.bottom(), m_maxMargins.bottom())); } QMarginsF QPageLayoutPrivate::margins(QPageLayout::Unit units) const @@ -380,8 +375,8 @@ QPageLayout::QPageLayout() margins allowed by the page size. */ -QPageLayout::QPageLayout(const QPageSize &pageSize, QPageLayout::Orientation orientation, - const QMarginsF &margins, QPageLayout::Unit units, +QPageLayout::QPageLayout(const QPageSize &pageSize, Orientation orientation, + const QMarginsF &margins, Unit units, const QMarginsF &minMargins) : d(new QPageLayoutPrivate(pageSize, orientation, margins, units, minMargins)) { @@ -429,24 +424,38 @@ QPageLayout &QPageLayout::operator=(const QPageLayout &other) */ /*! - Returns \c true if this page layout is equal to the \a other page layout, + \relates QPageLayout + + Returns \c true if page layout \a lhs is equal to page layout \a rhs, i.e. if all the attributes are exactly equal. Note that this is a strict equality, especially for page size where the QPageSize ID, name and size must exactly match, and the margins where the units must match. - \sa isEquivalentTo() + \sa QPageLayout::isEquivalentTo() */ -bool QPageLayout::operator==(const QPageLayout &other) const +bool operator==(const QPageLayout &lhs, const QPageLayout &rhs) { - if (d && other.d) - return (*d == *other.d); - return (d == other.d); + return lhs.d == rhs.d || *lhs.d == *rhs.d; } /*! + \fn bool operator!=(const QPageLayout &lhs, const QPageLayout &rhs) + \relates QPageLayout + + Returns \c true if page layout \a lhs is not equal to page layout \a rhs, + i.e. if any of the attributes differ. + + Note that this is a strict equality, especially for page size where the + QPageSize ID, name and size must exactly match, and the margins where the + units must match. + + \sa QPageLayout::isEquivalentTo() +*/ + +/*! Returns \c true if this page layout is equivalent to the \a other page layout, i.e. if the page has the same size, margins and orientation. */ @@ -469,8 +478,9 @@ bool QPageLayout::isValid() const Sets a page layout mode to \a mode. */ -void QPageLayout::setMode(QPageLayout::Mode mode) +void QPageLayout::setMode(Mode mode) { + d.detach(); d->m_mode = mode; } @@ -499,6 +509,7 @@ void QPageLayout::setPageSize(const QPageSize &pageSize, const QMarginsF &minMar { if (!pageSize.isValid()) return; + d.detach(); d->m_pageSize = pageSize; d->m_fullSize = d->fullSizeUnits(d->m_units); d->setDefaultMargins(minMargins); @@ -524,9 +535,10 @@ QPageSize QPageLayout::pageSize() const the minimum margins. */ -void QPageLayout::setOrientation(QPageLayout::Orientation orientation) +void QPageLayout::setOrientation(Orientation orientation) { if (orientation != d->m_orientation) { + d.detach(); d->m_orientation = orientation; d->m_fullSize = d->fullSizeUnits(d->m_units); // Adust the max margins to reflect change in max page size @@ -551,9 +563,10 @@ QPageLayout::Orientation QPageLayout::orientation() const Sets the \a units used to define the page layout. */ -void QPageLayout::setUnits(QPageLayout::Unit units) +void QPageLayout::setUnits(Unit units) { if (units != d->m_units) { + d.detach(); d->m_margins = qt_convertMargins(d->m_margins, d->m_units, units); d->m_minMargins = qt_convertMargins(d->m_minMargins, d->m_units, units); d->m_maxMargins = qt_convertMargins(d->m_maxMargins, d->m_units, units); @@ -589,7 +602,8 @@ QPageLayout::Unit QPageLayout::units() const bool QPageLayout::setMargins(const QMarginsF &margins) { - if (d->m_mode == QPageLayout::FullPageMode) { + if (d->m_mode == FullPageMode) { + d.detach(); d->m_margins = margins; return true; } else if (margins.left() >= d->m_minMargins.left() @@ -600,6 +614,7 @@ bool QPageLayout::setMargins(const QMarginsF &margins) && margins.right() <= d->m_maxMargins.right() && margins.top() <= d->m_maxMargins.top() && margins.bottom() <= d->m_maxMargins.bottom()) { + d.detach(); d->m_margins = margins; return true; } @@ -624,8 +639,9 @@ bool QPageLayout::setMargins(const QMarginsF &margins) bool QPageLayout::setLeftMargin(qreal leftMargin) { - if (d->m_mode == QPageLayout::FullPageMode + if (d->m_mode == FullPageMode || (leftMargin >= d->m_minMargins.left() && leftMargin <= d->m_maxMargins.left())) { + d.detach(); d->m_margins.setLeft(leftMargin); return true; } @@ -650,8 +666,9 @@ bool QPageLayout::setLeftMargin(qreal leftMargin) bool QPageLayout::setRightMargin(qreal rightMargin) { - if (d->m_mode == QPageLayout::FullPageMode + if (d->m_mode == FullPageMode || (rightMargin >= d->m_minMargins.right() && rightMargin <= d->m_maxMargins.right())) { + d.detach(); d->m_margins.setRight(rightMargin); return true; } @@ -676,8 +693,9 @@ bool QPageLayout::setRightMargin(qreal rightMargin) bool QPageLayout::setTopMargin(qreal topMargin) { - if (d->m_mode == QPageLayout::FullPageMode + if (d->m_mode == FullPageMode || (topMargin >= d->m_minMargins.top() && topMargin <= d->m_maxMargins.top())) { + d.detach(); d->m_margins.setTop(topMargin); return true; } @@ -702,8 +720,9 @@ bool QPageLayout::setTopMargin(qreal topMargin) bool QPageLayout::setBottomMargin(qreal bottomMargin) { - if (d->m_mode == QPageLayout::FullPageMode + if (d->m_mode == FullPageMode || (bottomMargin >= d->m_minMargins.bottom() && bottomMargin <= d->m_maxMargins.bottom())) { + d.detach(); d->m_margins.setBottom(bottomMargin); return true; } @@ -727,7 +746,7 @@ QMarginsF QPageLayout::margins() const \sa setMargins(), margins() */ -QMarginsF QPageLayout::margins(QPageLayout::Unit units) const +QMarginsF QPageLayout::margins(Unit units) const { return d->margins(units); } @@ -769,6 +788,7 @@ QMargins QPageLayout::marginsPixels(int resolution) const void QPageLayout::setMinimumMargins(const QMarginsF &minMargins) { + d.detach(); d->setDefaultMargins(minMargins); } @@ -823,7 +843,7 @@ QRectF QPageLayout::fullRect() const \sa paintRect() */ -QRectF QPageLayout::fullRect(QPageLayout::Unit units) const +QRectF QPageLayout::fullRect(Unit units) const { return isValid() ? d->fullRect(units) : QRect(); } @@ -881,13 +901,13 @@ QRectF QPageLayout::paintRect() const the margins must be manually managed. */ -QRectF QPageLayout::paintRect(QPageLayout::Unit units) const +QRectF QPageLayout::paintRect(Unit units) const { if (!isValid()) return QRectF(); if (units == d->m_units) return d->paintRect(); - return d->m_mode == QPageLayout::FullPageMode ? d->fullRect(units) + return d->m_mode == FullPageMode ? d->fullRect(units) : d->fullRect(units) - d->margins(units); } @@ -905,7 +925,7 @@ QRect QPageLayout::paintRectPoints() const { if (!isValid()) return QRect(); - return d->m_mode == QPageLayout::FullPageMode ? d->fullRectPoints() + return d->m_mode == FullPageMode ? d->fullRectPoints() : d->fullRectPoints() - d->marginsPoints(); } @@ -923,7 +943,7 @@ QRect QPageLayout::paintRectPixels(int resolution) const { if (!isValid()) return QRect(); - return d->m_mode == QPageLayout::FullPageMode ? d->fullRectPixels(resolution) + return d->m_mode == FullPageMode ? d->fullRectPixels(resolution) : d->fullRectPixels(resolution) - d->marginsPixels(resolution); } |