def value(self):
buf = gtk.gdk.PixbufLoader()
- 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
- buf.close()
+ 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
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)
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
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]