From 6aa631708351e104104f186e9e27edb2b419c391 Mon Sep 17 00:00:00 2001
From: twodoorcoupe
Date: Fri, 28 Jun 2024 10:51:06 +0200
Subject: [PATCH] Improve image resizing options UI
---
picard/const/defaults.py | 1 +
picard/coverart/processing/processors.py | 32 ++--
picard/options.py | 15 +-
.../ui/forms/ui_options_cover_processing.py | 129 +++++--------
picard/ui/options/cover_processing.py | 56 +++---
test/test_coverart_processing.py | 26 ++-
ui/options_cover_processing.ui | 179 +++++-------------
7 files changed, 151 insertions(+), 287 deletions(-)
diff --git a/picard/const/defaults.py b/picard/const/defaults.py
index 5bce4f324..b627726ab 100644
--- a/picard/const/defaults.py
+++ b/picard/const/defaults.py
@@ -153,4 +153,5 @@ DEFAULT_TIME_FORMAT = '%Y-%m-%d %H:%M:%S'
DEFAULT_COVER_MIN_SIZE = 250
DEFAULT_COVER_MAX_SIZE = 1000
+DEFAULT_COVER_RESIZE_MODE = 0
DEFAULT_COVER_CONVERTING_FORMAT = "jpeg"
diff --git a/picard/coverart/processing/processors.py b/picard/coverart/processing/processors.py
index 6f55c1a13..098c3ff24 100644
--- a/picard/coverart/processing/processors.py
+++ b/picard/coverart/processing/processors.py
@@ -35,14 +35,16 @@ class ResizeImage(ImageProcessor):
def save_to_file(self):
config = get_config()
- return config.setting['cover_file_scale_down'] or config.setting['cover_file_scale_up']
+ return config.setting['cover_file_resize']
def save_to_tags(self):
config = get_config()
- return config.setting['cover_tags_scale_down'] or config.setting['cover_tags_scale_up']
+ return config.setting['cover_tags_resize']
def same_processing(self):
setting = get_config().setting
+ both_resize = setting['cover_tags_resize'] and setting['cover_file_resize']
+ same_enlarge = setting['cover_tags_dont_enlarge'] == setting['cover_file_dont_enlarge']
tags_size = (
setting['cover_tags_resize_target_width'] if setting['cover_tags_resize_use_width'] else 0,
setting['cover_tags_resize_target_height'] if setting['cover_tags_resize_use_height'] else 0
@@ -52,35 +54,28 @@ class ResizeImage(ImageProcessor):
setting['cover_file_resize_target_height'] if setting['cover_file_resize_use_height'] else 0
)
same_size = tags_size == file_size
- tags_direction = (setting['cover_tags_scale_up'], setting['cover_tags_scale_down'])
- file_direction = (setting['cover_file_scale_up'], setting['cover_file_scale_down'])
- same_direction = tags_direction == file_direction and any(tags_direction)
- tags_resize_mode = (setting['cover_tags_stretch'], setting['cover_tags_crop'])
- file_resize_mode = (setting['cover_file_stretch'], setting['cover_file_crop'])
- same_resize_mode = tags_resize_mode == file_resize_mode
- return same_size and same_direction and same_resize_mode
+ same_resize_mode = setting['cover_tags_resize_mode'] == setting['cover_file_resize_mode']
+ return both_resize and same_enlarge and same_size and same_resize_mode
def run(self, image, target):
start_time = time.time()
config = get_config()
if target == ProcessingTarget.TAGS:
- scale_up = config.setting['cover_tags_scale_up']
- scale_down = config.setting['cover_tags_scale_down']
+ scale_up = not config.setting['cover_tags_dont_enlarge']
use_width = config.setting['cover_tags_resize_use_width']
target_width = config.setting['cover_tags_resize_target_width']
use_height = config.setting['cover_tags_resize_use_height']
target_height = config.setting['cover_tags_resize_target_height']
- stretch = config.setting['cover_tags_stretch']
- crop = config.setting['cover_tags_crop']
+ crop = config.setting['cover_tags_resize_mode'] == 1
+ stretch = config.setting['cover_tags_resize_mode'] == 2
else:
- scale_up = config.setting['cover_file_scale_up']
- scale_down = config.setting['cover_file_scale_down']
+ scale_up = not config.setting['cover_file_dont_enlarge']
use_width = config.setting['cover_file_resize_use_width']
target_width = config.setting['cover_file_resize_target_width']
use_height = config.setting['cover_file_resize_use_height']
target_height = config.setting['cover_file_resize_target_height']
- stretch = config.setting['cover_file_stretch']
- crop = config.setting['cover_file_crop']
+ crop = config.setting['cover_file_resize_mode'] == 1
+ stretch = config.setting['cover_file_resize_mode'] == 2
width_resize = target_width if use_width else image.info.width
height_resize = target_height if use_height else image.info.height
@@ -95,8 +90,7 @@ class ResizeImage(ImageProcessor):
width_scale_factor = scale_factor
height_scale_factor = scale_factor
if (width_scale_factor == 1 and height_scale_factor == 1
- or ((width_scale_factor > 1 or height_scale_factor > 1) and not scale_up)
- or ((width_scale_factor < 1 or height_scale_factor < 1) and not scale_down)):
+ or ((width_scale_factor > 1 or height_scale_factor > 1) and not scale_up)):
# no resizing needed
return
diff --git a/picard/options.py b/picard/options.py
index 3d45f9492..4c0a90adb 100644
--- a/picard/options.py
+++ b/picard/options.py
@@ -43,6 +43,7 @@ from picard.const.defaults import (
DEFAULT_COVER_IMAGE_FILENAME,
DEFAULT_COVER_MAX_SIZE,
DEFAULT_COVER_MIN_SIZE,
+ DEFAULT_COVER_RESIZE_MODE,
DEFAULT_CURRENT_BROWSER_PATH,
DEFAULT_DRIVES,
DEFAULT_FPCALC_THREADS,
@@ -176,24 +177,22 @@ BoolOption('setting', 'save_only_one_front_image', False, title=N_("Save only a
BoolOption('setting', 'filter_cover_by_size', False)
IntOption('setting', 'cover_minimum_width', DEFAULT_COVER_MIN_SIZE)
IntOption('setting', 'cover_minimum_height', DEFAULT_COVER_MIN_SIZE)
-BoolOption('setting', 'cover_tags_scale_up', False)
-BoolOption('setting', 'cover_tags_scale_down', False)
+BoolOption('setting', 'cover_tags_dont_enlarge', True)
+BoolOption('setting', 'cover_tags_resize', False)
BoolOption('setting', 'cover_tags_resize_use_width', True)
IntOption('setting', 'cover_tags_resize_target_width', DEFAULT_COVER_MAX_SIZE)
BoolOption('setting', 'cover_tags_resize_use_height', True)
IntOption('setting', 'cover_tags_resize_target_height', DEFAULT_COVER_MAX_SIZE)
-BoolOption('setting', 'cover_tags_stretch', False)
-BoolOption('setting', 'cover_tags_crop', False)
+IntOption('setting', 'cover_tags_resize_mode', DEFAULT_COVER_RESIZE_MODE)
BoolOption('setting', 'cover_tags_convert_images', False)
TextOption('setting', 'cover_tags_convert_to_format', DEFAULT_COVER_CONVERTING_FORMAT)
-BoolOption('setting', 'cover_file_scale_up', False)
-BoolOption('setting', 'cover_file_scale_down', False)
+BoolOption('setting', 'cover_file_dont_enlarge', True)
+BoolOption('setting', 'cover_file_resize', False)
BoolOption('setting', 'cover_file_resize_use_width', True)
IntOption('setting', 'cover_file_resize_target_width', DEFAULT_COVER_MAX_SIZE)
BoolOption('setting', 'cover_file_resize_use_height', True)
IntOption('setting', 'cover_file_resize_target_height', DEFAULT_COVER_MAX_SIZE)
-BoolOption('setting', 'cover_file_stretch', False)
-BoolOption('setting', 'cover_file_crop', False)
+IntOption('setting', 'cover_file_resize_mode', DEFAULT_COVER_RESIZE_MODE)
BoolOption('setting', 'cover_file_convert_images', False)
TextOption('setting', 'cover_file_convert_to_format', DEFAULT_COVER_CONVERTING_FORMAT)
diff --git a/picard/ui/forms/ui_options_cover_processing.py b/picard/ui/forms/ui_options_cover_processing.py
index 8b0ca6f27..14a9022c7 100644
--- a/picard/ui/forms/ui_options_cover_processing.py
+++ b/picard/ui/forms/ui_options_cover_processing.py
@@ -17,7 +17,7 @@ from picard.i18n import gettext as _
class Ui_CoverProcessingOptionsPage(object):
def setupUi(self, CoverProcessingOptionsPage):
CoverProcessingOptionsPage.setObjectName("CoverProcessingOptionsPage")
- CoverProcessingOptionsPage.resize(529, 467)
+ CoverProcessingOptionsPage.resize(535, 467)
self.verticalLayout = QtWidgets.QVBoxLayout(CoverProcessingOptionsPage)
self.verticalLayout.setObjectName("verticalLayout")
self.filtering = QtWidgets.QGroupBox(parent=CoverProcessingOptionsPage)
@@ -87,25 +87,19 @@ class Ui_CoverProcessingOptionsPage(object):
self.resizing.setObjectName("resizing")
self.horizontalLayout_7 = QtWidgets.QHBoxLayout(self.resizing)
self.horizontalLayout_7.setObjectName("horizontalLayout_7")
- self.save_to_tags = QtWidgets.QGroupBox(parent=self.resizing)
- self.save_to_tags.setCheckable(False)
- self.save_to_tags.setChecked(False)
- self.save_to_tags.setObjectName("save_to_tags")
- self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.save_to_tags)
- self.verticalLayout_3.setObjectName("verticalLayout_3")
- self.tags_scale_widget = QtWidgets.QWidget(parent=self.save_to_tags)
- self.tags_scale_widget.setObjectName("tags_scale_widget")
- self.horizontalLayout_8 = QtWidgets.QHBoxLayout(self.tags_scale_widget)
- self.horizontalLayout_8.setContentsMargins(0, 0, 0, 0)
- self.horizontalLayout_8.setObjectName("horizontalLayout_8")
- self.tags_scale_up = QtWidgets.QCheckBox(parent=self.tags_scale_widget)
- self.tags_scale_up.setObjectName("tags_scale_up")
- self.horizontalLayout_8.addWidget(self.tags_scale_up)
- self.tags_scale_down = QtWidgets.QCheckBox(parent=self.tags_scale_widget)
+ self.tags_scale_down = QtWidgets.QGroupBox(parent=self.resizing)
+ self.tags_scale_down.setCheckable(True)
+ self.tags_scale_down.setChecked(False)
self.tags_scale_down.setObjectName("tags_scale_down")
- self.horizontalLayout_8.addWidget(self.tags_scale_down)
- self.verticalLayout_3.addWidget(self.tags_scale_widget)
- self.tags_resize_width_widget = QtWidgets.QWidget(parent=self.save_to_tags)
+ self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.tags_scale_down)
+ self.verticalLayout_3.setObjectName("verticalLayout_3")
+ self.tags_resize_mode = QtWidgets.QComboBox(parent=self.tags_scale_down)
+ self.tags_resize_mode.setObjectName("tags_resize_mode")
+ self.tags_resize_mode.addItem("")
+ self.tags_resize_mode.addItem("")
+ self.tags_resize_mode.addItem("")
+ self.verticalLayout_3.addWidget(self.tags_resize_mode)
+ self.tags_resize_width_widget = QtWidgets.QWidget(parent=self.tags_scale_down)
self.tags_resize_width_widget.setObjectName("tags_resize_width_widget")
self.horizontalLayout_5 = QtWidgets.QHBoxLayout(self.tags_resize_width_widget)
self.horizontalLayout_5.setContentsMargins(0, 0, 0, 0)
@@ -133,7 +127,7 @@ class Ui_CoverProcessingOptionsPage(object):
self.px_label5.setObjectName("px_label5")
self.horizontalLayout_5.addWidget(self.px_label5)
self.verticalLayout_3.addWidget(self.tags_resize_width_widget)
- self.tags_resize_height_widget = QtWidgets.QWidget(parent=self.save_to_tags)
+ self.tags_resize_height_widget = QtWidgets.QWidget(parent=self.tags_scale_down)
self.tags_resize_height_widget.setObjectName("tags_resize_height_widget")
self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.tags_resize_height_widget)
self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
@@ -161,43 +155,28 @@ class Ui_CoverProcessingOptionsPage(object):
self.px_label6.setObjectName("px_label6")
self.horizontalLayout_3.addWidget(self.px_label6)
self.verticalLayout_3.addWidget(self.tags_resize_height_widget)
- self.tags_resize_mode = QtWidgets.QWidget(parent=self.save_to_tags)
- self.tags_resize_mode.setObjectName("tags_resize_mode")
- self.horizontalLayout_10 = QtWidgets.QHBoxLayout(self.tags_resize_mode)
- self.horizontalLayout_10.setContentsMargins(0, 0, 0, 0)
- self.horizontalLayout_10.setSpacing(2)
- self.horizontalLayout_10.setObjectName("horizontalLayout_10")
- self.tags_keep = QtWidgets.QRadioButton(parent=self.tags_resize_mode)
- self.tags_keep.setChecked(True)
- self.tags_keep.setObjectName("tags_keep")
- self.horizontalLayout_10.addWidget(self.tags_keep)
- self.tags_crop = QtWidgets.QRadioButton(parent=self.tags_resize_mode)
- self.tags_crop.setObjectName("tags_crop")
- self.horizontalLayout_10.addWidget(self.tags_crop)
- self.tags_stretch = QtWidgets.QRadioButton(parent=self.tags_resize_mode)
- self.tags_stretch.setObjectName("tags_stretch")
- self.horizontalLayout_10.addWidget(self.tags_stretch)
- self.verticalLayout_3.addWidget(self.tags_resize_mode)
- self.horizontalLayout_7.addWidget(self.save_to_tags)
- self.save_to_file = QtWidgets.QGroupBox(parent=self.resizing)
- self.save_to_file.setCheckable(False)
- self.save_to_file.setChecked(False)
- self.save_to_file.setObjectName("save_to_file")
- self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.save_to_file)
+ self.tags_scale_up = QtWidgets.QCheckBox(parent=self.tags_scale_down)
+ self.tags_scale_up.setObjectName("tags_scale_up")
+ self.verticalLayout_3.addWidget(self.tags_scale_up)
+ self.horizontalLayout_7.addWidget(self.tags_scale_down)
+ self.file_scale_down = QtWidgets.QGroupBox(parent=self.resizing)
+ self.file_scale_down.setCheckable(True)
+ self.file_scale_down.setObjectName("file_scale_down")
+ self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.file_scale_down)
self.verticalLayout_4.setObjectName("verticalLayout_4")
- self.file_scale_widget = QtWidgets.QWidget(parent=self.save_to_file)
+ self.file_resize_mode = QtWidgets.QComboBox(parent=self.file_scale_down)
+ self.file_resize_mode.setObjectName("file_resize_mode")
+ self.file_resize_mode.addItem("")
+ self.file_resize_mode.addItem("")
+ self.file_resize_mode.addItem("")
+ self.verticalLayout_4.addWidget(self.file_resize_mode)
+ self.file_scale_widget = QtWidgets.QWidget(parent=self.file_scale_down)
self.file_scale_widget.setObjectName("file_scale_widget")
self.horizontalLayout_9 = QtWidgets.QHBoxLayout(self.file_scale_widget)
self.horizontalLayout_9.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_9.setObjectName("horizontalLayout_9")
- self.file_scale_up = QtWidgets.QCheckBox(parent=self.file_scale_widget)
- self.file_scale_up.setObjectName("file_scale_up")
- self.horizontalLayout_9.addWidget(self.file_scale_up)
- self.file_scale_down = QtWidgets.QCheckBox(parent=self.file_scale_widget)
- self.file_scale_down.setObjectName("file_scale_down")
- self.horizontalLayout_9.addWidget(self.file_scale_down)
self.verticalLayout_4.addWidget(self.file_scale_widget)
- self.file_resize_width_widget = QtWidgets.QWidget(parent=self.save_to_file)
+ self.file_resize_width_widget = QtWidgets.QWidget(parent=self.file_scale_down)
self.file_resize_width_widget.setObjectName("file_resize_width_widget")
self.horizontalLayout_6 = QtWidgets.QHBoxLayout(self.file_resize_width_widget)
self.horizontalLayout_6.setContentsMargins(0, 0, 0, 0)
@@ -225,7 +204,7 @@ class Ui_CoverProcessingOptionsPage(object):
self.px_label3.setObjectName("px_label3")
self.horizontalLayout_6.addWidget(self.px_label3)
self.verticalLayout_4.addWidget(self.file_resize_width_widget)
- self.file_resize_height_widget = QtWidgets.QWidget(parent=self.save_to_file)
+ self.file_resize_height_widget = QtWidgets.QWidget(parent=self.file_scale_down)
self.file_resize_height_widget.setObjectName("file_resize_height_widget")
self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.file_resize_height_widget)
self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
@@ -253,24 +232,10 @@ class Ui_CoverProcessingOptionsPage(object):
self.px_label4.setObjectName("px_label4")
self.horizontalLayout_4.addWidget(self.px_label4)
self.verticalLayout_4.addWidget(self.file_resize_height_widget)
- self.file_resize_mode = QtWidgets.QWidget(parent=self.save_to_file)
- self.file_resize_mode.setObjectName("file_resize_mode")
- self.horizontalLayout_11 = QtWidgets.QHBoxLayout(self.file_resize_mode)
- self.horizontalLayout_11.setContentsMargins(0, 0, 0, 0)
- self.horizontalLayout_11.setSpacing(2)
- self.horizontalLayout_11.setObjectName("horizontalLayout_11")
- self.file_keep = QtWidgets.QRadioButton(parent=self.file_resize_mode)
- self.file_keep.setChecked(True)
- self.file_keep.setObjectName("file_keep")
- self.horizontalLayout_11.addWidget(self.file_keep)
- self.file_crop = QtWidgets.QRadioButton(parent=self.file_resize_mode)
- self.file_crop.setObjectName("file_crop")
- self.horizontalLayout_11.addWidget(self.file_crop)
- self.file_stretch = QtWidgets.QRadioButton(parent=self.file_resize_mode)
- self.file_stretch.setObjectName("file_stretch")
- self.horizontalLayout_11.addWidget(self.file_stretch)
- self.verticalLayout_4.addWidget(self.file_resize_mode)
- self.horizontalLayout_7.addWidget(self.save_to_file)
+ self.file_scale_up = QtWidgets.QCheckBox(parent=self.file_scale_down)
+ self.file_scale_up.setObjectName("file_scale_up")
+ self.verticalLayout_4.addWidget(self.file_scale_up)
+ self.horizontalLayout_7.addWidget(self.file_scale_down)
self.verticalLayout.addWidget(self.resizing)
self.converting = QtWidgets.QGroupBox(parent=CoverProcessingOptionsPage)
self.converting.setCheckable(False)
@@ -324,27 +289,25 @@ class Ui_CoverProcessingOptionsPage(object):
self.px_label1.setText(_("px"))
self.filtering_height_label.setText(_("Minimum height:"))
self.px_label2.setText(_("px"))
- self.resizing.setTitle(_("Resize images if above the given size"))
- self.save_to_tags.setTitle(_("Resize images saved to tags "))
- self.tags_scale_up.setText(_("Scale up"))
- self.tags_scale_down.setText(_("Scale down"))
+ self.resizing.setTitle(_("Resize images to the given size"))
+ self.tags_scale_down.setTitle(_("Resize images saved to tags "))
+ self.tags_resize_mode.setItemText(0, _("Maintain aspect ratio"))
+ self.tags_resize_mode.setItemText(1, _("Crop to fit"))
+ self.tags_resize_mode.setItemText(2, _("Stretch to fit"))
self.tags_resize_width_label.setText(_("Width:"))
self.px_label5.setText(_("px"))
self.tags_resize_height_label.setText(_("Height:"))
self.px_label6.setText(_("px"))
- self.tags_keep.setText(_("Fit"))
- self.tags_crop.setText(_("Fill"))
- self.tags_stretch.setText(_("Stretch"))
- self.save_to_file.setTitle(_("Resize images saved to files"))
- self.file_scale_up.setText(_("Scale up"))
- self.file_scale_down.setText(_("Scale down"))
+ self.tags_scale_up.setText(_("Don\'t enlarge"))
+ self.file_scale_down.setTitle(_("Resize images saved to files"))
+ self.file_resize_mode.setItemText(0, _("Maintain aspect ratio"))
+ self.file_resize_mode.setItemText(1, _("Crop to fit"))
+ self.file_resize_mode.setItemText(2, _("Stretch to fit"))
self.file_resize_width_label.setText(_("Width:"))
self.px_label3.setText(_("px"))
self.file_resize_height_label.setText(_("Height:"))
self.px_label4.setText(_("px"))
- self.file_keep.setText(_("Fit"))
- self.file_crop.setText(_("Fill"))
- self.file_stretch.setText(_("Stretch"))
+ self.file_scale_up.setText(_("Don\'t enlarge"))
self.converting.setTitle(_("Convert images to the given format"))
self.convert_tags.setTitle(_("Convert images saved to tags"))
self.convert_tags_label.setText(_("New format:"))
diff --git a/picard/ui/options/cover_processing.py b/picard/ui/options/cover_processing.py
index 71d1457d8..b1cebbd93 100644
--- a/picard/ui/options/cover_processing.py
+++ b/picard/ui/options/cover_processing.py
@@ -20,6 +20,8 @@
from functools import partial
+from PyQt6.QtCore import Qt
+
from picard.config import get_config
from picard.extension_points.options_pages import register_options_page
from picard.i18n import (
@@ -47,24 +49,22 @@ class CoverProcessingOptionsPage(OptionsPage):
self.register_setting('filter_cover_by_size')
self.register_setting('cover_minimum_width')
self.register_setting('cover_minimum_height')
- self.register_setting('cover_tags_scale_up')
- self.register_setting('cover_tags_scale_down')
+ self.register_setting('cover_tags_dont_enlarge')
+ self.register_setting('cover_tags_resize')
self.register_setting('cover_tags_resize_use_width')
self.register_setting('cover_tags_resize_target_width')
self.register_setting('cover_tags_resize_use_height')
self.register_setting('cover_tags_resize_target_height')
- self.register_setting('cover_tags_stretch')
- self.register_setting('cover_tags_crop')
+ self.register_setting('cover_tags_resize_mode')
self.register_setting('cover_tags_convert_images')
self.register_setting('cover_tags_convert_to_format')
- self.register_setting('cover_file_scale_up')
- self.register_setting('cover_file_scale_down')
+ self.register_setting('cover_file_dont_enlarge')
+ self.register_setting('cover_file_resize')
self.register_setting('cover_file_resize_use_width')
self.register_setting('cover_file_resize_target_width')
self.register_setting('cover_file_resize_use_height')
self.register_setting('cover_file_resize_target_height')
- self.register_setting('cover_file_stretch')
- self.register_setting('cover_file_crop')
+ self.register_setting('cover_file_resize_mode')
self.register_setting('cover_file_convert_images')
self.register_setting('cover_file_convert_to_format')
@@ -79,8 +79,8 @@ class CoverProcessingOptionsPage(OptionsPage):
"1000x1000 would result in a final image size of 1000x500."
"
"
)
- self.ui.tags_keep.setToolTip(_(tooltip_keep))
- self.ui.file_keep.setToolTip(_(tooltip_keep))
+ self.ui.tags_resize_mode.setItemData(0, _(tooltip_keep), Qt.ItemDataRole.ToolTipRole)
+ self.ui.file_resize_mode.setItemData(0, _(tooltip_keep), Qt.ItemDataRole.ToolTipRole)
tooltip_crop = (
""
"Scale the source image so that it completely fills the target dimensions "
@@ -94,8 +94,8 @@ class CoverProcessingOptionsPage(OptionsPage):
"would be center cropped resulting in the final image size of 1000x1000."
"
"
)
- self.ui.tags_crop.setToolTip(_(tooltip_crop))
- self.ui.file_crop.setToolTip(_(tooltip_crop))
+ self.ui.tags_resize_mode.setItemData(1, _(tooltip_crop), Qt.ItemDataRole.ToolTipRole)
+ self.ui.file_resize_mode.setItemData(1, _(tooltip_crop), Qt.ItemDataRole.ToolTipRole)
tooltip_stretch = (
""
"Stretch the image to exactly fit the specified dimensions, "
@@ -106,8 +106,8 @@ class CoverProcessingOptionsPage(OptionsPage):
"size of 1000x1000."
"
"
)
- self.ui.tags_stretch.setToolTip(_(tooltip_stretch))
- self.ui.file_stretch.setToolTip(_(tooltip_stretch))
+ self.ui.tags_resize_mode.setItemData(2, _(tooltip_stretch), Qt.ItemDataRole.ToolTipRole)
+ self.ui.file_resize_mode.setItemData(2, _(tooltip_stretch), Qt.ItemDataRole.ToolTipRole)
tags_checkboxes = (self.ui.tags_resize_width_label, self.ui.tags_resize_height_label)
tags_at_least_one_checked = partial(self._ensure_at_least_one_checked, tags_checkboxes)
@@ -142,24 +142,22 @@ class CoverProcessingOptionsPage(OptionsPage):
self.ui.filtering.setChecked(config.setting['filter_cover_by_size'])
self.ui.filtering_width_value.setValue(config.setting['cover_minimum_width'])
self.ui.filtering_height_value.setValue(config.setting['cover_minimum_height'])
- self.ui.tags_scale_up.setChecked(config.setting['cover_tags_scale_up'])
- self.ui.tags_scale_down.setChecked(config.setting['cover_tags_scale_down'])
+ self.ui.tags_scale_up.setChecked(config.setting['cover_tags_dont_enlarge'])
+ self.ui.tags_scale_down.setChecked(config.setting['cover_tags_resize'])
self.ui.tags_resize_width_label.setChecked(config.setting['cover_tags_resize_use_width'])
self.ui.tags_resize_width_value.setValue(config.setting['cover_tags_resize_target_width'])
self.ui.tags_resize_height_label.setChecked(config.setting['cover_tags_resize_use_height'])
self.ui.tags_resize_height_value.setValue(config.setting['cover_tags_resize_target_height'])
- self.ui.tags_stretch.setChecked(config.setting['cover_tags_stretch'])
- self.ui.tags_crop.setChecked(config.setting['cover_tags_crop'])
+ self.ui.tags_resize_mode.setCurrentIndex(config.setting['cover_tags_resize_mode'])
self.ui.convert_tags.setChecked(config.setting['cover_tags_convert_images'])
self.ui.convert_tags_format.setCurrentText(config.setting['cover_tags_convert_to_format'])
- self.ui.file_scale_up.setChecked(config.setting['cover_file_scale_up'])
- self.ui.file_scale_down.setChecked(config.setting['cover_file_scale_down'])
+ self.ui.file_scale_up.setChecked(config.setting['cover_file_dont_enlarge'])
+ self.ui.file_scale_down.setChecked(config.setting['cover_file_resize'])
self.ui.file_resize_width_label.setChecked(config.setting['cover_file_resize_use_width'])
self.ui.file_resize_width_value.setValue(config.setting['cover_file_resize_target_width'])
self.ui.file_resize_height_label.setChecked(config.setting['cover_file_resize_use_height'])
self.ui.file_resize_height_value.setValue(config.setting['cover_file_resize_target_height'])
- self.ui.file_stretch.setChecked(config.setting['cover_file_stretch'])
- self.ui.file_crop.setChecked(config.setting['cover_file_crop'])
+ self.ui.file_resize_mode.setCurrentIndex(config.setting['cover_file_resize_mode'])
self.ui.convert_file.setChecked(config.setting['cover_file_convert_images'])
self.ui.convert_file_format.setCurrentText(config.setting['cover_file_convert_to_format'])
@@ -168,24 +166,22 @@ class CoverProcessingOptionsPage(OptionsPage):
config.setting['filter_cover_by_size'] = self.ui.filtering.isChecked()
config.setting['cover_minimum_width'] = self.ui.filtering_width_value.value()
config.setting['cover_minimum_height'] = self.ui.filtering_height_value.value()
- config.setting['cover_tags_scale_up'] = self.ui.tags_scale_up.isChecked()
- config.setting['cover_tags_scale_down'] = self.ui.tags_scale_down.isChecked()
+ config.setting['cover_tags_dont_enlarge'] = self.ui.tags_scale_up.isChecked()
+ config.setting['cover_tags_resize'] = self.ui.tags_scale_down.isChecked()
config.setting['cover_tags_resize_use_width'] = self.ui.tags_resize_width_label.isChecked()
config.setting['cover_tags_resize_target_width'] = self.ui.tags_resize_width_value.value()
config.setting['cover_tags_resize_use_height'] = self.ui.tags_resize_height_label.isChecked()
config.setting['cover_tags_resize_target_height'] = self.ui.tags_resize_height_value.value()
- config.setting['cover_tags_stretch'] = self.ui.tags_stretch.isChecked()
- config.setting['cover_tags_crop'] = self.ui.tags_crop.isChecked()
+ config.setting['cover_tags_resize_mode'] = self.ui.tags_resize_mode.currentIndex()
config.setting['cover_tags_convert_images'] = self.ui.convert_tags.isChecked()
config.setting['cover_tags_convert_to_format'] = self.ui.convert_tags_format.currentText()
- config.setting['cover_file_scale_up'] = self.ui.file_scale_up.isChecked()
- config.setting['cover_file_scale_down'] = self.ui.file_scale_down.isChecked()
+ config.setting['cover_file_dont_enlarge'] = self.ui.file_scale_up.isChecked()
+ config.setting['cover_file_resize'] = self.ui.file_scale_down.isChecked()
config.setting['cover_file_resize_use_width'] = self.ui.file_resize_width_label.isChecked()
config.setting['cover_file_resize_target_width'] = self.ui.file_resize_width_value.value()
config.setting['cover_file_resize_use_height'] = self.ui.file_resize_height_label.isChecked()
config.setting['cover_file_resize_target_height'] = self.ui.file_resize_height_value.value()
- config.setting['cover_file_stretch'] = self.ui.file_stretch.isChecked()
- config.setting['cover_file_crop'] = self.ui.file_crop.isChecked()
+ config.setting['cover_file_resize_mode'] = self.ui.file_resize_mode.currentIndex()
config.setting['cover_file_convert_images'] = self.ui.convert_file.isChecked()
config.setting['cover_file_convert_to_format'] = self.ui.convert_file_format.currentText()
diff --git a/test/test_coverart_processing.py b/test/test_coverart_processing.py
index 9a420c0fb..96c366940 100644
--- a/test/test_coverart_processing.py
+++ b/test/test_coverart_processing.py
@@ -84,24 +84,22 @@ class ImageProcessorsTest(PicardTestCase):
super().setUp()
self.settings = {
'enabled_plugins': [],
- 'cover_tags_scale_up': True,
- 'cover_tags_scale_down': True,
+ 'cover_tags_resize': True,
+ 'cover_tags_dont_enlarge': False,
'cover_tags_resize_use_width': True,
'cover_tags_resize_target_width': 500,
'cover_tags_resize_use_height': True,
'cover_tags_resize_target_height': 500,
- 'cover_tags_stretch': False,
- 'cover_tags_crop': False,
+ 'cover_tags_resize_mode': 0,
'cover_tags_convert_images': False,
'cover_tags_convert_to_format': 'jpeg',
- 'cover_file_scale_up': True,
- 'cover_file_scale_down': True,
+ 'cover_file_resize': True,
+ 'cover_file_dont_enlarge': False,
'cover_file_resize_use_width': True,
'cover_file_resize_target_width': 750,
'cover_file_resize_use_height': True,
'cover_file_resize_target_height': 750,
- 'cover_file_stretch': False,
- 'cover_file_crop': False,
+ 'cover_file_resize_mode': 0,
'save_images_to_tags': True,
'save_images_to_files': True,
'cover_file_convert_images': False,
@@ -225,7 +223,7 @@ class ImageProcessorsTest(PicardTestCase):
def test_stretch_both_dimensions(self):
settings = copy(self.settings)
- settings['cover_tags_stretch'] = True
+ settings['cover_tags_resize_mode'] = 2
self.set_config_values(settings)
self._check_resize_image((1000, 100), (500, 500))
self._check_resize_image((200, 500), (500, 500))
@@ -234,7 +232,7 @@ class ImageProcessorsTest(PicardTestCase):
def test_stretch_only_width(self):
settings = copy(self.settings)
- settings['cover_tags_stretch'] = True
+ settings['cover_tags_resize_mode'] = 2
settings['cover_tags_resize_use_height'] = False
self.set_config_values(settings)
self._check_resize_image((1000, 100), (500, 100))
@@ -244,7 +242,7 @@ class ImageProcessorsTest(PicardTestCase):
def test_stretch_only_height(self):
settings = copy(self.settings)
- settings['cover_tags_stretch'] = True
+ settings['cover_tags_resize_mode'] = 2
settings['cover_tags_resize_use_width'] = False
self.set_config_values(settings)
self._check_resize_image((1000, 100), (1000, 500))
@@ -254,7 +252,7 @@ class ImageProcessorsTest(PicardTestCase):
def test_crop_both_dimensions(self):
settings = copy(self.settings)
- settings['cover_tags_crop'] = True
+ settings['cover_tags_resize_mode'] = 1
self.set_config_values(settings)
self._check_resize_image((1000, 100), (500, 500))
self._check_resize_image((750, 1000), (500, 500))
@@ -263,7 +261,7 @@ class ImageProcessorsTest(PicardTestCase):
def test_crop_only_width(self):
settings = copy(self.settings)
- settings['cover_tags_crop'] = True
+ settings['cover_tags_resize_mode'] = 1
settings['cover_tags_resize_use_height'] = False
self.set_config_values(settings)
self._check_resize_image((1000, 100), (500, 100))
@@ -273,7 +271,7 @@ class ImageProcessorsTest(PicardTestCase):
def test_crop_only_height(self):
settings = copy(self.settings)
- settings['cover_tags_crop'] = True
+ settings['cover_tags_resize_mode'] = 1
settings['cover_tags_resize_use_width'] = False
self.set_config_values(settings)
self._check_resize_image((1000, 100), (1000, 500))
diff --git a/ui/options_cover_processing.ui b/ui/options_cover_processing.ui
index d1daed7e2..ee55d7dc3 100644
--- a/ui/options_cover_processing.ui
+++ b/ui/options_cover_processing.ui
@@ -6,7 +6,7 @@
0
0
- 529
+ 535
467
@@ -140,7 +140,7 @@
-
- Resize images if above the given size
+ Resize images to the given size
false
@@ -150,47 +150,34 @@
-
-
+
Resize images saved to tags
- false
+ true
false
-
-
-
-
- 0
+
+
-
+
+ Maintain aspect ratio
-
- 0
+
+ -
+
+ Crop to fit
-
- 0
+
+ -
+
+ Stretch to fit
-
- 0
-
-
-
-
-
- Scale up
-
-
-
- -
-
-
- Scale down
-
-
-
-
+
-
@@ -308,65 +295,43 @@
-
-
-
-
- 2
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
-
- Fit
-
-
- true
-
-
-
- -
-
-
- Fill
-
-
-
- -
-
-
- Stretch
-
-
-
-
+
+
+ Don't enlarge
+
-
-
+
Resize images saved to files
- false
-
-
- false
+ true
+
-
+
+
-
+
+ Maintain aspect ratio
+
+
+ -
+
+ Crop to fit
+
+
+ -
+
+ Stretch to fit
+
+
+
+
-
@@ -382,20 +347,6 @@
0
-
-
-
-
- Scale up
-
-
-
- -
-
-
- Scale down
-
-
-
@@ -514,48 +465,10 @@
-
-
-
-
- 2
-
-
- 0
-
-
- 0
-
-
- 0
-
-
- 0
-
-
-
-
-
- Fit
-
-
- true
-
-
-
- -
-
-
- Fill
-
-
-
- -
-
-
- Stretch
-
-
-
-
+
+
+ Don't enlarge
+