comparison gamelib/cursor.py @ 135:b43599b7f8a2

Cursor highlights
author Stefano Rivera <stefano@rivera.za.net>
date Tue, 24 Aug 2010 20:33:20 +0200
parents 4223d66d88b4
children a5972444ad1e
comparison
equal deleted inserted replaced
134:faac82748f5a 135:b43599b7f8a2
1 # cursor.py 1 # cursor.py
2 # Copyright Boomslang team, 2010 (see COPYING File) 2 # Copyright Boomslang team, 2010 (see COPYING File)
3 # Sprite Cursor 3 # Sprite Cursor
4 4
5 from albow.resource import get_image
5 from albow.widget import Widget 6 from albow.widget import Widget
6 from albow.resource import get_image
7 import pygame.mouse as mouse
8 from pygame.sprite import Sprite, RenderUpdates 7 from pygame.sprite import Sprite, RenderUpdates
8 import pygame
9 import pygame.color
9 import pygame.cursors 10 import pygame.cursors
10 import pygame.mouse 11 import pygame.mouse
11
12 HAND = ('hand.png', 12, 0)
13 12
14 class CursorSprite(Sprite): 13 class CursorSprite(Sprite):
15 "A Sprite that follows the Cursor" 14 "A Sprite that follows the Cursor"
16 15
17 def __init__(self, filename, x, y): 16 def __init__(self, filename, x, y):
18 Sprite.__init__(self) 17 Sprite.__init__(self)
19 self.image = get_image('items', filename) 18 self.filename = filename
20 self.rect = self.image.get_rect()
21 self.pointer_x = x 19 self.pointer_x = x
22 self.pointer_y = y 20 self.pointer_y = y
23 21
22 def load(self):
23 if not hasattr(self, 'plain_image'):
24 self.plain_image = get_image('items', self.filename)
25 self.image = self.plain_image
26 self.rect = self.image.get_rect()
27 self.highlight = pygame.Surface(self.rect.size)
28 color = pygame.color.Color(255, 100, 100, 0)
29 self.highlight.fill(color)
30
24 def update(self): 31 def update(self):
25 pos = mouse.get_pos() 32 pos = pygame.mouse.get_pos()
26 self.rect.left = pos[0] - self.pointer_x 33 self.rect.left = pos[0] - self.pointer_x
27 self.rect.top = pos[1] - self.pointer_y 34 self.rect.top = pos[1] - self.pointer_y
35
36 def set_highlight(self, enable):
37 self.image = self.plain_image.copy()
38 if enable:
39 self.image.blit(self.highlight, self.highlight.get_rect(), None, pygame.BLEND_MULT)
40
41
42 HAND = CursorSprite('hand.png', 12, 0)
28 43
29 44
30 class CursorWidget(Widget): 45 class CursorWidget(Widget):
31 """Mix-in widget to ensure that mouse_move is propogated to parents""" 46 """Mix-in widget to ensure that mouse_move is propogated to parents"""
32 47
39 54
40 def draw_all(self, _surface): 55 def draw_all(self, _surface):
41 Widget.draw_all(self, _surface) 56 Widget.draw_all(self, _surface)
42 surface = self.get_root().surface 57 surface = self.get_root().surface
43 if self.cursor != self._loaded_cursor: 58 if self.cursor != self._loaded_cursor:
59 self._loaded_cursor = self.cursor
44 if self.cursor is None: 60 if self.cursor is None:
45 pygame.mouse.set_visible(1) 61 pygame.mouse.set_visible(1)
46 self._cursor_group.empty() 62 self._cursor_group.empty()
47 else: 63 else:
48 pygame.mouse.set_visible(0) 64 pygame.mouse.set_visible(0)
65 self.cursor.load()
49 self._cursor_group.empty() 66 self._cursor_group.empty()
50 self._cursor_group.add(CursorSprite(*self.cursor)) 67 self._cursor_group.add(self.cursor)
51 if self.cursor is not None: 68 if self.cursor is not None:
52 self._cursor_group.update() 69 self._cursor_group.update()
53 self._cursor_group.draw(surface) 70 self._cursor_group.draw(surface)
54 71
55 def mouse_delta(self, event): 72 def mouse_delta(self, event):
56 self.invalidate() 73 self.invalidate()
57 74
58 def set_cursor(self, cursor): 75 def set_cursor(self, cursor):
59 CursorWidget.cursor = cursor 76 CursorWidget.cursor = cursor
77
78 def cursor_highlight(self, enable):
79 self.cursor.set_highlight(enable)