Mercurial > boomslang
annotate pyntnclick/cursor.py @ 814:0430f7a8a86c pyntnclick
Stop the infinite stack of manuals
author | Neil Muller <neil@dip.sun.ac.za> |
---|---|
date | Sun, 27 Jan 2013 18:58:07 +0200 |
parents | bd8227068d86 |
children | 98d1fff734e6 |
rev | line source |
---|---|
66 | 1 # cursor.py |
2 # Copyright Boomslang team, 2010 (see COPYING File) | |
3 # Sprite Cursor | |
4 | |
5 from pygame.sprite import Sprite, RenderUpdates | |
135 | 6 import pygame |
7 import pygame.color | |
70 | 8 import pygame.cursors |
9 import pygame.mouse | |
10 | |
658
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
11 from pyntnclick.engine import Screen |
755
64fe88a322d3
Re-implement cursor highlighting using a Colour transformation
Stefano Rivera <stefano@rivera.za.net>
parents:
693
diff
changeset
|
12 from pyntnclick.image_transforms import Colour |
636
2748d3afcae5
Excise albow. Really.
Stefano Rivera <stefano@rivera.za.net>
parents:
603
diff
changeset
|
13 |
401
92029c76b687
Different toolbar colour and remove highlighted cursor outside scene widget.
Jeremy Thurgood <firxen@gmail.com>
parents:
324
diff
changeset
|
14 |
66 | 15 class CursorSprite(Sprite): |
16 "A Sprite that follows the Cursor" | |
17 | |
302
6d93e04036c9
CursorSprite: Default pointer-position to the centre of the cursor
Stefano Rivera <stefano@rivera.za.net>
parents:
187
diff
changeset
|
18 def __init__(self, filename, x=None, y=None): |
66 | 19 Sprite.__init__(self) |
135 | 20 self.filename = filename |
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 |
172
3b5cfb3f794e
Ensure cursor loaded when calling set_highlight
Stefano Rivera <stefano@rivera.za.net>
parents:
171
diff
changeset
|
23 self.highlighted = False |
756
bd8227068d86
A little more refactoring around Cursor highlights
Stefano Rivera <stefano@rivera.za.net>
parents:
755
diff
changeset
|
24 self.highlight_colour = (255, 100, 100, 255) |
66 | 25 |
660
dbec226debe3
We don't need no resources hacks
Stefano Rivera <stefano@rivera.za.net>
parents:
658
diff
changeset
|
26 def load(self, resources): |
135 | 27 if not hasattr(self, 'plain_image'): |
756
bd8227068d86
A little more refactoring around Cursor highlights
Stefano Rivera <stefano@rivera.za.net>
parents:
755
diff
changeset
|
28 self.highlight_transform = Colour(self.highlight_colour) |
660
dbec226debe3
We don't need no resources hacks
Stefano Rivera <stefano@rivera.za.net>
parents:
658
diff
changeset
|
29 self.plain_image = resources.get_image('items', self.filename) |
756
bd8227068d86
A little more refactoring around Cursor highlights
Stefano Rivera <stefano@rivera.za.net>
parents:
755
diff
changeset
|
30 self.highlighted_image = resources.get_image('items', |
bd8227068d86
A little more refactoring around Cursor highlights
Stefano Rivera <stefano@rivera.za.net>
parents:
755
diff
changeset
|
31 self.filename, transforms=(self.highlight_transform,)) |
bd8227068d86
A little more refactoring around Cursor highlights
Stefano Rivera <stefano@rivera.za.net>
parents:
755
diff
changeset
|
32 self.image = self.plain_image |
bd8227068d86
A little more refactoring around Cursor highlights
Stefano Rivera <stefano@rivera.za.net>
parents:
755
diff
changeset
|
33 self.rect = self.image.get_rect() |
302
6d93e04036c9
CursorSprite: Default pointer-position to the centre of the cursor
Stefano Rivera <stefano@rivera.za.net>
parents:
187
diff
changeset
|
34 if self.pointer_x is None: |
6d93e04036c9
CursorSprite: Default pointer-position to the centre of the cursor
Stefano Rivera <stefano@rivera.za.net>
parents:
187
diff
changeset
|
35 self.pointer_x = self.rect.size[0] // 2 |
6d93e04036c9
CursorSprite: Default pointer-position to the centre of the cursor
Stefano Rivera <stefano@rivera.za.net>
parents:
187
diff
changeset
|
36 if self.pointer_y is None: |
6d93e04036c9
CursorSprite: Default pointer-position to the centre of the cursor
Stefano Rivera <stefano@rivera.za.net>
parents:
187
diff
changeset
|
37 self.pointer_y = self.rect.size[1] // 2 |
6d93e04036c9
CursorSprite: Default pointer-position to the centre of the cursor
Stefano Rivera <stefano@rivera.za.net>
parents:
187
diff
changeset
|
38 |
66 | 39 def update(self): |
135 | 40 pos = pygame.mouse.get_pos() |
129
4223d66d88b4
Cursor change when you select a Tool
Stefano Rivera <stefano@rivera.za.net>
parents:
124
diff
changeset
|
41 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
|
42 self.rect.top = pos[1] - self.pointer_y |
66 | 43 |
135 | 44 def set_highlight(self, enable): |
755
64fe88a322d3
Re-implement cursor highlighting using a Colour transformation
Stefano Rivera <stefano@rivera.za.net>
parents:
693
diff
changeset
|
45 self.image = self.highlighted_image if enable else self.plain_image |
135 | 46 |
47 | |
48 HAND = CursorSprite('hand.png', 12, 0) | |
49 | |
124 | 50 |
658
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
51 class CursorScreen(Screen): |
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
52 """A Screen with custom cursors""" |
70 | 53 |
658
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
54 def setup(self): |
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
55 self._cursor_group = RenderUpdates() |
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
56 self._loaded_cursor = None |
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
57 self.set_cursor(None) |
129
4223d66d88b4
Cursor change when you select a Tool
Stefano Rivera <stefano@rivera.za.net>
parents:
124
diff
changeset
|
58 |
658
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
59 def on_enter(self): |
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
60 super(CursorScreen, self).on_enter() |
139
a5972444ad1e
Improve cursor state handling, disable highlights on modal dialogs
Stefano Rivera <stefano@rivera.za.net>
parents:
135
diff
changeset
|
61 pygame.mouse.set_visible(0) |
a5972444ad1e
Improve cursor state handling, disable highlights on modal dialogs
Stefano Rivera <stefano@rivera.za.net>
parents:
135
diff
changeset
|
62 |
658
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
63 def on_exit(self): |
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
64 super(CursorScreen, self).on_exit() |
139
a5972444ad1e
Improve cursor state handling, disable highlights on modal dialogs
Stefano Rivera <stefano@rivera.za.net>
parents:
135
diff
changeset
|
65 pygame.mouse.set_visible(1) |
a5972444ad1e
Improve cursor state handling, disable highlights on modal dialogs
Stefano Rivera <stefano@rivera.za.net>
parents:
135
diff
changeset
|
66 |
658
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
67 def draw(self, surface): |
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
68 super(CursorScreen, self).draw(surface) |
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
69 self.set_cursor(self.game.tool) |
675
67373f9d2d20
Renable cursor highlights. NAFC how it's working, but wth
Stefano Rivera <stefano@rivera.za.net>
parents:
660
diff
changeset
|
70 self._loaded_cursor.set_highlight(self.cursor_highlight()) |
658
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
71 self._cursor_group.update() |
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
72 self._cursor_group.draw(surface) |
70 | 73 |
658
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
74 def set_cursor(self, item): |
513
0e8487038834
fixed crash caused by the manual item's special snowflakeness
Adrianna Pińska <adrianna.pinska@gmail.com>
parents:
401
diff
changeset
|
75 if item is None or item.CURSOR is None: |
658
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
76 cursor = HAND |
324
3476e8f3b100
Fixed mouse and cursor handling.
Jeremy Thurgood <firxen@gmail.com>
parents:
302
diff
changeset
|
77 else: |
658
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
78 cursor = item.CURSOR |
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
79 if cursor != self._loaded_cursor: |
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
80 self._loaded_cursor = cursor |
660
dbec226debe3
We don't need no resources hacks
Stefano Rivera <stefano@rivera.za.net>
parents:
658
diff
changeset
|
81 self._loaded_cursor.load(self.gd.resource) |
658
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
82 self._cursor_group.empty() |
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
83 self._cursor_group.add(self._loaded_cursor) |
135 | 84 |
324
3476e8f3b100
Fixed mouse and cursor handling.
Jeremy Thurgood <firxen@gmail.com>
parents:
302
diff
changeset
|
85 def cursor_highlight(self): |
692
d6ded808cc33
Much scene management refactoring.
Jeremy Thurgood <firxen@gmail.com>
parents:
687
diff
changeset
|
86 return self.container.mouseover_widget.highlight_cursor |