mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-01-10 23:40:58 +00:00
chore(core/rust): Rename Text to FormattedText
This commit is contained in:
parent
39263144b7
commit
d5a74a8614
@ -8,4 +8,4 @@ pub mod tuple;
|
|||||||
pub use base::{Child, Component, Event, EventCtx, Never, TimerToken};
|
pub use base::{Child, Component, Event, EventCtx, Never, TimerToken};
|
||||||
pub use empty::Empty;
|
pub use empty::Empty;
|
||||||
pub use label::{Label, LabelStyle};
|
pub use label::{Label, LabelStyle};
|
||||||
pub use text::{LineBreaking, PageBreaking, Text, TextLayout};
|
pub use text::{FormattedText, LineBreaking, PageBreaking, TextLayout};
|
||||||
|
@ -14,13 +14,13 @@ use crate::ui::{
|
|||||||
|
|
||||||
pub const MAX_ARGUMENTS: usize = 6;
|
pub const MAX_ARGUMENTS: usize = 6;
|
||||||
|
|
||||||
pub struct Text<F, T> {
|
pub struct FormattedText<F, T> {
|
||||||
layout: TextLayout,
|
layout: TextLayout,
|
||||||
format: F,
|
format: F,
|
||||||
args: LinearMap<&'static [u8], T, MAX_ARGUMENTS>,
|
args: LinearMap<&'static [u8], T, MAX_ARGUMENTS>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<F, T> Text<F, T> {
|
impl<F, T> FormattedText<F, T> {
|
||||||
pub fn new<D: DefaultTextTheme>(area: Rect, format: F) -> Self {
|
pub fn new<D: DefaultTextTheme>(area: Rect, format: F) -> Self {
|
||||||
Self {
|
Self {
|
||||||
layout: TextLayout::new::<D>(area),
|
layout: TextLayout::new::<D>(area),
|
||||||
@ -29,11 +29,6 @@ impl<F, T> Text<F, T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn format(mut self, format: F) -> Self {
|
|
||||||
self.format = format;
|
|
||||||
self
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn with(mut self, key: &'static [u8], value: T) -> Self {
|
pub fn with(mut self, key: &'static [u8], value: T) -> Self {
|
||||||
if self.args.insert(key, value).is_err() {
|
if self.args.insert(key, value).is_err() {
|
||||||
// Map is full, ignore.
|
// Map is full, ignore.
|
||||||
@ -43,6 +38,11 @@ impl<F, T> Text<F, T> {
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn with_format(mut self, format: F) -> Self {
|
||||||
|
self.format = format;
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
pub fn with_text_font(mut self, text_font: Font) -> Self {
|
pub fn with_text_font(mut self, text_font: Font) -> Self {
|
||||||
self.layout.text_font = text_font;
|
self.layout.text_font = text_font;
|
||||||
self
|
self
|
||||||
@ -68,30 +68,28 @@ impl<F, T> Text<F, T> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<F, T> Text<F, T>
|
impl<F, T> FormattedText<F, T>
|
||||||
where
|
where
|
||||||
F: AsRef<[u8]>,
|
F: AsRef<[u8]>,
|
||||||
T: AsRef<[u8]>,
|
T: AsRef<[u8]>,
|
||||||
{
|
{
|
||||||
fn layout_content(&self, sink: &mut dyn LayoutSink) {
|
fn layout_content(&self, sink: &mut dyn LayoutSink) {
|
||||||
self.layout.layout_formatted(
|
let mut cursor = self.layout.initial_cursor();
|
||||||
self.format.as_ref(),
|
let mut ops = Tokenizer::new(self.format.as_ref()).flat_map(|arg| match arg {
|
||||||
|arg| match arg {
|
Token::Literal(literal) => Some(Op::Text(literal)),
|
||||||
Token::Literal(literal) => Some(Op::Text(literal)),
|
Token::Argument(b"mono") => Some(Op::Font(self.layout.mono_font)),
|
||||||
Token::Argument(b"mono") => Some(Op::Font(self.layout.mono_font)),
|
Token::Argument(b"bold") => Some(Op::Font(self.layout.bold_font)),
|
||||||
Token::Argument(b"bold") => Some(Op::Font(self.layout.bold_font)),
|
Token::Argument(b"normal") => Some(Op::Font(self.layout.normal_font)),
|
||||||
Token::Argument(b"normal") => Some(Op::Font(self.layout.normal_font)),
|
Token::Argument(argument) => self
|
||||||
Token::Argument(argument) => self
|
.args
|
||||||
.args
|
.get(argument)
|
||||||
.get(argument)
|
.map(|value| Op::Text(value.as_ref())),
|
||||||
.map(|value| Op::Text(value.as_ref())),
|
});
|
||||||
},
|
self.layout.layout_ops(&mut ops, &mut cursor, sink);
|
||||||
sink,
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<F, T> Component for Text<F, T>
|
impl<F, T> Component for FormattedText<F, T>
|
||||||
where
|
where
|
||||||
F: AsRef<[u8]>,
|
F: AsRef<[u8]>,
|
||||||
T: AsRef<[u8]>,
|
T: AsRef<[u8]>,
|
||||||
@ -131,7 +129,7 @@ mod trace {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct TraceText<'a, F, T>(pub &'a Text<F, T>);
|
pub struct TraceText<'a, F, T>(pub &'a FormattedText<F, T>);
|
||||||
|
|
||||||
impl<'a, F, T> crate::trace::Trace for TraceText<'a, F, T>
|
impl<'a, F, T> crate::trace::Trace for TraceText<'a, F, T>
|
||||||
where
|
where
|
||||||
@ -145,7 +143,7 @@ mod trace {
|
|||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(feature = "ui_debug")]
|
#[cfg(feature = "ui_debug")]
|
||||||
impl<F, T> crate::trace::Trace for Text<F, T>
|
impl<F, T> crate::trace::Trace for FormattedText<F, T>
|
||||||
where
|
where
|
||||||
F: AsRef<[u8]>,
|
F: AsRef<[u8]>,
|
||||||
T: AsRef<[u8]>,
|
T: AsRef<[u8]>,
|
||||||
@ -250,26 +248,7 @@ impl TextLayout {
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn layout_formatted<'f, 'o, F, I>(
|
pub fn layout_ops<'o>(
|
||||||
self,
|
|
||||||
format: &'f [u8],
|
|
||||||
resolve: F,
|
|
||||||
sink: &mut dyn LayoutSink,
|
|
||||||
) -> LayoutFit
|
|
||||||
where
|
|
||||||
F: Fn(Token<'f>) -> I,
|
|
||||||
I: IntoIterator<Item = Op<'o>>,
|
|
||||||
{
|
|
||||||
let mut cursor = self.initial_cursor();
|
|
||||||
|
|
||||||
self.layout_op_stream(
|
|
||||||
&mut Tokenizer::new(format).flat_map(resolve),
|
|
||||||
&mut cursor,
|
|
||||||
sink,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn layout_op_stream<'o>(
|
|
||||||
mut self,
|
mut self,
|
||||||
ops: &mut dyn Iterator<Item = Op<'o>>,
|
ops: &mut dyn Iterator<Item = Op<'o>>,
|
||||||
cursor: &mut Point,
|
cursor: &mut Point,
|
||||||
|
@ -4,7 +4,7 @@ use crate::{
|
|||||||
error::Error,
|
error::Error,
|
||||||
micropython::{buffer::Buffer, obj::Obj},
|
micropython::{buffer::Buffer, obj::Obj},
|
||||||
ui::{
|
ui::{
|
||||||
component::{Child, Text},
|
component::{Child, FormattedText},
|
||||||
display,
|
display,
|
||||||
layout::obj::LayoutObj,
|
layout::obj::LayoutObj,
|
||||||
},
|
},
|
||||||
@ -40,7 +40,7 @@ extern "C" fn ui_layout_new_example(param: Obj) -> Obj {
|
|||||||
let layout = LayoutObj::new(Child::new(Dialog::new(
|
let layout = LayoutObj::new(Child::new(Dialog::new(
|
||||||
display::screen(),
|
display::screen(),
|
||||||
|area| {
|
|area| {
|
||||||
Text::new::<theme::TTDefaultText>(area, param)
|
FormattedText::new::<theme::TTDefaultText>(area, param)
|
||||||
.with(b"some", "a few")
|
.with(b"some", "a few")
|
||||||
.with(b"param", "xx")
|
.with(b"param", "xx")
|
||||||
},
|
},
|
||||||
@ -100,7 +100,7 @@ mod tests {
|
|||||||
let layout = Child::new(Dialog::new(
|
let layout = Child::new(Dialog::new(
|
||||||
display::screen(),
|
display::screen(),
|
||||||
|area| {
|
|area| {
|
||||||
Text::new::<theme::TTDefaultText>(
|
FormattedText::new::<theme::TTDefaultText>(
|
||||||
area,
|
area,
|
||||||
"Testing text layout, with some text, and some more text. And {param}",
|
"Testing text layout, with some text, and some more text. And {param}",
|
||||||
)
|
)
|
||||||
|
Loading…
Reference in New Issue
Block a user