aboutsummaryrefslogtreecommitdiffstats
path: root/src/quick
diff options
context:
space:
mode:
authorGunnar Sletta <gunnar.sletta@jollamobile.com>2014-05-03 10:06:09 +0200
committerThe Qt Project <gerrit-noreply@qt-project.org>2014-05-08 07:18:53 +0200
commitda15ea0f3b5805db657f13060c21efa78f10cde2 (patch)
treecba6670f3a27dd44cb10734d8ed5a35c33133453 /src/quick
parent9dc408e4bdeca5f4724dab65ac49691a49ff93b1 (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.cpp16
-rw-r--r--src/quick/items/qquickitem_p.h4
-rw-r--r--src/quick/items/qquickpositioners.cpp4
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