mirror of
https://github.com/arsenetar/dupeguru.git
synced 2025-03-10 05:34:36 +00:00
Work around resizing down offset by 1 pixel.
This commit is contained in:
parent
970bb5e19d
commit
aa79b31aae
@ -68,15 +68,15 @@ class DetailsDialog(DetailsDialogBase):
|
|||||||
self.verticalLayout = QVBoxLayout(self)
|
self.verticalLayout = QVBoxLayout(self)
|
||||||
self.verticalLayout.setSpacing(0)
|
self.verticalLayout.setSpacing(0)
|
||||||
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
|
self.verticalLayout.setContentsMargins(0, 0, 0, 0)
|
||||||
# self.horizontalLayout = QHBoxLayout()
|
|
||||||
self.horizontalLayout = QGridLayout()
|
self.horizontalLayout = QGridLayout()
|
||||||
# Minimum width for the toolbar in the middle:
|
# Minimum width for the toolbar in the middle:
|
||||||
self.horizontalLayout.setColumnMinimumWidth(1, 30)
|
self.horizontalLayout.setColumnMinimumWidth(1, 10)
|
||||||
self.horizontalLayout.setColumnStretch(0,1)
|
self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
|
||||||
self.horizontalLayout.setColumnStretch(1,0)
|
self.horizontalLayout.setColumnStretch(0,24)
|
||||||
self.horizontalLayout.setColumnStretch(2,1)
|
self.horizontalLayout.setColumnStretch(1,1)
|
||||||
|
self.horizontalLayout.setColumnStretch(2,24)
|
||||||
# self.horizontalLayout.setColumnStretch(3,0)
|
# self.horizontalLayout.setColumnStretch(3,0)
|
||||||
self.horizontalLayout.setSpacing(2)
|
self.horizontalLayout.setSpacing(1)
|
||||||
|
|
||||||
self.selectedImageViewer = ScrollAreaImageViewer(self, "selectedImage")
|
self.selectedImageViewer = ScrollAreaImageViewer(self, "selectedImage")
|
||||||
# self.selectedImage = QLabel(self)
|
# self.selectedImage = QLabel(self)
|
||||||
@ -96,6 +96,7 @@ class DetailsDialog(DetailsDialogBase):
|
|||||||
# 1, 3, 1, 1, Qt.Alignment(Qt.AlignRight))
|
# 1, 3, 1, 1, Qt.Alignment(Qt.AlignRight))
|
||||||
|
|
||||||
self.verticalToolBar = QToolBar(self)
|
self.verticalToolBar = QToolBar(self)
|
||||||
|
# self.verticalToolBar.setMaximumWidth(10)
|
||||||
self.verticalToolBar.setOrientation(Qt.Orientation(Qt.Vertical))
|
self.verticalToolBar.setOrientation(Qt.Orientation(Qt.Vertical))
|
||||||
# self.subVLayout = QVBoxLayout(self)
|
# self.subVLayout = QVBoxLayout(self)
|
||||||
# self.subVLayout.addWidget(self.verticalToolBar)
|
# self.subVLayout.addWidget(self.verticalToolBar)
|
||||||
@ -144,7 +145,6 @@ class DetailsDialog(DetailsDialogBase):
|
|||||||
self.verticalToolBar.addWidget(self.buttonBestFit)
|
self.verticalToolBar.addWidget(self.buttonBestFit)
|
||||||
|
|
||||||
self.horizontalLayout.addWidget(self.verticalToolBar, 1, 1, 1, 1, Qt.AlignCenter)
|
self.horizontalLayout.addWidget(self.verticalToolBar, 1, 1, 1, 1, Qt.AlignCenter)
|
||||||
# self.horizontalLayout.addWidget(self.verticalToolBar, Qt.AlignVCenter)
|
|
||||||
|
|
||||||
self.referenceImageViewer = ScrollAreaImageViewer(self, "referenceImage")
|
self.referenceImageViewer = ScrollAreaImageViewer(self, "referenceImage")
|
||||||
# self.referenceImage = QLabel(self)
|
# self.referenceImage = QLabel(self)
|
||||||
@ -157,7 +157,6 @@ class DetailsDialog(DetailsDialogBase):
|
|||||||
# self.referenceImageViewer.setSizePolicy(sizePolicy)
|
# self.referenceImageViewer.setSizePolicy(sizePolicy)
|
||||||
# self.referenceImageViewer.setAlignment(Qt.AlignCenter)
|
# self.referenceImageViewer.setAlignment(Qt.AlignCenter)
|
||||||
self.horizontalLayout.addWidget(self.referenceImageViewer, 0, 2, 3, 1)
|
self.horizontalLayout.addWidget(self.referenceImageViewer, 0, 2, 3, 1)
|
||||||
# self.horizontalLayout.addWidget(self.referenceImageViewer)
|
|
||||||
self.verticalLayout.addLayout(self.horizontalLayout)
|
self.verticalLayout.addLayout(self.horizontalLayout)
|
||||||
|
|
||||||
self.tableView = DetailsTable(self)
|
self.tableView = DetailsTable(self)
|
||||||
@ -172,7 +171,7 @@ class DetailsDialog(DetailsDialogBase):
|
|||||||
self.tableView.setSelectionBehavior(QAbstractItemView.SelectRows)
|
self.tableView.setSelectionBehavior(QAbstractItemView.SelectRows)
|
||||||
self.tableView.setShowGrid(False)
|
self.tableView.setShowGrid(False)
|
||||||
self.verticalLayout.addWidget(self.tableView)
|
self.verticalLayout.addWidget(self.tableView)
|
||||||
self.tableView.hide()
|
# self.tableView.hide()
|
||||||
|
|
||||||
self.buttonImgSwap.setEnabled(False)
|
self.buttonImgSwap.setEnabled(False)
|
||||||
self.buttonZoomIn.setEnabled(False)
|
self.buttonZoomIn.setEnabled(False)
|
||||||
@ -215,14 +214,23 @@ class DetailsDialog(DetailsDialogBase):
|
|||||||
# --- Override
|
# --- Override
|
||||||
def resizeEvent(self, event):
|
def resizeEvent(self, event):
|
||||||
# HACK referenceViewer might be 1 pixel shorter in width
|
# HACK referenceViewer might be 1 pixel shorter in width
|
||||||
# due to dynamic resizing in the GridLayout's engine
|
# due to the toolbar in the middle keeping the same width,
|
||||||
# Couldn't find a way to ensure both viewers have the exact same size
|
# so resizing in the GridLayout's engine leads to not enough space
|
||||||
# at all time without using resize().
|
# left for the panel on the right.
|
||||||
|
# This ensures same size while shrinking at least:
|
||||||
self.horizontalLayout.setColumnMinimumWidth(
|
self.horizontalLayout.setColumnMinimumWidth(
|
||||||
0, self.selectedImageViewer.size().width())
|
0, self.selectedImageViewer.size().width())
|
||||||
self.horizontalLayout.setColumnMinimumWidth(
|
self.horizontalLayout.setColumnMinimumWidth(
|
||||||
2, self.selectedImageViewer.size().width())
|
2, self.selectedImageViewer.size().width())
|
||||||
|
|
||||||
|
# This works when expanding but it's ugly:
|
||||||
|
# if self.selectedImageViewer.size().width() > self.referenceImageViewer.size().width():
|
||||||
|
# print(f"Before selected size: {self.selectedImageViewer.size()}\n\
|
||||||
|
# Before reference size: {self.referenceImageViewer.size()}")
|
||||||
|
# self.selectedImageViewer.resize(self.referenceImageViewer.size())
|
||||||
|
# print(f"After selected size: {self.selectedImageViewer.size()}\n\
|
||||||
|
# After reference size: {self.referenceImageViewer.size()}")
|
||||||
|
|
||||||
if self.vController is None or not self.vController.bestFit:
|
if self.vController is None or not self.vController.bestFit:
|
||||||
return
|
return
|
||||||
# Only update the scaled down pixmaps
|
# Only update the scaled down pixmaps
|
||||||
|
@ -7,9 +7,6 @@ from PyQt5.QtGui import QPixmap, QPainter, QPalette, QCursor
|
|||||||
from PyQt5.QtWidgets import ( QLabel, QSizePolicy, QWidget, QScrollArea,
|
from PyQt5.QtWidgets import ( QLabel, QSizePolicy, QWidget, QScrollArea,
|
||||||
QScrollBar, QApplication, QAbstractScrollArea )
|
QScrollBar, QApplication, QAbstractScrollArea )
|
||||||
|
|
||||||
#TODO QWidget version: fix panning while zoomed-in
|
|
||||||
#TODO: add keyboard shortcuts
|
|
||||||
|
|
||||||
class BaseController(QObject):
|
class BaseController(QObject):
|
||||||
"""Abstract Base class. Singleton.
|
"""Abstract Base class. Singleton.
|
||||||
Base proxy interface to keep image viewers synchronized.
|
Base proxy interface to keep image viewers synchronized.
|
||||||
@ -235,9 +232,11 @@ class ScrollAreaController(BaseController):
|
|||||||
@pyqtSlot(int)
|
@pyqtSlot(int)
|
||||||
def onVScrollBarChanged(self, value):
|
def onVScrollBarChanged(self, value):
|
||||||
if self.sender() is self.referenceViewer:
|
if self.sender() is self.referenceViewer:
|
||||||
self.selectedViewer._verticalScrollBar.setValue(value)
|
if not self.selectedViewer.ignore_signal:
|
||||||
|
self.selectedViewer._verticalScrollBar.setValue(value)
|
||||||
else:
|
else:
|
||||||
self.referenceViewer._verticalScrollBar.setValue(value)
|
if not self.referenceViewer.ignore_signal:
|
||||||
|
self.referenceViewer._verticalScrollBar.setValue(value)
|
||||||
|
|
||||||
@pyqtSlot(int)
|
@pyqtSlot(int)
|
||||||
def onHScrollBarChanged(self, value):
|
def onHScrollBarChanged(self, value):
|
||||||
@ -277,6 +276,8 @@ class GraphicsViewController(BaseController):
|
|||||||
|
|
||||||
class QWidgetImageViewer(QWidget):
|
class QWidgetImageViewer(QWidget):
|
||||||
"""Use a QPixmap, but no scrollbars."""
|
"""Use a QPixmap, but no scrollbars."""
|
||||||
|
#FIXME: panning while zoomed-in is broken (due to delta not interpolated right?)
|
||||||
|
#TODO: keyboard shortcuts for navigation
|
||||||
mouseDragged = pyqtSignal(QPointF)
|
mouseDragged = pyqtSignal(QPointF)
|
||||||
mouseWheeled = pyqtSignal(float)
|
mouseWheeled = pyqtSignal(float)
|
||||||
|
|
||||||
@ -429,7 +430,7 @@ class QWidgetImageViewer(QWidget):
|
|||||||
def onDraggedMouse(self, delta):
|
def onDraggedMouse(self, delta):
|
||||||
self._mousePanningDelta = delta
|
self._mousePanningDelta = delta
|
||||||
self.update()
|
self.update()
|
||||||
print(f"{self} received drag signal from {self.sender()}")
|
# print(f"{self} received drag signal from {self.sender()}")
|
||||||
|
|
||||||
|
|
||||||
class ScalablePixmap(QWidget):
|
class ScalablePixmap(QWidget):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user