def on_drawingarea_configure_event(self, widget, event, data=None):
if event.width != self.drawingarea_prev_width:
+
+ # before relayout, find top layout on gdkwindow
+ top_layout = None
+ for lay in self.pangolayout:
+ if lay.posY > self.adjustment.value:
+ break
+ top_layout = lay
+
self.relayout()
self.drawingarea_prev_width = event.width
+
+ # after relayout, set vscrollbar.value to top layout's posY
+ if top_layout is not None:
+ self.vscrollbar.set_value(top_layout.posY)
+
self.adjustment.page_size = self.drawingarea.allocation.height
self.vscrollbar.set_increments(20, self.drawingarea.allocation.height)