summaryrefslogtreecommitdiff
path: root/dw/imgrenderer.hh
diff options
context:
space:
mode:
Diffstat (limited to 'dw/imgrenderer.hh')
-rw-r--r--dw/imgrenderer.hh30
1 files changed, 30 insertions, 0 deletions
diff --git a/dw/imgrenderer.hh b/dw/imgrenderer.hh
index 9c7c6525..1efeef8c 100644
--- a/dw/imgrenderer.hh
+++ b/dw/imgrenderer.hh
@@ -16,10 +16,40 @@ namespace core {
class ImgRenderer
{
public:
+ virtual ~ImgRenderer () { }
+
virtual void setBuffer (core::Imgbuf *buffer, bool resize = false) = 0;
virtual void drawRow (int row) = 0;
};
+/**
+ * \brief Implementation of ImgRenderer, which distributes all calls
+ * to a set of other implementations of ImgRenderer.
+ *
+ * The order of the call children is not defined, especially not
+ * identical to the order in which they have been added.
+ */
+class ImgRendererDist: public ImgRenderer
+{
+ lout::container::typed::HashSet <lout::object::TypedPointer <ImgRenderer> >
+ *children;
+
+public:
+ inline ImgRendererDist ()
+ { children = new lout::container::typed::HashSet
+ <lout::object::TypedPointer <ImgRenderer> > (true); }
+ ~ImgRendererDist () { delete children; }
+
+ void setBuffer (core::Imgbuf *buffer, bool resize);
+ void drawRow (int row);
+
+ void put (ImgRenderer *child)
+ { children->put (new lout::object::TypedPointer <ImgRenderer> (child)); }
+ void remove (ImgRenderer *child)
+ { lout::object::TypedPointer <ImgRenderer> tp (child);
+ children->remove (&tp); }
+};
+
} // namespace core
} // namespace dw