diff --git a/core/src/trezor/ui/components/common/text.py b/core/src/trezor/ui/components/common/text.py index c43490c214..0aea534aca 100644 --- a/core/src/trezor/ui/components/common/text.py +++ b/core/src/trezor/ui/components/common/text.py @@ -9,6 +9,7 @@ from ...constants import ( TEXT_LINE_HEIGHT_HALF, TEXT_MARGIN_LEFT, TEXT_MAX_LINES, + TEXT_MAX_LINES_NO_HEADER, ) LINE_WIDTH = ui.WIDTH - TEXT_MARGIN_LEFT @@ -232,7 +233,7 @@ def render_text( """ # initial rendering state INITIAL_OFFSET_X = offset_x - offset_y_max = TEXT_HEADER_HEIGHT + (TEXT_LINE_HEIGHT * max_lines) + offset_y_max = offset_y + (TEXT_LINE_HEIGHT * (max_lines - 1)) span = _WORKING_SPAN # scan through up to item_offset so that the current font & color is up to date @@ -364,10 +365,10 @@ if __debug__: class TextBase(ui.Component): def __init__( self, - header_text: str, + header_text: str | None, header_icon: str = ui.ICON_DEFAULT, icon_color: int = ui.ORANGE_ICON, - max_lines: int = TEXT_MAX_LINES, + max_lines: int | None = None, new_lines: bool = True, break_words: bool = False, render_page_overflow: bool = True, @@ -379,7 +380,14 @@ class TextBase(ui.Component): self.header_text = header_text self.header_icon = header_icon self.icon_color = icon_color - self.max_lines = max_lines + + if max_lines is None: + self.max_lines = ( + TEXT_MAX_LINES_NO_HEADER if self.header_text is None else TEXT_MAX_LINES + ) + else: + self.max_lines = max_lines + self.new_lines = new_lines self.break_words = break_words self.render_page_overflow = render_page_overflow @@ -436,7 +444,7 @@ class TextBase(ui.Component): self.on_render() finally: self.repaint = should_repaint - return [self.header_text] + display_mock.screen_contents + return [self.header_text or ""] + display_mock.screen_contents LABEL_LEFT = const(0) diff --git a/core/src/trezor/ui/components/tt/scroll.py b/core/src/trezor/ui/components/tt/scroll.py index b923d6b6af..832e872072 100644 --- a/core/src/trezor/ui/components/tt/scroll.py +++ b/core/src/trezor/ui/components/tt/scroll.py @@ -7,7 +7,13 @@ from trezor.messages import ButtonAck, ButtonRequest from .button import Button, ButtonCancel, ButtonConfirm, ButtonDefault from .confirm import CANCELLED, CONFIRMED, Confirm from .swipe import SWIPE_DOWN, SWIPE_UP, SWIPE_VERTICAL, Swipe -from .text import LINE_WIDTH_PAGINATED, TEXT_MAX_LINES, Span, Text +from .text import ( + LINE_WIDTH_PAGINATED, + TEXT_MAX_LINES, + TEXT_MAX_LINES_NO_HEADER, + Span, + Text, +) if False: from typing import Callable, Iterable @@ -310,7 +316,7 @@ PAGEBREAK = 0, "" def paginate_paragraphs( para: Iterable[tuple[int, str]], - header: str, + header: str | None, header_icon: str = ui.ICON_DEFAULT, icon_color: int = ui.ORANGE_ICON, break_words: bool = False, @@ -319,6 +325,7 @@ def paginate_paragraphs( span = Span("", 0, ui.NORMAL, break_words=break_words) lines = 0 content: list[TextContent] = [] + max_lines = TEXT_MAX_LINES_NO_HEADER if header is None else TEXT_MAX_LINES for item in para: if item is PAGEBREAK: continue @@ -330,7 +337,7 @@ def paginate_paragraphs( content.append("\n") content.extend(item) - if lines <= TEXT_MAX_LINES: + if lines <= max_lines: result = Text( header, header_icon=header_icon, @@ -377,7 +384,7 @@ def paginate_paragraphs( ) page.content = content pages.append(page) - lines_left = TEXT_MAX_LINES - 1 + lines_left = max_lines - 1 else: lines_left -= 1 diff --git a/core/src/trezor/ui/components/tt/text.py b/core/src/trezor/ui/components/tt/text.py index 1a89b84134..ce724126cf 100644 --- a/core/src/trezor/ui/components/tt/text.py +++ b/core/src/trezor/ui/components/tt/text.py @@ -8,7 +8,10 @@ from ..common.text import ( # noqa: F401 BR_HALF, LINE_WIDTH, LINE_WIDTH_PAGINATED, + TEXT_HEADER_HEIGHT, + TEXT_LINE_HEIGHT, TEXT_MAX_LINES, + TEXT_MAX_LINES_NO_HEADER, Span, TextBase, render_text, @@ -30,13 +33,16 @@ def header( class Text(TextBase): def on_render(self) -> None: if self.repaint: - header( - self.header_text, - self.header_icon, - ui.TITLE_GREY, - ui.BG, - self.icon_color, - ) + offset_y = TEXT_LINE_HEIGHT + if self.header_text is not None: + header( + self.header_text, + self.header_icon, + ui.TITLE_GREY, + ui.BG, + self.icon_color, + ) + offset_y = TEXT_HEADER_HEIGHT + TEXT_LINE_HEIGHT render_text( self.content, self.new_lines, @@ -46,6 +52,7 @@ class Text(TextBase): break_words=self.break_words, line_width=self.line_width, render_page_overflow=self.render_page_overflow, + offset_y=offset_y, ) self.repaint = False diff --git a/core/src/trezor/ui/constants/t1.py b/core/src/trezor/ui/constants/t1.py index bc382d0415..8b2b416c7d 100644 --- a/core/src/trezor/ui/constants/t1.py +++ b/core/src/trezor/ui/constants/t1.py @@ -5,3 +5,4 @@ TEXT_LINE_HEIGHT = const(9) TEXT_LINE_HEIGHT_HALF = const(4) TEXT_MARGIN_LEFT = const(0) TEXT_MAX_LINES = const(4) +TEXT_MAX_LINES_NO_HEADER = const(5) diff --git a/core/src/trezor/ui/constants/tt.py b/core/src/trezor/ui/constants/tt.py index 40753c8ce0..f36c72960a 100644 --- a/core/src/trezor/ui/constants/tt.py +++ b/core/src/trezor/ui/constants/tt.py @@ -5,6 +5,7 @@ TEXT_LINE_HEIGHT = const(26) TEXT_LINE_HEIGHT_HALF = const(13) TEXT_MARGIN_LEFT = const(14) TEXT_MAX_LINES = const(5) +TEXT_MAX_LINES_NO_HEADER = const(7) PAGINATION_MARGIN_RIGHT = const(22) MONO_ADDR_PER_LINE = const(17)