diff --git a/src/mcedit2/worldview/overhead.py b/src/mcedit2/worldview/overhead.py index 0de1928..24037c0 100644 --- a/src/mcedit2/worldview/overhead.py +++ b/src/mcedit2/worldview/overhead.py @@ -5,7 +5,7 @@ from __future__ import absolute_import, division, print_function, unicode_litera from PySide import QtGui import logging from mcedit2.worldview.worldview import WorldView -from mcedit2.worldview.viewaction import MoveViewMouseAction, ZoomWheelAction +from mcedit2.worldview.viewaction import MoveViewMouseAction, ZoomWheelActions from mcedit2.worldview import worldruler from mceditlib.geometry import Vector @@ -40,8 +40,9 @@ class OverheadWorldView(WorldView): self.compassNode.yawPitch = 180, 0 self.viewActions.extend(( MoveViewMouseAction(), - ZoomWheelAction(), )) + self.viewActions.extend(ZoomWheelActions()) + self.worldScene.minlod = 2 def updateMatrices(self): diff --git a/src/mcedit2/worldview/viewaction.py b/src/mcedit2/worldview/viewaction.py index 1e3963d..1c97ee0 100644 --- a/src/mcedit2/worldview/viewaction.py +++ b/src/mcedit2/worldview/viewaction.py @@ -254,40 +254,17 @@ class MoveViewMouseAction(ViewAction): event.view.update() -class ZoomWheelAction(ViewAction): - _zooms = None - labelText = "Zoom View" +def ZoomWheelActions(): maxScale = 16. minScale = 1. / 64 - settingsKey = None - - @property - def zooms(self): - if self._zooms: - return self._zooms - zooms = [] - _i = self.minScale - while _i < self.maxScale: - zooms.append(_i) - _i *= 2.0 - - self._zooms = zooms - return zooms - - def wheelEvent(self, event): - d = event.delta() - mousePos = (event.x(), event.y()) - - if d < 0: - i = self.zooms.index(event.view.scale) - if i < len(self.zooms) - 1: - self.zoom(event.view, self.zooms[i + 1], mousePos) - elif d > 0: - i = self.zooms.index(event.view.scale) - if i > 0: - self.zoom(event.view, self.zooms[i - 1], mousePos) - - def zoom(self, view, scale, (mx, my)): + + zooms = [] + _i = minScale + while _i < maxScale: + zooms.append(_i) + _i *= 2.0 + + def zoom(view, scale, (mx, my)): # Get mouse position in world coordinates worldPos = view.unprojectAtHeight(mx, my, 0) @@ -303,3 +280,33 @@ class ZoomWheelAction(ViewAction): view.centerPoint = view.centerPoint - delta log.debug("zoom offset %s, pos %s, delta %s, scale %s", view.centerPoint, (mx, my), delta, view.scale) + + class ZoomInAction(ViewAction): + settingsKey = "worldview.general.zoom_in" + button = ViewAction.WHEEL_UP + acceptsMouseWheel = True + labelText = "Zoom In" + + def buttonPressEvent(self, event): + log.debug(self.labelText) + mousePos = (event.x(), event.y()) + + i = zooms.index(event.view.scale) + if i > 0: + zoom(event.view, zooms[i - 1], mousePos) + + class ZoomOutAction(ViewAction): + settingsKey = "worldview.general.zoom_out" + button = ViewAction.WHEEL_DOWN + acceptsMouseWheel = True + labelText = "Zoom Out" + + def buttonPressEvent(self, event): + log.debug(self.labelText) + mousePos = (event.x(), event.y()) + + i = zooms.index(event.view.scale) + if i < len(zooms) - 1: + zoom(event.view, zooms[i + 1], mousePos) + + return [ZoomInAction(), ZoomOutAction()] \ No newline at end of file