Mercurial > boomslang
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 |