fix on_id widget refcount leak (-> memory leak)

This commit is contained in:
2025-12-04 02:59:05 -05:00
parent 84c460a91f
commit e5d0a7e592
6 changed files with 74 additions and 130 deletions

View File

@@ -103,7 +103,7 @@ impl Client {
.width(rest(3)),
)
.span(Dir::RIGHT)
.add_static(&mut ui);
.add(&mut ui);
let span_test = (
rrect.color(Color::GREEN).width(100),
@@ -114,9 +114,10 @@ impl Client {
rrect.color(Color::RED).width(100),
)
.span(Dir::LEFT)
.add_static(&mut ui);
.add(&mut ui);
let span_add = Span::empty(Dir::RIGHT).add_static(&mut ui);
let span_add = Span::empty(Dir::RIGHT).add(&mut ui);
let span_add_ = span_add.clone();
let add_button = rect(Color::LIME)
.radius(30)
@@ -125,22 +126,21 @@ impl Client {
.ui
.add(image(include_bytes!("assets/sungals.png")).center())
.any();
ctx.ui[span_add].children.push(child);
ctx.ui[&span_add_].children.push(child);
})
.sized((150, 150))
.align(Align::BOT_RIGHT);
let span_add_ = span_add.clone();
let del_button = rect(Color::RED)
.radius(30)
.on(CursorSense::click(), move |ctx: &mut Client, _| {
ctx.ui[span_add].children.pop();
ctx.ui[&span_add_].children.pop();
})
.sized((150, 150))
.align(Align::BOT_LEFT);
let span_add_test = (span_add, add_button, del_button)
.stack()
.add_static(&mut ui);
let span_add_test = (span_add, add_button, del_button).stack().add(&mut ui);
let btext = |content| wtext(content).size(30);
@@ -163,10 +163,10 @@ impl Client {
wtext("pretty cool right?").size(50),
)
.span(Dir::DOWN)
.add_static(&mut ui);
.add(&mut ui);
let texts = Span::empty(Dir::DOWN).gap(10).add_static(&mut ui);
let msg_area = texts.scroll().masked().background(rect(Color::SKY));
let texts = Span::empty(Dir::DOWN).gap(10).add(&mut ui);
let msg_area = texts.clone().scroll().masked().background(rect(Color::SKY));
let add_text = wtext("add")
.editable(false)
.text_align(Align::LEFT)
@@ -183,7 +183,7 @@ impl Client {
let msg_box = text
.background(rect(Color::WHITE.darker(0.5)))
.add(&mut client.ui);
client.ui[texts].children.push(msg_box.any());
client.ui[&texts].children.push(msg_box.any());
})
.add(&mut ui);
let text_edit_scroll = (
@@ -207,14 +207,15 @@ impl Client {
.align(Align::BOT),
)
.span(Dir::DOWN)
.add_static(&mut ui);
.add(&mut ui);
let main = pad_test.pad(10).add_static(&mut ui);
let main = pad_test.clone().pad(10).add(&mut ui);
let switch_button = |color, to, label| {
let switch_button = |color, to: WidgetId, label| {
let main_ = main.clone();
let rect = rect(color)
.id_on(CursorSense::click(), move |id, ui: &mut Ui, _| {
ui[main].inner.set_static(to);
ui[&main_.clone()].inner = to.clone();
ui[id].color = color.darker(0.3);
})
.edit_on(