1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-03-20 18:16:05 +00:00

fix(core/ui): T3T1: rebase on main

This commit is contained in:
Martin Milata 2024-05-28 23:40:52 +02:00
parent 27d733f89d
commit cde0dce3ef
36 changed files with 66 additions and 77 deletions

View File

@ -102,7 +102,7 @@ where
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);
}

View File

@ -155,5 +155,5 @@ impl Component for Swipe {
fn paint(&mut self) {}
fn render<'s>(&'s self, _target: &mut impl Renderer<'s>) {}
fn render<'s>(&self, _target: &mut impl Renderer<'s>) {}
}

View File

@ -67,11 +67,7 @@ impl<T: Component + Paginate + Clone> SwipePage<T> {
finished
}
fn render_transition<'s>(
&'s self,
transition: &'s Transition<T>,
target: &mut impl Renderer<'s>,
) {
fn render_transition<'s>(&self, transition: &Transition<T>, target: &mut impl Renderer<'s>) {
target.in_clip(self.bounds, &|target| {
util::render_slide(
|target| transition.cloned.render(target),
@ -109,7 +105,7 @@ impl<T: Component + Paginate + Clone> Component for SwipePage<T> {
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 {
return self.render_transition(t, target);
}
@ -200,7 +196,7 @@ impl<T: Component> Component for IgnoreSwipe<T> {
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)
}
}

View File

@ -22,7 +22,7 @@ pub trait FlowStore {
fn event(&mut self, i: usize, ctx: &mut EventCtx, event: Event) -> Option<FlowMsg>;
/// 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")]
/// Call `Trace::trace` on i-th element.
@ -62,7 +62,7 @@ impl FlowStore for FlowEmpty {
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!()
}
@ -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 {
self.as_ref().render(target)
} else {

View File

@ -80,12 +80,12 @@ impl<Q: FlowState, S: FlowStore> SwipeFlow<Q, S> {
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)
}
fn render_transition<'s>(
&'s self,
&self,
prev_state: &Q,
animation: &Animation<f32>,
direction: &SwipeDirection,
@ -188,7 +188,7 @@ impl<Q: FlowState, S: FlowStore> Component for SwipeFlow<Q, S> {
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 {
Transition::None | Transition::Internal => self.render_state(self.state, target),
Transition::External {

View File

@ -35,7 +35,6 @@ use super::theme::BLACK;
#[cfg(feature = "new_rendering")]
use crate::ui::{
constant,
display::{toif::Toif, LOADER_MAX},
geometry::{Alignment, Alignment2D},
model_mercury::shapes::{render_loader, LoaderRange},
@ -123,7 +122,7 @@ impl ModelMercuryFeatures {
let center_text_offset: i16 = 10;
let center = SCREEN.center() + Offset::y(loader_offset);
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(
center,
@ -133,7 +132,7 @@ impl ModelMercuryFeatures {
if progress >= LOADER_MAX {
LoaderRange::Full
} else {
LoaderRange::FromTo(0, end)
LoaderRange::FromTo(0.0, end)
},
target,
);

View File

@ -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 {
0 => self.details.render(target),
_ => self.xpub_view.render(target),

View File

@ -124,7 +124,7 @@ where
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);
let center = constant::screen().center() + Offset::y(LOADER_OFFSET);
@ -132,10 +132,10 @@ where
let background_color = theme::BG;
let inactive_color = background_color.blend(active_color, 85);
let start = (self.value as i32 - 100) % 1000;
let end = (self.value as i32 + 100) % 1000;
let start = ((start * 8 * shape::PI4 as i32) / 1000) as i16;
let end = ((end * 8 * shape::PI4 as i32) / 1000) as i16;
let start = (self.value as i16 - 100) % 1000;
let end = (self.value as i16 + 100) % 1000;
let start = 360.0 * start as f32 / 1000.0;
let end = 360.0 * end as f32 / 1000.0;
shape::Circle::new(center, LOADER_OUTER)
.with_bg(inactive_color)

View File

@ -72,7 +72,7 @@ where
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.controls.render(target);
}
@ -202,7 +202,7 @@ where
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.paragraphs.render(target);
self.controls.render(target);

View File

@ -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.controls.render(target);
self.app_name.render(target);

View File

@ -94,7 +94,7 @@ impl<'a> Component for Footer<'a> {
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
if self.area.height() == Footer::HEIGHT_DEFAULT {
if let Some(description) = self.text_description {

View File

@ -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| {
shape::Text::new(TOP_CENTER + Offset::y(HOLD_Y), t)
.with_align(Alignment::Center)
@ -186,7 +186,7 @@ impl Component for Homescreen {
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()) {
self.render_loader(target);
} else {
@ -309,7 +309,7 @@ impl Component for Lockscreen<'_> {
todo!()
}
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
let center = AREA.center();
match ImageInfo::parse(self.image) {

View File

@ -107,7 +107,7 @@ impl Component for Bip39Input {
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 style = self.button.style();

View File

@ -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() {
self.prompt.render(target);
if self.can_go_back {

View File

@ -377,7 +377,7 @@ impl Component for PassphraseKeyboard {
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.next_btn.render(target);
self.erase_btn.render(target);
@ -441,7 +441,7 @@ impl Component for Input {
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 text_baseline = self.area.top_left() + Offset::y(style.text_font.text_height())

View File

@ -237,7 +237,7 @@ impl Component for PinKeyboard<'_> {
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.textbox_pad.render(target);
@ -433,7 +433,7 @@ impl Component for PinDots {
// 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);
self.pad.render(target);
if self.display_digits {

View File

@ -127,7 +127,7 @@ impl Component for Slip39Input {
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 style = self.button.style();

View File

@ -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() {
btn.render(target)
}

View File

@ -223,8 +223,8 @@ impl Component for Loader {
let active_color = style.active;
let background_color = style.background_color;
let end = ((progress as i32 * 8 * shape::PI4 as i32) / 1000) as i16;
let start = 0;
let end = 360.0 * progress as f32 / 1000.0;
let start = 0.0;
render_loader(
center,

View File

@ -97,7 +97,7 @@ where
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.paragraphs_pad.render(target);
self.paragraphs.render(target);
@ -212,7 +212,7 @@ impl Component for NumberInput {
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];
if let Some(text) = strutil::format_i64(self.value as i64, &mut buf) {

View File

@ -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);
match &self.loader {
Some(l) if l.is_animating() => self.loader.render(target),

View File

@ -15,7 +15,6 @@ use crate::{
constant,
shapes::{render_loader, LoaderRange},
},
shape,
shape::Renderer,
util::animation_disabled,
},
@ -111,7 +110,7 @@ impl Component for Progress {
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);
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 range = if self.indeterminate {
let start = (self.value - 100) % 1000;
let end = (self.value + 100) % 1000;
let start = ((start as i32 * 8 * shape::PI4 as i32) / 1000) as i16;
let end = ((end as i32 * 8 * shape::PI4 as i32) / 1000) as i16;
let start = (self.value as i16 - 100) % 1000;
let end = (self.value as i16 + 100) % 1000;
let start = 360.0 * start as f32 / 1000.0;
let end = 360.0 * end as f32 / 1000.0;
LoaderRange::FromTo(start, end)
} 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 {
LoaderRange::Full
} else {
LoaderRange::FromTo(0, end)
LoaderRange::FromTo(0.0, end)
}
};

View File

@ -106,7 +106,7 @@ impl Component for PromptScreen {
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)
.with_fg(self.circle_pad_color)
.with_bg(theme::BLACK)

View File

@ -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 {
match (nhidden.saturating_sub(distance)).min(2 - distance) {
0 => theme::DOT_INACTIVE,

View File

@ -58,7 +58,7 @@ impl<'a> ShareWords<'a> {
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
let word = self.share_words[word_index];
let word_baseline = target.viewport().clip.center()
@ -110,7 +110,7 @@ impl<'a> Component for ShareWords<'a> {
// 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
let (_, top_right_shape, bot_left_shape, bot_right_shape) =
shape::CornerHighlight::from_rect(self.area_word, theme::GREY_DARK, theme::BG);

View File

@ -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.content.render(target);
if self.scrollbar.has_pages() {

View File

@ -108,7 +108,7 @@ impl Component for StatusScreen {
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)
.with_fg(self.circle_color)
.with_bg(theme::BLACK)

View File

@ -52,7 +52,7 @@ where
todo!()
}
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
self.content.render(target);
}

View File

@ -119,7 +119,7 @@ impl Component for VerticalMenu {
// 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
for button in &self.buttons {
button.render(target);

View File

@ -109,7 +109,7 @@ impl ConfirmOutput {
.with_chunkify(chunkify)
.with_text_mono(text_mono)
.into_layout()?
.one_button_request(ButtonRequest::from_tstring(br_code, br_type));
.one_button_request(ButtonRequest::from_num(br_code, br_type));
// Amount
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_text_mono(text_mono)
.into_layout()?
.one_button_request(ButtonRequest::from_tstring(br_code, br_type));
.one_button_request(ButtonRequest::from_num(br_code, br_type));
// Menu
let content_menu = Frame::left_aligned(

View File

@ -105,7 +105,7 @@ impl ConfirmSummary {
}
let content_summary = summary
.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)
.with_pages(|summary_pages| summary_pages + 1);

View File

@ -171,7 +171,7 @@ impl GetAddress {
.with_menu_button()
.with_footer(TR::instructions__swipe_up.into(), None)
.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
.with_pages(|address_pages| address_pages + 1);

View File

@ -109,7 +109,7 @@ impl RequestNumber {
FrameMsg::Button(_) => Some(FlowMsg::Info),
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(
"".into(),

View File

@ -2,7 +2,7 @@ use crate::ui::{display::Color, geometry::Point, model_mercury::constant, shape,
pub enum LoaderRange {
Full,
FromTo(i16, i16),
FromTo(f32, f32),
}
pub fn render_loader<'s>(

View File

@ -8,7 +8,7 @@ use crate::{
FixedHeightBar,
},
display::{Color, Font, Icon},
geometry::{Insets, Offset},
geometry::Insets,
},
};

View File

@ -9,10 +9,9 @@ from ..common import interact
from . import RustLayout, raise_if_not_confirmed
if TYPE_CHECKING:
pass
from typing import Callable, Sequence
from trezor.enums import BackupType
CONFIRMED = trezorui2.CONFIRMED # global_import_cache
@ -94,11 +93,11 @@ async def select_word(
async def slip39_show_checklist(
step: int,
backup_type: BackupType,
advanced: bool,
count: int | None = None,
threshold: int | 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(
RustLayout(
trezorui2.show_checklist(
@ -117,15 +116,11 @@ async def slip39_show_checklist(
def _slip_39_checklist_items(
step: int,
backup_type: BackupType,
advanced: bool,
count: int | None = None,
threshold: int | None = None,
):
from trezor.enums import BackupType
assert backup_type in (BackupType.Slip39_Basic, BackupType.Slip39_Advanced)
if backup_type == BackupType.Slip39_Basic:
if not advanced:
entry_1 = (
TR.reset__slip39_checklist_num_shares_x_template.format(count)
if count