1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-07-04 05:42:34 +00:00

fixup! refactor(core): integrate new drawing library

This commit is contained in:
cepetr 2024-03-12 18:40:52 +01:00
parent 924664aeb3
commit d734d0a132
10 changed files with 77 additions and 21 deletions

View File

@ -1,4 +1,3 @@
use cty::int16_t;
use trezor_tjpgdec::{BlackHoleOutput, JpegOutput}; use trezor_tjpgdec::{BlackHoleOutput, JpegOutput};
pub use trezor_tjpgdec::{BufferInput, Error, JDEC}; pub use trezor_tjpgdec::{BufferInput, Error, JDEC};

View File

@ -528,6 +528,7 @@ where
} else { } else {
let toif_data = unwrap!(Toif::new(image_data)); let toif_data = unwrap!(Toif::new(image_data));
shape::ToifImage::new(TOP_CENTER, toif_data) shape::ToifImage::new(TOP_CENTER, toif_data)
.with_align(Alignment2D::TOP_CENTER)
.with_fg(theme::FG) .with_fg(theme::FG)
.render(target); .render(target);
}; };

View File

@ -1,9 +1,14 @@
#[cfg(feature = "micropython")] #[cfg(feature = "micropython")]
use crate::micropython::buffer::StrBuffer; use crate::micropython::buffer::StrBuffer;
use crate::ui::{ 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}; use super::{component::ErrorScreen, constant};
#[cfg(not(feature = "micropython"))] #[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); let mut frame = ErrorScreen::new(title, msg, footer);
frame.place(constant::screen()); 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(); frame.paint();
} }
@ -34,7 +46,16 @@ pub fn screen_fatal_error(title: &str, msg: &str, footer: &str) {
extern "C" fn screen_boot_full() { extern "C" fn screen_boot_full() {
let mut frame = WelcomeScreen::new(false); let mut frame = WelcomeScreen::new(false);
frame.place(screen()); frame.place(screen());
#[cfg(feature = "new_rendering")]
render_on_display(None, Some(Color::black()), |target| {
frame.render(target);
});
#[cfg(not(feature = "new_rendering"))]
{
display::sync(); display::sync();
frame.paint(); frame.paint();
display::refresh(); display::refresh();
}
} }

View File

@ -141,8 +141,8 @@ 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 - 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 * PI4 as i32) / 1000) as i16; let start = ((start as i32 * 8 * PI4 as i32) / 1000) as i16;
let end = ((end as i32 * 8 * PI4 as i32) / 1000) as i16; let end = ((end as i32 * 8 * PI4 as i32) / 1000) as i16;

View File

@ -22,7 +22,7 @@ use crate::{
ui::{ ui::{
constant::HEIGHT, constant::HEIGHT,
display::{ display::{
tjpgd::{jpeg_test, BufferInput}, tjpgd::BufferInput,
toif::{Toif, ToifFormat}, toif::{Toif, ToifFormat},
}, },
model_tt::component::homescreen::render::{ model_tt::component::homescreen::render::{
@ -288,6 +288,13 @@ impl Component for Homescreen {
} }
self.label.map(|t| { 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 style = theme::TEXT_DEMIBOLD;
let pos = Point::new(self.pad.area.center().x, LABEL_Y); let pos = Point::new(self.pad.area.center().x, LABEL_Y);
shape::Text::new(pos, t) shape::Text::new(pos, t)
@ -470,7 +477,7 @@ impl Component for Lockscreen {
shape::JpegImage::new(center, img_data) shape::JpegImage::new(center, img_data)
.with_align(Alignment2D::CENTER) .with_align(Alignment2D::CENTER)
.with_blur(4) .with_blur(4)
.with_dim(130) .with_dim(140)
.render(target); .render(target);
} else if is_image_toif(img_data) { } else if is_image_toif(img_data) {
shape::ToifImage::new(center, unwrap!(Toif::new(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 { pub fn check_homescreen_format(buffer: &[u8]) -> bool {
#[cfg(not(feature = "new_rendering"))] #[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")] #[cfg(feature = "new_rendering")]
let result = is_image_jpeg(buffer); // !@# TODO: test like if `new_rendering` is off let result = is_image_jpeg(buffer); // !@# TODO: test like if `new_rendering` is off

View File

@ -184,9 +184,12 @@ where
} }
fn render<'s>(&'s self, target: &mut impl Renderer<'s>) { fn render<'s>(&'s self, target: &mut impl Renderer<'s>) {
if self.input.inner().inner().is_empty() {
self.prompt.render(target); self.prompt.render(target);
} else {
self.input.render(target); self.input.render(target);
self.back.render(target); self.back.render(target);
}
for btn in &self.keys { for btn in &self.keys {
btn.render(target); btn.render(target);

View File

@ -132,8 +132,8 @@ where
let inactive_color = background_color.blend(active_color, 85); let inactive_color = background_color.blend(active_color, 85);
let (start, end) = if self.indeterminate { let (start, end) = 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 * PI4 as i32) / 1000) as i16; let start = ((start as i32 * 8 * PI4 as i32) / 1000) as i16;
let end = ((end as i32 * 8 * PI4 as i32) / 1000) as i16; let end = ((end as i32 * 8 * PI4 as i32) / 1000) as i16;
(start, end) (start, end)

View File

@ -1,13 +1,12 @@
use crate::ui::{ use crate::ui::{
component::{Component, Event, EventCtx, Never}, component::{Component, Event, EventCtx, Never},
display::toif::Toif,
geometry::{Alignment2D, Offset, Rect}, geometry::{Alignment2D, Offset, Rect},
model_tt::theme, model_tt::theme,
shape, shape,
shape::Renderer, shape::Renderer,
}; };
#[cfg(feature = "bootloader")] #[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 TEXT_BOTTOM_MARGIN: i16 = 24; // matching the homescreen label margin
const ICON_TOP_MARGIN: i16 = 48; const ICON_TOP_MARGIN: i16 = 48;

View File

@ -7,8 +7,13 @@ pub const HEIGHT: i16 = DISPLAY_RESY as _;
pub const LINE_SPACE: i16 = 4; pub const LINE_SPACE: i16 = 4;
pub const FONT_BPP: i16 = 4; pub const FONT_BPP: i16 = 4;
#[cfg(not(feature = "new_rendering"))]
pub const LOADER_OUTER: i16 = 60; 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_INNER: i16 = 42;
pub const LOADER_ICON_MAX_SIZE: i16 = 64; pub const LOADER_ICON_MAX_SIZE: i16 = 64;
pub const fn size() -> Offset { pub const fn size() -> Offset {

View File

@ -3,13 +3,18 @@ use crate::micropython::buffer::StrBuffer;
use crate::ui::{ use crate::ui::{
component::Component, component::Component,
constant::screen, constant::screen,
display,
model_tt::{ model_tt::{
component::{ErrorScreen, WelcomeScreen}, component::{ErrorScreen, WelcomeScreen},
constant, 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"))] #[cfg(not(feature = "micropython"))]
// SAFETY: Actually safe but see below // SAFETY: Actually safe but see below
unsafe fn get_str(text: &str) -> &str { 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); let mut frame = ErrorScreen::new(title, msg, footer);
frame.place(constant::screen()); 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(); frame.paint();
} }
@ -38,7 +50,16 @@ pub fn screen_fatal_error(title: &str, msg: &str, footer: &str) {
extern "C" fn screen_boot_full() { extern "C" fn screen_boot_full() {
let mut frame = WelcomeScreen::new(false); let mut frame = WelcomeScreen::new(false);
frame.place(screen()); frame.place(screen());
#[cfg(feature = "new_rendering")]
render_on_display(None, Some(Color::black()), |target| {
frame.render(target);
});
#[cfg(not(feature = "new_rendering"))]
{
display::sync(); display::sync();
frame.paint(); frame.paint();
display::refresh(); display::refresh();
}
} }