From 10549ff7ae2dc99ef39f72bb6c2c43fcf7ac74ad Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Fri, 1 Apr 2011 23:49:09 -0400 Subject: [PATCH] initial attempt at panning, need to redraw --- SketchWidget.py | 26 ++++++++++++++++++++++---- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/SketchWidget.py b/SketchWidget.py index ccd7a13..3459852 100644 --- a/SketchWidget.py +++ b/SketchWidget.py @@ -14,6 +14,7 @@ class SketchWidget: self.view_center = (0, 0) self.view_width = 4.0 self.size = (1, 1) + self.panning = False # Configuration parameters self.line_width = 0.8 @@ -120,6 +121,16 @@ class SketchWidget: def distToScreenDist(self, dist): return dist / self.view_width * self.size[0] + def screenPtToPt(self, pt): + return ((pt[0] - self.size[0]) / self.size[0] * self.view_width + + self.view_center[0] / 2, + (pt[1] - self.size[1]) / self.size[1] * + (self.view_width * self.size[1] / self.size[0]) + + self.view_center[1] / 2) + + def screenDistToDist(self, dist): + return dist * self.size[0] / self.view_width + def drawLine(self, shape, size): pt0 = self.ptToScreenPt(shape.getPt(0)) pt1 = self.ptToScreenPt(shape.getPt(1)) @@ -189,14 +200,21 @@ class SketchWidget: glPopAttrib() def button_press_event(self, widget, event, data = None): - print 'clicked' - print 'button:', event.button + if event.button == 2: + self.panning = True + self.panning_start = (event.x, event.y) def button_release_event(self, widget, event, data = None): - print 'unclicked button', event.button + if event.button == 2: + self.panning = False def motion_event(self, widget, event, data = None): - print 'motion' + if self.panning: + start_pt = self.screenPtToPt(self.panning_start) + this_pt = self.screenPtToPt((event.x, event.y)) + self.view_center = (self.view_center[0] + this_pt[0] - start_pt[0], + self.view_center[1] + this_pt[1] - start_pt[1]) + self.panning_start = (event.x, event.y) def scroll_event(self, widget, event, data = None): if event.direction == gtk.gdk.SCROLL_UP: