[core] Add decorators library
For now, simply add a decorator that allows for scrolling of text
This commit is contained in:
parent
a2446a36af
commit
a69e058dd1
1 changed files with 36 additions and 0 deletions
36
core/decorators.py
Normal file
36
core/decorators.py
Normal file
|
@ -0,0 +1,36 @@
|
|||
import util.format
|
||||
|
||||
def scrollable(func):
|
||||
def wrapper(module, widget):
|
||||
text = func(module, widget)
|
||||
if not text:
|
||||
return text
|
||||
width = widget.get('theme.width', util.format.asint(module.parameter('width', 30)))
|
||||
if util.format.asbool(module.parameter('scrolling.makewide', True)):
|
||||
widget.set('theme.minwidth', 'A'*width)
|
||||
if width < 0 or len(text) <= width:
|
||||
return text
|
||||
|
||||
bounce = util.format.asint(module.parameter('scrolling.bounce', 1))
|
||||
scroll_speed = util.format.asint(module.parameter('scrolling.speed', 1))
|
||||
start = widget.get('scrolling.start', -1)
|
||||
direction = widget.get('scrolling.direction', 'right')
|
||||
start += scroll_speed if direction == 'right' else -(scroll_speed)
|
||||
|
||||
if width + start > len(text) + (scroll_speed -1):
|
||||
if bounce:
|
||||
widget.set('scrolling.direction', 'left')
|
||||
else:
|
||||
start = 0
|
||||
elif start <= 0:
|
||||
if bounce:
|
||||
widget.set('scrolling.direction', 'right')
|
||||
else:
|
||||
start = len(text)
|
||||
widget.set('scrolling.start', start)
|
||||
text = text[start:width+start]
|
||||
|
||||
return text
|
||||
return wrapper
|
||||
|
||||
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4
|
Loading…
Reference in a new issue