개정판 96b1429e
issue #1048: improve zoom in/out function
Change-Id: I181b084cbae32978bcdefda9ffb923aa197d384f
HYTOS/HYTOS/QtImageViewer.py | ||
---|---|---|
237 | 237 |
@history 18.04.11 Jeongwoo add parameter 'adjust' (@ref ResultTreeWidget.itemClickEvent(self, item, columnNo)) |
238 | 238 |
''' |
239 | 239 |
def zoomImage(self, isZoomIn, event, adjust = 1): |
240 |
""" Zoom in & out |
|
241 |
""" |
|
240 |
"""Zoom in & out""" |
|
242 | 241 |
|
243 | 242 |
HALF_SIZE = 300 |
244 | 243 |
clickPos = event.pos() |
... | ... | |
246 | 245 |
scenePos2 = self.mapToScene(clickPos.x() + HALF_SIZE//adjust, clickPos.y() + HALF_SIZE//adjust) |
247 | 246 |
if isZoomIn: |
248 | 247 |
zoomArea = QRectF(QPointF(scenePos1.x() if scenePos1.x() > 0 else 0, scenePos1.y() if scenePos1.y() > 0 else 0), QPointF(scenePos2.x(), scenePos2.y())) |
249 |
#self.fitInView(zoomArea, Qt.KeepAspectRatioByExpanding) |
|
250 | 248 |
viewBBox = self.zoomStack[-1] if len(self.zoomStack) else self.sceneRect() |
251 | 249 |
selectionBBox = zoomArea.intersected(viewBBox) |
252 | 250 |
self.scene.setSelectionArea(QPainterPath()) # Clear current selection area. |
253 |
if selectionBBox.width() > HALF_SIZE*2 and selectionBBox.height() > HALF_SIZE*2: |
|
254 |
if selectionBBox.isValid() and (selectionBBox != viewBBox): |
|
255 |
self.zoomStack.append(selectionBBox) |
|
256 |
self.updateViewer() |
|
251 |
if selectionBBox.isValid() and (selectionBBox != viewBBox): |
|
252 |
self.zoomStack.append(selectionBBox) |
|
253 |
self.updateViewer() |
|
257 | 254 |
else: |
258 | 255 |
zoomNewRect = None |
259 | 256 |
self.scene.setSelectionArea(QPainterPath()) # Clear current selection area. |
260 | 257 |
if len(self.zoomStack): |
261 |
self.zoomStack.pop() |
|
262 |
if len(self.zoomStack): |
|
263 |
newScenePos = self.mapToScene(clickPos.x(), clickPos.y()) |
|
264 |
newPosX1 = newScenePos.x() - self.zoomStack[-1].width() / 2 |
|
265 |
newPosY1 = newScenePos.y() - self.zoomStack[-1].height() / 2 |
|
266 |
zoomNewPos1 = QPointF(newPosX1 if newPosX1 > 0 else 0, newPosY1 if newPosY1 > 0 else 0) |
|
267 |
newPosX2 = newScenePos.x() + self.zoomStack[-1].width() / 2 |
|
268 |
newPosY2 = newScenePos.y() + self.zoomStack[-1].width() / 2 |
|
269 |
zoomNewPos2 = QPointF(newPosX2, newPosY2) |
|
270 |
zoomNewRect = QRectF(zoomNewPos1, zoomNewPos2) |
|
258 |
zoomNewRect = self.zoomStack.pop() |
|
271 | 259 |
self.updateViewer(zoomNewRect) |
272 | 260 |
|
273 | 261 |
def resizeEvent(self, event): |
274 |
""" Maintain current zoom on resize. |
|
275 |
""" |
|
262 |
""" Maintain current zoom on resize. """ |
|
276 | 263 |
self.updateViewer() |
277 | 264 |
|
278 | 265 |
''' |
... | ... | |
383 | 370 |
''' |
384 | 371 |
def wheelEvent(self, event): |
385 | 372 |
if event.modifiers() == Qt.ControlModifier: |
386 |
if self.canZoom and self.hasImage():
|
|
373 |
if self.canZoom: |
|
387 | 374 |
numDegrees = event.angleDelta() / 8 |
388 | 375 |
if numDegrees is not None: |
389 | 376 |
if numDegrees.y() > 0: |
내보내기 Unified diff