class MangaScroller(object): def __init__(self, root, view_settings=None): try: self.page_list = PageList(root) if view_settings is None: view_settings = ViewSettings() self.view_settings = view_settings self.cursor = PageCursor(self.page_list, view_settings) except EmptyMangaException: print "Warning: empty manga" self.page_list = EmptyPageList() # TODO: use the dirty attribute after paint to indicate # if a refresh is still needed self.dirty = True def change_chapter(self, path): self.cursor.index = self.page_list.reset_to_path(path) self.cursor.pixel = 0 def scroll_down(self, step=100): self.move_cursor(step) def scroll_up(self, step=100): self.move_cursor(-step) def move_cursor(self, amount): self.cursor.move(amount) # TODO: This will need a big (good :) rewrite! # TODO: should mark whether or not some space is left unrendered so that we # know when we need to render images when they load def paint_using(self, painter): """ Render scroller using painter @param painter: qt painter """ # First, load any unloaded image for i in range(self.page_list.length()): self.page_list.page_at(i).load() # this is non-blocking findex, loaded = get_loaded_context(self.page_list, self.cursor.index) index = self.cursor.index - findex limit = index + 3 # TEMP pages = loaded[index:limit] frames = [p.get_frame(self.view_settings) for p in pages] if len(frames) == 0: return 0 # transorming the image according to view_settings y = -transformed_y_coord(self.view_settings, pages[0], self.cursor.pixel) fstrip.paint_frames(painter, frames, y)
def __init__(self, root, view_settings=None): try: self.page_list = PageList(root) if view_settings is None: view_settings = ViewSettings() self.view_settings = view_settings self.cursor = PageCursor(self.page_list, view_settings) except EmptyMangaException: print "Warning: empty manga" self.page_list = EmptyPageList() # TODO: use the dirty attribute after paint to indicate # if a refresh is still needed self.dirty = True