Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/atoidejouer/ui/screen/story.py
diff options
context:
space:
mode:
Diffstat (limited to 'atoidejouer/ui/screen/story.py')
-rw-r--r--atoidejouer/ui/screen/story.py49
1 files changed, 35 insertions, 14 deletions
diff --git a/atoidejouer/ui/screen/story.py b/atoidejouer/ui/screen/story.py
index 4e66e82..57853c4 100644
--- a/atoidejouer/ui/screen/story.py
+++ b/atoidejouer/ui/screen/story.py
@@ -61,6 +61,7 @@ class ScreenStory(graphics.Scene):
# init image dicts
self.__sizes = dict()
self.__graphics = dict()
+ self.__paths = dict()
self.__sounds = dict()
self.__dd_signals = dict()
# init fullscreen flag
@@ -72,6 +73,7 @@ class ScreenStory(graphics.Scene):
# ..
self._screen_height = None
self._screen_width = None
+ # ensure valid screen size
self._refresh_screen_size()
def set_fullscreen(self, fullscreen):
@@ -79,6 +81,8 @@ class ScreenStory(graphics.Scene):
self.fullscreen = fullscreen
# has changed
self._fullscreen_changed = True
+ # ensure valid screen size
+ self._refresh_screen_size()
# refresh
self.refresh()
@@ -109,11 +113,13 @@ class ScreenStory(graphics.Scene):
else:
return False
+ def __code(self, key):
+ return '%s%s' % (key.title,
+ '' if key.timestamp is None else key.timestamp)
+
def refresh(self, **kargs):
# clear?
self._check_clear()
- # ensure valid screen size
- self._refresh_screen_size()
# get the current frame
_time = 0.0 if self.activity._thread is None\
else self.activity._thread._time
@@ -123,12 +129,12 @@ class ScreenStory(graphics.Scene):
_currents = list()
for _k in story.DB().get(story.Key(mime_type='image/png', time=_time)):
self.__refresh_image(_k, _rate)
- _currents.append(_k.id)
+ _currents.append(self.__code(_k))
# draw mask
_currents.append(self.__refresh_default('mask'))
# hide previous
- for _id, _image in self.__graphics.items():
- if _id not in _currents:
+ for _code, _image in self.__graphics.items():
+ if _code not in _currents:
_image.visible = False
self.queue_draw()
# show first
@@ -164,12 +170,21 @@ class ScreenStory(graphics.Scene):
else:
_sound.pause()
+ def __path(self, key):
+ _code = self.__code(key)
+ if _code in self.__paths:
+ return self.__paths[_code]
+ else:
+ _path = key.get_path()
+ self.__paths[_code] = _path
+ return _path
+
def _update_w_h(self, key):
if key.id in self.__sizes:
pass
else:
# get file size
- _c, _w, _h = image.get_image_info(key.get_path())
+ _c, _w, _h = image.get_image_info(self.__path(key))
# ..
if (self.fullscreen is True\
or self._screen_width < 1024)\
@@ -253,7 +268,7 @@ class ScreenStory(graphics.Scene):
# get/update width and height
_size = self._update_w_h(_key)
# ..
- self.__graphics[_key.id] =\
+ self.__graphics[_code] =\
self.__update_drawing_area(_key, _size, _align)
# and return displayed code
return _code
@@ -282,12 +297,13 @@ class ScreenStory(graphics.Scene):
_size = self._update_w_h(key)
# get align
_align = self.__get_transition_align(key, rate)
+ _code = self.__code(key)
# ensure current image
- if key.id in self.__graphics:
+ if _code in self.__graphics:
# DEBUG
# logger.debug('[ui.screen.story] __refresh_image - key: %s' % key)
# DEBUG
- _image = self.__graphics[key.id]
+ _image = self.__graphics[_code]
# update x, y
_image.x, _image.y = self._update_x_y(_size, _align)
# get z_order
@@ -299,17 +315,20 @@ class ScreenStory(graphics.Scene):
# refresh signals
self.__update_image_signals(key, _image, (_new_w, _new_h))
else:
+ # DEBUG - NOT CACHED
+ # logger.debug('[ui.screen.story] __refresh_image - key: %s' % key)
# draggable for edit only
_draggable = self._set_canvas is False\
and config.Config().use_dnd() is True
_image = self.__update_drawing_area(key, _size, _align,
draggable=_draggable)
- self.__graphics[key.id] = _image
+ self.__graphics[_code] = _image
def __update_image_signals(self, key, image, size):
+ _code = self.__code(key)
# remove existing handlers
- if key.id in self.__dd_signals:
- _h_id_drag, _h_id_click = self.__dd_signals[key.id]
+ if _code in self.__dd_signals:
+ _h_id_drag, _h_id_click = self.__dd_signals[_code]
image.disconnect(_h_id_drag)
image.disconnect(_h_id_click)
# connect
@@ -317,7 +336,7 @@ class ScreenStory(graphics.Scene):
key, size)
_h_id_click = image.connect('on-click', _on_click, self, key)
# update signal dict
- self.__dd_signals[key.id] = (_h_id_drag, _h_id_click)
+ self.__dd_signals[_code] = (_h_id_drag, _h_id_click)
def __update_drawing_area(self, key, size, align, draggable=False):
# update x, y
@@ -331,7 +350,7 @@ class ScreenStory(graphics.Scene):
# logger.debug('[ui.screen.story] __update_drawing_area - key: %s' % key)
# DEBUG
# image
- _image = graphics.Image(key.get_path(), x=_x, y=_y, scale_x=_scale,
+ _image = graphics.Image(self.__path(key), x=_x, y=_y, scale_x=_scale,
scale_y=_scale, z_order=key.layer, draggable=draggable)
# refresh signals
self.__update_image_signals(key, _image, (_new_w, _new_h))
@@ -406,6 +425,8 @@ class ScreenStory(graphics.Scene):
"""
def _show(self):
+ # ensure valid screen size
+ self._refresh_screen_size()
# first refresh
self.refresh()
# ..