aboutsummaryrefslogtreecommitdiffstats
path: root/softwarecontext/renderingvisitor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'softwarecontext/renderingvisitor.cpp')
-rw-r--r--softwarecontext/renderingvisitor.cpp81
1 files changed, 81 insertions, 0 deletions
diff --git a/softwarecontext/renderingvisitor.cpp b/softwarecontext/renderingvisitor.cpp
new file mode 100644
index 0000000000..3a58600972
--- /dev/null
+++ b/softwarecontext/renderingvisitor.cpp
@@ -0,0 +1,81 @@
+#include "renderingvisitor.h"
+
+#include "imagenode.h"
+#include "rectanglenode.h"
+#include "glyphnode.h"
+
+RenderingVisitor::RenderingVisitor(QPainter *painter)
+ : painter(painter)
+{
+
+}
+
+void RenderingVisitor::visit(QSGTransformNode *node)
+{
+ painter->save();
+ painter->setTransform(node->matrix().toTransform(), /*combine*/true);
+}
+
+void RenderingVisitor::endVisit(QSGTransformNode *)
+{
+ painter->restore();
+}
+
+void RenderingVisitor::visit(QSGClipNode *node)
+{
+ painter->save();
+ painter->setClipRect(node->clipRect(), Qt::IntersectClip);
+}
+
+void RenderingVisitor::endVisit(QSGClipNode *)
+{
+ painter->restore();
+}
+
+void RenderingVisitor::visit(QSGGeometryNode *node)
+{
+ Q_UNREACHABLE();
+}
+
+void RenderingVisitor::endVisit(QSGGeometryNode *node)
+{
+ Q_UNREACHABLE();
+}
+
+void RenderingVisitor::visit(QSGOpacityNode *node)
+{
+ painter->save();
+ painter->setOpacity(node->opacity());
+}
+
+void RenderingVisitor::endVisit(QSGOpacityNode *node)
+{
+ painter->restore();
+}
+
+void RenderingVisitor::visit(QSGImageNode *node)
+{
+ static_cast<ImageNode*>(node)->paint(painter);
+}
+
+void RenderingVisitor::endVisit(QSGImageNode *)
+{
+}
+
+void RenderingVisitor::visit(QSGRectangleNode *node)
+{
+ static_cast<RectangleNode*>(node)->paint(painter);
+}
+
+void RenderingVisitor::endVisit(QSGRectangleNode *)
+{
+}
+
+void RenderingVisitor::visit(QSGGlyphNode *node)
+{
+ static_cast<GlyphNode*>(node)->paint(painter);
+}
+
+void RenderingVisitor::endVisit(QSGGlyphNode *)
+{
+}