Mercurial > boomslang
annotate 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 |
rev | line source |
---|---|
66 | 1 # cursor.py |
2 # Copyright Boomslang team, 2010 (see COPYING File) | |
3 # Sprite Cursor | |
4 | |
70 | 5 from albow.widget import Widget |
66 | 6 from albow.resource import get_image |
7 import pygame.mouse as mouse | |
8 from pygame.sprite import Sprite, RenderUpdates | |
70 | 9 import pygame.cursors |
10 import pygame.mouse | |
11 | |
129
4223d66d88b4
Cursor change when you select a Tool
Stefano Rivera <stefano@rivera.za.net>
parents:
124
diff
changeset
|
12 HAND = ('hand.png', 12, 0) |
124 | 13 |
66 | 14 class CursorSprite(Sprite): |
15 "A Sprite that follows the Cursor" | |
16 | |
129
4223d66d88b4
Cursor change when you select a Tool
Stefano Rivera <stefano@rivera.za.net>
parents:
124
diff
changeset
|
17 def __init__(self, filename, x, y): |
66 | 18 Sprite.__init__(self) |
129
4223d66d88b4
Cursor change when you select a Tool
Stefano Rivera <stefano@rivera.za.net>
parents:
124
diff
changeset
|
19 self.image = get_image('items', filename) |
66 | 20 self.rect = self.image.get_rect() |
129
4223d66d88b4
Cursor change when you select a Tool
Stefano Rivera <stefano@rivera.za.net>
parents:
124
diff
changeset
|
21 self.pointer_x = x |
4223d66d88b4
Cursor change when you select a Tool
Stefano Rivera <stefano@rivera.za.net>
parents:
124
diff
changeset
|
22 self.pointer_y = y |
66 | 23 |
24 def update(self): | |
129
4223d66d88b4
Cursor change when you select a Tool
Stefano Rivera <stefano@rivera.za.net>
parents:
124
diff
changeset
|
25 pos = mouse.get_pos() |
4223d66d88b4
Cursor change when you select a Tool
Stefano Rivera <stefano@rivera.za.net>
parents:
124
diff
changeset
|
26 self.rect.left = pos[0] - self.pointer_x |
4223d66d88b4
Cursor change when you select a Tool
Stefano Rivera <stefano@rivera.za.net>
parents:
124
diff
changeset
|
27 self.rect.top = pos[1] - self.pointer_y |
66 | 28 |
124 | 29 |
70 | 30 class CursorWidget(Widget): |
31 """Mix-in widget to ensure that mouse_move is propogated to parents""" | |
32 | |
129
4223d66d88b4
Cursor change when you select a Tool
Stefano Rivera <stefano@rivera.za.net>
parents:
124
diff
changeset
|
33 cursor = HAND |
4223d66d88b4
Cursor change when you select a Tool
Stefano Rivera <stefano@rivera.za.net>
parents:
124
diff
changeset
|
34 |
84
c76f2fad2af5
Draw CursorWidget on top of StateWidget
Stefano Rivera <stefano@rivera.za.net>
parents:
70
diff
changeset
|
35 def __init__(self, *args, **kwargs): |
c76f2fad2af5
Draw CursorWidget on top of StateWidget
Stefano Rivera <stefano@rivera.za.net>
parents:
70
diff
changeset
|
36 Widget.__init__(self, *args, **kwargs) |
c76f2fad2af5
Draw CursorWidget on top of StateWidget
Stefano Rivera <stefano@rivera.za.net>
parents:
70
diff
changeset
|
37 self._cursor_group = RenderUpdates() |
129
4223d66d88b4
Cursor change when you select a Tool
Stefano Rivera <stefano@rivera.za.net>
parents:
124
diff
changeset
|
38 self._loaded_cursor = None |
66 | 39 |
114
13d8cb1d5962
Better cursor handling using draw_all() and mouse_delta().
Jeremy Thurgood <firxen@gmail.com>
parents:
108
diff
changeset
|
40 def draw_all(self, _surface): |
13d8cb1d5962
Better cursor handling using draw_all() and mouse_delta().
Jeremy Thurgood <firxen@gmail.com>
parents:
108
diff
changeset
|
41 Widget.draw_all(self, _surface) |
106
da547e148532
Some (slightly) better cursor handling.
Jeremy Thurgood <firxen@gmail.com>
parents:
84
diff
changeset
|
42 surface = self.get_root().surface |
129
4223d66d88b4
Cursor change when you select a Tool
Stefano Rivera <stefano@rivera.za.net>
parents:
124
diff
changeset
|
43 if self.cursor != self._loaded_cursor: |
4223d66d88b4
Cursor change when you select a Tool
Stefano Rivera <stefano@rivera.za.net>
parents:
124
diff
changeset
|
44 if self.cursor is None: |
115
5e704ee7b84b
Remove "in-widget" check and always draw cursor.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
45 pygame.mouse.set_visible(1) |
5e704ee7b84b
Remove "in-widget" check and always draw cursor.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
46 self._cursor_group.empty() |
5e704ee7b84b
Remove "in-widget" check and always draw cursor.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
47 else: |
5e704ee7b84b
Remove "in-widget" check and always draw cursor.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
48 pygame.mouse.set_visible(0) |
5e704ee7b84b
Remove "in-widget" check and always draw cursor.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
49 self._cursor_group.empty() |
129
4223d66d88b4
Cursor change when you select a Tool
Stefano Rivera <stefano@rivera.za.net>
parents:
124
diff
changeset
|
50 self._cursor_group.add(CursorSprite(*self.cursor)) |
4223d66d88b4
Cursor change when you select a Tool
Stefano Rivera <stefano@rivera.za.net>
parents:
124
diff
changeset
|
51 if self.cursor is not None: |
115
5e704ee7b84b
Remove "in-widget" check and always draw cursor.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
52 self._cursor_group.update() |
5e704ee7b84b
Remove "in-widget" check and always draw cursor.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
53 self._cursor_group.draw(surface) |
66 | 54 |
114
13d8cb1d5962
Better cursor handling using draw_all() and mouse_delta().
Jeremy Thurgood <firxen@gmail.com>
parents:
108
diff
changeset
|
55 def mouse_delta(self, event): |
66 | 56 self.invalidate() |
70 | 57 |
129
4223d66d88b4
Cursor change when you select a Tool
Stefano Rivera <stefano@rivera.za.net>
parents:
124
diff
changeset
|
58 def set_cursor(self, cursor): |
4223d66d88b4
Cursor change when you select a Tool
Stefano Rivera <stefano@rivera.za.net>
parents:
124
diff
changeset
|
59 CursorWidget.cursor = cursor |