diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/layouts/qquickgridlayoutengine.cpp | 10 | ||||
| -rw-r--r-- | src/layouts/qquickgridlayoutengine_p.h | 12 |
2 files changed, 12 insertions, 10 deletions
diff --git a/src/layouts/qquickgridlayoutengine.cpp b/src/layouts/qquickgridlayoutengine.cpp index 419a81df7..09684b5d3 100644 --- a/src/layouts/qquickgridlayoutengine.cpp +++ b/src/layouts/qquickgridlayoutengine.cpp @@ -142,6 +142,8 @@ static inline void combineImplicitHints(QQuickLayoutAttached *info, Qt::SizeHint explicitly or implicitly set with QQuickLayoutAttached::isExtentExplicitlySet(). This determines if it should be used as a USER or as a HINT value. + Fractional size hints will be ceiled to the closest integer. This is in order to give some + slack when the items are snapped to the pixel grid. | *Minimum* | *Preferred* | *Maximum* | +----------------+----------------------+-----------------------+--------------------------+ @@ -173,12 +175,12 @@ void QQuickGridLayoutItem::effectiveSizeHints_helper(QQuickItem *item, QSizeF *c Q_ASSERT(getter); if (info->isExtentExplicitlySet(Qt::Horizontal, (Qt::SizeHint)i)) - cachedSizeHints[i].setWidth((info->*getter)()); + cachedSizeHints[i].setWidth(qCeil((info->*getter)())); getter = verGetters.call[i]; Q_ASSERT(getter); if (info->isExtentExplicitlySet(Qt::Vertical, (Qt::SizeHint)i)) - cachedSizeHints[i].setHeight((info->*getter)()); + cachedSizeHints[i].setHeight(qCeil((info->*getter)())); } } @@ -213,9 +215,9 @@ void QQuickGridLayoutItem::effectiveSizeHints_helper(QQuickItem *item, QSizeF *c qreal &prefWidth = prefS.rwidth(); qreal &prefHeight = prefS.rheight(); if (prefWidth < 0 && item->implicitWidth() > 0) - prefWidth = item->implicitWidth(); + prefWidth = qCeil(item->implicitWidth()); if (prefHeight < 0 && item->implicitHeight() > 0) - prefHeight = item->implicitHeight(); + prefHeight = qCeil(item->implicitHeight()); // If that fails, make an ultimate fallback to width/height diff --git a/src/layouts/qquickgridlayoutengine_p.h b/src/layouts/qquickgridlayoutengine_p.h index 94b8677ac..f1dba1e91 100644 --- a/src/layouts/qquickgridlayoutengine_p.h +++ b/src/layouts/qquickgridlayoutengine_p.h @@ -113,15 +113,15 @@ public: void setGeometry(const QRectF &rect) { - const QPoint innerTopLeft(qCeil(rect.left()), qCeil(rect.top())); - const QPoint innerBottomRight(qFloor(rect.right()), qFloor(rect.bottom())); - const QSize newSize(innerBottomRight.x() - innerTopLeft.x(), innerBottomRight.y() - innerTopLeft.y()); - m_item->setPosition(innerTopLeft); - QSizeF oldSize(m_item->width(), m_item->height()); + const QSizeF oldSize(m_item->width(), m_item->height()); + const QSizeF newSize = rect.size(); + const QPointF topLeft(qCeil(rect.x()), qCeil(rect.y())); + m_item->setPosition(topLeft); if (newSize == oldSize) { - if (QQuickLayout *lay = qobject_cast<QQuickLayout *>(m_item)) + if (QQuickLayout *lay = qobject_cast<QQuickLayout *>(m_item)) { if (lay->arrangementIsDirty()) lay->rearrange(newSize); + } } else { m_item->setSize(newSize); } |
