aboutsummaryrefslogtreecommitdiffstats
path: root/softwarecontext/context.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@digia.com>2014-08-08 12:10:11 +0200
committerLars Knoll <lars.knoll@digia.com>2014-08-08 15:57:43 +0300
commit5fd71e9bd83935c907eb5ad8ffc270ae42ff05ae (patch)
tree157c16eb86aebc381584c2849e97ed99ec0d5807 /softwarecontext/context.cpp
parentd6ceb224da997b9afad3d899a6af62c54e5a443f (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.cpp34
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