def _on_expose(self, drawing, event): # just mark lock as callbacks are already inside gtk thread with self._gooey.lock_marker: # get a new cairo context from the drawing area context = self._drawing_area.window.cairo_create() # set a clip region for the expose event context.rectangle(event.area.x, event.area.y, event.area.width, event.area.height) context.clip() # zoom and scroll context.scale(self.zoom, self.zoom) context.translate(*self.scroll) # call draw handler to draw contents of canvas to cairo context self.handle_draw(Brush(context, self.size)) return False