Add new hidden property in WaylandSurfaceItem to control visibility.
authorSamuel Rødal <samuel.rodal@nokia.com>
Fri, 6 May 2011 12:57:40 +0000 (14:57 +0200)
committerSamuel Rødal <samuel.rodal@nokia.com>
Mon, 9 May 2011 07:31:09 +0000 (09:31 +0200)
This lets us control visibility while still having the mouse events
working. We usually want to hide the surface item if it has a shader
effect item modifying its appearance (since otherwise both the source
and the shader effect items are shown, blended on top of each other).

examples/qml-compositor/qml/QmlCompositor/ShaderEffect.qml
examples/qml-compositor/qml/QmlCompositor/WindowChrome.qml
src/qt-compositor/compositor_api/waylandsurfaceitem.cpp
src/qt-compositor/compositor_api/waylandsurfaceitem.h

index b1412f6..ffbe58c 100644 (file)
@@ -47,7 +47,7 @@ ShaderEffectItem {
 
     onSourceChanged: {
         if (source != null) {
-            source.visible = false;
+            source.setHidden(true);
             vertexShader = source.isYInverted() ? vShaderInvertedY : vShader;
         }
     }
index 9e6b0a8..3b6727d 100644 (file)
@@ -53,10 +53,4 @@ Item {
             window.takeFocus();
         }
     }
-
-    Binding {
-        target: window
-        property: "opacity"
-        value: 0.01
-    }
 }
index 1504316..813d4f5 100644 (file)
@@ -68,6 +68,7 @@ WaylandSurfaceItem::WaylandSurfaceItem(QSGItem *parent)
     : QSGItem(parent)
     , m_surface(0)
     , m_texture(0)
+    , m_hidden(false)
 {
 }
 
@@ -75,6 +76,7 @@ WaylandSurfaceItem::WaylandSurfaceItem(WaylandSurface *surface, QSGItem *parent)
     : QSGItem(parent)
     , m_surface(0)
     , m_texture(0)
+    , m_hidden(false)
 {
     init(surface);
 }
@@ -174,11 +176,22 @@ void WaylandSurfaceItem::surfaceDestroyed(QObject *)
     m_surface = 0;
 }
 
+bool WaylandSurfaceItem::hidden() const
+{
+    return m_hidden;
+}
+
+void WaylandSurfaceItem::setHidden(bool h)
+{
+    m_hidden = h;
+    update();
+}
+
 QSGNode *WaylandSurfaceItem::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *)
 {
     QSGSimpleTextureNode *node = static_cast<QSGSimpleTextureNode *>(oldNode);
 
-    if (!m_texture) {
+    if (!m_texture || m_hidden) {
         delete oldNode;
         return 0;
     }
index 9f4ae16..1734b00 100644 (file)
@@ -54,6 +54,7 @@ class WaylandSurfaceItem : public QSGItem, public QSGTextureProvider
     Q_OBJECT
     Q_INTERFACES(QSGTextureProvider)
     Q_PROPERTY(WaylandSurface* surface READ surface WRITE setSurface)
+    Q_PROPERTY(bool hidden READ hidden WRITE setHidden)
 
 public:
     WaylandSurfaceItem(QSGItem *parent = 0);
@@ -68,6 +69,8 @@ public:
     QSGTexture *texture() const;
     const char *textureChangedSignal() const { return SIGNAL(textureChanged()); }
 
+    bool hidden() const;
+
 protected:
     void mousePressEvent(QGraphicsSceneMouseEvent *event);
     void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
@@ -78,6 +81,7 @@ protected:
 
 public slots:
     void takeFocus();
+    void setHidden(bool hidden);
 
 private slots:
     void surfaceMapped(const QRect &rect);
@@ -96,6 +100,7 @@ private:
 
     WaylandSurface *m_surface;
     QSGTexture *m_texture;
+    bool m_hidden;
 };
 
 #endif