annotate gamelib/cursor.py @ 115:5e704ee7b84b

Remove "in-widget" check and always draw cursor.
author Jeremy Thurgood <firxen@gmail.com>
date Tue, 24 Aug 2010 14:53:05 +0200
parents 13d8cb1d5962
children 97322b78d1c1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
66
05346a412b55 A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
1 # cursor.py
05346a412b55 A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
2 # Copyright Boomslang team, 2010 (see COPYING File)
05346a412b55 A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
3 # Sprite Cursor
05346a412b55 A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
4
70
213e47dea4d0 Funkier cursor handling
Neil Muller <neil@dip.sun.ac.za>
parents: 66
diff changeset
5 from albow.widget import Widget
66
05346a412b55 A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
6 from albow.resource import get_image
05346a412b55 A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
7 import pygame.mouse as mouse
05346a412b55 A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
8 from pygame.sprite import Sprite, RenderUpdates
70
213e47dea4d0 Funkier cursor handling
Neil Muller <neil@dip.sun.ac.za>
parents: 66
diff changeset
9 import pygame.cursors
213e47dea4d0 Funkier cursor handling
Neil Muller <neil@dip.sun.ac.za>
parents: 66
diff changeset
10 import pygame.mouse
213e47dea4d0 Funkier cursor handling
Neil Muller <neil@dip.sun.ac.za>
parents: 66
diff changeset
11
66
05346a412b55 A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
12 class CursorSprite(Sprite):
05346a412b55 A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
13 "A Sprite that follows the Cursor"
05346a412b55 A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
14
05346a412b55 A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
15 def __init__(self, filename):
05346a412b55 A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
16 Sprite.__init__(self)
05346a412b55 A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
17 self.image = get_image('items', filename + '.png')
05346a412b55 A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
18 self.rect = self.image.get_rect()
05346a412b55 A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
19
05346a412b55 A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
20 def update(self):
05346a412b55 A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
21 self.rect.midtop = mouse.get_pos()
05346a412b55 A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
22
70
213e47dea4d0 Funkier cursor handling
Neil Muller <neil@dip.sun.ac.za>
parents: 66
diff changeset
23 class CursorWidget(Widget):
213e47dea4d0 Funkier cursor handling
Neil Muller <neil@dip.sun.ac.za>
parents: 66
diff changeset
24 """Mix-in widget to ensure that mouse_move is propogated to parents"""
213e47dea4d0 Funkier cursor handling
Neil Muller <neil@dip.sun.ac.za>
parents: 66
diff changeset
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
05346a412b55 A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
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
05346a412b55 A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
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
05346a412b55 A sprite cursor attempt
Stefano Rivera <stefano@rivera.za.net>
parents:
diff changeset
48 self.invalidate()
70
213e47dea4d0 Funkier cursor handling
Neil Muller <neil@dip.sun.ac.za>
parents: 66
diff changeset
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'