This one pushes ownership a lot wider.
Some checks failed
CI / ubuntu-latest-html-tests (push) Has been cancelled
CI / ubuntu-latest-no-tls (push) Has been cancelled
CI / ubuntu-latest-mbedtls2 (push) Has been cancelled
CI / ubuntu-latest-openssl-3 (push) Has been cancelled
CI / ubuntu-latest-with-old-std (push) Has been cancelled
CI / ubuntu-20-04-openssl-1-1 (push) Has been cancelled
CI / alpine-mbedtls-3_6_0 (push) Has been cancelled
CI / macOS-13-openssl-1-1 (push) Has been cancelled
CI / macOS-13-openssl-3 (push) Has been cancelled
CI / freebsd-14-openssl-3 (push) Has been cancelled
CI / windows-mbedtls (push) Has been cancelled
Some checks failed
CI / ubuntu-latest-html-tests (push) Has been cancelled
CI / ubuntu-latest-no-tls (push) Has been cancelled
CI / ubuntu-latest-mbedtls2 (push) Has been cancelled
CI / ubuntu-latest-openssl-3 (push) Has been cancelled
CI / ubuntu-latest-with-old-std (push) Has been cancelled
CI / ubuntu-20-04-openssl-1-1 (push) Has been cancelled
CI / alpine-mbedtls-3_6_0 (push) Has been cancelled
CI / macOS-13-openssl-1-1 (push) Has been cancelled
CI / macOS-13-openssl-3 (push) Has been cancelled
CI / freebsd-14-openssl-3 (push) Has been cancelled
CI / windows-mbedtls (push) Has been cancelled
This commit is contained in:
@ -27,38 +27,34 @@ using namespace lout::object;
|
|||||||
|
|
||||||
void ImgRendererDist::setBuffer (core::Imgbuf *buffer, bool resize)
|
void ImgRendererDist::setBuffer (core::Imgbuf *buffer, bool resize)
|
||||||
{
|
{
|
||||||
for (typed::Iterator <TypedPointer <ImgRenderer> > it =
|
for( auto &tp: children )
|
||||||
children->iterator (); it.hasNext (); ) {
|
{
|
||||||
TypedPointer <ImgRenderer> *tp = it.getNext ();
|
tp->setBuffer (buffer, resize);
|
||||||
tp->getTypedValue()->setBuffer (buffer, resize);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImgRendererDist::drawRow (int row)
|
void ImgRendererDist::drawRow (int row)
|
||||||
{
|
{
|
||||||
for (typed::Iterator <TypedPointer <ImgRenderer> > it =
|
for( auto &tp: children )
|
||||||
children->iterator (); it.hasNext (); ) {
|
{
|
||||||
TypedPointer <ImgRenderer> *tp = it.getNext ();
|
tp->drawRow (row);
|
||||||
tp->getTypedValue()->drawRow (row);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ImgRendererDist::finish ()
|
void ImgRendererDist::finish ()
|
||||||
{
|
{
|
||||||
for (typed::Iterator <TypedPointer <ImgRenderer> > it =
|
for( auto &tp: children )
|
||||||
children->iterator (); it.hasNext (); ) {
|
{
|
||||||
TypedPointer <ImgRenderer> *tp = it.getNext ();
|
tp->finish ();
|
||||||
tp->getTypedValue()->finish ();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ImgRendererDist::fatal ()
|
void ImgRendererDist::fatal ()
|
||||||
{
|
{
|
||||||
for (typed::Iterator <TypedPointer <ImgRenderer> > it =
|
for( auto &tp: children )
|
||||||
children->iterator (); it.hasNext (); ) {
|
{
|
||||||
TypedPointer <ImgRenderer> *tp = it.getNext ();
|
tp->fatal ();
|
||||||
tp->getTypedValue()->fatal ();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
#ifndef __DW_IMGRENDERER_HH__
|
#ifndef __DW_IMGRENDERER_HH__
|
||||||
#define __DW_IMGRENDERER_HH__
|
#define __DW_IMGRENDERER_HH__
|
||||||
|
|
||||||
|
#include <set>
|
||||||
|
|
||||||
#ifndef __INCLUDED_FROM_DW_CORE_HH__
|
#ifndef __INCLUDED_FROM_DW_CORE_HH__
|
||||||
# error Do not include this file directly, use "core.hh" instead.
|
# error Do not include this file directly, use "core.hh" instead.
|
||||||
#endif
|
#endif
|
||||||
@ -58,25 +60,22 @@ public:
|
|||||||
*/
|
*/
|
||||||
class ImgRendererDist: public ImgRenderer
|
class ImgRendererDist: public ImgRenderer
|
||||||
{
|
{
|
||||||
lout::container::typed::HashSet <lout::object::TypedPointer <ImgRenderer> >
|
std::set< std::unique_ptr< ImgRenderer > > children;
|
||||||
*children;
|
|
||||||
|
|
||||||
public:
|
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 setBuffer (core::Imgbuf *buffer, bool resize);
|
||||||
void drawRow (int row);
|
void drawRow (int row);
|
||||||
void finish ();
|
void finish ();
|
||||||
void fatal ();
|
void fatal ();
|
||||||
|
|
||||||
void put (ImgRenderer *child)
|
void put (std::unique_ptr< ImgRenderer > child)
|
||||||
{ children->put (new lout::object::TypedPointer <ImgRenderer> (child)); }
|
{ children.insert( std::move( child ) ); }
|
||||||
void remove (ImgRenderer *child)
|
void
|
||||||
{ lout::object::TypedPointer <ImgRenderer> tp (child);
|
remove( ImgRenderer * child)
|
||||||
children->remove (&tp); }
|
{
|
||||||
|
children.erase( std::find_if( begin( children ), end( children ),
|
||||||
|
[&]( const auto &elem ) { return child == elem.get(); } ) );
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace core
|
} // namespace core
|
||||||
|
@ -846,8 +846,8 @@ void Layout::setBgImage (style::StyleImage *bgImage,
|
|||||||
// layout is deleted, "layoutImgRenderer" will be kept, since it
|
// layout is deleted, "layoutImgRenderer" will be kept, since it
|
||||||
// is not specific to the style, but only to this layout.
|
// is not specific to the style, but only to this layout.
|
||||||
if (layoutImgRenderer == NULL)
|
if (layoutImgRenderer == NULL)
|
||||||
layoutImgRenderer = new LayoutImgRenderer (this);
|
layoutImgRenderer = std::make_unique< LayoutImgRenderer >( this ).release();
|
||||||
bgImage->putExternalImgRenderer (layoutImgRenderer);
|
bgImage->putExternalImgRenderer( std::unique_ptr< LayoutImgRenderer >{ layoutImgRenderer } );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -625,8 +625,8 @@ StyleImage::StyleImage ()
|
|||||||
imgbufTiled = NULL;
|
imgbufTiled = NULL;
|
||||||
|
|
||||||
imgRendererDist = new ImgRendererDist ();
|
imgRendererDist = new ImgRendererDist ();
|
||||||
styleImgRenderer = new StyleImgRenderer (this);
|
styleImgRenderer= std::make_unique< StyleImgRenderer >( this ).release();
|
||||||
imgRendererDist->put (styleImgRenderer);
|
imgRendererDist->put( std::unique_ptr< StyleImgRenderer >{ styleImgRenderer } );
|
||||||
}
|
}
|
||||||
|
|
||||||
StyleImage::~StyleImage ()
|
StyleImage::~StyleImage ()
|
||||||
|
@ -889,8 +889,8 @@ public:
|
|||||||
* \brief Add an additional ImgRenderer, especially used for
|
* \brief Add an additional ImgRenderer, especially used for
|
||||||
* drawing.
|
* drawing.
|
||||||
*/
|
*/
|
||||||
inline void putExternalImgRenderer (ImgRenderer *ir)
|
inline void putExternalImgRenderer (std::unique_ptr< ImgRenderer > ir)
|
||||||
{ imgRendererDist->put (ir); }
|
{ imgRendererDist->put( std::move( ir ) ); }
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Remove a previously added additional ImgRenderer.
|
* \brief Remove a previously added additional ImgRenderer.
|
||||||
|
@ -1838,9 +1838,9 @@ void Textblock::setWordImgRenderer (int wordNo)
|
|||||||
Word *word = words->getRef (wordNo);
|
Word *word = words->getRef (wordNo);
|
||||||
|
|
||||||
if (word->style->backgroundImage) {
|
if (word->style->backgroundImage) {
|
||||||
word->wordImgRenderer = new WordImgRenderer (this, wordNo);
|
word->wordImgRenderer= std::make_unique< WordImgRenderer >( this, wordNo ).release();
|
||||||
word->style->backgroundImage->putExternalImgRenderer
|
word->style->backgroundImage->putExternalImgRenderer
|
||||||
(word->wordImgRenderer);
|
( std::unique_ptr< WordImgRenderer >{ word->wordImgRenderer } );
|
||||||
} else
|
} else
|
||||||
word->wordImgRenderer = NULL;
|
word->wordImgRenderer = NULL;
|
||||||
}
|
}
|
||||||
@ -1862,9 +1862,9 @@ void Textblock::setSpaceImgRenderer (int wordNo)
|
|||||||
Word *word = words->getRef (wordNo);
|
Word *word = words->getRef (wordNo);
|
||||||
|
|
||||||
if (word->spaceStyle->backgroundImage) {
|
if (word->spaceStyle->backgroundImage) {
|
||||||
word->spaceImgRenderer = new SpaceImgRenderer (this, wordNo);
|
word->spaceImgRenderer= std::make_unique< SpaceImgRenderer >( this, wordNo ).release();
|
||||||
word->spaceStyle->backgroundImage->putExternalImgRenderer
|
word->spaceStyle->backgroundImage->putExternalImgRenderer
|
||||||
(word->spaceImgRenderer);
|
( std::unique_ptr< SpaceImgRenderer>{ word->spaceImgRenderer } );
|
||||||
} else
|
} else
|
||||||
word->spaceImgRenderer = NULL;
|
word->spaceImgRenderer = NULL;
|
||||||
}
|
}
|
||||||
|
@ -1337,8 +1337,8 @@ void Widget::setStyle (style::Style *style)
|
|||||||
// widget is deleted, "widgetImgRenderer" will be kept, since it
|
// widget is deleted, "widgetImgRenderer" will be kept, since it
|
||||||
// is not specific to the style, but only to this widget.
|
// is not specific to the style, but only to this widget.
|
||||||
if (widgetImgRenderer == NULL)
|
if (widgetImgRenderer == NULL)
|
||||||
widgetImgRenderer = new WidgetImgRenderer (this);
|
widgetImgRenderer = std::make_unique< WidgetImgRenderer >( this ).release();
|
||||||
style->backgroundImage->putExternalImgRenderer (widgetImgRenderer);
|
style->backgroundImage->putExternalImgRenderer( std::unique_ptr< WidgetImgRenderer >{ widgetImgRenderer } );
|
||||||
}
|
}
|
||||||
|
|
||||||
if (layout != NULL) {
|
if (layout != NULL) {
|
||||||
|
Reference in New Issue
Block a user