From f8af6aacdeac1e49b10e5df5df20f3cc8fdea93c Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Thu, 1 Nov 2012 12:06:54 +0530 Subject: [PATCH] E-book viewer: Add the ability to rotate images to the popup image viewer. Fixes #1073513 ([enhancement] possibilty to rotate picture) --- resources/images/rotate-right.png | Bin 0 -> 6095 bytes resources/images/view-image.png | Bin 0 -> 24905 bytes src/calibre/gui2/viewer/documentview.py | 2 +- src/calibre/gui2/viewer/image_popup.py | 14 +++++++++++++- 4 files changed, 14 insertions(+), 2 deletions(-) create mode 100644 resources/images/rotate-right.png create mode 100644 resources/images/view-image.png diff --git a/resources/images/rotate-right.png b/resources/images/rotate-right.png new file mode 100644 index 0000000000000000000000000000000000000000..664eb88f00355f0de99b33a1abb8e152ef1deb70 GIT binary patch literal 6095 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�jRSr>Rz}?B2bb*IarjZ+zpM*na+Y?!W&b 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 M07*qoM6N<$f~P4+xc~qF literal 0 HcmV?d00001 diff --git a/src/calibre/gui2/viewer/documentview.py b/src/calibre/gui2/viewer/documentview.py index 33b36cf6ec..81ee82f2b6 100644 --- a/src/calibre/gui2/viewer/documentview.py +++ b/src/calibre/gui2/viewer/documentview.py @@ -485,7 +485,7 @@ class DocumentView(QWebView): # {{{ self.dictionary_action.triggered.connect(self.lookup) self.addAction(self.dictionary_action) self.image_popup = ImagePopup(self) - self.view_image_action = QAction(_('View &image...'), self) + self.view_image_action = QAction(QIcon(I('view-image.png')), _('View &image...'), self) self.view_image_action.triggered.connect(self.image_popup) self.search_action = QAction(QIcon(I('dictionary.png')), _('&Search for next occurrence'), self) diff --git a/src/calibre/gui2/viewer/image_popup.py b/src/calibre/gui2/viewer/image_popup.py index 67e9831a52..b0842a7d9c 100644 --- a/src/calibre/gui2/viewer/image_popup.py +++ b/src/calibre/gui2/viewer/image_popup.py @@ -8,7 +8,8 @@ __copyright__ = '2012, Kovid Goyal ' __docformat__ = 'restructuredtext en' from PyQt4.Qt import (QDialog, QPixmap, QUrl, QScrollArea, QLabel, QSizePolicy, - QDialogButtonBox, QVBoxLayout, QPalette, QApplication, QSize, QIcon, Qt) + QDialogButtonBox, QVBoxLayout, QPalette, QApplication, QSize, QIcon, + Qt, QTransform) from calibre.gui2 import choose_save_file, gprefs @@ -37,12 +38,15 @@ class ImageView(QDialog): self.zi_button = zi = bb.addButton(_('Zoom &in'), bb.ActionRole) self.zo_button = zo = bb.addButton(_('Zoom &out'), bb.ActionRole) self.save_button = so = bb.addButton(_('&Save as'), bb.ActionRole) + self.rotate_button = ro = bb.addButton(_('&Rotate'), bb.ActionRole) zi.setIcon(QIcon(I('plus.png'))) zo.setIcon(QIcon(I('minus.png'))) so.setIcon(QIcon(I('save.png'))) + ro.setIcon(QIcon(I('rotate-right.png'))) zi.clicked.connect(self.zoom_in) zo.clicked.connect(self.zoom_out) so.clicked.connect(self.save_image) + ro.clicked.connect(self.rotate_image) self.l = l = QVBoxLayout() self.setLayout(l) @@ -76,6 +80,14 @@ class ImageView(QDialog): self.scrollarea.verticalScrollBar()): sb.setValue(int(factor*sb.value()) + ((factor - 1) * sb.pageStep()/2)) + def rotate_image(self): + pm = self.label.pixmap() + t = QTransform() + t.rotate(90) + pm = pm.transformed(t) + self.label.setPixmap(pm) + self.label.adjustSize() + def __call__(self): geom = self.avail_geom self.label.setPixmap(self.current_img)