much more user-friendly zooming
This commit is contained in:
parent
21d969b5cb
commit
764012a889
@ -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):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user