diff --git a/core/embed/rust/src/ui/display/tjpgd.rs b/core/embed/rust/src/ui/display/tjpgd.rs index 81e2f3e85a..f9803b441e 100644 --- a/core/embed/rust/src/ui/display/tjpgd.rs +++ b/core/embed/rust/src/ui/display/tjpgd.rs @@ -1,4 +1,3 @@ -use cty::int16_t; use trezor_tjpgdec::{BlackHoleOutput, JpegOutput}; pub use trezor_tjpgdec::{BufferInput, Error, JDEC}; diff --git a/core/embed/rust/src/ui/model_tr/component/homescreen.rs b/core/embed/rust/src/ui/model_tr/component/homescreen.rs index 9b5eb57396..16eefc4aa1 100644 --- a/core/embed/rust/src/ui/model_tr/component/homescreen.rs +++ b/core/embed/rust/src/ui/model_tr/component/homescreen.rs @@ -528,6 +528,7 @@ where } else { let toif_data = unwrap!(Toif::new(image_data)); shape::ToifImage::new(TOP_CENTER, toif_data) + .with_align(Alignment2D::TOP_CENTER) .with_fg(theme::FG) .render(target); }; diff --git a/core/embed/rust/src/ui/model_tr/screens.rs b/core/embed/rust/src/ui/model_tr/screens.rs index efce223541..4bce551c09 100644 --- a/core/embed/rust/src/ui/model_tr/screens.rs +++ b/core/embed/rust/src/ui/model_tr/screens.rs @@ -1,9 +1,14 @@ #[cfg(feature = "micropython")] use crate::micropython::buffer::StrBuffer; use crate::ui::{ - component::base::Component, constant::screen, display, model_tr::component::WelcomeScreen, + component::base::Component, constant::screen, model_tr::component::WelcomeScreen, }; +#[cfg(not(feature = "new_rendering"))] +use crate::ui::display; +#[cfg(feature = "new_rendering")] +use crate::ui::{display::Color, shape::render_on_display}; + use super::{component::ErrorScreen, constant}; #[cfg(not(feature = "micropython"))] @@ -27,6 +32,13 @@ pub fn screen_fatal_error(title: &str, msg: &str, footer: &str) { let mut frame = ErrorScreen::new(title, msg, footer); frame.place(constant::screen()); + + #[cfg(feature = "new_rendering")] + render_on_display(None, Some(Color::black()), |target| { + frame.render(target); + }); + + #[cfg(not(feature = "new_rendering"))] frame.paint(); } @@ -34,7 +46,16 @@ pub fn screen_fatal_error(title: &str, msg: &str, footer: &str) { extern "C" fn screen_boot_full() { let mut frame = WelcomeScreen::new(false); frame.place(screen()); - display::sync(); - frame.paint(); - display::refresh(); + + #[cfg(feature = "new_rendering")] + render_on_display(None, Some(Color::black()), |target| { + frame.render(target); + }); + + #[cfg(not(feature = "new_rendering"))] + { + display::sync(); + frame.paint(); + display::refresh(); + } } diff --git a/core/embed/rust/src/ui/model_tt/component/coinjoin_progress.rs b/core/embed/rust/src/ui/model_tt/component/coinjoin_progress.rs index 224aa8d899..36d0424f87 100644 --- a/core/embed/rust/src/ui/model_tt/component/coinjoin_progress.rs +++ b/core/embed/rust/src/ui/model_tt/component/coinjoin_progress.rs @@ -141,8 +141,8 @@ where let background_color = theme::BG; let inactive_color = background_color.blend(active_color, 85); - let start = (self.value - 100) % 1000; - let end = (self.value + 100) % 1000; + let start = (self.value as i16 - 100) % 1000; + let end = (self.value as i16 + 100) % 1000; let start = ((start as i32 * 8 * PI4 as i32) / 1000) as i16; let end = ((end as i32 * 8 * PI4 as i32) / 1000) as i16; diff --git a/core/embed/rust/src/ui/model_tt/component/homescreen/mod.rs b/core/embed/rust/src/ui/model_tt/component/homescreen/mod.rs index 0040eb3c8e..890cd52d90 100644 --- a/core/embed/rust/src/ui/model_tt/component/homescreen/mod.rs +++ b/core/embed/rust/src/ui/model_tt/component/homescreen/mod.rs @@ -22,7 +22,7 @@ use crate::{ ui::{ constant::HEIGHT, display::{ - tjpgd::{jpeg_test, BufferInput}, + tjpgd::BufferInput, toif::{Toif, ToifFormat}, }, model_tt::component::homescreen::render::{ @@ -288,6 +288,13 @@ impl Component for Homescreen { } self.label.map(|t| { + let r = Rect::new(Point::new(6, 198), Point::new(234, 233)); + shape::Bar::new(r) + .with_bg(Color::black()) + .with_alpha(89) + .with_radius(3) + .render(target); + let style = theme::TEXT_DEMIBOLD; let pos = Point::new(self.pad.area.center().x, LABEL_Y); shape::Text::new(pos, t) @@ -470,7 +477,7 @@ impl Component for Lockscreen { shape::JpegImage::new(center, img_data) .with_align(Alignment2D::CENTER) .with_blur(4) - .with_dim(130) + .with_dim(140) .render(target); } else if is_image_toif(img_data) { shape::ToifImage::new(center, unwrap!(Toif::new(img_data))) @@ -559,7 +566,7 @@ impl Component for Lockscreen { pub fn check_homescreen_format(buffer: &[u8]) -> bool { #[cfg(not(feature = "new_rendering"))] - let result = is_image_jpeg(buffer) && jpeg_test(buffer); + let result = is_image_jpeg(buffer) && crate::ui::display::tjpgd::jpeg_test(buffer); #[cfg(feature = "new_rendering")] let result = is_image_jpeg(buffer); // !@# TODO: test like if `new_rendering` is off diff --git a/core/embed/rust/src/ui/model_tt/component/keyboard/mnemonic.rs b/core/embed/rust/src/ui/model_tt/component/keyboard/mnemonic.rs index e5c6f86cd0..807a5e2ec5 100644 --- a/core/embed/rust/src/ui/model_tt/component/keyboard/mnemonic.rs +++ b/core/embed/rust/src/ui/model_tt/component/keyboard/mnemonic.rs @@ -184,9 +184,12 @@ where } fn render<'s>(&'s self, target: &mut impl Renderer<'s>) { - self.prompt.render(target); - self.input.render(target); - self.back.render(target); + if self.input.inner().inner().is_empty() { + self.prompt.render(target); + } else { + self.input.render(target); + self.back.render(target); + } for btn in &self.keys { btn.render(target); diff --git a/core/embed/rust/src/ui/model_tt/component/progress.rs b/core/embed/rust/src/ui/model_tt/component/progress.rs index 70e1931d5e..13da2894ef 100644 --- a/core/embed/rust/src/ui/model_tt/component/progress.rs +++ b/core/embed/rust/src/ui/model_tt/component/progress.rs @@ -132,8 +132,8 @@ where let inactive_color = background_color.blend(active_color, 85); let (start, end) = if self.indeterminate { - let start = (self.value - 100) % 1000; - let end = (self.value + 100) % 1000; + let start = (self.value as i16 - 100) % 1000; + let end = (self.value as i16 + 100) % 1000; let start = ((start as i32 * 8 * PI4 as i32) / 1000) as i16; let end = ((end as i32 * 8 * PI4 as i32) / 1000) as i16; (start, end) diff --git a/core/embed/rust/src/ui/model_tt/component/welcome_screen.rs b/core/embed/rust/src/ui/model_tt/component/welcome_screen.rs index 6fec80d270..a3978b2e5b 100644 --- a/core/embed/rust/src/ui/model_tt/component/welcome_screen.rs +++ b/core/embed/rust/src/ui/model_tt/component/welcome_screen.rs @@ -1,13 +1,12 @@ use crate::ui::{ component::{Component, Event, EventCtx, Never}, - display::toif::Toif, geometry::{Alignment2D, Offset, Rect}, model_tt::theme, shape, shape::Renderer, }; #[cfg(feature = "bootloader")] -use crate::ui::{display::Icon, model_tt::theme::bootloader::DEVICE_NAME}; +use crate::ui::{display::{Icon, toif::Toif}, model_tt::theme::bootloader::DEVICE_NAME}; const TEXT_BOTTOM_MARGIN: i16 = 24; // matching the homescreen label margin const ICON_TOP_MARGIN: i16 = 48; diff --git a/core/embed/rust/src/ui/model_tt/constant.rs b/core/embed/rust/src/ui/model_tt/constant.rs index 3d4f7005bc..914a6ac425 100644 --- a/core/embed/rust/src/ui/model_tt/constant.rs +++ b/core/embed/rust/src/ui/model_tt/constant.rs @@ -7,8 +7,13 @@ pub const HEIGHT: i16 = DISPLAY_RESY as _; pub const LINE_SPACE: i16 = 4; pub const FONT_BPP: i16 = 4; +#[cfg(not(feature = "new_rendering"))] pub const LOADER_OUTER: i16 = 60; +#[cfg(feature = "new_rendering")] +pub const LOADER_OUTER: i16 = 59; + pub const LOADER_INNER: i16 = 42; + pub const LOADER_ICON_MAX_SIZE: i16 = 64; pub const fn size() -> Offset { diff --git a/core/embed/rust/src/ui/model_tt/screens.rs b/core/embed/rust/src/ui/model_tt/screens.rs index 5f25e00c1f..880e458124 100644 --- a/core/embed/rust/src/ui/model_tt/screens.rs +++ b/core/embed/rust/src/ui/model_tt/screens.rs @@ -3,13 +3,18 @@ use crate::micropython::buffer::StrBuffer; use crate::ui::{ component::Component, constant::screen, - display, model_tt::{ component::{ErrorScreen, WelcomeScreen}, constant, }, }; +#[cfg(not(feature = "new_rendering"))] +use crate::ui::display; +#[cfg(feature = "new_rendering")] +use crate::ui::{display::Color, shape::render_on_display}; + + #[cfg(not(feature = "micropython"))] // SAFETY: Actually safe but see below unsafe fn get_str(text: &str) -> &str { @@ -31,6 +36,13 @@ pub fn screen_fatal_error(title: &str, msg: &str, footer: &str) { let mut frame = ErrorScreen::new(title, msg, footer); frame.place(constant::screen()); + + #[cfg(feature = "new_rendering")] + render_on_display(None, Some(Color::black()), |target| { + frame.render(target); + }); + + #[cfg(not(feature = "new_rendering"))] frame.paint(); } @@ -38,7 +50,16 @@ pub fn screen_fatal_error(title: &str, msg: &str, footer: &str) { extern "C" fn screen_boot_full() { let mut frame = WelcomeScreen::new(false); frame.place(screen()); - display::sync(); - frame.paint(); - display::refresh(); + + #[cfg(feature = "new_rendering")] + render_on_display(None, Some(Color::black()), |target| { + frame.render(target); + }); + + #[cfg(not(feature = "new_rendering"))] + { + display::sync(); + frame.paint(); + display::refresh(); + } }