bumblebee-status/core/decorators.py

37 lines
1.3 KiB
Python
Raw Normal View History

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
2020-02-23 14:52:58 +01:00
bounce = util.format.asbool(module.parameter('scrolling.bounce', True))
scroll_speed = util.format.asint(module.parameter('scrolling.speed', 1))
2020-02-27 21:39:04 +01:00
start = widget.get('scrolling.start', 0)
2020-02-27 21:39:04 +01:00
if start + width > len(text):
if bounce:
widget.set('scrolling.direction', 'left')
2020-02-27 21:39:04 +01:00
start -= scroll_speed*2
else:
start = 0
2020-02-27 21:39:04 +01:00
elif start < 0:
if bounce:
widget.set('scrolling.direction', 'right')
2020-02-27 21:39:04 +01:00
direction = widget.get('scrolling.direction', 'right')
if direction == 'left':
scroll_speed = -scroll_speed
widget.set('scrolling.start', start + scroll_speed)
text = text[start:width+start]
return text
return wrapper
# vim: tabstop=8 expandtab shiftwidth=4 softtabstop=4