annotate pyntnclick/resources.py @ 575:970cdc219e15 pyntnclick

Add image mutation to resource loader.
author Jeremy Thurgood <firxen@gmail.com>
date Sat, 11 Feb 2012 16:01:33 +0200
parents 20e296d4a3a5
children 27809609eeca
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
561
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
1 # -*- test-case-name: pyntnclick.tests.test_resources -*-
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
2
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
3 import os
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
4 from pkg_resources import resource_filename
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
5
571
20e296d4a3a5 Add load_image to Resources.
Jeremy Thurgood <firxen@gmail.com>
parents: 561
diff changeset
6 import pygame
20e296d4a3a5 Add load_image to Resources.
Jeremy Thurgood <firxen@gmail.com>
parents: 561
diff changeset
7
561
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
8
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
9 class ResourceNotFound(Exception):
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
10 pass
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
11
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
12
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
13 class Resources(object):
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
14 DEFAULT_RESOURCE_MODULE = "pyntnclick.data"
571
20e296d4a3a5 Add load_image to Resources.
Jeremy Thurgood <firxen@gmail.com>
parents: 561
diff changeset
15 CONVERT_ALPHA = True
561
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
16
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
17 def __init__(self, resource_module, language=None):
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
18 self.resource_module = resource_module
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
19 self.language = language
571
20e296d4a3a5 Add load_image to Resources.
Jeremy Thurgood <firxen@gmail.com>
parents: 561
diff changeset
20 self._image_cache = {}
575
970cdc219e15 Add image mutation to resource loader.
Jeremy Thurgood <firxen@gmail.com>
parents: 571
diff changeset
21 self._mutated_image_cache = {}
561
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
22
571
20e296d4a3a5 Add load_image to Resources.
Jeremy Thurgood <firxen@gmail.com>
parents: 561
diff changeset
23 def get_resource_path(self, *resource_path_fragments):
20e296d4a3a5 Add load_image to Resources.
Jeremy Thurgood <firxen@gmail.com>
parents: 561
diff changeset
24 resource_name = os.path.join(*resource_path_fragments)
561
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
25 for path in self.get_paths(resource_name):
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
26 if os.path.exists(path):
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
27 return path
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
28 raise ResourceNotFound(resource_name)
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
29
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
30 def get_paths(self, resource_path):
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
31 paths = []
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
32 for module in [self.resource_module, self.DEFAULT_RESOURCE_MODULE]:
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
33 if self.language:
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
34 fn = os.path.join(self.language, resource_path)
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
35 paths.append(resource_filename(module, fn))
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
36 paths.append(resource_filename(module, resource_path))
e207dfad0d9e Start of resource manager.
Jeremy Thurgood <firxen@gmail.com>
parents:
diff changeset
37 return paths
571
20e296d4a3a5 Add load_image to Resources.
Jeremy Thurgood <firxen@gmail.com>
parents: 561
diff changeset
38
575
970cdc219e15 Add image mutation to resource loader.
Jeremy Thurgood <firxen@gmail.com>
parents: 571
diff changeset
39 def load_image(self, image_name, mutators=()):
571
20e296d4a3a5 Add load_image to Resources.
Jeremy Thurgood <firxen@gmail.com>
parents: 561
diff changeset
40 image_path = self.get_resource_path('images', image_name)
575
970cdc219e15 Add image mutation to resource loader.
Jeremy Thurgood <firxen@gmail.com>
parents: 571
diff changeset
41
571
20e296d4a3a5 Add load_image to Resources.
Jeremy Thurgood <firxen@gmail.com>
parents: 561
diff changeset
42 if image_path not in self._image_cache:
20e296d4a3a5 Add load_image to Resources.
Jeremy Thurgood <firxen@gmail.com>
parents: 561
diff changeset
43 image = pygame.image.load(image_path)
20e296d4a3a5 Add load_image to Resources.
Jeremy Thurgood <firxen@gmail.com>
parents: 561
diff changeset
44 if self.CONVERT_ALPHA:
20e296d4a3a5 Add load_image to Resources.
Jeremy Thurgood <firxen@gmail.com>
parents: 561
diff changeset
45 image = image.convert_alpha(pygame.display.get_surface())
20e296d4a3a5 Add load_image to Resources.
Jeremy Thurgood <firxen@gmail.com>
parents: 561
diff changeset
46 self._image_cache[image_path] = image
575
970cdc219e15 Add image mutation to resource loader.
Jeremy Thurgood <firxen@gmail.com>
parents: 571
diff changeset
47
970cdc219e15 Add image mutation to resource loader.
Jeremy Thurgood <firxen@gmail.com>
parents: 571
diff changeset
48 image = self._image_cache[image_path]
970cdc219e15 Add image mutation to resource loader.
Jeremy Thurgood <firxen@gmail.com>
parents: 571
diff changeset
49 key = (image_path, mutators)
970cdc219e15 Add image mutation to resource loader.
Jeremy Thurgood <firxen@gmail.com>
parents: 571
diff changeset
50
970cdc219e15 Add image mutation to resource loader.
Jeremy Thurgood <firxen@gmail.com>
parents: 571
diff changeset
51 if key not in self._mutated_image_cache:
970cdc219e15 Add image mutation to resource loader.
Jeremy Thurgood <firxen@gmail.com>
parents: 571
diff changeset
52 for mutator in mutators:
970cdc219e15 Add image mutation to resource loader.
Jeremy Thurgood <firxen@gmail.com>
parents: 571
diff changeset
53 image = mutator(image)
970cdc219e15 Add image mutation to resource loader.
Jeremy Thurgood <firxen@gmail.com>
parents: 571
diff changeset
54 self._mutated_image_cache[key] = image
970cdc219e15 Add image mutation to resource loader.
Jeremy Thurgood <firxen@gmail.com>
parents: 571
diff changeset
55
970cdc219e15 Add image mutation to resource loader.
Jeremy Thurgood <firxen@gmail.com>
parents: 571
diff changeset
56 return self._mutated_image_cache[key]