mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-05-28 19:58:45 +00:00
fix(core/ui): T3T1: rebase on main
This commit is contained in:
parent
27d733f89d
commit
cde0dce3ef
@ -102,7 +102,7 @@ where
|
|||||||
self.inner.paint()
|
self.inner.paint()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
self.inner.render(target);
|
self.inner.render(target);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -155,5 +155,5 @@ impl Component for Swipe {
|
|||||||
|
|
||||||
fn paint(&mut self) {}
|
fn paint(&mut self) {}
|
||||||
|
|
||||||
fn render<'s>(&'s self, _target: &mut impl Renderer<'s>) {}
|
fn render<'s>(&self, _target: &mut impl Renderer<'s>) {}
|
||||||
}
|
}
|
||||||
|
@ -67,11 +67,7 @@ impl<T: Component + Paginate + Clone> SwipePage<T> {
|
|||||||
finished
|
finished
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render_transition<'s>(
|
fn render_transition<'s>(&self, transition: &Transition<T>, target: &mut impl Renderer<'s>) {
|
||||||
&'s self,
|
|
||||||
transition: &'s Transition<T>,
|
|
||||||
target: &mut impl Renderer<'s>,
|
|
||||||
) {
|
|
||||||
target.in_clip(self.bounds, &|target| {
|
target.in_clip(self.bounds, &|target| {
|
||||||
util::render_slide(
|
util::render_slide(
|
||||||
|target| transition.cloned.render(target),
|
|target| transition.cloned.render(target),
|
||||||
@ -109,7 +105,7 @@ impl<T: Component + Paginate + Clone> Component for SwipePage<T> {
|
|||||||
self.inner.paint()
|
self.inner.paint()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
if let Some(t) = &self.transition {
|
if let Some(t) = &self.transition {
|
||||||
return self.render_transition(t, target);
|
return self.render_transition(t, target);
|
||||||
}
|
}
|
||||||
@ -200,7 +196,7 @@ impl<T: Component> Component for IgnoreSwipe<T> {
|
|||||||
self.0.paint()
|
self.0.paint()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
self.0.render(target)
|
self.0.render(target)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@ pub trait FlowStore {
|
|||||||
fn event(&mut self, i: usize, ctx: &mut EventCtx, event: Event) -> Option<FlowMsg>;
|
fn event(&mut self, i: usize, ctx: &mut EventCtx, event: Event) -> Option<FlowMsg>;
|
||||||
|
|
||||||
/// Call `Component::render` on i-th element.
|
/// Call `Component::render` on i-th element.
|
||||||
fn render<'s>(&'s self, i: usize, target: &mut impl Renderer<'s>);
|
fn render<'s>(&self, i: usize, target: &mut impl Renderer<'s>);
|
||||||
|
|
||||||
#[cfg(feature = "ui_debug")]
|
#[cfg(feature = "ui_debug")]
|
||||||
/// Call `Trace::trace` on i-th element.
|
/// Call `Trace::trace` on i-th element.
|
||||||
@ -62,7 +62,7 @@ impl FlowStore for FlowEmpty {
|
|||||||
panic!()
|
panic!()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, _i: usize, _target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, _i: usize, _target: &mut impl Renderer<'s>) {
|
||||||
panic!()
|
panic!()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -132,7 +132,7 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, i: usize, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, i: usize, target: &mut impl Renderer<'s>) {
|
||||||
if i == 0 {
|
if i == 0 {
|
||||||
self.as_ref().render(target)
|
self.as_ref().render(target)
|
||||||
} else {
|
} else {
|
||||||
|
@ -80,12 +80,12 @@ impl<Q: FlowState, S: FlowStore> SwipeFlow<Q, S> {
|
|||||||
ctx.request_paint();
|
ctx.request_paint();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render_state<'s>(&'s self, state: Q, target: &mut impl Renderer<'s>) {
|
fn render_state<'s>(&self, state: Q, target: &mut impl Renderer<'s>) {
|
||||||
self.store.render(state.index(), target)
|
self.store.render(state.index(), target)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render_transition<'s>(
|
fn render_transition<'s>(
|
||||||
&'s self,
|
&self,
|
||||||
prev_state: &Q,
|
prev_state: &Q,
|
||||||
animation: &Animation<f32>,
|
animation: &Animation<f32>,
|
||||||
direction: &SwipeDirection,
|
direction: &SwipeDirection,
|
||||||
@ -188,7 +188,7 @@ impl<Q: FlowState, S: FlowStore> Component for SwipeFlow<Q, S> {
|
|||||||
|
|
||||||
fn paint(&mut self) {}
|
fn paint(&mut self) {}
|
||||||
|
|
||||||
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
match &self.transition {
|
match &self.transition {
|
||||||
Transition::None | Transition::Internal => self.render_state(self.state, target),
|
Transition::None | Transition::Internal => self.render_state(self.state, target),
|
||||||
Transition::External {
|
Transition::External {
|
||||||
|
@ -35,7 +35,6 @@ use super::theme::BLACK;
|
|||||||
|
|
||||||
#[cfg(feature = "new_rendering")]
|
#[cfg(feature = "new_rendering")]
|
||||||
use crate::ui::{
|
use crate::ui::{
|
||||||
constant,
|
|
||||||
display::{toif::Toif, LOADER_MAX},
|
display::{toif::Toif, LOADER_MAX},
|
||||||
geometry::{Alignment, Alignment2D},
|
geometry::{Alignment, Alignment2D},
|
||||||
model_mercury::shapes::{render_loader, LoaderRange},
|
model_mercury::shapes::{render_loader, LoaderRange},
|
||||||
@ -123,7 +122,7 @@ impl ModelMercuryFeatures {
|
|||||||
let center_text_offset: i16 = 10;
|
let center_text_offset: i16 = 10;
|
||||||
let center = SCREEN.center() + Offset::y(loader_offset);
|
let center = SCREEN.center() + Offset::y(loader_offset);
|
||||||
let inactive_color = bg_color.blend(fg_color, 85);
|
let inactive_color = bg_color.blend(fg_color, 85);
|
||||||
let end = ((progress as i32 * 8 * shape::PI4 as i32) / 1000) as i16;
|
let end = 360.0 * progress as f32 / 1000.0;
|
||||||
|
|
||||||
render_loader(
|
render_loader(
|
||||||
center,
|
center,
|
||||||
@ -133,7 +132,7 @@ impl ModelMercuryFeatures {
|
|||||||
if progress >= LOADER_MAX {
|
if progress >= LOADER_MAX {
|
||||||
LoaderRange::Full
|
LoaderRange::Full
|
||||||
} else {
|
} else {
|
||||||
LoaderRange::FromTo(0, end)
|
LoaderRange::FromTo(0.0, end)
|
||||||
},
|
},
|
||||||
target,
|
target,
|
||||||
);
|
);
|
||||||
|
@ -161,7 +161,7 @@ impl Component for AddressDetails {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
match self.current_page {
|
match self.current_page {
|
||||||
0 => self.details.render(target),
|
0 => self.details.render(target),
|
||||||
_ => self.xpub_view.render(target),
|
_ => self.xpub_view.render(target),
|
||||||
|
@ -124,7 +124,7 @@ where
|
|||||||
self.label.paint();
|
self.label.paint();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
self.content.render(target);
|
self.content.render(target);
|
||||||
|
|
||||||
let center = constant::screen().center() + Offset::y(LOADER_OFFSET);
|
let center = constant::screen().center() + Offset::y(LOADER_OFFSET);
|
||||||
@ -132,10 +132,10 @@ where
|
|||||||
let background_color = theme::BG;
|
let background_color = theme::BG;
|
||||||
let inactive_color = background_color.blend(active_color, 85);
|
let inactive_color = background_color.blend(active_color, 85);
|
||||||
|
|
||||||
let start = (self.value as i32 - 100) % 1000;
|
let start = (self.value as i16 - 100) % 1000;
|
||||||
let end = (self.value as i32 + 100) % 1000;
|
let end = (self.value as i16 + 100) % 1000;
|
||||||
let start = ((start * 8 * shape::PI4 as i32) / 1000) as i16;
|
let start = 360.0 * start as f32 / 1000.0;
|
||||||
let end = ((end * 8 * shape::PI4 as i32) / 1000) as i16;
|
let end = 360.0 * end as f32 / 1000.0;
|
||||||
|
|
||||||
shape::Circle::new(center, LOADER_OUTER)
|
shape::Circle::new(center, LOADER_OUTER)
|
||||||
.with_bg(inactive_color)
|
.with_bg(inactive_color)
|
||||||
|
@ -72,7 +72,7 @@ where
|
|||||||
self.controls.paint();
|
self.controls.paint();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
self.content.render(target);
|
self.content.render(target);
|
||||||
self.controls.render(target);
|
self.controls.render(target);
|
||||||
}
|
}
|
||||||
@ -202,7 +202,7 @@ where
|
|||||||
self.controls.paint();
|
self.controls.paint();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
self.image.render(target);
|
self.image.render(target);
|
||||||
self.paragraphs.render(target);
|
self.paragraphs.render(target);
|
||||||
self.controls.render(target);
|
self.controls.render(target);
|
||||||
|
@ -211,7 +211,7 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
self.icon.render(target);
|
self.icon.render(target);
|
||||||
self.controls.render(target);
|
self.controls.render(target);
|
||||||
self.app_name.render(target);
|
self.app_name.render(target);
|
||||||
|
@ -94,7 +94,7 @@ impl<'a> Component for Footer<'a> {
|
|||||||
todo!()
|
todo!()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
// show description only if there is space for it
|
// show description only if there is space for it
|
||||||
if self.area.height() == Footer::HEIGHT_DEFAULT {
|
if self.area.height() == Footer::HEIGHT_DEFAULT {
|
||||||
if let Some(description) = self.text_description {
|
if let Some(description) = self.text_description {
|
||||||
|
@ -108,7 +108,7 @@ impl Homescreen {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render_loader<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render_loader<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
TR::progress__locking_device.map_translated(|t| {
|
TR::progress__locking_device.map_translated(|t| {
|
||||||
shape::Text::new(TOP_CENTER + Offset::y(HOLD_Y), t)
|
shape::Text::new(TOP_CENTER + Offset::y(HOLD_Y), t)
|
||||||
.with_align(Alignment::Center)
|
.with_align(Alignment::Center)
|
||||||
@ -186,7 +186,7 @@ impl Component for Homescreen {
|
|||||||
todo!()
|
todo!()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
if self.loader.is_animating() || self.loader.is_completely_grown(Instant::now()) {
|
if self.loader.is_animating() || self.loader.is_completely_grown(Instant::now()) {
|
||||||
self.render_loader(target);
|
self.render_loader(target);
|
||||||
} else {
|
} else {
|
||||||
@ -309,7 +309,7 @@ impl Component for Lockscreen<'_> {
|
|||||||
todo!()
|
todo!()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
let center = AREA.center();
|
let center = AREA.center();
|
||||||
|
|
||||||
match ImageInfo::parse(self.image) {
|
match ImageInfo::parse(self.image) {
|
||||||
|
@ -107,7 +107,7 @@ impl Component for Bip39Input {
|
|||||||
todo!("remove when ui-t3t1 done");
|
todo!("remove when ui-t3t1 done");
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
let area = self.button.area();
|
let area = self.button.area();
|
||||||
let style = self.button.style();
|
let style = self.button.style();
|
||||||
|
|
||||||
|
@ -208,7 +208,7 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
if self.input.inner().inner().is_empty() {
|
if self.input.inner().inner().is_empty() {
|
||||||
self.prompt.render(target);
|
self.prompt.render(target);
|
||||||
if self.can_go_back {
|
if self.can_go_back {
|
||||||
|
@ -377,7 +377,7 @@ impl Component for PassphraseKeyboard {
|
|||||||
todo!("remove when ui-t3t1 done")
|
todo!("remove when ui-t3t1 done")
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
self.input.render(target);
|
self.input.render(target);
|
||||||
self.next_btn.render(target);
|
self.next_btn.render(target);
|
||||||
self.erase_btn.render(target);
|
self.erase_btn.render(target);
|
||||||
@ -441,7 +441,7 @@ impl Component for Input {
|
|||||||
todo!("remove when ui-t3t1 done");
|
todo!("remove when ui-t3t1 done");
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
let style = theme::label_keyboard();
|
let style = theme::label_keyboard();
|
||||||
|
|
||||||
let text_baseline = self.area.top_left() + Offset::y(style.text_font.text_height())
|
let text_baseline = self.area.top_left() + Offset::y(style.text_font.text_height())
|
||||||
|
@ -237,7 +237,7 @@ impl Component for PinKeyboard<'_> {
|
|||||||
todo!("remove when ui-t3t1 done");
|
todo!("remove when ui-t3t1 done");
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
self.erase_btn.render(target);
|
self.erase_btn.render(target);
|
||||||
self.textbox_pad.render(target);
|
self.textbox_pad.render(target);
|
||||||
|
|
||||||
@ -433,7 +433,7 @@ impl Component for PinDots {
|
|||||||
// TODO: remove when ui-t3t1 done
|
// TODO: remove when ui-t3t1 done
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
let dot_area = self.area.inset(HEADER_PADDING);
|
let dot_area = self.area.inset(HEADER_PADDING);
|
||||||
self.pad.render(target);
|
self.pad.render(target);
|
||||||
if self.display_digits {
|
if self.display_digits {
|
||||||
|
@ -127,7 +127,7 @@ impl Component for Slip39Input {
|
|||||||
todo!("remove when ui-t3t1 done")
|
todo!("remove when ui-t3t1 done")
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
let area = self.button.area();
|
let area = self.button.area();
|
||||||
let style = self.button.style();
|
let style = self.button.style();
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ impl Component for SelectWordCount {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
for btn in self.button.iter() {
|
for btn in self.button.iter() {
|
||||||
btn.render(target)
|
btn.render(target)
|
||||||
}
|
}
|
||||||
|
@ -223,8 +223,8 @@ impl Component for Loader {
|
|||||||
let active_color = style.active;
|
let active_color = style.active;
|
||||||
let background_color = style.background_color;
|
let background_color = style.background_color;
|
||||||
|
|
||||||
let end = ((progress as i32 * 8 * shape::PI4 as i32) / 1000) as i16;
|
let end = 360.0 * progress as f32 / 1000.0;
|
||||||
let start = 0;
|
let start = 0.0;
|
||||||
|
|
||||||
render_loader(
|
render_loader(
|
||||||
center,
|
center,
|
||||||
|
@ -97,7 +97,7 @@ where
|
|||||||
todo!("remove when ui-t3t1 done");
|
todo!("remove when ui-t3t1 done");
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
self.input.render(target);
|
self.input.render(target);
|
||||||
self.paragraphs_pad.render(target);
|
self.paragraphs_pad.render(target);
|
||||||
self.paragraphs.render(target);
|
self.paragraphs.render(target);
|
||||||
@ -212,7 +212,7 @@ impl Component for NumberInput {
|
|||||||
todo!("remove when ui-t3t1 done");
|
todo!("remove when ui-t3t1 done");
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
let mut buf = [0u8; 10];
|
let mut buf = [0u8; 10];
|
||||||
|
|
||||||
if let Some(text) = strutil::format_i64(self.value as i64, &mut buf) {
|
if let Some(text) = strutil::format_i64(self.value as i64, &mut buf) {
|
||||||
|
@ -419,7 +419,7 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
self.pad.render(target);
|
self.pad.render(target);
|
||||||
match &self.loader {
|
match &self.loader {
|
||||||
Some(l) if l.is_animating() => self.loader.render(target),
|
Some(l) if l.is_animating() => self.loader.render(target),
|
||||||
|
@ -15,7 +15,6 @@ use crate::{
|
|||||||
constant,
|
constant,
|
||||||
shapes::{render_loader, LoaderRange},
|
shapes::{render_loader, LoaderRange},
|
||||||
},
|
},
|
||||||
shape,
|
|
||||||
shape::Renderer,
|
shape::Renderer,
|
||||||
util::animation_disabled,
|
util::animation_disabled,
|
||||||
},
|
},
|
||||||
@ -111,7 +110,7 @@ impl Component for Progress {
|
|||||||
self.description.paint();
|
self.description.paint();
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
self.title.render(target);
|
self.title.render(target);
|
||||||
|
|
||||||
let center = constant::screen().center() + Offset::y(self.loader_y_offset);
|
let center = constant::screen().center() + Offset::y(self.loader_y_offset);
|
||||||
@ -120,17 +119,17 @@ impl Component for Progress {
|
|||||||
let inactive_color = theme::GREY_EXTRA_DARK;
|
let inactive_color = theme::GREY_EXTRA_DARK;
|
||||||
|
|
||||||
let range = if self.indeterminate {
|
let range = if self.indeterminate {
|
||||||
let start = (self.value - 100) % 1000;
|
let start = (self.value as i16 - 100) % 1000;
|
||||||
let end = (self.value + 100) % 1000;
|
let end = (self.value as i16 + 100) % 1000;
|
||||||
let start = ((start as i32 * 8 * shape::PI4 as i32) / 1000) as i16;
|
let start = 360.0 * start as f32 / 1000.0;
|
||||||
let end = ((end as i32 * 8 * shape::PI4 as i32) / 1000) as i16;
|
let end = 360.0 * end as f32 / 1000.0;
|
||||||
LoaderRange::FromTo(start, end)
|
LoaderRange::FromTo(start, end)
|
||||||
} else {
|
} else {
|
||||||
let end = ((self.value as i32 * 8 * shape::PI4 as i32) / 1000) as i16;
|
let end = 360.0 * self.value as f32 / 1000.0;
|
||||||
if self.value >= LOADER_MAX {
|
if self.value >= LOADER_MAX {
|
||||||
LoaderRange::Full
|
LoaderRange::Full
|
||||||
} else {
|
} else {
|
||||||
LoaderRange::FromTo(0, end)
|
LoaderRange::FromTo(0.0, end)
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -106,7 +106,7 @@ impl Component for PromptScreen {
|
|||||||
todo!()
|
todo!()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
shape::Circle::new(self.area.center(), 70)
|
shape::Circle::new(self.area.center(), 70)
|
||||||
.with_fg(self.circle_pad_color)
|
.with_fg(self.circle_pad_color)
|
||||||
.with_bg(theme::BLACK)
|
.with_bg(theme::BLACK)
|
||||||
|
@ -124,7 +124,7 @@ impl Component for ScrollBar {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
fn dotsize(distance: usize, nhidden: usize) -> Icon {
|
fn dotsize(distance: usize, nhidden: usize) -> Icon {
|
||||||
match (nhidden.saturating_sub(distance)).min(2 - distance) {
|
match (nhidden.saturating_sub(distance)).min(2 - distance) {
|
||||||
0 => theme::DOT_INACTIVE,
|
0 => theme::DOT_INACTIVE,
|
||||||
|
@ -58,7 +58,7 @@ impl<'a> ShareWords<'a> {
|
|||||||
self.page_index == self.share_words.len() - 1
|
self.page_index == self.share_words.len() - 1
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render_word<'s>(&'s self, word_index: usize, target: &mut impl Renderer<'s>) {
|
fn render_word<'s>(&self, word_index: usize, target: &mut impl Renderer<'s>) {
|
||||||
// the share word
|
// the share word
|
||||||
let word = self.share_words[word_index];
|
let word = self.share_words[word_index];
|
||||||
let word_baseline = target.viewport().clip.center()
|
let word_baseline = target.viewport().clip.center()
|
||||||
@ -110,7 +110,7 @@ impl<'a> Component for ShareWords<'a> {
|
|||||||
// TODO: remove when ui-t3t1 done
|
// TODO: remove when ui-t3t1 done
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
// corner highlights
|
// corner highlights
|
||||||
let (_, top_right_shape, bot_left_shape, bot_right_shape) =
|
let (_, top_right_shape, bot_left_shape, bot_right_shape) =
|
||||||
shape::CornerHighlight::from_rect(self.area_word, theme::GREY_DARK, theme::BG);
|
shape::CornerHighlight::from_rect(self.area_word, theme::GREY_DARK, theme::BG);
|
||||||
|
@ -169,7 +169,7 @@ where
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
self.pad.render(target);
|
self.pad.render(target);
|
||||||
self.content.render(target);
|
self.content.render(target);
|
||||||
if self.scrollbar.has_pages() {
|
if self.scrollbar.has_pages() {
|
||||||
|
@ -108,7 +108,7 @@ impl Component for StatusScreen {
|
|||||||
todo!()
|
todo!()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
shape::Circle::new(self.area.center(), 40)
|
shape::Circle::new(self.area.center(), 40)
|
||||||
.with_fg(self.circle_color)
|
.with_fg(self.circle_color)
|
||||||
.with_bg(theme::BLACK)
|
.with_bg(theme::BLACK)
|
||||||
|
@ -52,7 +52,7 @@ where
|
|||||||
todo!()
|
todo!()
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
self.content.render(target);
|
self.content.render(target);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,7 +119,7 @@ impl Component for VerticalMenu {
|
|||||||
// TODO remove when ui-t3t1 done
|
// TODO remove when ui-t3t1 done
|
||||||
}
|
}
|
||||||
|
|
||||||
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
// render buttons separated by thin bars
|
// render buttons separated by thin bars
|
||||||
for button in &self.buttons {
|
for button in &self.buttons {
|
||||||
button.render(target);
|
button.render(target);
|
||||||
|
@ -109,7 +109,7 @@ impl ConfirmOutput {
|
|||||||
.with_chunkify(chunkify)
|
.with_chunkify(chunkify)
|
||||||
.with_text_mono(text_mono)
|
.with_text_mono(text_mono)
|
||||||
.into_layout()?
|
.into_layout()?
|
||||||
.one_button_request(ButtonRequest::from_tstring(br_code, br_type));
|
.one_button_request(ButtonRequest::from_num(br_code, br_type));
|
||||||
|
|
||||||
// Amount
|
// Amount
|
||||||
let content_amount = ConfirmBlobParams::new(TR::words__amount.into(), amount, None)
|
let content_amount = ConfirmBlobParams::new(TR::words__amount.into(), amount, None)
|
||||||
@ -118,7 +118,7 @@ impl ConfirmOutput {
|
|||||||
.with_footer(TR::instructions__swipe_up.into(), None)
|
.with_footer(TR::instructions__swipe_up.into(), None)
|
||||||
.with_text_mono(text_mono)
|
.with_text_mono(text_mono)
|
||||||
.into_layout()?
|
.into_layout()?
|
||||||
.one_button_request(ButtonRequest::from_tstring(br_code, br_type));
|
.one_button_request(ButtonRequest::from_num(br_code, br_type));
|
||||||
|
|
||||||
// Menu
|
// Menu
|
||||||
let content_menu = Frame::left_aligned(
|
let content_menu = Frame::left_aligned(
|
||||||
|
@ -105,7 +105,7 @@ impl ConfirmSummary {
|
|||||||
}
|
}
|
||||||
let content_summary = summary
|
let content_summary = summary
|
||||||
.into_layout()?
|
.into_layout()?
|
||||||
.one_button_request(ButtonRequest::from_tstring(br_code, br_type))
|
.one_button_request(ButtonRequest::from_num(br_code, br_type))
|
||||||
// Summary(1) + Hold(1)
|
// Summary(1) + Hold(1)
|
||||||
.with_pages(|summary_pages| summary_pages + 1);
|
.with_pages(|summary_pages| summary_pages + 1);
|
||||||
|
|
||||||
|
@ -171,7 +171,7 @@ impl GetAddress {
|
|||||||
.with_menu_button()
|
.with_menu_button()
|
||||||
.with_footer(TR::instructions__swipe_up.into(), None)
|
.with_footer(TR::instructions__swipe_up.into(), None)
|
||||||
.map(|msg| matches!(msg, FrameMsg::Button(_)).then_some(FlowMsg::Info))
|
.map(|msg| matches!(msg, FrameMsg::Button(_)).then_some(FlowMsg::Info))
|
||||||
.one_button_request(ButtonRequest::from_tstring(br_code, br_type))
|
.one_button_request(ButtonRequest::from_num(br_code, br_type))
|
||||||
// Count tap-to-confirm screen towards page count
|
// Count tap-to-confirm screen towards page count
|
||||||
.with_pages(|address_pages| address_pages + 1);
|
.with_pages(|address_pages| address_pages + 1);
|
||||||
|
|
||||||
|
@ -109,7 +109,7 @@ impl RequestNumber {
|
|||||||
FrameMsg::Button(_) => Some(FlowMsg::Info),
|
FrameMsg::Button(_) => Some(FlowMsg::Info),
|
||||||
FrameMsg::Content(NumberInputDialogMsg(n)) => Some(FlowMsg::Choice(n as usize)),
|
FrameMsg::Content(NumberInputDialogMsg(n)) => Some(FlowMsg::Choice(n as usize)),
|
||||||
})
|
})
|
||||||
.one_button_request(ButtonRequest::from_tstring(br_code, br_type));
|
.one_button_request(ButtonRequest::from_num(br_code, br_type));
|
||||||
|
|
||||||
let content_menu = Frame::left_aligned(
|
let content_menu = Frame::left_aligned(
|
||||||
"".into(),
|
"".into(),
|
||||||
|
@ -2,7 +2,7 @@ use crate::ui::{display::Color, geometry::Point, model_mercury::constant, shape,
|
|||||||
|
|
||||||
pub enum LoaderRange {
|
pub enum LoaderRange {
|
||||||
Full,
|
Full,
|
||||||
FromTo(i16, i16),
|
FromTo(f32, f32),
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn render_loader<'s>(
|
pub fn render_loader<'s>(
|
||||||
|
@ -8,7 +8,7 @@ use crate::{
|
|||||||
FixedHeightBar,
|
FixedHeightBar,
|
||||||
},
|
},
|
||||||
display::{Color, Font, Icon},
|
display::{Color, Font, Icon},
|
||||||
geometry::{Insets, Offset},
|
geometry::Insets,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -9,10 +9,9 @@ from ..common import interact
|
|||||||
from . import RustLayout, raise_if_not_confirmed
|
from . import RustLayout, raise_if_not_confirmed
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
|
pass
|
||||||
from typing import Callable, Sequence
|
from typing import Callable, Sequence
|
||||||
|
|
||||||
from trezor.enums import BackupType
|
|
||||||
|
|
||||||
|
|
||||||
CONFIRMED = trezorui2.CONFIRMED # global_import_cache
|
CONFIRMED = trezorui2.CONFIRMED # global_import_cache
|
||||||
|
|
||||||
@ -94,11 +93,11 @@ async def select_word(
|
|||||||
|
|
||||||
async def slip39_show_checklist(
|
async def slip39_show_checklist(
|
||||||
step: int,
|
step: int,
|
||||||
backup_type: BackupType,
|
advanced: bool,
|
||||||
count: int | None = None,
|
count: int | None = None,
|
||||||
threshold: int | None = None,
|
threshold: int | None = None,
|
||||||
) -> None:
|
) -> None:
|
||||||
items = _slip_39_checklist_items(step, backup_type, count, threshold)
|
items = _slip_39_checklist_items(step, advanced, count, threshold)
|
||||||
result = await interact(
|
result = await interact(
|
||||||
RustLayout(
|
RustLayout(
|
||||||
trezorui2.show_checklist(
|
trezorui2.show_checklist(
|
||||||
@ -117,15 +116,11 @@ async def slip39_show_checklist(
|
|||||||
|
|
||||||
def _slip_39_checklist_items(
|
def _slip_39_checklist_items(
|
||||||
step: int,
|
step: int,
|
||||||
backup_type: BackupType,
|
advanced: bool,
|
||||||
count: int | None = None,
|
count: int | None = None,
|
||||||
threshold: int | None = None,
|
threshold: int | None = None,
|
||||||
):
|
):
|
||||||
from trezor.enums import BackupType
|
if not advanced:
|
||||||
|
|
||||||
assert backup_type in (BackupType.Slip39_Basic, BackupType.Slip39_Advanced)
|
|
||||||
|
|
||||||
if backup_type == BackupType.Slip39_Basic:
|
|
||||||
entry_1 = (
|
entry_1 = (
|
||||||
TR.reset__slip39_checklist_num_shares_x_template.format(count)
|
TR.reset__slip39_checklist_num_shares_x_template.format(count)
|
||||||
if count
|
if count
|
||||||
|
Loading…
Reference in New Issue
Block a user