GUI: Scale to fit, fix for unstable size due to scroll bars

This commit is contained in:
2025-06-12 13:20:36 +02:00
parent 62d59aa057
commit c71f78549c
+14 -5
View File
@@ -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()