1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-02-16 17:42:02 +00:00

fix(core/rust/ui): expose method for completely repainting layout

[no changelog]
This commit is contained in:
Martin Milata 2022-07-12 20:34:23 +02:00
parent 3b629a1ea4
commit a5cff25209
4 changed files with 23 additions and 0 deletions

View File

@ -47,6 +47,7 @@ static void _librust_qstrs(void) {
MP_QSTR_button_event;
MP_QSTR_timer;
MP_QSTR_paint;
MP_QSTR_request_complete_repaint;
MP_QSTR_trace;
MP_QSTR_bounds;
MP_QSTR_page_count;

View File

@ -282,6 +282,7 @@ impl LayoutObj {
Qstr::MP_QSTR_button_event => obj_fn_var!(3, 3, ui_layout_button_event).as_obj(),
Qstr::MP_QSTR_timer => obj_fn_2!(ui_layout_timer).as_obj(),
Qstr::MP_QSTR_paint => obj_fn_1!(ui_layout_paint).as_obj(),
Qstr::MP_QSTR_request_complete_repaint => obj_fn_1!(ui_layout_request_complete_repaint).as_obj(),
Qstr::MP_QSTR_trace => obj_fn_2!(ui_layout_trace).as_obj(),
Qstr::MP_QSTR_bounds => obj_fn_1!(ui_layout_bounds).as_obj(),
Qstr::MP_QSTR_page_count => obj_fn_1!(ui_layout_page_count).as_obj(),
@ -421,6 +422,22 @@ extern "C" fn ui_layout_paint(this: Obj) -> Obj {
unsafe { util::try_or_raise(block) }
}
extern "C" fn ui_layout_request_complete_repaint(this: Obj) -> Obj {
let block = || {
let this: Gc<LayoutObj> = this.try_into()?;
let event = Event::RequestPaint;
let msg = this.obj_event(event)?;
if msg != Obj::const_none() {
// Messages raised during a `RequestPaint` dispatch are not propagated, let's
// make sure we don't do that.
#[cfg(feature = "ui_debug")]
panic!("cannot raise messages during RequestPaint");
};
Ok(Obj::const_none())
};
unsafe { util::try_or_raise(block) }
}
extern "C" fn ui_layout_page_count(this: Obj) -> Obj {
let block = || {
let this: Gc<LayoutObj> = this.try_into()?;

View File

@ -28,6 +28,10 @@ class _RustLayout(ui.Layout):
def set_timer(self, token: int, deadline: int) -> None:
self.timer.schedule(deadline, token)
def request_complete_repaint(self) -> None:
msg = self.layout.request_complete_repaint()
assert msg is None
if __debug__:
def create_tasks(self) -> tuple[loop.AwaitableTask, ...]:

View File

@ -185,6 +185,7 @@ async def _prompt_number(
)
)
)
num_input.request_complete_repaint()
async def slip39_prompt_threshold(