wallet: editbox fix race condition

This commit is contained in:
darkfi
2024-07-10 10:51:54 +02:00
parent 4cf4fa93d8
commit 8e54b470bd
2 changed files with 10 additions and 9 deletions

View File

@@ -402,10 +402,10 @@ impl App {
let prop = node.get_property("rect").unwrap();
prop.set_f32(0, 0.).unwrap();
prop.set_f32(1, 0.).unwrap();
let code = vec![Op::LoadVar("lw".to_string())];
let code = vec![Op::LoadVar("w".to_string())];
prop.set_expr(2, code).unwrap();
let code = vec![Op::Sub((
Box::new(Op::LoadVar("lh".to_string())),
Box::new(Op::LoadVar("h".to_string())),
Box::new(Op::ConstFloat32(50.)),
))];
prop.set_expr(3, code).unwrap();

View File

@@ -279,14 +279,17 @@ impl EditBox {
}
on_modify.when_change(rect.clone(), redraw);
on_modify.when_change(baseline.prop(), redraw);
on_modify.when_change(scroll.prop(), redraw);
on_modify.when_change(cursor_pos.prop(), redraw);
// The commented properties are modified on input events
// So then redraw() will get repeatedly triggered when these properties
// are changed. We should find a solution. For now the hooks are disabled.
//on_modify.when_change(scroll.prop(), redraw);
//on_modify.when_change(cursor_pos.prop(), redraw);
on_modify.when_change(font_size.prop(), redraw);
on_modify.when_change(text.prop(), redraw);
on_modify.when_change(text_color.prop(), redraw);
on_modify.when_change(cursor_color.prop(), redraw);
on_modify.when_change(hi_bg_color.prop(), redraw);
on_modify.when_change(selected.clone(), redraw);
//on_modify.when_change(selected.clone(), redraw);
on_modify.when_change(z_index.prop(), redraw);
on_modify.when_change(debug.prop(), redraw);
@@ -1119,14 +1122,12 @@ impl EditBox {
}
async fn redraw(&self) {
let old = self.render_info.lock().unwrap().clone();
// draw will recalc this when it's None
let old = std::mem::replace(&mut *self.render_info.lock().unwrap(), None);
let glyphs = self.text_shaper.shape(self.text.get(), self.font_size.get()).await;
*self.glyphs.lock().unwrap() = glyphs;
// draw will recalc this when it's None
*self.render_info.lock().unwrap() = None;
let sg = self.sg.lock().await;
let node = sg.get_node(self.node_id).unwrap();