diff options
Diffstat (limited to 'dw/imgrenderer.hh')
-rw-r--r-- | dw/imgrenderer.hh | 30 |
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 |