X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=manga%2Freader.py;h=075d846e71bb8f8619e6c76239e1b024a7f7ef71;hb=5e98c1aa8cfadcb81cd9ebb61a1e6352c6e16e80;hp=73b6bd4726c810078f446e94005cefb7449aa7f5;hpb=0b60fcf810e2197790f6eb953ce078fd62c6e4f1;p=automanga.git diff --git a/manga/reader.py b/manga/reader.py index 73b6bd4..075d846 100644 --- a/manga/reader.py +++ b/manga/reader.py @@ -1,4 +1,4 @@ -import threading, gtk, gio, gobject +import threading, gtk, gobject import lib, profile class notdone(Exception): pass @@ -75,23 +75,22 @@ class imgload(future): self.start() def value(self): - buf = bytearray() - with self.page.open() as st: - self.p = 0 - self.st = st - while True: - read = st.read(1024) - if read == "": - break - self.p += len(read) - buf.extend(read) - self.progcb() - self.st = None - with gtk.gdk.lock: - try: - return gtk.gdk.pixbuf_new_from_stream(gio.memory_input_stream_new_from_data(str(buf))) - finally: - gtk.gdk.flush() + buf = gtk.gdk.PixbufLoader() + try: + with self.page.open() as st: + self.p = 0 + self.st = st + while True: + read = st.read(1024) + if read == "": + break + self.p += len(read) + buf.write(read) + self.progcb() + self.st = None + finally: + buf.close() + return buf.get_pixbuf() @property def prog(self): @@ -214,6 +213,15 @@ class pageview(gtk.Widget): self.allocation = alloc if self.fit: self.zoom = self.fitzoom() + else: + aw, ah = self.get_asize() + zw, zh = self.get_zsize() + ox, oy = self.off + if zw >= aw and ox + aw > zw: + ox = zw - aw + if zh >= ah and oy + ah > zh: + oy = zh - ah + self.off = ox, oy if self.flags() & gtk.REALIZED: self.window.move_resize(*alloc) @@ -296,11 +304,12 @@ class msgproc(object): self._prog = None def prog(self, p): - if p is not None and self._prog is None: - self._prog = gtk.ProgressBar() + if p is not None: + if self._prog is None: + self._prog = gtk.ProgressBar() + self.hlay.pack_start(self._prog, padding=5) + self._prog.show() self._prog.set_fraction(p) - self.hlay.pack_start(self._prog, padding=5) - self._prog.show() elif p is None and self._prog is not None: self.hlay.remove(self._prog) self._prog = None @@ -635,9 +644,15 @@ class reader(gtk.Window): self.page.set_off((self.page.get_asize()[0], self.page.off[1])) if self.point is not None: if ev.keyval in [ord(' ')]: - self.fetchpage(self.point.next, lambda page: self.preload.set(preload(relpageget(page, False, self.cache)))) + if self.page and self.page.off[1] + self.page.get_asize()[1] < self.page.get_zsize()[1]: + self.pan((0, self.page.get_asize()[1] - 50)) + else: + self.fetchpage(self.point.next, lambda page: self.preload.set(preload(relpageget(page, False, self.cache)))) elif ev.keyval in [65288]: - self.fetchpage(self.point.prev, lambda page: self.preload.set(preload(relpageget(page, True, self.cache)))) + if self.page and self.page.off[1] > 0: + self.pan((0, -(self.page.get_asize()[1] - 50))) + else: + self.fetchpage(self.point.prev, lambda page: self.preload.set(preload(relpageget(page, True, self.cache)))) elif ev.keyval in [ord('R'), ord('r')]: page = self.point.cur.cur del self.cache[page]