GUI: Scale to fit, fix for unstable size due to scroll bars
This commit is contained in:
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user