From aa79b31aaeef843fe6767e3957434225507b05d2 Mon Sep 17 00:00:00 2001 From: glubsy Date: Sun, 21 Jun 2020 20:51:06 +0200 Subject: [PATCH] Work around resizing down offset by 1 pixel. --- qt/pe/details_dialog.py | 32 ++++++++++++++++++++------------ qt/pe/image_viewer.py | 13 +++++++------ 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/qt/pe/details_dialog.py b/qt/pe/details_dialog.py index 3c5c7102..7a7c9cad 100644 --- a/qt/pe/details_dialog.py +++ b/qt/pe/details_dialog.py @@ -68,15 +68,15 @@ class DetailsDialog(DetailsDialogBase): self.verticalLayout = QVBoxLayout(self) self.verticalLayout.setSpacing(0) self.verticalLayout.setContentsMargins(0, 0, 0, 0) - # self.horizontalLayout = QHBoxLayout() self.horizontalLayout = QGridLayout() # Minimum width for the toolbar in the middle: - self.horizontalLayout.setColumnMinimumWidth(1, 30) - self.horizontalLayout.setColumnStretch(0,1) - self.horizontalLayout.setColumnStretch(1,0) - self.horizontalLayout.setColumnStretch(2,1) + self.horizontalLayout.setColumnMinimumWidth(1, 10) + self.horizontalLayout.setContentsMargins(0, 0, 0, 0) + self.horizontalLayout.setColumnStretch(0,24) + self.horizontalLayout.setColumnStretch(1,1) + self.horizontalLayout.setColumnStretch(2,24) # self.horizontalLayout.setColumnStretch(3,0) - self.horizontalLayout.setSpacing(2) + self.horizontalLayout.setSpacing(1) self.selectedImageViewer = ScrollAreaImageViewer(self, "selectedImage") # self.selectedImage = QLabel(self) @@ -96,6 +96,7 @@ class DetailsDialog(DetailsDialogBase): # 1, 3, 1, 1, Qt.Alignment(Qt.AlignRight)) self.verticalToolBar = QToolBar(self) + # self.verticalToolBar.setMaximumWidth(10) self.verticalToolBar.setOrientation(Qt.Orientation(Qt.Vertical)) # self.subVLayout = QVBoxLayout(self) # self.subVLayout.addWidget(self.verticalToolBar) @@ -144,7 +145,6 @@ class DetailsDialog(DetailsDialogBase): self.verticalToolBar.addWidget(self.buttonBestFit) self.horizontalLayout.addWidget(self.verticalToolBar, 1, 1, 1, 1, Qt.AlignCenter) - # self.horizontalLayout.addWidget(self.verticalToolBar, Qt.AlignVCenter) self.referenceImageViewer = ScrollAreaImageViewer(self, "referenceImage") # self.referenceImage = QLabel(self) @@ -157,7 +157,6 @@ class DetailsDialog(DetailsDialogBase): # self.referenceImageViewer.setSizePolicy(sizePolicy) # self.referenceImageViewer.setAlignment(Qt.AlignCenter) self.horizontalLayout.addWidget(self.referenceImageViewer, 0, 2, 3, 1) - # self.horizontalLayout.addWidget(self.referenceImageViewer) self.verticalLayout.addLayout(self.horizontalLayout) self.tableView = DetailsTable(self) @@ -172,7 +171,7 @@ class DetailsDialog(DetailsDialogBase): self.tableView.setSelectionBehavior(QAbstractItemView.SelectRows) self.tableView.setShowGrid(False) self.verticalLayout.addWidget(self.tableView) - self.tableView.hide() + # self.tableView.hide() self.buttonImgSwap.setEnabled(False) self.buttonZoomIn.setEnabled(False) @@ -215,14 +214,23 @@ class DetailsDialog(DetailsDialogBase): # --- Override def resizeEvent(self, event): # HACK referenceViewer might be 1 pixel shorter in width - # due to dynamic resizing in the GridLayout's engine - # Couldn't find a way to ensure both viewers have the exact same size - # at all time without using resize(). + # due to the toolbar in the middle keeping the same width, + # so resizing in the GridLayout's engine leads to not enough space + # left for the panel on the right. + # This ensures same size while shrinking at least: self.horizontalLayout.setColumnMinimumWidth( 0, self.selectedImageViewer.size().width()) self.horizontalLayout.setColumnMinimumWidth( 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: return # Only update the scaled down pixmaps diff --git a/qt/pe/image_viewer.py b/qt/pe/image_viewer.py index 1deba4b3..f2fa523e 100644 --- a/qt/pe/image_viewer.py +++ b/qt/pe/image_viewer.py @@ -7,9 +7,6 @@ from PyQt5.QtGui import QPixmap, QPainter, QPalette, QCursor from PyQt5.QtWidgets import ( QLabel, QSizePolicy, QWidget, QScrollArea, QScrollBar, QApplication, QAbstractScrollArea ) -#TODO QWidget version: fix panning while zoomed-in -#TODO: add keyboard shortcuts - class BaseController(QObject): """Abstract Base class. Singleton. Base proxy interface to keep image viewers synchronized. @@ -235,9 +232,11 @@ class ScrollAreaController(BaseController): @pyqtSlot(int) def onVScrollBarChanged(self, value): if self.sender() is self.referenceViewer: - self.selectedViewer._verticalScrollBar.setValue(value) + if not self.selectedViewer.ignore_signal: + self.selectedViewer._verticalScrollBar.setValue(value) else: - self.referenceViewer._verticalScrollBar.setValue(value) + if not self.referenceViewer.ignore_signal: + self.referenceViewer._verticalScrollBar.setValue(value) @pyqtSlot(int) def onHScrollBarChanged(self, value): @@ -277,6 +276,8 @@ class GraphicsViewController(BaseController): class QWidgetImageViewer(QWidget): """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) mouseWheeled = pyqtSignal(float) @@ -429,7 +430,7 @@ class QWidgetImageViewer(QWidget): def onDraggedMouse(self, delta): self._mousePanningDelta = delta self.update() - print(f"{self} received drag signal from {self.sender()}") + # print(f"{self} received drag signal from {self.sender()}") class ScalablePixmap(QWidget):