mirror of
https://github.com/trezor/trezor-firmware.git
synced 2025-01-15 09:50:57 +00:00
move pagination primitives to trezor.ui.scroll
This commit is contained in:
parent
455a436123
commit
096f3f898f
@ -1,7 +1,6 @@
|
|||||||
from trezor import wire, loop, res, ui
|
from trezor import wire, ui
|
||||||
from trezor.ui.swipe import Swipe, SWIPE_UP, SWIPE_DOWN
|
|
||||||
from trezor.ui.button import Button, CONFIRM_BUTTON, CONFIRM_BUTTON_ACTIVE
|
from trezor.ui.button import Button, CONFIRM_BUTTON, CONFIRM_BUTTON_ACTIVE
|
||||||
from trezor.ui.scroll import Scroll
|
from trezor.ui.scroll import paginate, render_scrollbar, animate_swipe
|
||||||
from trezor.crypto import hashlib, random, bip39
|
from trezor.crypto import hashlib, random, bip39
|
||||||
from trezor.utils import unimport_gen, chunks
|
from trezor.utils import unimport_gen, chunks
|
||||||
|
|
||||||
@ -35,51 +34,6 @@ def request_new_pin():
|
|||||||
raise Exception() # TODO: wrong PIN should be handled in unified way
|
raise Exception() # TODO: wrong PIN should be handled in unified way
|
||||||
|
|
||||||
|
|
||||||
def change_page(page, page_count):
|
|
||||||
while True:
|
|
||||||
swipe = yield from Swipe().wait()
|
|
||||||
if swipe == SWIPE_UP and page < page_count - 1: # Scroll down
|
|
||||||
return page + 1
|
|
||||||
elif swipe == SWIPE_DOWN and page > 0: # Scroll up
|
|
||||||
return page - 1
|
|
||||||
|
|
||||||
def paginate(render_page, page_count, page=0):
|
|
||||||
while True:
|
|
||||||
changer = change_page(page, page_count)
|
|
||||||
renderer = render_page(page, page_count)
|
|
||||||
waiter = loop.Wait([changer, renderer])
|
|
||||||
result = yield waiter
|
|
||||||
if changer in waiter.finished:
|
|
||||||
page = result
|
|
||||||
else:
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
def render_scrollbar(page, page_count):
|
|
||||||
screen_height = const(220)
|
|
||||||
size = const(8)
|
|
||||||
|
|
||||||
padding = 15
|
|
||||||
if page_count * padding > screen_height:
|
|
||||||
padding = screen_height // page_count
|
|
||||||
|
|
||||||
x = 225
|
|
||||||
y = (screen_height // 2) - (page_count // 2) * padding
|
|
||||||
|
|
||||||
for i in range(0, page_count):
|
|
||||||
if i != page:
|
|
||||||
ui.display.bar(x, y + i * padding, size, size, ui.GREY, ui.BLACK, 4)
|
|
||||||
ui.display.bar(x, y + page * padding, size, size, ui.WHITE, ui.BLACK, 4)
|
|
||||||
|
|
||||||
|
|
||||||
def animate_swipe():
|
|
||||||
def render(fg):
|
|
||||||
ui.display.bar(102, 214, 36, 4, fg, ui.BLACK, 2)
|
|
||||||
ui.display.bar(106, 222, 28, 4, fg, ui.BLACK, 2)
|
|
||||||
ui.display.bar(110, 230, 20, 4, fg, ui.BLACK, 2)
|
|
||||||
yield from ui.animate_pulse(render, ui.WHITE, ui.GREY, speed=300000, delay=200000)
|
|
||||||
|
|
||||||
|
|
||||||
def show_mnemonic(mnemonic):
|
def show_mnemonic(mnemonic):
|
||||||
words_per_page = const(4)
|
words_per_page = const(4)
|
||||||
mnemonic_words = list(enumerate(mnemonic.split()))
|
mnemonic_words = list(enumerate(mnemonic.split()))
|
||||||
@ -100,15 +54,14 @@ def show_mnemonic(mnemonic):
|
|||||||
ui.display.text_right(40, top, '%d.' % pos, ui.BOLD, ui.LIGHT_GREEN, ui.BLACK)
|
ui.display.text_right(40, top, '%d.' % pos, ui.BOLD, ui.LIGHT_GREEN, ui.BLACK)
|
||||||
ui.display.text(45, top, '%s' % word, ui.BOLD, ui.WHITE, ui.BLACK)
|
ui.display.text(45, top, '%s' % word, ui.BOLD, ui.WHITE, ui.BLACK)
|
||||||
|
|
||||||
# Finish button
|
|
||||||
if page + 1 == page_count:
|
if page + 1 == page_count:
|
||||||
|
# Finish button
|
||||||
finish = Button((0, 240 - 48, 240, 48), 'Finish',
|
finish = Button((0, 240 - 48, 240, 48), 'Finish',
|
||||||
normal_style=CONFIRM_BUTTON,
|
normal_style=CONFIRM_BUTTON,
|
||||||
active_style=CONFIRM_BUTTON_ACTIVE)
|
active_style=CONFIRM_BUTTON_ACTIVE)
|
||||||
yield from finish.wait()
|
yield from finish.wait()
|
||||||
|
|
||||||
# Swipe icon
|
|
||||||
else:
|
else:
|
||||||
|
# Swipe icon
|
||||||
yield from animate_swipe()
|
yield from animate_swipe()
|
||||||
|
|
||||||
yield from paginate(render, len(mnemonic_pages))
|
yield from paginate(render, len(mnemonic_pages))
|
||||||
|
@ -1,32 +1,49 @@
|
|||||||
from . import display
|
from .swipe import Swipe, SWIPE_UP, SWIPE_DOWN
|
||||||
from trezor import ui, loop, res
|
from trezor import loop, ui
|
||||||
|
|
||||||
|
|
||||||
class Scroll():
|
def change_page(page, page_count):
|
||||||
|
while True:
|
||||||
|
s = yield from Swipe()
|
||||||
|
if s == SWIPE_UP and page < page_count - 1:
|
||||||
|
return page + 1 # Scroll down
|
||||||
|
elif s == SWIPE_DOWN and page > 0:
|
||||||
|
return page - 1 # Scroll up
|
||||||
|
|
||||||
def __init__(self, page=0, totale_lines=0, lines_per_page=4):
|
|
||||||
self.page = page
|
|
||||||
self.totale_lines = totale_lines
|
|
||||||
self.lines_per_page = lines_per_page
|
|
||||||
|
|
||||||
def render(self):
|
def paginate(render_page, page_count, page=0):
|
||||||
count = self.totale_lines // self.lines_per_page
|
while True:
|
||||||
padding = 20
|
changer = change_page(page, page_count)
|
||||||
screen_height = const(220)
|
renderer = render_page(page, page_count)
|
||||||
cursor = 8
|
waiter = loop.Wait([changer, renderer])
|
||||||
|
result = yield waiter
|
||||||
if count * padding > screen_height:
|
if changer in waiter.finished:
|
||||||
padding = screen_height // count
|
page = result
|
||||||
|
else:
|
||||||
|
return result
|
||||||
|
|
||||||
x = 230
|
|
||||||
y = ((screen_height // 2)) - ((count // 2) * padding)
|
|
||||||
|
|
||||||
for i in range(0, count):
|
def render_scrollbar(page, page_count):
|
||||||
if (i != self.page):
|
screen_height = const(220)
|
||||||
ui.display.bar(x, y + i * padding, cursor, cursor, ui.GREY, ui.BLACK, 4)
|
size = const(8)
|
||||||
ui.display.bar(x, y + self.page * padding, cursor, cursor, ui.WHITE, ui.BLACK, 4)
|
|
||||||
|
|
||||||
def wait(self):
|
padding = 15
|
||||||
while True:
|
if page_count * padding > screen_height:
|
||||||
self.render()
|
padding = screen_height // page_count
|
||||||
|
|
||||||
|
x = 225
|
||||||
|
y = (screen_height // 2) - (page_count // 2) * padding
|
||||||
|
|
||||||
|
for i in range(0, page_count):
|
||||||
|
if i != page:
|
||||||
|
ui.display.bar(x, y + i * padding, size,
|
||||||
|
size, ui.GREY, ui.BLACK, 4)
|
||||||
|
ui.display.bar(x, y + page * padding, size, size, ui.WHITE, ui.BLACK, 4)
|
||||||
|
|
||||||
|
|
||||||
|
def animate_swipe():
|
||||||
|
def render(fg):
|
||||||
|
ui.display.bar(102, 214, 36, 4, fg, ui.BLACK, 2)
|
||||||
|
ui.display.bar(106, 222, 28, 4, fg, ui.BLACK, 2)
|
||||||
|
ui.display.bar(110, 230, 20, 4, fg, ui.BLACK, 2)
|
||||||
|
yield from ui.animate_pulse(render, ui.WHITE, ui.GREY, speed=300000, delay=200000)
|
||||||
|
Loading…
Reference in New Issue
Block a user