Mercurial > boomslang
annotate gamelib/cursor.py @ 119:d5f7cccfdb6c
Hook up "detail view" scenes.
author | Jeremy Thurgood <firxen@gmail.com> |
---|---|
date | Tue, 24 Aug 2010 17:04:56 +0200 |
parents | 5e704ee7b84b |
children | 97322b78d1c1 |
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 | |
66 | 12 class CursorSprite(Sprite): |
13 "A Sprite that follows the Cursor" | |
14 | |
15 def __init__(self, filename): | |
16 Sprite.__init__(self) | |
17 self.image = get_image('items', filename + '.png') | |
18 self.rect = self.image.get_rect() | |
19 | |
20 def update(self): | |
21 self.rect.midtop = mouse.get_pos() | |
22 | |
70 | 23 class CursorWidget(Widget): |
24 """Mix-in widget to ensure that mouse_move is propogated to parents""" | |
25 | |
84
c76f2fad2af5
Draw CursorWidget on top of StateWidget
Stefano Rivera <stefano@rivera.za.net>
parents:
70
diff
changeset
|
26 def __init__(self, *args, **kwargs): |
c76f2fad2af5
Draw CursorWidget on top of StateWidget
Stefano Rivera <stefano@rivera.za.net>
parents:
70
diff
changeset
|
27 Widget.__init__(self, *args, **kwargs) |
c76f2fad2af5
Draw CursorWidget on top of StateWidget
Stefano Rivera <stefano@rivera.za.net>
parents:
70
diff
changeset
|
28 self._cursor_group = RenderUpdates() |
c76f2fad2af5
Draw CursorWidget on top of StateWidget
Stefano Rivera <stefano@rivera.za.net>
parents:
70
diff
changeset
|
29 self._cursor_name = '' |
66 | 30 |
114
13d8cb1d5962
Better cursor handling using draw_all() and mouse_delta().
Jeremy Thurgood <firxen@gmail.com>
parents:
108
diff
changeset
|
31 def draw_all(self, _surface): |
13d8cb1d5962
Better cursor handling using draw_all() and mouse_delta().
Jeremy Thurgood <firxen@gmail.com>
parents:
108
diff
changeset
|
32 Widget.draw_all(self, _surface) |
106
da547e148532
Some (slightly) better cursor handling.
Jeremy Thurgood <firxen@gmail.com>
parents:
84
diff
changeset
|
33 surface = self.get_root().surface |
115
5e704ee7b84b
Remove "in-widget" check and always draw cursor.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
34 cursor = self.get_sprite_cursor() |
5e704ee7b84b
Remove "in-widget" check and always draw cursor.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
35 if cursor != self._cursor_name: |
5e704ee7b84b
Remove "in-widget" check and always draw cursor.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
36 if self.get_sprite_cursor() is None: |
5e704ee7b84b
Remove "in-widget" check and always draw cursor.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
37 pygame.mouse.set_visible(1) |
5e704ee7b84b
Remove "in-widget" check and always draw cursor.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
38 self._cursor_group.empty() |
5e704ee7b84b
Remove "in-widget" check and always draw cursor.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
39 else: |
5e704ee7b84b
Remove "in-widget" check and always draw cursor.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
40 pygame.mouse.set_visible(0) |
5e704ee7b84b
Remove "in-widget" check and always draw cursor.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
41 self._cursor_group.empty() |
5e704ee7b84b
Remove "in-widget" check and always draw cursor.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
42 self._cursor_group.add(CursorSprite(cursor)) |
5e704ee7b84b
Remove "in-widget" check and always draw cursor.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
43 if cursor is not None: |
5e704ee7b84b
Remove "in-widget" check and always draw cursor.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
44 self._cursor_group.update() |
5e704ee7b84b
Remove "in-widget" check and always draw cursor.
Jeremy Thurgood <firxen@gmail.com>
parents:
114
diff
changeset
|
45 self._cursor_group.draw(surface) |
66 | 46 |
114
13d8cb1d5962
Better cursor handling using draw_all() and mouse_delta().
Jeremy Thurgood <firxen@gmail.com>
parents:
108
diff
changeset
|
47 def mouse_delta(self, event): |
66 | 48 self.invalidate() |
70 | 49 |
84
c76f2fad2af5
Draw CursorWidget on top of StateWidget
Stefano Rivera <stefano@rivera.za.net>
parents:
70
diff
changeset
|
50 def get_sprite_cursor(self): |
c76f2fad2af5
Draw CursorWidget on top of StateWidget
Stefano Rivera <stefano@rivera.za.net>
parents:
70
diff
changeset
|
51 return 'hand' |