Mercurial > pyntnclick
comparison gamelib/cursor.py @ 135:b43599b7f8a2
Cursor highlights
author | Stefano Rivera <stefano@rivera.za.net> |
---|---|
date | Tue, 24 Aug 2010 20:33:20 +0200 |
parents | 4223d66d88b4 |
children | a5972444ad1e |
comparison
equal
deleted
inserted
replaced
134:faac82748f5a | 135:b43599b7f8a2 |
---|---|
1 # cursor.py | 1 # cursor.py |
2 # Copyright Boomslang team, 2010 (see COPYING File) | 2 # Copyright Boomslang team, 2010 (see COPYING File) |
3 # Sprite Cursor | 3 # Sprite Cursor |
4 | 4 |
5 from albow.resource import get_image | |
5 from albow.widget import Widget | 6 from albow.widget import Widget |
6 from albow.resource import get_image | |
7 import pygame.mouse as mouse | |
8 from pygame.sprite import Sprite, RenderUpdates | 7 from pygame.sprite import Sprite, RenderUpdates |
8 import pygame | |
9 import pygame.color | |
9 import pygame.cursors | 10 import pygame.cursors |
10 import pygame.mouse | 11 import pygame.mouse |
11 | |
12 HAND = ('hand.png', 12, 0) | |
13 | 12 |
14 class CursorSprite(Sprite): | 13 class CursorSprite(Sprite): |
15 "A Sprite that follows the Cursor" | 14 "A Sprite that follows the Cursor" |
16 | 15 |
17 def __init__(self, filename, x, y): | 16 def __init__(self, filename, x, y): |
18 Sprite.__init__(self) | 17 Sprite.__init__(self) |
19 self.image = get_image('items', filename) | 18 self.filename = filename |
20 self.rect = self.image.get_rect() | |
21 self.pointer_x = x | 19 self.pointer_x = x |
22 self.pointer_y = y | 20 self.pointer_y = y |
23 | 21 |
22 def load(self): | |
23 if not hasattr(self, 'plain_image'): | |
24 self.plain_image = get_image('items', self.filename) | |
25 self.image = self.plain_image | |
26 self.rect = self.image.get_rect() | |
27 self.highlight = pygame.Surface(self.rect.size) | |
28 color = pygame.color.Color(255, 100, 100, 0) | |
29 self.highlight.fill(color) | |
30 | |
24 def update(self): | 31 def update(self): |
25 pos = mouse.get_pos() | 32 pos = pygame.mouse.get_pos() |
26 self.rect.left = pos[0] - self.pointer_x | 33 self.rect.left = pos[0] - self.pointer_x |
27 self.rect.top = pos[1] - self.pointer_y | 34 self.rect.top = pos[1] - self.pointer_y |
35 | |
36 def set_highlight(self, enable): | |
37 self.image = self.plain_image.copy() | |
38 if enable: | |
39 self.image.blit(self.highlight, self.highlight.get_rect(), None, pygame.BLEND_MULT) | |
40 | |
41 | |
42 HAND = CursorSprite('hand.png', 12, 0) | |
28 | 43 |
29 | 44 |
30 class CursorWidget(Widget): | 45 class CursorWidget(Widget): |
31 """Mix-in widget to ensure that mouse_move is propogated to parents""" | 46 """Mix-in widget to ensure that mouse_move is propogated to parents""" |
32 | 47 |
39 | 54 |
40 def draw_all(self, _surface): | 55 def draw_all(self, _surface): |
41 Widget.draw_all(self, _surface) | 56 Widget.draw_all(self, _surface) |
42 surface = self.get_root().surface | 57 surface = self.get_root().surface |
43 if self.cursor != self._loaded_cursor: | 58 if self.cursor != self._loaded_cursor: |
59 self._loaded_cursor = self.cursor | |
44 if self.cursor is None: | 60 if self.cursor is None: |
45 pygame.mouse.set_visible(1) | 61 pygame.mouse.set_visible(1) |
46 self._cursor_group.empty() | 62 self._cursor_group.empty() |
47 else: | 63 else: |
48 pygame.mouse.set_visible(0) | 64 pygame.mouse.set_visible(0) |
65 self.cursor.load() | |
49 self._cursor_group.empty() | 66 self._cursor_group.empty() |
50 self._cursor_group.add(CursorSprite(*self.cursor)) | 67 self._cursor_group.add(self.cursor) |
51 if self.cursor is not None: | 68 if self.cursor is not None: |
52 self._cursor_group.update() | 69 self._cursor_group.update() |
53 self._cursor_group.draw(surface) | 70 self._cursor_group.draw(surface) |
54 | 71 |
55 def mouse_delta(self, event): | 72 def mouse_delta(self, event): |
56 self.invalidate() | 73 self.invalidate() |
57 | 74 |
58 def set_cursor(self, cursor): | 75 def set_cursor(self, cursor): |
59 CursorWidget.cursor = cursor | 76 CursorWidget.cursor = cursor |
77 | |
78 def cursor_highlight(self, enable): | |
79 self.cursor.set_highlight(enable) |