fix(core/bootloader): fix bootloader labels.
What changed, and why it matters
This commit adjusts how text labels are positioned and rendered on the bootloader screen of a Trezor hardware wallet model. It changes the vertical position of progress text, switches from a low-level text-drawing call to a reusable UI label component that supports multi-line wrapping, and adds explicit line breaks in two user-facing messages. There is no security-relevant change visible in the diff.
No security action needed; treat as a normal UI/layout fix.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The patch modifies core/embed/rust/src/ui/layout_eckhart/ui_bootloader.rs. PROGRESS_TEXT_ORIGIN is moved up by removing the extra text-height offset. screen_progress now uses Label with a bounded rectangle (screen width minus padding, four lines tall) instead of shape::Text, enabling wrapped/multi-line rendering. Two call sites now embed newline escapes: “Installing\nfirmware…” and “Starting\nbootloader…”. These are cosmetic/layout fixes for bootloader labels.
Changed components
core/embed/rust/src/ui/layout_eckhart/ui_bootloader.rsInspect captured patch +14 / −10
diff --git a/core/embed/rust/src/ui/layout_eckhart/ui_bootloader.rs b/core/embed/rust/src/ui/layout_eckhart/ui_bootloader.rs
index 04434bad..2eb8c229 100644
--- a/core/embed/rust/src/ui/layout_eckhart/ui_bootloader.rs
+++ b/core/embed/rust/src/ui/layout_eckhart/ui_bootloader.rs
@@ -39,10 +39,7 @@ pub type BootloaderString = String<128>;
const RESTART_MESSAGE: &str = "Restart";
const SCREEN: Rect = UIEckhart::SCREEN;
-const PROGRESS_TEXT_ORIGIN: Point = SCREEN.top_left().ofs(Offset::new(
- theme::PADDING,
- 38 + FONT_SATOSHI_REGULAR_38.text_height(),
-));
+const PROGRESS_TEXT_ORIGIN: Point = SCREEN.top_left().ofs(Offset::new(theme::PADDING, 38));
const PROGRESS_WAIT_ORIGIN: Point = SCREEN.bottom_center().ofs(Offset::new(0, -35));
const SCREEN_BORDER_BLUE: ScreenBorder = ScreenBorder::new(BLUE);
const SCREEN_BORDER_RED: ScreenBorder = ScreenBorder::new(RED);
@@ -61,12 +58,19 @@ impl UIEckhart {
}
display::sync();
+ let mut label = Label::new(text.into(), Alignment::Start, TEXT_NORMAL);
render_on_display(None, Some(BLD_BG), |target| {
render_loader(loader_progress, border, target);
- shape::Text::new(PROGRESS_TEXT_ORIGIN, text, FONT_SATOSHI_REGULAR_38)
- .with_align(Alignment::Start)
- .with_fg(GREY_LIGHT)
- .render(target);
+
+ label.place(Rect::from_top_left_and_size(
+ PROGRESS_TEXT_ORIGIN,
+ Offset::new(
+ SCREEN.width() - 2 * theme::PADDING,
+ 4 * FONT_SATOSHI_REGULAR_38.text_height(),
+ ),
+ ));
+ label.render(target);
+
shape::Text::new(PROGRESS_WAIT_ORIGIN, wait_msg, FONT_SATOSHI_MEDIUM_26)
.with_align(Alignment::Center)
.with_fg(GREY)
@@ -384,7 +388,7 @@ impl BootloaderUI for UIEckhart {
&SCREEN_BORDER_BLUE
};
Self::screen_progress(
- "Installing firmware",
+ "Installing\nfirmware...",
WAIT_MESSAGE,
initialize,
progress,
@@ -535,7 +539,7 @@ impl BootloaderUI for UIEckhart {
#[cfg(feature = "power_manager")]
fn screen_bootloader_entry_progress(progress: u16, initialize: bool) {
Self::screen_progress(
- "Starting bootloader...",
+ "Starting\nbootloader...",
"Release the button",
initialize,
progress,
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.