Mercurial > pyntnclick
annotate pyntnclick/cursor.py @ 848:98d1fff734e6 pyntnclick
Drop unneeded pygame.cursors import
author | Neil Muller <neil@dip.sun.ac.za> |
---|---|
date | Sun, 15 Dec 2013 11:41:27 +0200 |
parents | bd8227068d86 |
children |
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.mouse |
9 | |
658
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
10 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
|
11 from pyntnclick.image_transforms import Colour |
636
2748d3afcae5
Excise albow. Really.
Stefano Rivera <stefano@rivera.za.net>
parents:
603
diff
changeset
|
12 |
401
92029c76b687
Different toolbar colour and remove highlighted cursor outside scene widget.
Jeremy Thurgood <firxen@gmail.com>
parents:
324
diff
changeset
|
13 |
66 | 14 class CursorSprite(Sprite): |
15 "A Sprite that follows the Cursor" | |
16 | |
302
6d93e04036c9
CursorSprite: Default pointer-position to the centre of the cursor
Stefano Rivera <stefano@rivera.za.net>
parents:
187
diff
changeset
|
17 def __init__(self, filename, x=None, y=None): |
66 | 18 Sprite.__init__(self) |
135 | 19 self.filename = filename |
129
4223d66d88b4
Cursor change when you select a Tool
Stefano Rivera <stefano@rivera.za.net>
parents:
124
diff
changeset
|
20 self.pointer_x = x |
4223d66d88b4
Cursor change when you select a Tool
Stefano Rivera <stefano@rivera.za.net>
parents:
124
diff
changeset
|
21 self.pointer_y = y |
172
3b5cfb3f794e
Ensure cursor loaded when calling set_highlight
Stefano Rivera <stefano@rivera.za.net>
parents:
171
diff
changeset
|
22 self.highlighted = False |
756
bd8227068d86
A little more refactoring around Cursor highlights
Stefano Rivera <stefano@rivera.za.net>
parents:
755
diff
changeset
|
23 self.highlight_colour = (255, 100, 100, 255) |
66 | 24 |
660
dbec226debe3
We don't need no resources hacks
Stefano Rivera <stefano@rivera.za.net>
parents:
658
diff
changeset
|
25 def load(self, resources): |
135 | 26 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
|
27 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
|
28 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
|
29 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
|
30 self.filename, transforms=(self.highlight_transform,)) |
bd8227068d86
A little more refactoring around Cursor highlights
Stefano Rivera <stefano@rivera.za.net>
parents:
755
diff
changeset
|
31 self.image = self.plain_image |
bd8227068d86
A little more refactoring around Cursor highlights
Stefano Rivera <stefano@rivera.za.net>
parents:
755
diff
changeset
|
32 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
|
33 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
|
34 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
|
35 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
|
36 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
|
37 |
66 | 38 def update(self): |
135 | 39 pos = pygame.mouse.get_pos() |
129
4223d66d88b4
Cursor change when you select a Tool
Stefano Rivera <stefano@rivera.za.net>
parents:
124
diff
changeset
|
40 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
|
41 self.rect.top = pos[1] - self.pointer_y |
66 | 42 |
135 | 43 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
|
44 self.image = self.highlighted_image if enable else self.plain_image |
135 | 45 |
46 | |
47 HAND = CursorSprite('hand.png', 12, 0) | |
48 | |
124 | 49 |
658
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
50 class CursorScreen(Screen): |
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
51 """A Screen with custom cursors""" |
70 | 52 |
658
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
53 def setup(self): |
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
54 self._cursor_group = RenderUpdates() |
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
55 self._loaded_cursor = None |
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
56 self.set_cursor(None) |
129
4223d66d88b4
Cursor change when you select a Tool
Stefano Rivera <stefano@rivera.za.net>
parents:
124
diff
changeset
|
57 |
658
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
58 def on_enter(self): |
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
59 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
|
60 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
|
61 |
658
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
62 def on_exit(self): |
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
63 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
|
64 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
|
65 |
658
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
66 def draw(self, surface): |
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
67 super(CursorScreen, self).draw(surface) |
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
68 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
|
69 self._loaded_cursor.set_highlight(self.cursor_highlight()) |
658
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
70 self._cursor_group.update() |
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
71 self._cursor_group.draw(surface) |
70 | 72 |
658
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
73 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
|
74 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
|
75 cursor = HAND |
324
3476e8f3b100
Fixed mouse and cursor handling.
Jeremy Thurgood <firxen@gmail.com>
parents:
302
diff
changeset
|
76 else: |
658
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
77 cursor = item.CURSOR |
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
78 if cursor != self._loaded_cursor: |
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
79 self._loaded_cursor = cursor |
660
dbec226debe3
We don't need no resources hacks
Stefano Rivera <stefano@rivera.za.net>
parents:
658
diff
changeset
|
80 self._loaded_cursor.load(self.gd.resource) |
658
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
81 self._cursor_group.empty() |
2703924c8c70
Custom mouse cursors return
Stefano Rivera <stefano@rivera.za.net>
parents:
636
diff
changeset
|
82 self._cursor_group.add(self._loaded_cursor) |
135 | 83 |
324
3476e8f3b100
Fixed mouse and cursor handling.
Jeremy Thurgood <firxen@gmail.com>
parents:
302
diff
changeset
|
84 def cursor_highlight(self): |
692
d6ded808cc33
Much scene management refactoring.
Jeremy Thurgood <firxen@gmail.com>
parents:
687
diff
changeset
|
85 return self.container.mouseover_widget.highlight_cursor |