diff options
author | Gunnar Sletta <gunnar.sletta@jollamobile.com> | 2014-05-03 10:06:09 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2014-05-08 07:18:53 +0200 |
commit | da15ea0f3b5805db657f13060c21efa78f10cde2 (patch) | |
tree | cba6670f3a27dd44cb10734d8ed5a35c33133453 /src/quick | |
parent | 9dc408e4bdeca5f4724dab65ac49691a49ff93b1 (diff) |
Make item.layer and item.layer.effect work inside positioners.
Task-number: QTBUG-31269
Change-Id: Ic3bb76ea5a5055df614f2eaacd3031445f118ca7
Reviewed-by: Jan Arve Sæther <jan-arve.saether@digia.com>
Reviewed-by: Robin Burchell <robin+qt@viroteck.net>
Diffstat (limited to 'src/quick')
-rw-r--r-- | src/quick/items/qquickitem.cpp | 16 | ||||
-rw-r--r-- | src/quick/items/qquickitem_p.h | 4 | ||||
-rw-r--r-- | src/quick/items/qquickpositioners.cpp | 4 |
3 files changed, 22 insertions, 2 deletions
diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp index 1f505f8e35..2c89c32b45 100644 --- a/src/quick/items/qquickitem.cpp +++ b/src/quick/items/qquickitem.cpp @@ -5311,6 +5311,17 @@ void QQuickItemPrivate::setEffectiveEnableRecur(QQuickItem *scope, bool newEffec emit q->enabledChanged(); } +bool QQuickItemPrivate::isTransparentForPositioner() const +{ + return extra.isAllocated() && extra.value().transparentForPositioner; +} + +void QQuickItemPrivate::setTransparentForPositioner(bool transparent) +{ + extra.value().transparentForPositioner = transparent; +} + + QString QQuickItemPrivate::dirtyToString() const { #define DIRTY_TO_STRING(value) if (dirtyAttributes & value) { \ @@ -7162,6 +7173,7 @@ void QQuickItemLayer::activate() { Q_ASSERT(!m_effectSource); m_effectSource = new QQuickShaderEffectSource(); + QQuickItemPrivate::get(m_effectSource)->setTransparentForPositioner(true); QQuickItem *parentItem = m_item->parentItem(); if (parentItem) { @@ -7227,6 +7239,7 @@ void QQuickItemLayer::activateEffect() } m_effect->setVisible(m_item->isVisible()); m_effect->setProperty(m_name, qVariantFromValue<QObject *>(m_effectSource)); + QQuickItemPrivate::get(m_effect)->setTransparentForPositioner(true); m_effectComponent->completeCreate(); } @@ -7543,7 +7556,8 @@ QQuickItemPrivate::ExtraData::ExtraData() #endif effectRefCount(0), hideRefCount(0), opacityNode(0), clipNode(0), rootNode(0), beforePaintNode(0), - acceptedMouseButtons(0), origin(QQuickItem::Center) + acceptedMouseButtons(0), origin(QQuickItem::Center), + transparentForPositioner(false) { } diff --git a/src/quick/items/qquickitem_p.h b/src/quick/items/qquickitem_p.h index 1bd999e933..dbd4d51941 100644 --- a/src/quick/items/qquickitem_p.h +++ b/src/quick/items/qquickitem_p.h @@ -368,6 +368,7 @@ public: Qt::MouseButtons acceptedMouseButtons; QQuickItem::TransformOrigin origin:5; + uint transparentForPositioner : 1; QObjectList resourcesList; }; @@ -545,6 +546,9 @@ public: void deliverInputMethodEvent(QInputMethodEvent *); #endif + bool isTransparentForPositioner() const; + void setTransparentForPositioner(bool trans); + bool calcEffectiveVisible() const; bool setEffectiveVisibleRecur(bool); bool calcEffectiveEnable() const; diff --git a/src/quick/items/qquickpositioners.cpp b/src/quick/items/qquickpositioners.cpp index 0ef871be43..6236f0047b 100644 --- a/src/quick/items/qquickpositioners.cpp +++ b/src/quick/items/qquickpositioners.cpp @@ -305,6 +305,8 @@ void QQuickBasePositioner::prePositioning() for (int ii = 0; ii < children.count(); ++ii) { QQuickItem *child = children.at(ii); + if (QQuickItemPrivate::get(child)->isTransparentForPositioner()) + continue; QQuickItemPrivate *childPrivate = QQuickItemPrivate::get(child); PositionedItem posItem(child); int wIdx = oldItems.find(posItem); @@ -1038,7 +1040,7 @@ void QQuickRow::reportConflictingAnchors() \image gridLayout_example.png - If an item within a Column is not \l {Item::}{visible}, or if it has a width or + If an item within a Grid is not \l {Item::}{visible}, or if it has a width or height of 0, the item will not be laid out and it will not be visible within the column. Also, since a Grid automatically positions its children, a child item within a Grid should not set its \l {Item::x}{x} or \l {Item::y}{y} positions |