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