Do not draw negative-size ShaderEffect(Source) items.
authorGunnar Sletta <gunnar.sletta@digia.com>
Tue, 28 May 2013 07:42:05 +0000 (09:42 +0200)
committerThe Qt Project <gerrit-noreply@qt-project.org>
Tue, 28 May 2013 17:35:18 +0000 (19:35 +0200)
We were a bit inconsistent here. A negative size Image element would not
render at all, a negative size ShaderEffect would render mirrored
and a negative size ShaderEffectSource would trigger an assert.
Be consistent and not draw any of them.

DropShadow from QtGraphicalEffects uses both a ShaderEffectSource and
a ShaderEffect together, so keeping the behavior in ShaderEffect
would make it render incorrectly.

Task-number: QTBUG-31383
Change-Id: Ied5568d7edbc2aed96b00adfdc6aae09b6f2a7d9
Reviewed-by: Mitch Curtis <mitch.curtis@digia.com>
src/quick/items/qquickshadereffect.cpp
src/quick/items/qquickshadereffectsource.cpp

index 1020667..f39a150 100644 (file)
@@ -912,8 +912,8 @@ QSGNode *QQuickShaderEffect::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeDa
 {
     QQuickShaderEffectNode *node = static_cast<QQuickShaderEffectNode *>(oldNode);
 
-    // In the case of a bad vertex shader, don't try to create a node...
-    if (m_common.attributes.isEmpty()) {
+    // In the case of zero-size or a bad vertex shader, don't try to create a node...
+    if (m_common.attributes.isEmpty() || width() <= 0 || height() <= 0) {
         if (node)
             delete node;
         return 0;
index bd0bb23..9debfe3 100644 (file)
@@ -942,7 +942,7 @@ void QQuickShaderEffectSource::releaseResources()
 
 QSGNode *QQuickShaderEffectSource::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *)
 {
-    if (!m_sourceItem || m_sourceItem->width() == 0 || m_sourceItem->height() == 0) {
+    if (!m_sourceItem || m_sourceItem->width() <= 0 || m_sourceItem->height() <= 0) {
         if (m_texture)
             m_texture->setItem(0);
         delete oldNode;