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 +