Fixed pan bug when reallocating pageview.
[automanga.git] / manga / reader.py
index 6694ecd..075d846 100644 (file)
@@ -213,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)
 
@@ -295,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
@@ -634,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]