diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2014-08-08 12:10:11 +0200 |
---|---|---|
committer | Lars Knoll <lars.knoll@digia.com> | 2014-08-08 15:57:43 +0300 |
commit | 5fd71e9bd83935c907eb5ad8ffc270ae42ff05ae (patch) | |
tree | 157c16eb86aebc381584c2849e97ed99ec0d5807 /softwarecontext/context.cpp | |
parent | d6ceb224da997b9afad3d899a6af62c54e5a443f (diff) |
Adapt to new visitor pattern for rendering
Change-Id: I32b5d748a5cadcb88511f401924d3b3635275881
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'softwarecontext/context.cpp')
-rw-r--r-- | softwarecontext/context.cpp | 34 |
1 files changed, 2 insertions, 32 deletions
diff --git a/softwarecontext/context.cpp b/softwarecontext/context.cpp index 9d0b7a3097..d656125f0c 100644 --- a/softwarecontext/context.cpp +++ b/softwarecontext/context.cpp @@ -45,6 +45,7 @@ #include "imagenode.h" #include "pixmaptexture.h" #include "glyphnode.h" +#include "renderingvisitor.h" #include <QtCore/QCoreApplication> #include <QtCore/QElapsedTimer> @@ -99,42 +100,12 @@ void Renderer::render() painter.setRenderHint(QPainter::Antialiasing); painter.fillRect(rect, Qt::white); - renderNode(&painter, rootNode()); + RenderingVisitor(&painter).visitChildren(rootNode()); backingStore->endPaint(); backingStore->flush(rect); } -void Renderer::renderNode(QPainter *painter, QSGNode *node) -{ - bool restore = false; - - if (node->type() == QSGNode::TransformNodeType) { - QSGTransformNode *tn = static_cast<QSGTransformNode*>(node); - painter->save(); - restore = true; - painter->setTransform(tn->matrix().toTransform(), /*combine*/true); - } else if (node->type() == QSGNode::ClipNodeType) { - QSGClipNode *cn = static_cast<QSGClipNode*>(node); - painter->save(); - restore = true; - painter->setClipRect(cn->clipRect(), Qt::IntersectClip); - } else if (node->type() == QSGNode::OpacityNodeType) { - QSGOpacityNode *on = static_cast<QSGOpacityNode*>(node); - painter->save(); - restore = true; - painter->setOpacity(on->opacity()); - } - - node->paint(painter); - - for (QSGNode *child = node->firstChild(); child; child = child->nextSibling()) - renderNode(painter, child); - - if (restore) - painter->restore(); -} - RenderContext::RenderContext(QSGContext *ctx) : QSGRenderContext(ctx) , currentWindow(0) @@ -192,5 +163,4 @@ void RenderContext::renderNextFrame(QSGRenderer *renderer, GLuint fbo) QSGRenderContext::renderNextFrame(renderer, fbo); } - } // namespace |