Fix mousewheel zooming in overhead view

This commit is contained in:
David Vierra 2016-08-25 20:04:27 -10:00
parent ac42eae1a8
commit 45599b0ab2
2 changed files with 42 additions and 34 deletions

View File

@ -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):

View File

@ -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()]