From f846750d48f98d0b96ae818ff1b271e672320c44 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 18 Dec 2024 14:27:21 +0530 Subject: [PATCH] Edit metadata dialog: Allow right clicking on the cover to view it in a popup window at larger size. Fixes #2091216 [[Enhancement] Open cover in Edit metadata with internal image viewer](https://bugs.launchpad.net/calibre/+bug/2091216) --- src/calibre/gui2/image_popup.py | 16 +++++----------- src/calibre/gui2/metadata/basic_widgets.py | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/calibre/gui2/image_popup.py b/src/calibre/gui2/image_popup.py index f6c3c3be9d..182e98a8fa 100644 --- a/src/calibre/gui2/image_popup.py +++ b/src/calibre/gui2/image_popup.py @@ -139,6 +139,7 @@ class ImageView(QDialog): self.avail_geom = self.screen().availableGeometry() self.current_img = current_img self.current_url = current_url + self.transformed = False self.factor = 1.0 self.geom_name = geom_name self.zoom_in_action = ac = QAction(QIcon.ic('plus.png'), _('Zoom &in'), self) @@ -327,18 +328,12 @@ class ImageView(QDialog): t = QTransform() t.rotate(90) pm = self.current_img = pm.transformed(t) + self.transformed = True self.label.setPixmap(pm) - self.label.adjustSize() - if self.fit_image.isChecked(): - self.set_to_viewport_size() - else: - self.factor = 1 - self.prefs.set('image_popup_zoom_factor', self.factor) - for sb in (self.scrollarea.horizontalScrollBar(), - self.scrollarea.verticalScrollBar()): - sb.setValue(0) + self.adjust_image(self.factor) def __call__(self, use_exec=False): + self.transformed = False geom = self.avail_geom self.label.setPixmap(self.current_img) self.label.adjustSize() @@ -350,8 +345,7 @@ class ImageView(QDialog): self.current_image_name = self.current_url reso = '' if self.current_img and not self.current_img.isNull(): - if self.factor != 1: - self.adjust_image(self.factor) + self.adjust_image(self.factor) reso = f'[{self.current_img.width()}x{self.current_img.height()}]' title = _('Image: {name} {resolution}').format(name=self.current_image_name, resolution=reso) self.setWindowTitle(title) diff --git a/src/calibre/gui2/metadata/basic_widgets.py b/src/calibre/gui2/metadata/basic_widgets.py index b57a06f978..181e063f01 100644 --- a/src/calibre/gui2/metadata/basic_widgets.py +++ b/src/calibre/gui2/metadata/basic_widgets.py @@ -1228,6 +1228,20 @@ class Cover(ImageView): # {{{ self.setSizePolicy(QSizePolicy(QSizePolicy.Policy.Preferred, QSizePolicy.Policy.Preferred)) + def build_context_menu(self): + m = super().build_context_menu() + m.addSeparator() + m.addAction(QIcon.ic('view-image'), _('View image in popup window'), self.view_image) + return m + + def view_image(self): + from calibre.gui2.image_popup import ImageView + d = ImageView(self, self.pixmap(), 'cover.jpg') + d(use_exec=True) + if d.transformed: + from calibre.utils.img import image_to_data + self.current_val = image_to_data(d.current_img.toImage(), fmt='png') + def undo_trim(self): if self.cdata_before_trim: self.current_val = self.cdata_before_trim