comparison gamelib/cursor.py @ 129:4223d66d88b4

Cursor change when you select a Tool
author Stefano Rivera <stefano@rivera.za.net>
date Tue, 24 Aug 2010 18:36:31 +0200
parents 97322b78d1c1
children b43599b7f8a2
comparison
equal deleted inserted replaced
128:a2f6e975af67 129:4223d66d88b4
7 import pygame.mouse as mouse 7 import pygame.mouse as mouse
8 from pygame.sprite import Sprite, RenderUpdates 8 from pygame.sprite import Sprite, RenderUpdates
9 import pygame.cursors 9 import pygame.cursors
10 import pygame.mouse 10 import pygame.mouse
11 11
12 HAND = ('hand.png', 12, 0)
12 13
13 class CursorSprite(Sprite): 14 class CursorSprite(Sprite):
14 "A Sprite that follows the Cursor" 15 "A Sprite that follows the Cursor"
15 16
16 def __init__(self, filename): 17 def __init__(self, filename, x, y):
17 Sprite.__init__(self) 18 Sprite.__init__(self)
18 self.image = get_image('items', filename + '.png') 19 self.image = get_image('items', filename)
19 self.rect = self.image.get_rect() 20 self.rect = self.image.get_rect()
21 self.pointer_x = x
22 self.pointer_y = y
20 23
21 def update(self): 24 def update(self):
22 self.rect.midtop = mouse.get_pos() 25 pos = mouse.get_pos()
26 self.rect.left = pos[0] - self.pointer_x
27 self.rect.top = pos[1] - self.pointer_y
23 28
24 29
25 class CursorWidget(Widget): 30 class CursorWidget(Widget):
26 """Mix-in widget to ensure that mouse_move is propogated to parents""" 31 """Mix-in widget to ensure that mouse_move is propogated to parents"""
27 32
33 cursor = HAND
34
28 def __init__(self, *args, **kwargs): 35 def __init__(self, *args, **kwargs):
29 Widget.__init__(self, *args, **kwargs) 36 Widget.__init__(self, *args, **kwargs)
30 self._cursor_group = RenderUpdates() 37 self._cursor_group = RenderUpdates()
31 self._cursor_name = '' 38 self._loaded_cursor = None
32 39
33 def draw_all(self, _surface): 40 def draw_all(self, _surface):
34 Widget.draw_all(self, _surface) 41 Widget.draw_all(self, _surface)
35 surface = self.get_root().surface 42 surface = self.get_root().surface
36 cursor = self.get_sprite_cursor() 43 if self.cursor != self._loaded_cursor:
37 if cursor != self._cursor_name: 44 if self.cursor is None:
38 if self.get_sprite_cursor() is None:
39 pygame.mouse.set_visible(1) 45 pygame.mouse.set_visible(1)
40 self._cursor_group.empty() 46 self._cursor_group.empty()
41 else: 47 else:
42 pygame.mouse.set_visible(0) 48 pygame.mouse.set_visible(0)
43 self._cursor_group.empty() 49 self._cursor_group.empty()
44 self._cursor_group.add(CursorSprite(cursor)) 50 self._cursor_group.add(CursorSprite(*self.cursor))
45 if cursor is not None: 51 if self.cursor is not None:
46 self._cursor_group.update() 52 self._cursor_group.update()
47 self._cursor_group.draw(surface) 53 self._cursor_group.draw(surface)
48 54
49 def mouse_delta(self, event): 55 def mouse_delta(self, event):
50 self.invalidate() 56 self.invalidate()
51 57
52 def get_sprite_cursor(self): 58 def set_cursor(self, cursor):
53 return 'hand' 59 CursorWidget.cursor = cursor