diff options
Diffstat (limited to 'atoidejouer/ui/screen/story.py')
-rw-r--r-- | atoidejouer/ui/screen/story.py | 49 |
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() # .. |