1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2025-07-01 20:32:35 +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};
pub use trezor_tjpgdec::{BufferInput, Error, JDEC};

View File

@ -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);
};

View File

@ -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();
}
}

View File

@ -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;

View File

@ -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

View File

@ -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);

View File

@ -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)

View File

@ -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;

View File

@ -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 {

View File

@ -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();
}
}