You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
191 lines
6.3 KiB
191 lines
6.3 KiB
pub mod bootloader;
|
|
|
|
use crate::ui::{
|
|
component::text::{LineBreaking, PageBreaking, TextStyle},
|
|
display::{Color, Font, Icon},
|
|
geometry::Insets,
|
|
};
|
|
|
|
use super::component::{ButtonStyle, ButtonStyleSheet, LoaderStyle, LoaderStyleSheet};
|
|
|
|
// Typical backlight values.
|
|
pub const BACKLIGHT_NORMAL: u16 = 150;
|
|
pub const BACKLIGHT_DIM: u16 = 5;
|
|
|
|
// Color palette.
|
|
pub const WHITE: Color = Color::rgb(0xFF, 0xFF, 0xFF);
|
|
pub const BLACK: Color = Color::rgb(0, 0, 0);
|
|
pub const FG: Color = WHITE; // Default foreground (text & icon) color.
|
|
pub const BG: Color = BLACK; // Default background color.
|
|
pub const RED: Color = Color::rgb(0xE7, 0x0E, 0x0E); // button
|
|
pub const RED_DARK: Color = Color::rgb(0xAE, 0x09, 0x09); // button pressed
|
|
pub const YELLOW: Color = Color::rgb(0xD9, 0x9E, 0x00); // button
|
|
pub const YELLOW_DARK: Color = Color::rgb(0x7A, 0x58, 0x00); // button pressed
|
|
pub const GREEN: Color = Color::rgb(0x00, 0xAA, 0x35); // button
|
|
pub const GREEN_DARK: Color = Color::rgb(0x00, 0x55, 0x1D); // button pressed
|
|
pub const BLUE: Color = Color::rgb(0x06, 0x1E, 0xAD); // button
|
|
pub const BLUE_DARK: Color = Color::rgb(0x04, 0x10, 0x58); // button pressed
|
|
pub const OFF_WHITE: Color = Color::rgb(0xDE, 0xDE, 0xDE); // very light grey
|
|
pub const GREY_LIGHT: Color = Color::rgb(0x90, 0x90, 0x90); // secondary text
|
|
pub const GREY_MEDIUM: Color = Color::rgb(0x4F, 0x4F, 0x4F); // button pressed
|
|
pub const GREY_DARK: Color = Color::rgb(0x35, 0x35, 0x35); // button
|
|
pub const VIOLET: Color = Color::rgb(0x95, 0x00, 0xCA);
|
|
|
|
pub const FATAL_ERROR_COLOR: Color = Color::rgb(0xE7, 0x0E, 0x0E);
|
|
pub const FATAL_ERROR_HIGHLIGHT_COLOR: Color = Color::rgb(0xFF, 0x41, 0x41);
|
|
|
|
// Commonly used corner radius (i.e. for buttons).
|
|
pub const RADIUS: u8 = 2;
|
|
|
|
// UI icons (greyscale).
|
|
// Button icons.
|
|
include_icon!(ICON_CANCEL, "model_mercury/res/x24.toif");
|
|
include_icon!(ICON_CONFIRM, "model_mercury/res/check24.toif");
|
|
include_icon!(ICON_UP, "model_mercury/res/caret-up24.toif");
|
|
|
|
include_icon!(ICON_CORNER_CANCEL, "model_mercury/res/x32.toif");
|
|
include_icon!(ICON_CORNER_INFO, "model_mercury/res/info32.toif");
|
|
|
|
// Checklist symbols.
|
|
include_icon!(ICON_LIST_CURRENT, "model_mercury/res/arrow-right16.toif");
|
|
include_icon!(ICON_LIST_CHECK, "model_mercury/res/check16.toif");
|
|
|
|
// Homescreen notifications.
|
|
include_icon!(ICON_WARNING40, "model_mercury/res/warning40.toif");
|
|
include_icon!(ICON_LOCK_BIG, "model_mercury/res/lock24.toif");
|
|
|
|
// Text arrows.
|
|
include_icon!(ICON_PAGE_NEXT, "model_mercury/res/page-next.toif");
|
|
include_icon!(ICON_PAGE_PREV, "model_mercury/res/page-prev.toif");
|
|
|
|
// Large, three-color icons.
|
|
pub const WARN_COLOR: Color = YELLOW;
|
|
pub const INFO_COLOR: Color = BLUE;
|
|
pub const SUCCESS_COLOR: Color = GREEN;
|
|
pub const ERROR_COLOR: Color = RED;
|
|
include_icon!(IMAGE_FG_SUCCESS, "model_mercury/res/fg-check48.toif");
|
|
include_icon!(IMAGE_BG_CIRCLE, "model_mercury/res/circle48.toif");
|
|
|
|
// Welcome screen.
|
|
include_icon!(ICON_LOGO, "model_mercury/res/lock_full.toif");
|
|
include_icon!(ICON_LOGO_EMPTY, "model_mercury/res/lock_empty.toif");
|
|
|
|
pub const fn button_default() -> ButtonStyleSheet {
|
|
ButtonStyleSheet {
|
|
normal: &ButtonStyle {
|
|
font: Font::BOLD,
|
|
text_color: FG,
|
|
button_color: GREY_DARK,
|
|
background_color: BG,
|
|
border_color: BG,
|
|
border_radius: RADIUS,
|
|
border_width: 0,
|
|
},
|
|
active: &ButtonStyle {
|
|
font: Font::BOLD,
|
|
text_color: FG,
|
|
button_color: GREY_MEDIUM,
|
|
background_color: BG,
|
|
border_color: FG,
|
|
border_radius: RADIUS,
|
|
border_width: 0,
|
|
},
|
|
disabled: &ButtonStyle {
|
|
font: Font::BOLD,
|
|
text_color: GREY_LIGHT,
|
|
button_color: GREY_DARK,
|
|
background_color: BG,
|
|
border_color: BG,
|
|
border_radius: RADIUS,
|
|
border_width: 0,
|
|
},
|
|
}
|
|
}
|
|
|
|
pub const fn button_moreinfo() -> ButtonStyleSheet {
|
|
ButtonStyleSheet {
|
|
normal: &ButtonStyle {
|
|
font: Font::BOLD,
|
|
text_color: FG,
|
|
button_color: BG,
|
|
background_color: BG,
|
|
border_color: GREY_DARK,
|
|
border_radius: RADIUS,
|
|
border_width: 2,
|
|
},
|
|
active: &ButtonStyle {
|
|
font: Font::BOLD,
|
|
text_color: FG,
|
|
button_color: BG,
|
|
background_color: BG,
|
|
border_color: GREY_MEDIUM,
|
|
border_radius: RADIUS,
|
|
border_width: 2,
|
|
},
|
|
disabled: &ButtonStyle {
|
|
font: Font::BOLD,
|
|
text_color: GREY_LIGHT,
|
|
button_color: BG,
|
|
background_color: BG,
|
|
border_color: GREY_DARK,
|
|
border_radius: RADIUS,
|
|
border_width: 2,
|
|
},
|
|
}
|
|
}
|
|
|
|
pub const fn loader_default() -> LoaderStyleSheet {
|
|
LoaderStyleSheet {
|
|
normal: &LoaderStyle {
|
|
icon: None,
|
|
loader_color: FG,
|
|
background_color: BG,
|
|
},
|
|
active: &LoaderStyle {
|
|
icon: None,
|
|
loader_color: GREEN,
|
|
background_color: BG,
|
|
},
|
|
}
|
|
}
|
|
|
|
pub const fn loader_lock_icon() -> LoaderStyleSheet {
|
|
LoaderStyleSheet {
|
|
normal: &LoaderStyle {
|
|
icon: Some((ICON_LOCK_BIG, FG)),
|
|
loader_color: FG,
|
|
background_color: BG,
|
|
},
|
|
active: &LoaderStyle {
|
|
icon: Some((ICON_LOCK_BIG, FG)),
|
|
loader_color: GREEN,
|
|
background_color: BG,
|
|
},
|
|
}
|
|
}
|
|
|
|
pub const TEXT_NORMAL: TextStyle = TextStyle::new(Font::NORMAL, FG, BG, GREY_LIGHT, GREY_LIGHT);
|
|
pub const TEXT_DEMIBOLD: TextStyle = TextStyle::new(Font::DEMIBOLD, FG, BG, GREY_LIGHT, GREY_LIGHT);
|
|
pub const TEXT_BOLD: TextStyle = TextStyle::new(Font::BOLD, FG, BG, GREY_LIGHT, GREY_LIGHT);
|
|
pub const TEXT_MONO: TextStyle = TextStyle::new(Font::MONO, FG, BG, GREY_LIGHT, GREY_LIGHT)
|
|
.with_line_breaking(LineBreaking::BreakWordsNoHyphen)
|
|
.with_page_breaking(PageBreaking::CutAndInsertEllipsisBoth)
|
|
.with_ellipsis_icon(ICON_PAGE_NEXT, 0)
|
|
.with_prev_page_icon(ICON_PAGE_PREV, 0);
|
|
|
|
pub const BUTTON_SPACING: i16 = 6;
|
|
pub const CORNER_BUTTON_SIDE: i16 = 44;
|
|
pub const RESULT_PADDING: i16 = 6;
|
|
pub const RESULT_FOOTER_START: i16 = 171;
|
|
|
|
/// +----------+
|
|
/// | 6 |
|
|
/// | +----+ |
|
|
/// | 6| | 6|
|
|
/// | +----+ |
|
|
/// | 6 |
|
|
/// +----------+
|
|
pub const fn borders() -> Insets {
|
|
Insets::new(6, 6, 6, 6)
|
|
}
|