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 *
FltkPlatform::FltkResourceFactory::createComplexButtonResource (core::Widget
*widget,
FltkPlatform::FltkResourceFactory::createComplexButtonResource (std::unique_ptr< core::Widget > widget,
bool relief)
{
return new ui::FltkComplexButtonResource (platform, widget, relief);
return new ui::FltkComplexButtonResource (platform, std::move( widget ), relief);
}
core::ui::ListResource *

View File

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

View File

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

View File

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

View File

@ -582,7 +582,7 @@ class ResourceFactory: public lout::object::Object
public:
virtual LabelButtonResource *createLabelButtonResource (const char *label)
= 0;
virtual ComplexButtonResource *createComplexButtonResource (Widget *widget,
virtual ComplexButtonResource *createComplexButtonResource (std::unique_ptr< Widget > widget,
bool relief)
= 0;
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.
*/
page = new Textblock (false, true);
std::unique_ptr< Widget > page_unique;
page_unique.reset( page );
page->setStyle (html->backgroundStyle ());
ResourceFactory *factory = HT2LT(html)->getResourceFactory();
Resource *resource = factory->createComplexButtonResource(page, true);
Resource *resource = factory->createComplexButtonResource(std::move( page_unique ), true);
embed = new Embed(resource);
// 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
// of multiple inheritance.
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 ());
ResourceFactory *factory = HT2LT(html)->getResourceFactory();
ComplexButtonResource *complex_b_r =
factory->createComplexButtonResource(dwi, false);
factory->createComplexButtonResource(std::move( dwi_unique ), false);
button = new Embed(complex_b_r);
HT2TB(html)->addWidget (button, html->style ());
}