mirror of
https://github.com/trezor/trezor-firmware.git
synced 2024-12-23 14:58:09 +00:00
feat(core/rust/ui): explicit breaks for Paragraphs
[no changelog]
This commit is contained in:
parent
d96d3e705b
commit
247d9d267a
@ -71,6 +71,13 @@ where
|
|||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub fn add_break(mut self) -> Self {
|
||||||
|
if let Some(ref mut para) = self.list.last_mut() {
|
||||||
|
para.break_after = true;
|
||||||
|
};
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
/// Update bounding boxes of paragraphs on the current page. First determine
|
/// Update bounding boxes of paragraphs on the current page. First determine
|
||||||
/// the number of visible paragraphs and their sizes. These are then
|
/// the number of visible paragraphs and their sizes. These are then
|
||||||
/// arranged according to the layout.
|
/// arranged according to the layout.
|
||||||
@ -94,6 +101,10 @@ where
|
|||||||
remaining_area = free;
|
remaining_area = free;
|
||||||
self.visible += 1;
|
self.visible += 1;
|
||||||
char_offset = 0;
|
char_offset = 0;
|
||||||
|
|
||||||
|
if paragraph.break_after {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
self.placement.arrange(
|
self.placement.arrange(
|
||||||
@ -195,6 +206,7 @@ pub mod trace {
|
|||||||
pub struct Paragraph<T> {
|
pub struct Paragraph<T> {
|
||||||
content: T,
|
content: T,
|
||||||
layout: TextLayout,
|
layout: TextLayout,
|
||||||
|
break_after: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T> Paragraph<T>
|
impl<T> Paragraph<T>
|
||||||
@ -202,7 +214,11 @@ where
|
|||||||
T: AsRef<str>,
|
T: AsRef<str>,
|
||||||
{
|
{
|
||||||
pub fn new(content: T, layout: TextLayout) -> Self {
|
pub fn new(content: T, layout: TextLayout) -> Self {
|
||||||
Self { content, layout }
|
Self {
|
||||||
|
content,
|
||||||
|
layout,
|
||||||
|
break_after: false,
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn content(&self, char_offset: usize) -> &str {
|
pub fn content(&self, char_offset: usize) -> &str {
|
||||||
@ -274,6 +290,11 @@ where
|
|||||||
current.par += 1;
|
current.par += 1;
|
||||||
current.chr = 0;
|
current.chr = 0;
|
||||||
progress = true;
|
progress = true;
|
||||||
|
|
||||||
|
// Handle hard break if requested for this paragraph.
|
||||||
|
if paragraph.break_after && current.par < self.paragraphs.list.len() {
|
||||||
|
return self.current;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
LayoutFit::OutOfBounds {
|
LayoutFit::OutOfBounds {
|
||||||
processed_chars, ..
|
processed_chars, ..
|
||||||
|
@ -470,4 +470,32 @@ mod tests {
|
|||||||
swipe_down(&mut page);
|
swipe_down(&mut page);
|
||||||
assert_eq!(trace(&page), expected1);
|
assert_eq!(trace(&page), expected1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn paragraphs_hard_break() {
|
||||||
|
let mut page = SwipePage::new(
|
||||||
|
Paragraphs::new()
|
||||||
|
.add(theme::TEXT_NORMAL, "Short one.")
|
||||||
|
.add_break()
|
||||||
|
.add(theme::TEXT_NORMAL, "Short two.")
|
||||||
|
.add_break()
|
||||||
|
.add(theme::TEXT_NORMAL, "Short three.")
|
||||||
|
.add_break(),
|
||||||
|
Empty,
|
||||||
|
theme::BG,
|
||||||
|
);
|
||||||
|
page.place(SCREEN);
|
||||||
|
|
||||||
|
let expected1 = "<SwipePage active_page:0 page_count:3 content:<Paragraphs Short one.\n> buttons:<Empty > >";
|
||||||
|
let expected2 = "<SwipePage active_page:1 page_count:3 content:<Paragraphs Short two.\n> buttons:<Empty > >";
|
||||||
|
let expected3 = "<SwipePage active_page:2 page_count:3 content:<Paragraphs Short three.\n> buttons:<Empty > >";
|
||||||
|
|
||||||
|
assert_eq!(trace(&page), expected1);
|
||||||
|
swipe_up(&mut page);
|
||||||
|
assert_eq!(trace(&page), expected2);
|
||||||
|
swipe_up(&mut page);
|
||||||
|
assert_eq!(trace(&page), expected3);
|
||||||
|
swipe_up(&mut page);
|
||||||
|
assert_eq!(trace(&page), expected3);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -376,7 +376,7 @@ extern "C" fn new_confirm_modify_output(n_args: usize, args: *const Obj, kwargs:
|
|||||||
let paragraphs = Paragraphs::new()
|
let paragraphs = Paragraphs::new()
|
||||||
.add(theme::TEXT_NORMAL, "Address:".into())
|
.add(theme::TEXT_NORMAL, "Address:".into())
|
||||||
.add(theme::TEXT_MONO, address)
|
.add(theme::TEXT_MONO, address)
|
||||||
// FIXME pagebreak
|
.add_break()
|
||||||
.add(theme::TEXT_NORMAL, description.into())
|
.add(theme::TEXT_NORMAL, description.into())
|
||||||
.add(theme::TEXT_MONO, amount_change)
|
.add(theme::TEXT_MONO, amount_change)
|
||||||
.add(theme::TEXT_NORMAL, "New amount:".into())
|
.add(theme::TEXT_NORMAL, "New amount:".into())
|
||||||
|
Loading…
Reference in New Issue
Block a user