much more user-friendly zooming

This commit is contained in:
Josh Holtrop 2011-04-02 00:32:15 -04:00
parent 21d969b5cb
commit 764012a889

View File

@ -20,6 +20,7 @@ class SketchWidget:
self.line_width = 0.8 self.line_width = 0.8
self.axis_width = 1.8 self.axis_width = 1.8
self.axis_length = 50 self.axis_length = 50
self.zoom_factor = 1.2
try: try:
# try double-buffered # try double-buffered
@ -217,14 +218,22 @@ class SketchWidget:
def scroll_event(self, widget, event, data = None): def scroll_event(self, widget, event, data = None):
if event.direction == gtk.gdk.SCROLL_UP: 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.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() self.redraw()
elif event.direction == gtk.gdk.SCROLL_DOWN: 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.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() self.redraw()
def redraw(self): def redraw(self):