예제 #1
0
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)
예제 #2
0
 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