-
Notifications
You must be signed in to change notification settings - Fork 0
/
scroll.py
63 lines (51 loc) · 1.98 KB
/
scroll.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
from pygame import mouse, Rect
from pygame.locals import *
from scrollbutton import ScrollButton
class Scroll(object):
glyphs = (u'\u25b3',u'\u25b2'), (u'\u25bd',u'\u25bc')
def __init__(self, font, prefs, moved):
self._prefs = prefs
self._offset = 0
self._buttons = [ScrollButton(self.glyphs[i],
font,
self._prefs,
(self.up, self.down)[i])
for i in range(2)]
self._rects = [None for b in self._buttons]
self._moved = moved
self.scale(font)
def scale(self, font):
self._font = font
for b in self._buttons:
b.scale(self._font)
@property
def _increment(self):
return self._buttons[0].height
def up(self):
self._offset = max(0, self._offset - self._increment)
self._moved()
def down(self):
self._offset = min(self._limit, self._offset + self._increment)
self._moved()
def poll(self):
p = mouse.get_pos()
changed = False
for i in range(len(self._buttons)):
if self._rects[i]:
if self._buttons[i].poll((p[0]-self._rects[i].left,
p[1]-self._rects[i].top)):
changed = True
return changed
def draw(self, surface, content):
surface.fill((0,0,0))
surface.blit(content, (0, -self._offset))
if content.get_height() > surface.get_height():
for i in range(2):
sb = self._buttons[i].draw()
w = surface.get_width() - sb.get_width()
h = surface.get_height() - sb.get_height() if i else 0
self._rects[i] = Rect((w, h), sb.get_size())
surface.blit(sb, (w,h))
self._limit = content.get_height() - surface.get_height()
else:
self._limit = 0