diff --git a/SketchWidget.py b/SketchWidget.py index a5aaf43..578f31f 100644 --- a/SketchWidget.py +++ b/SketchWidget.py @@ -20,6 +20,7 @@ class SketchWidget: self.line_width = 0.8 self.axis_width = 1.8 self.axis_length = 50 + self.zoom_factor = 1.2 try: # try double-buffered @@ -217,14 +218,22 @@ class SketchWidget: def scroll_event(self, widget, event, data = None): if event.direction == gtk.gdk.SCROLL_UP: - self.view_center = self.screenPtToPt((event.x, + zoom_pt = self.screenPtToPt((event.x, self.size[1] - event.y)) - self.view_width /= 1.2 + off_x = zoom_pt[0] - self.view_center[0] + off_y = zoom_pt[1] - self.view_center[1] + self.view_center = (zoom_pt[0] - off_x / self.zoom_factor, + zoom_pt[1] - off_y / self.zoom_factor) + self.view_width /= self.zoom_factor self.redraw() elif event.direction == gtk.gdk.SCROLL_DOWN: - self.view_center = self.screenPtToPt((event.x, + zoom_pt = self.screenPtToPt((event.x, self.size[1] - event.y)) - self.view_width *= 1.2 + off_x = zoom_pt[0] - self.view_center[0] + off_y = zoom_pt[1] - self.view_center[1] + self.view_center = (zoom_pt[0] - off_x * self.zoom_factor, + zoom_pt[1] - off_y * self.zoom_factor) + self.view_width *= self.zoom_factor self.redraw() def redraw(self):