diff --git a/images/exchange.png b/images/exchange.png
new file mode 100644
index 00000000..6ed902b7
Binary files /dev/null and b/images/exchange.png differ
diff --git a/images/exchange_purple.png b/images/exchange_purple.png
new file mode 100644
index 00000000..21a6296a
Binary files /dev/null and b/images/exchange_purple.png differ
diff --git a/images/old_zoom_best_fit.png b/images/old_zoom_best_fit.png
new file mode 100644
index 00000000..444d4dcf
Binary files /dev/null and b/images/old_zoom_best_fit.png differ
diff --git a/images/old_zoom_in.png b/images/old_zoom_in.png
new file mode 100644
index 00000000..fbcbe2c1
Binary files /dev/null and b/images/old_zoom_in.png differ
diff --git a/images/old_zoom_original.png b/images/old_zoom_original.png
new file mode 100644
index 00000000..0bb910d6
Binary files /dev/null and b/images/old_zoom_original.png differ
diff --git a/images/old_zoom_out.png b/images/old_zoom_out.png
new file mode 100644
index 00000000..f7e84c98
Binary files /dev/null and b/images/old_zoom_out.png differ
diff --git a/qt/dg.qrc b/qt/dg.qrc
index 545a9806..941a7340 100644
--- a/qt/dg.qrc
+++ b/qt/dg.qrc
@@ -5,5 +5,10 @@
../images/plus_8.png
../images/minus_8.png
../qtlib/images/search_clear_13.png
+ ../images/exchange_purple.png
+ ../images/old_zoom_in.png
+ ../images/old_zoom_out.png
+ ../images/old_zoom_original.png
+ ../images/old_zoom_best_fit.png
diff --git a/qt/pe/details_dialog.py b/qt/pe/details_dialog.py
index 7dcf0cd9..15c16157 100644
--- a/qt/pe/details_dialog.py
+++ b/qt/pe/details_dialog.py
@@ -90,23 +90,7 @@ class DetailsDialog(DetailsDialogBase):
# --- Override
def resizeEvent(self, event):
- # HACK referenceViewer might be 1 pixel shorter in width
- # 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""",
- # f"""Before reference size: {self.referenceImageViewer.size()}""")
- self.selectedImageViewer.resize(self.referenceImageViewer.size())
- # print(f"""After selected size: {self.selectedImageViewer.size()}\n""",
- # f"""After reference size: {self.referenceImageViewer.size()}""")
-
+ self.ensure_same_sizes()
if self.vController is None or not self.vController.bestFit:
return
# Only update the scaled down pixmaps
@@ -122,8 +106,28 @@ class DetailsDialog(DetailsDialogBase):
# Windows seems to add a few pixels more to the table somehow
+ 5 if ISWINDOWS else 0)
DetailsDialogBase.show(self)
+ self.ensure_same_sizes()
self._update()
+ def ensure_same_sizes(self):
+ # HACK referenceViewer might be 1 pixel shorter in width
+ # 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""",
+ # f"""Before reference size: {self.referenceImageViewer.size()}""")
+ self.selectedImageViewer.resize(self.referenceImageViewer.size())
+ # print(f"""After selected size: {self.selectedImageViewer.size()}\n""",
+ # f"""After reference size: {self.referenceImageViewer.size()}""")
+
# model --> view
def refresh(self):
DetailsDialogBase.refresh(self)
diff --git a/qt/pe/image_viewer.py b/qt/pe/image_viewer.py
index 54366e98..663b5cf7 100644
--- a/qt/pe/image_viewer.py
+++ b/qt/pe/image_viewer.py
@@ -10,6 +10,7 @@ from PyQt5.QtWidgets import (
QToolBar, QToolButton, QAction, QWidget, QScrollArea,
QApplication, QAbstractScrollArea, QStyle)
from hscommon.trans import trget
+from hscommon.plat import ISLINUX
tr = trget("ui")
MAX_SCALE = 12.0
@@ -21,7 +22,7 @@ def createActions(actions, target):
for name, shortcut, icon, desc, func in actions:
action = QAction(target)
if icon:
- action.setIcon(QIcon.fromTheme(icon))
+ action.setIcon(icon)
if shortcut:
action.setShortcut(shortcut)
action.setText(desc)
@@ -48,28 +49,32 @@ class ViewerToolBar(QToolBar):
(
"actionZoomIn",
QKeySequence.ZoomIn,
- "zoom-in",
+ QIcon.fromTheme("zoom-in") if ISLINUX
+ else QIcon(QPixmap(":/" + "zoom_in")),
tr("Increase zoom"),
controller.zoomIn,
),
(
"actionZoomOut",
QKeySequence.ZoomOut,
- "zoom-out",
+ QIcon.fromTheme("zoom-out") if ISLINUX
+ else QIcon(QPixmap(":/" + "zoom_out")),
tr("Decrease zoom"),
controller.zoomOut,
),
(
"actionNormalSize",
tr("Ctrl+/"),
- "zoom-original",
+ QIcon.fromTheme("zoom-original") if ISLINUX
+ else QIcon(QPixmap(":/" + "zoom_original")),
tr("Normal size"),
controller.zoomNormalSize,
),
(
"actionBestFit",
tr("Ctrl+*"),
- "zoom-best-fit",
+ QIcon.fromTheme("zoom-best-fit") if ISLINUX
+ else QIcon(QPixmap(":/" + "zoom_best_fit")),
tr("Best fit"),
controller.zoomBestFit,
)
@@ -83,7 +88,9 @@ class ViewerToolBar(QToolBar):
self.buttonImgSwap.setToolButtonStyle(Qt.ToolButtonIconOnly)
self.buttonImgSwap.setIcon(
QIcon.fromTheme('view-refresh',
- self.style().standardIcon(QStyle.SP_BrowserReload)))
+ self.style().standardIcon(QStyle.SP_BrowserReload))
+ if ISLINUX
+ else QIcon(QPixmap(":/" + "exchange")))
self.buttonImgSwap.setText('Swap images')
self.buttonImgSwap.setToolTip('Swap images')
self.buttonImgSwap.pressed.connect(self.controller.swapImages)