feat(core): render logo on welcome screen
What changed, and why it matters
This commit is a cosmetic UI change for the Trezor hardware wallet's welcome screen. It replaces the old text-only welcome display with a shared logo-rendering helper and removes two unused icon image files. There is no security-relevant change visible in the code.
No security action required. Treat as a normal UI refactor.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The patch refactors the Eckhart layout’s welcome screen rendering. It introduces a shared render_logo() function in component/mod.rs that draws ‘Trezor’, ‘Safe’, and a ‘7’ icon using the same shapes previously drawn inline in the bootloader welcome screen. Both bootloader/welcome_screen.rs and component/welcome_screen.rs now call this helper. The change also deletes unused lock_full.toif and warning40.toif assets and moves the ICON_SEVEN include from the bootloader theme to the common theme. No input handling, cryptography, memory management, or trust-boundary logic is modified.
Changed components
core/embed/rust/src/ui/layout_eckhart/bootloader/welcome_screen.rscore/embed/rust/src/ui/layout_eckhart/component/mod.rscore/embed/rust/src/ui/layout_eckhart/component/welcome_screen.rscore/embed/rust/src/ui/layout_eckhart/theme/bootloader.rscore/embed/rust/src/ui/layout_eckhart/theme/mod.rsInspect captured patch +40 / −46
diff --git a/core/embed/rust/src/ui/layout_eckhart/bootloader/welcome_screen.rs b/core/embed/rust/src/ui/layout_eckhart/bootloader/welcome_screen.rs
index 9d619c0a..fdfb459f 100644
--- a/core/embed/rust/src/ui/layout_eckhart/bootloader/welcome_screen.rs
+++ b/core/embed/rust/src/ui/layout_eckhart/bootloader/welcome_screen.rs
@@ -9,16 +9,17 @@ use crate::{
};
use super::{
- super::{component::Button, constant::SCREEN, fonts, theme},
+ super::{
+ component::{render_logo, Button},
+ constant::SCREEN,
+ fonts, theme,
+ },
BldActionBar, BldActionBarMsg, BldHeader,
};
#[cfg(feature = "power_manager")]
use super::BldHeaderMsg;
-const TEXT_ORIGIN: Point = Point::new(24, 76);
-const STRIDE: i16 = 46;
-
#[repr(u32)]
#[derive(Copy, Clone, ToPrimitive)]
pub enum WelcomeMsg {
@@ -93,20 +94,7 @@ impl Component for BldWelcomeScreen {
#[cfg(feature = "power_manager")]
self.header.render(target);
- let font = fonts::FONT_SATOSHI_REGULAR_38;
- shape::Text::new(TEXT_ORIGIN, "Trezor", font)
- .with_fg(theme::GREY_LIGHT)
- .render(target);
- shape::Text::new(TEXT_ORIGIN + Offset::y(STRIDE), "Safe", font)
- .with_fg(theme::GREY_LIGHT)
- .render(target);
- shape::ToifImage::new(
- TEXT_ORIGIN + Offset::y(2 * STRIDE),
- theme::bootloader::ICON_SEVEN.toif,
- )
- .with_fg(theme::GREY)
- .with_align(Alignment2D::CENTER_LEFT)
- .render(target);
+ render_logo(target);
// hint
let icon_pos = Point::new(24, 398);
diff --git a/core/embed/rust/src/ui/layout_eckhart/component/mod.rs b/core/embed/rust/src/ui/layout_eckhart/component/mod.rs
index d5cda4b9..6511fd2c 100644
--- a/core/embed/rust/src/ui/layout_eckhart/component/mod.rs
+++ b/core/embed/rust/src/ui/layout_eckhart/component/mod.rs
@@ -9,3 +9,28 @@ pub use error::ErrorScreen;
pub use fuel_gauge::FuelGauge;
pub use update_screen::UpdateScreen;
pub use welcome_screen::WelcomeScreen;
+
+use super::{fonts, theme};
+use crate::ui::{
+ display::Font,
+ geometry::{Alignment2D, Offset, Point},
+ shape::{self, Renderer},
+};
+
+pub fn render_logo<'s>(target: &mut impl Renderer<'s>) {
+ const TEXT_ORIGIN: Point = Point::new(24, 76);
+ const STRIDE: i16 = 46;
+ const ICON_ORIGIN: Point = Point::new(24, 147);
+ const FONT: Font = fonts::FONT_SATOSHI_REGULAR_38;
+
+ shape::Text::new(TEXT_ORIGIN, "Trezor", FONT)
+ .with_fg(theme::GREY_LIGHT)
+ .render(target);
+ shape::Text::new(TEXT_ORIGIN + Offset::y(STRIDE), "Safe", FONT)
+ .with_fg(theme::GREY_LIGHT)
+ .render(target);
+ shape::ToifImage::new(ICON_ORIGIN, theme::ICON_SEVEN.toif)
+ .with_fg(theme::GREY_DARK)
+ .with_align(Alignment2D::TOP_LEFT)
+ .render(target);
+}
diff --git a/core/embed/rust/src/ui/layout_eckhart/component/welcome_screen.rs b/core/embed/rust/src/ui/layout_eckhart/component/welcome_screen.rs
index 9227e839..ede27365 100644
--- a/core/embed/rust/src/ui/layout_eckhart/component/welcome_screen.rs
+++ b/core/embed/rust/src/ui/layout_eckhart/component/welcome_screen.rs
@@ -1,16 +1,10 @@
-use crate::{
- trezorhal::model,
- ui::{
- component::{Component, Event, EventCtx, Never},
- geometry::{Alignment, Offset, Rect},
- shape::{self, Renderer},
- },
+use crate::ui::{
+ component::{Component, Event, EventCtx, Never},
+ geometry::{Offset, Rect},
+ shape::Renderer,
};
-use super::super::{
- fonts,
- theme::{GREY_LIGHT, TEXT_VERTICAL_SPACING},
-};
+use super::super::component::render_logo;
const TEXT_OFFSET: Offset = Offset::new(30, 40);
@@ -38,17 +32,7 @@ impl Component for WelcomeScreen {
}
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
- let font = fonts::FONT_SATOSHI_REGULAR_38;
- let mut cursor = self.area.top_left() + TEXT_OFFSET;
- let row_height = font.text_height() + TEXT_VERTICAL_SPACING;
-
- for part in model::FULL_NAME.split(' ') {
- shape::Text::new(cursor, part, font)
- .with_align(Alignment::Start)
- .with_fg(GREY_LIGHT)
- .render(target);
- cursor = cursor + Offset::y(row_height);
- }
+ render_logo(target);
}
}
@@ -56,6 +40,5 @@ impl Component for WelcomeScreen {
impl crate::trace::Trace for WelcomeScreen {
fn trace(&self, t: &mut dyn crate::trace::Tracer) {
t.component("WelcomeScreen");
- t.string("model", model::FULL_NAME.into());
}
}
diff --git a/core/embed/rust/src/ui/layout_eckhart/res/lock_full.toif b/core/embed/rust/src/ui/layout_eckhart/res/lock_full.toif
deleted file mode 100644
index 17c328de..00000000
Binary files a/core/embed/rust/src/ui/layout_eckhart/res/lock_full.toif and /dev/null differ
diff --git a/core/embed/rust/src/ui/layout_eckhart/res/warning40.toif b/core/embed/rust/src/ui/layout_eckhart/res/warning40.toif
deleted file mode 100644
index 21840bc0..00000000
Binary files a/core/embed/rust/src/ui/layout_eckhart/res/warning40.toif and /dev/null differ
diff --git a/core/embed/rust/src/ui/layout_eckhart/theme/bootloader.rs b/core/embed/rust/src/ui/layout_eckhart/theme/bootloader.rs
index f13f54fa..37beb169 100644
--- a/core/embed/rust/src/ui/layout_eckhart/theme/bootloader.rs
+++ b/core/embed/rust/src/ui/layout_eckhart/theme/bootloader.rs
@@ -19,7 +19,6 @@ pub const BLD_FG: Color = WHITE;
pub const WELCOME_COLOR: Color = BLACK;
// UI icons specific to bootloader (white color)
-include_icon!(ICON_SEVEN, "layout_eckhart/res/bootloader/7.toif");
include_icon!(
ICON_QR_TREZOR_IO_SETUP,
"layout_eckhart/res/bootloader/QRCode_170.toif"
diff --git a/core/embed/rust/src/ui/layout_eckhart/theme/mod.rs b/core/embed/rust/src/ui/layout_eckhart/theme/mod.rs
index ed1b4134..d4e406c6 100644
--- a/core/embed/rust/src/ui/layout_eckhart/theme/mod.rs
+++ b/core/embed/rust/src/ui/layout_eckhart/theme/mod.rs
@@ -119,10 +119,6 @@ include_icon!(
ICON_SPECIAL_CHARS,
"layout_eckhart/res/keyboard/special_chars_group.toif"
);
-// Welcome screen.
-include_icon!(ICON_LOGO, "layout_eckhart/res/lock_full.toif");
-// Homescreen notifications.
-include_icon!(ICON_WARNING40, "layout_eckhart/res/warning40.toif");
// Battery icons
include_icon!(ICON_BATTERY_ZAP, "layout_eckhart/res/battery/zap.toif");
@@ -150,6 +146,9 @@ include_icon!(
"layout_eckhart/res/defaut_homescreen/hs_tile2.toif"
);
+// Icon for the bootup screen
+include_icon!(ICON_SEVEN, "layout_eckhart/res/bootloader/7.toif");
+
// Common text styles and button styles must use fonts accessible from both
// bootloader and firmware
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.