summaryrefslogtreecommitdiffstats
path: root/src/gui/painting/qpagelayout.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/gui/painting/qpagelayout.cpp')
-rw-r--r--src/gui/painting/qpagelayout.cpp82
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);
}