1
0
mirror of https://github.com/trezor/trezor-firmware.git synced 2024-12-18 04:18:10 +00:00

ui: properly taint child components

This commit is contained in:
Jan Pochyla 2018-11-30 15:24:57 +01:00
parent 25788e90e8
commit 9da2c9502e
9 changed files with 59 additions and 15 deletions

View File

@ -66,6 +66,11 @@ class HoldToConfirmDialog(Widget):
self.button = Button(ui.grid(4, n_x=1), hold, style=button_style)
self.loader = Loader(style=loader_style)
def taint(self):
super().taint()
self.button.taint()
self.content.taint()
def render(self):
self.button.render()

View File

@ -5,6 +5,11 @@ class Container(Widget):
def __init__(self, *children):
self.children = children
def taint(self):
super().taint()
for child in self.children:
child.taint()
def render(self):
for child in self.children:
child.render()

View File

@ -14,6 +14,11 @@ class EntrySelector(Widget):
self.device = Button(ui.grid(8, n_y=4, n_x=4, cells_x=4), "Device")
self.host = Button(ui.grid(12, n_y=4, n_x=4, cells_x=4), "Host")
def taint(self):
super().taint()
self.device.taint()
self.host.taint()
def render(self):
self.device.render()
self.host.render()

View File

@ -89,6 +89,13 @@ class MnemonicKeyboard(ui.Widget):
self.pbutton = None # pending key button
self.pindex = 0 # index of current pending char in pbutton
def taint(self):
super().taint()
self.input.taint()
self.back.taint()
for btn in self.keys:
btn.taint()
def render(self):
if self.input.content:
# content button and backspace

View File

@ -81,19 +81,15 @@ class Input(Button):
display.bar(tx + width + 1, ty - 18, 2, 22, fg_color)
class Prompt:
class Prompt(ui.Widget):
def __init__(self, text):
self.text = text
self.dirty = True
def taint(self):
self.dirty = True
def render(self):
if self.dirty:
if self.tainted:
display.bar(0, 0, ui.WIDTH, 48, ui.BG)
display.text_center(ui.WIDTH // 2, 32, self.text, ui.BOLD, ui.GREY, ui.BG)
self.dirty = False
self.tainted = False
CANCELLED = const(0)
@ -110,6 +106,15 @@ class PassphraseKeyboard(ui.Widget):
self.pbutton = None # pending key button
self.pindex = 0 # index of current pending char in pbutton
def taint(self):
super().taint()
self.prompt.taint()
self.input.taint()
self.back.taint()
self.done.taint()
for btn in self.keys:
btn.taint()
def render(self):
# passphrase or prompt
if self.input.content:

View File

@ -34,6 +34,11 @@ class PinMatrix(ui.Widget):
]
self.onchange = None
def taint(self):
super().taint()
for btn in self.pin_buttons:
btn.taint()
def render(self):
# pin matrix buttons
for btn in self.pin_buttons:

View File

@ -75,6 +75,10 @@ class Scrollpage(ui.Widget):
self.page = page
self.page_count = page_count
def taint(self):
super().taint()
self.content.taint()
def render(self):
self.content.render()
render_scrollbar(self.page, self.page_count)

View File

@ -121,7 +121,6 @@ class Text(ui.Widget):
self.max_lines = max_lines
self.new_lines = new_lines
self.content = []
self.tainted = True
def normal(self, *content):
self.content.append(ui.NORMAL)
@ -143,10 +142,13 @@ class Text(ui.Widget):
self.content.append(BR)
def render(self):
if not self.tainted:
return
if self.tainted:
ui.header(
self.header_text, self.header_icon, ui.TITLE_GREY, ui.BG, self.icon_color
self.header_text,
self.header_icon,
ui.TITLE_GREY,
ui.BG,
self.icon_color,
)
render_text(self.content, self.new_lines, self.max_lines)
self.tainted = False

View File

@ -26,6 +26,12 @@ class WordSelector(Widget):
ui.grid(8, n_y=4, n_x=3, cells_y=2), str(_W24), style=ui.BTN_KEY
)
def taint(self):
super().taint()
self.w12.taint()
self.w18.taint()
self.w24.taint()
def render(self):
self.w12.render()
self.w18.render()