diff -r f56181aa99ea -r 5eb9c5536334 Viewer.py --- a/Viewer.py Sat May 30 17:16:11 2009 +0200 +++ b/Viewer.py Tue Jun 02 17:35:22 2009 +0200 @@ -450,10 +450,10 @@ self.Flush() self.ResetView() - def SetScale(self, scale_number): + def SetScale(self, scale_number, refresh=True): self.CurrentScale = max(0, min(scale_number, len(ZOOM_FACTORS) - 1)) self.ViewScale = (ZOOM_FACTORS[self.CurrentScale], ZOOM_FACTORS[self.CurrentScale]) - self.RefreshScaling() + self.RefreshScaling(refresh) def GetScale(self): return self.CurrentScale @@ -642,6 +642,7 @@ self.PageSize = None self.PagePen = wx.TRANSPARENT_PEN if refresh: + self.RefreshVisibleElements() self.Refresh(False) @@ -2808,14 +2809,23 @@ self.Scroll(xp, y) elif event.ControlDown(): dc = self.GetLogicalDC() + self.Freeze() pos = event.GetLogicalPosition(dc) mouse_pos = event.GetPosition() - self.SetScale(self.CurrentScale + rotation) - self.Scroll(round(pos.x * self.ViewScale[0] - mouse_pos.x) / SCROLLBAR_UNIT, - round(pos.y * self.ViewScale[1] - mouse_pos.y) / SCROLLBAR_UNIT) - self.RefreshScrollBars() + self.SetScale(self.CurrentScale + rotation, False) + xmax = self.GetScrollRange(wx.HORIZONTAL) - self.GetScrollThumb(wx.HORIZONTAL) + ymax = self.GetScrollRange(wx.VERTICAL) - self.GetScrollThumb(wx.VERTICAL) + scrollx = max(0, round(pos.x * self.ViewScale[0] - mouse_pos.x) / SCROLLBAR_UNIT) + scrolly = max(0, round(pos.y * self.ViewScale[1] - mouse_pos.y) / SCROLLBAR_UNIT) + if scrollx > xmax or scrolly > ymax: + self.RefreshScrollBars(max(0, scrollx - xmax), max(0, scrolly - ymax)) + self.Scroll(scrollx, scrolly) + else: + self.Scroll(scrollx, scrolly) + self.RefreshScrollBars() self.RefreshVisibleElements() self.Refresh() + self.Thaw() self.ParentWindow.RefreshDisplayMenu() else: x, y = self.GetViewStart()