Added interface for the QStyle rendering in QtQuick Controls
authorSimon Hausmann <simon.hausmann@digia.com>
Fri, 8 Aug 2014 14:33:14 +0000 (16:33 +0200)
committerSimon Hausmann <simon.hausmann@digia.com>
Fri, 8 Aug 2014 18:07:28 +0000 (20:07 +0200)
This allows a scene graph backend to customize the style rendering

Change-Id: I6048df47ed3705d81140d63a21257f704a0e0a82
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
src/quick/scenegraph/qsgadaptationlayer_p.h
src/quick/scenegraph/qsgcontext.cpp
src/quick/scenegraph/qsgcontext_p.h

index 46531f7..cc998a9 100644 (file)
@@ -70,6 +70,7 @@ class QOpenGLContext;
 class QSGImageNode;
 class QSGRectangleNode;
 class QSGGlyphNode;
+class QSGNinePatchNode;
 
 class Q_QUICK_PRIVATE_EXPORT QSGNodeVisitorEx
 {
@@ -88,6 +89,8 @@ public:
     virtual void endVisit(QSGRectangleNode *) = 0;
     virtual void visit(QSGGlyphNode *) = 0;
     virtual void endVisit(QSGGlyphNode *) = 0;
+    virtual void visit(QSGNinePatchNode *) = 0;
+    virtual void endVisit(QSGNinePatchNode *) = 0;
 
     void visitChildren(QSGNode *node);
 };
@@ -142,6 +145,18 @@ public:
     virtual void accept(QSGNodeVisitorEx *visitor) { visitor->visit(this); visitor->visitChildren(this); visitor->endVisit(this); }
 };
 
+class Q_QUICK_PRIVATE_EXPORT QSGNinePatchNode : public QSGVisitableNode
+{
+public:
+    virtual void setTexture(QSGTexture *texture) = 0;
+    virtual void setBounds(const QRectF &bounds) = 0;
+    virtual void setDevicePixelRatio(qreal ratio) = 0;
+    virtual void setPadding(qreal left, qreal top, qreal right, qreal bottom) = 0;
+
+    virtual void update() = 0;
+
+    virtual void accept(QSGNodeVisitorEx *visitor) { visitor->visit(this); visitor->visitChildren(this); visitor->endVisit(this); }
+};
 
 class Q_QUICK_PRIVATE_EXPORT QSGGlyphNode : public QSGVisitableNode
 {
index 267c729..cf980df 100644 (file)
@@ -299,6 +299,15 @@ QSGGlyphNode *QSGContext::createGlyphNode(QSGRenderContext *rc, bool preferNativ
     }
 }
 
+/*!
+ * Factory function for scene graph backends of the QStyle stylable elements. Returns a
+ * null pointer if the backend doesn't provide its own node type.
+ */
+QSGNinePatchNode *QSGContext::createQStyleNode()
+{
+    return 0;
+}
+
 QSurfaceFormat QSGContext::defaultSurfaceFormat() const
 {
     QSurfaceFormat format;
index 7113ef8..97b2c2b 100644 (file)
@@ -64,6 +64,7 @@ class QSGContextPrivate;
 class QSGRectangleNode;
 class QSGImageNode;
 class QSGGlyphNode;
+class QSGNinePatchNode;
 class QSGRenderer;
 class QSGDistanceFieldGlyphCache;
 class QQuickWindow;
@@ -174,6 +175,7 @@ public:
     virtual QSGRectangleNode *createRectangleNode();
     virtual QSGImageNode *createImageNode();
     virtual QSGGlyphNode *createGlyphNode(QSGRenderContext *rc, bool preferNativeGlyphNode);
+    virtual QSGNinePatchNode *createQStyleNode();
     virtual QAnimationDriver *createAnimationDriver(QObject *parent);
 
     virtual QSize minimumFBOSize() const;