mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-05-05 08:29:13 +00:00
feat(core): add value info to brightness dialog in mercury
[no changelog]
This commit is contained in:
parent
3a8595b43a
commit
491aeaa0f5
@ -1,10 +1,13 @@
|
|||||||
use crate::ui::{
|
use crate::{
|
||||||
|
strutil::ShortString,
|
||||||
|
ui::{
|
||||||
component::{base::ComponentExt, Child, Component, Event, EventCtx},
|
component::{base::ComponentExt, Child, Component, Event, EventCtx},
|
||||||
constant::screen,
|
constant::screen,
|
||||||
display,
|
display,
|
||||||
event::TouchEvent,
|
event::TouchEvent,
|
||||||
geometry::{Grid, Insets, Point, Rect},
|
geometry::{Alignment, Grid, Insets, Point, Rect},
|
||||||
shape::{self, Renderer},
|
shape::{self, Renderer},
|
||||||
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
use super::{theme, Button, ButtonMsg};
|
use super::{theme, Button, ButtonMsg};
|
||||||
@ -17,15 +20,20 @@ pub enum NumberInputSliderDialogMsg {
|
|||||||
|
|
||||||
pub struct NumberInputSliderDialog {
|
pub struct NumberInputSliderDialog {
|
||||||
area: Rect,
|
area: Rect,
|
||||||
|
text_area: Rect,
|
||||||
input: Child<NumberInputSlider>,
|
input: Child<NumberInputSlider>,
|
||||||
cancel_button: Child<Button>,
|
cancel_button: Child<Button>,
|
||||||
confirm_button: Child<Button>,
|
confirm_button: Child<Button>,
|
||||||
|
min: u16,
|
||||||
|
max: u16,
|
||||||
|
val: u16,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl NumberInputSliderDialog {
|
impl NumberInputSliderDialog {
|
||||||
pub fn new(min: u16, max: u16, init_value: u16) -> Self {
|
pub fn new(min: u16, max: u16, init_value: u16) -> Self {
|
||||||
Self {
|
Self {
|
||||||
area: Rect::zero(),
|
area: Rect::zero(),
|
||||||
|
text_area: Rect::zero(),
|
||||||
input: NumberInputSlider::new(min, max, init_value).into_child(),
|
input: NumberInputSlider::new(min, max, init_value).into_child(),
|
||||||
cancel_button: Button::with_text("CANCEL".into())
|
cancel_button: Button::with_text("CANCEL".into())
|
||||||
.styled(theme::button_cancel())
|
.styled(theme::button_cancel())
|
||||||
@ -33,6 +41,9 @@ impl NumberInputSliderDialog {
|
|||||||
confirm_button: Button::with_text("CONFIRM".into())
|
confirm_button: Button::with_text("CONFIRM".into())
|
||||||
.styled(theme::button_confirm())
|
.styled(theme::button_confirm())
|
||||||
.into_child(),
|
.into_child(),
|
||||||
|
min,
|
||||||
|
max,
|
||||||
|
val: init_value,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,7 +61,9 @@ impl Component for NumberInputSliderDialog {
|
|||||||
let content_area = self.area.inset(Insets::top(2 * theme::BUTTON_SPACING));
|
let content_area = self.area.inset(Insets::top(2 * theme::BUTTON_SPACING));
|
||||||
let (_, content_area) = content_area.split_top(30);
|
let (_, content_area) = content_area.split_top(30);
|
||||||
let (input_area, _) = content_area.split_top(15);
|
let (input_area, _) = content_area.split_top(15);
|
||||||
let (_, button_area) = content_area.split_bottom(button_height);
|
let (text_area, button_area) = content_area.split_bottom(button_height);
|
||||||
|
|
||||||
|
self.text_area = text_area;
|
||||||
|
|
||||||
let grid = Grid::new(button_area, 1, 2).with_spacing(theme::KEYBOARD_SPACING);
|
let grid = Grid::new(button_area, 1, 2).with_spacing(theme::KEYBOARD_SPACING);
|
||||||
self.input.place(input_area.inset(Insets::sides(20)));
|
self.input.place(input_area.inset(Insets::sides(20)));
|
||||||
@ -61,6 +74,7 @@ impl Component for NumberInputSliderDialog {
|
|||||||
|
|
||||||
fn event(&mut self, ctx: &mut EventCtx, event: Event) -> Option<Self::Msg> {
|
fn event(&mut self, ctx: &mut EventCtx, event: Event) -> Option<Self::Msg> {
|
||||||
if let Some(value) = self.input.event(ctx, event) {
|
if let Some(value) = self.input.event(ctx, event) {
|
||||||
|
self.val = value;
|
||||||
return Some(Self::Msg::Changed(value));
|
return Some(Self::Msg::Changed(value));
|
||||||
}
|
}
|
||||||
if let Some(ButtonMsg::Clicked) = self.cancel_button.event(ctx, event) {
|
if let Some(ButtonMsg::Clicked) = self.cancel_button.event(ctx, event) {
|
||||||
@ -80,6 +94,18 @@ impl Component for NumberInputSliderDialog {
|
|||||||
|
|
||||||
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
fn render<'s>(&self, target: &mut impl Renderer<'s>) {
|
||||||
self.input.render(target);
|
self.input.render(target);
|
||||||
|
|
||||||
|
let mut str = ShortString::new();
|
||||||
|
let val_pct = (100 * (self.val - self.min)) / (self.max - self.min);
|
||||||
|
|
||||||
|
unwrap!(ufmt::uwrite!(str, "{} %", val_pct));
|
||||||
|
|
||||||
|
shape::Text::new(self.text_area.center(), &str)
|
||||||
|
.with_font(theme::TEXT_NORMAL.text_font)
|
||||||
|
.with_fg(theme::TEXT_NORMAL.text_color)
|
||||||
|
.with_align(Alignment::Center)
|
||||||
|
.render(target);
|
||||||
|
|
||||||
self.cancel_button.render(target);
|
self.cancel_button.render(target);
|
||||||
self.confirm_button.render(target);
|
self.confirm_button.render(target);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user