Plumb Widget ownership up higher.

This commit is contained in:
2025-04-18 14:15:09 -04:00
parent b6c7511997
commit 99515ff353
6 changed files with 14 additions and 13 deletions

View File

@ -390,11 +390,10 @@ FltkPlatform::FltkResourceFactory::createLabelButtonResource (const char
} }
core::ui::ComplexButtonResource * core::ui::ComplexButtonResource *
FltkPlatform::FltkResourceFactory::createComplexButtonResource (core::Widget FltkPlatform::FltkResourceFactory::createComplexButtonResource (std::unique_ptr< core::Widget > widget,
*widget,
bool relief) bool relief)
{ {
return new ui::FltkComplexButtonResource (platform, widget, relief); return new ui::FltkComplexButtonResource (platform, std::move( widget ), relief);
} }
core::ui::ListResource * core::ui::ListResource *

View File

@ -104,7 +104,7 @@ private:
core::ui::LabelButtonResource *createLabelButtonResource (const char core::ui::LabelButtonResource *createLabelButtonResource (const char
*label); *label);
core::ui::ComplexButtonResource * core::ui::ComplexButtonResource *
createComplexButtonResource (core::Widget *widget, bool relief); createComplexButtonResource (std::unique_ptr< core::Widget > widget, bool relief);
core::ui::ListResource * core::ui::ListResource *
createListResource (core::ui::ListResource::SelectionMode selectionMode, createListResource (core::ui::ListResource::SelectionMode selectionMode,
int rows); int rows);

View File

@ -726,16 +726,14 @@ void FltkLabelButtonResource::setLabel (const char *label)
// ---------------------------------------------------------------------- // ----------------------------------------------------------------------
FltkComplexButtonResource::FltkComplexButtonResource (FltkPlatform *platform, FltkComplexButtonResource::FltkComplexButtonResource (FltkPlatform *platform,
dw::core::Widget std::unique_ptr< dw::core::Widget > widget,
*widget, bool relief): bool relief):
FltkSpecificResource <dw::core::ui::ComplexButtonResource> (platform) FltkSpecificResource <dw::core::ui::ComplexButtonResource> (platform)
{ {
flatView = topView = NULL; flatView = topView = NULL;
this->relief = relief; this->relief = relief;
FltkResource::init (platform); FltkResource::init (platform);
std::unique_ptr< dw::core::Widget > widget_unique; ComplexButtonResource::init (std::move( widget ));
widget_unique.reset( widget );
ComplexButtonResource::init (std::move( widget_unique ));
} }
FltkComplexButtonResource::~FltkComplexButtonResource () FltkComplexButtonResource::~FltkComplexButtonResource ()

View File

@ -284,7 +284,7 @@ protected:
Fl_Widget *createNewWidget (core::Allocation *allocation); Fl_Widget *createNewWidget (core::Allocation *allocation);
public: public:
FltkComplexButtonResource (FltkPlatform *platform, dw::core::Widget *widget, FltkComplexButtonResource (FltkPlatform *platform, std::unique_ptr< dw::core::Widget > widget,
bool relief); bool relief);
~FltkComplexButtonResource (); ~FltkComplexButtonResource ();
}; };

View File

@ -582,7 +582,7 @@ class ResourceFactory: public lout::object::Object
public: public:
virtual LabelButtonResource *createLabelButtonResource (const char *label) virtual LabelButtonResource *createLabelButtonResource (const char *label)
= 0; = 0;
virtual ComplexButtonResource *createComplexButtonResource (Widget *widget, virtual ComplexButtonResource *createComplexButtonResource (std::unique_ptr< Widget > widget,
bool relief) bool relief)
= 0; = 0;
virtual ListResource *createListResource (ListResource::SelectionMode virtual ListResource *createListResource (ListResource::SelectionMode

View File

@ -960,10 +960,12 @@ void Html_tag_open_button(DilloHtml *html, const char *tag, int tagsize)
* but it caused 100% CPU usage. * but it caused 100% CPU usage.
*/ */
page = new Textblock (false, true); page = new Textblock (false, true);
std::unique_ptr< Widget > page_unique;
page_unique.reset( page );
page->setStyle (html->backgroundStyle ()); page->setStyle (html->backgroundStyle ());
ResourceFactory *factory = HT2LT(html)->getResourceFactory(); ResourceFactory *factory = HT2LT(html)->getResourceFactory();
Resource *resource = factory->createComplexButtonResource(page, true); Resource *resource = factory->createComplexButtonResource(std::move( page_unique ), true);
embed = new Embed(resource); embed = new Embed(resource);
// a_Dw_button_set_sensitive (DW_BUTTON (button), FALSE); // a_Dw_button_set_sensitive (DW_BUTTON (button), FALSE);
@ -2043,10 +2045,12 @@ static Embed *Html_input_image(DilloHtml *html, const char *tag, int tagsize)
// widget. Notice that the order of the casts matters, because // widget. Notice that the order of the casts matters, because
// of multiple inheritance. // of multiple inheritance.
dw::Image *dwi = (dw::Image*)(dw::core::ImgRenderer*)Image->img_rndr; dw::Image *dwi = (dw::Image*)(dw::core::ImgRenderer*)Image->img_rndr;
std::unique_ptr< dw::core::Widget > dwi_unique;
dwi_unique.reset( dwi );
dwi->setStyle (html->backgroundStyle ()); dwi->setStyle (html->backgroundStyle ());
ResourceFactory *factory = HT2LT(html)->getResourceFactory(); ResourceFactory *factory = HT2LT(html)->getResourceFactory();
ComplexButtonResource *complex_b_r = ComplexButtonResource *complex_b_r =
factory->createComplexButtonResource(dwi, false); factory->createComplexButtonResource(std::move( dwi_unique ), false);
button = new Embed(complex_b_r); button = new Embed(complex_b_r);
HT2TB(html)->addWidget (button, html->style ()); HT2TB(html)->addWidget (button, html->style ());
} }