diff --git a/gui/src/aaregui/widgets/camera_image.py b/gui/src/aaregui/widgets/camera_image.py index 580293ca..4d2e1bdf 100644 --- a/gui/src/aaregui/widgets/camera_image.py +++ b/gui/src/aaregui/widgets/camera_image.py @@ -1,3 +1,4 @@ +import math from enum import Enum from PySide6.QtCore import Qt, QTimer, QRect, QPoint, Signal, Slot, QPointF @@ -171,7 +172,7 @@ class SampleCameraImageLabel(QGraphicsView): menu = QMenu(self) - scale_action = menu.addAction("Scale to width") + scale_action = menu.addAction("Scale to fit") scale_action.setCheckable(True) scale_action.setChecked(self.__autoscale) @@ -247,20 +248,28 @@ class SampleCameraImageLabel(QGraphicsView): def __scaling(self): if not self.__autoscale: self.setTransform(QTransform()) + self.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded) + self.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAsNeeded) return if self.pixmap_item is None: return - if self.pixmap_item.boundingRect().width() == 0: + self.setVerticalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff) + self.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff) + + if self.pixmap_item.boundingRect().width() == 0 or self.pixmap_item.boundingRect().height() == 0: ratio = 1.0 else: - ratio = self.viewport().size().width() / self.pixmap_item.boundingRect().width() + ratio_w = self.viewport().size().width() / self.pixmap_item.boundingRect().width() + ratio_h = self.viewport().size().height() / self.pixmap_item.boundingRect().height() + ratio = min(ratio_w, ratio_h) - if ratio < 0.2: - ratio = 0.2 + if ratio < 0.1: + ratio = 0.1 if ratio >= 1.0: + # Don't enable scaling when gain in ratio is < 5% (to avoid back-and-forth self.setTransform(QTransform()) else: matrix = QTransform()