diff --git a/dw/imgrenderer.cc b/dw/imgrenderer.cc index 462ab35..bd45358 100644 --- a/dw/imgrenderer.cc +++ b/dw/imgrenderer.cc @@ -27,38 +27,34 @@ using namespace lout::object; void ImgRendererDist::setBuffer (core::Imgbuf *buffer, bool resize) { - for (typed::Iterator > it = - children->iterator (); it.hasNext (); ) { - TypedPointer *tp = it.getNext (); - tp->getTypedValue()->setBuffer (buffer, resize); + for( auto &tp: children ) + { + tp->setBuffer (buffer, resize); } } void ImgRendererDist::drawRow (int row) { - for (typed::Iterator > it = - children->iterator (); it.hasNext (); ) { - TypedPointer *tp = it.getNext (); - tp->getTypedValue()->drawRow (row); + for( auto &tp: children ) + { + tp->drawRow (row); } } void ImgRendererDist::finish () { - for (typed::Iterator > it = - children->iterator (); it.hasNext (); ) { - TypedPointer *tp = it.getNext (); - tp->getTypedValue()->finish (); + for( auto &tp: children ) + { + tp->finish (); } } void ImgRendererDist::fatal () { - for (typed::Iterator > it = - children->iterator (); it.hasNext (); ) { - TypedPointer *tp = it.getNext (); - tp->getTypedValue()->fatal (); + for( auto &tp: children ) + { + tp->fatal (); } } diff --git a/dw/imgrenderer.hh b/dw/imgrenderer.hh index f3401d2..14c574d 100644 --- a/dw/imgrenderer.hh +++ b/dw/imgrenderer.hh @@ -1,6 +1,8 @@ #ifndef __DW_IMGRENDERER_HH__ #define __DW_IMGRENDERER_HH__ +#include + #ifndef __INCLUDED_FROM_DW_CORE_HH__ # error Do not include this file directly, use "core.hh" instead. #endif @@ -58,25 +60,22 @@ public: */ class ImgRendererDist: public ImgRenderer { - lout::container::typed::HashSet > - *children; + std::set< std::unique_ptr< ImgRenderer > > children; public: - inline ImgRendererDist () - { children = new lout::container::typed::HashSet - > (true); } - ~ImgRendererDist () { delete children; } - void setBuffer (core::Imgbuf *buffer, bool resize); void drawRow (int row); void finish (); void fatal (); - void put (ImgRenderer *child) - { children->put (new lout::object::TypedPointer (child)); } - void remove (ImgRenderer *child) - { lout::object::TypedPointer tp (child); - children->remove (&tp); } + void put (std::unique_ptr< ImgRenderer > child) + { children.insert( std::move( child ) ); } + void + remove( ImgRenderer * child) + { + children.erase( std::find_if( begin( children ), end( children ), + [&]( const auto &elem ) { return child == elem.get(); } ) ); + } }; } // namespace core diff --git a/dw/layout.cc b/dw/layout.cc index 2d6474c..aeca419 100644 --- a/dw/layout.cc +++ b/dw/layout.cc @@ -846,8 +846,8 @@ void Layout::setBgImage (style::StyleImage *bgImage, // layout is deleted, "layoutImgRenderer" will be kept, since it // is not specific to the style, but only to this layout. if (layoutImgRenderer == NULL) - layoutImgRenderer = new LayoutImgRenderer (this); - bgImage->putExternalImgRenderer (layoutImgRenderer); + layoutImgRenderer = std::make_unique< LayoutImgRenderer >( this ).release(); + bgImage->putExternalImgRenderer( std::unique_ptr< LayoutImgRenderer >{ layoutImgRenderer } ); } } diff --git a/dw/style.cc b/dw/style.cc index f18d0f6..279b672 100644 --- a/dw/style.cc +++ b/dw/style.cc @@ -625,8 +625,8 @@ StyleImage::StyleImage () imgbufTiled = NULL; imgRendererDist = new ImgRendererDist (); - styleImgRenderer = new StyleImgRenderer (this); - imgRendererDist->put (styleImgRenderer); + styleImgRenderer= std::make_unique< StyleImgRenderer >( this ).release(); + imgRendererDist->put( std::unique_ptr< StyleImgRenderer >{ styleImgRenderer } ); } StyleImage::~StyleImage () diff --git a/dw/style.hh b/dw/style.hh index 25acc61..a256658 100644 --- a/dw/style.hh +++ b/dw/style.hh @@ -889,8 +889,8 @@ public: * \brief Add an additional ImgRenderer, especially used for * drawing. */ - inline void putExternalImgRenderer (ImgRenderer *ir) - { imgRendererDist->put (ir); } + inline void putExternalImgRenderer (std::unique_ptr< ImgRenderer > ir) + { imgRendererDist->put( std::move( ir ) ); } /** * \brief Remove a previously added additional ImgRenderer. diff --git a/dw/textblock.cc b/dw/textblock.cc index 5227b7c..161ce26 100644 --- a/dw/textblock.cc +++ b/dw/textblock.cc @@ -1838,9 +1838,9 @@ void Textblock::setWordImgRenderer (int wordNo) Word *word = words->getRef (wordNo); if (word->style->backgroundImage) { - word->wordImgRenderer = new WordImgRenderer (this, wordNo); + word->wordImgRenderer= std::make_unique< WordImgRenderer >( this, wordNo ).release(); word->style->backgroundImage->putExternalImgRenderer - (word->wordImgRenderer); + ( std::unique_ptr< WordImgRenderer >{ word->wordImgRenderer } ); } else word->wordImgRenderer = NULL; } @@ -1862,9 +1862,9 @@ void Textblock::setSpaceImgRenderer (int wordNo) Word *word = words->getRef (wordNo); if (word->spaceStyle->backgroundImage) { - word->spaceImgRenderer = new SpaceImgRenderer (this, wordNo); + word->spaceImgRenderer= std::make_unique< SpaceImgRenderer >( this, wordNo ).release(); word->spaceStyle->backgroundImage->putExternalImgRenderer - (word->spaceImgRenderer); + ( std::unique_ptr< SpaceImgRenderer>{ word->spaceImgRenderer } ); } else word->spaceImgRenderer = NULL; } diff --git a/dw/widget.cc b/dw/widget.cc index db1f4d4..ca6415d 100644 --- a/dw/widget.cc +++ b/dw/widget.cc @@ -1337,8 +1337,8 @@ void Widget::setStyle (style::Style *style) // widget is deleted, "widgetImgRenderer" will be kept, since it // is not specific to the style, but only to this widget. if (widgetImgRenderer == NULL) - widgetImgRenderer = new WidgetImgRenderer (this); - style->backgroundImage->putExternalImgRenderer (widgetImgRenderer); + widgetImgRenderer = std::make_unique< WidgetImgRenderer >( this ).release(); + style->backgroundImage->putExternalImgRenderer( std::unique_ptr< WidgetImgRenderer >{ widgetImgRenderer } ); } if (layout != NULL) {