E-book viewer: Image popup: Add a checkbox to remember the last used zoom level. Fixes #2038862 [[Enhancement] E-book viewer: options for a better comic book reading experience](https://bugs.launchpad.net/calibre/+bug/2038862)

This commit is contained in:
Kovid Goyal 2023-10-10 20:39:09 +05:30
parent ff7e9006b1
commit ac0e00e60b
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C

View File

@ -176,9 +176,16 @@ class ImageView(QDialog):
i.setToolTip(_('Fit image inside the available space'))
i.setChecked(bool(self.prefs.get('image_popup_fit_image')))
i.stateChanged.connect(self.fit_changed)
h.addWidget(i), h.addStretch(), h.addWidget(bb)
self.remember_zoom = z = QCheckBox(_('&Remember zoom'))
z.setChecked(not i.isChecked() and bool(self.prefs.get('image_popup_remember_zoom', False)))
z.stateChanged.connect(self.remember_zoom_changed)
h.addWidget(i), h.addWidget(z), h.addStretch(), h.addWidget(bb)
if self.fit_image.isChecked():
self.set_to_viewport_size()
elif z.isChecked():
factor = self.prefs.get('image_popup_zoom_factor', self.factor)
if factor != self.factor and not self.fit_image.isChecked():
self.factor = factor
self.restore_geometry(self.prefs, self.geom_name)
fo.setChecked(self.isFullScreen())
fo.toggled.connect(self.toggle_fullscreen)
@ -213,6 +220,7 @@ class ImageView(QDialog):
self.fit_image.setChecked(False)
self.factor = factor
self.factor *= 1.25
self.prefs.set('image_popup_zoom_factor', self.factor)
self.adjust_image(1.25)
def zoom_out(self):
@ -221,6 +229,7 @@ class ImageView(QDialog):
self.fit_image.setChecked(False)
self.factor = factor
self.factor *= 0.8
self.prefs.set('image_popup_zoom_factor', self.factor)
self.adjust_image(0.8)
def save_image(self):
@ -241,10 +250,16 @@ class ImageView(QDialog):
self.prefs.set('image_popup_fit_image', fitted)
if self.fit_image.isChecked():
self.set_to_viewport_size()
self.remember_zoom.setChecked(False)
else:
self.factor = 1
self.prefs.set('image_popup_zoom_factor', self.factor)
self.adjust_image(1)
def remember_zoom_changed(self):
val = bool(self.remember_zoom.isChecked())
self.prefs.set('image_popup_remember_zoom', val)
def toggle_fit(self):
self.fit_image.toggle()
@ -273,6 +288,7 @@ class ImageView(QDialog):
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)
@ -289,6 +305,8 @@ 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)
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)
@ -349,6 +367,5 @@ def show_image(path=None):
d()
app.exec()
if __name__ == '__main__':
show_image()