forked from openlp/openlp
Adds option to ignore aspect ratio and stretch image.
bzr-revno: 2761
This commit is contained in:
commit
ae62538a02
@ -121,6 +121,7 @@ class Settings(QtCore.QSettings):
|
|||||||
'advanced/enable exit confirmation': True,
|
'advanced/enable exit confirmation': True,
|
||||||
'advanced/expand service item': False,
|
'advanced/expand service item': False,
|
||||||
'advanced/hide mouse': True,
|
'advanced/hide mouse': True,
|
||||||
|
'advanced/ignore aspect ratio': False,
|
||||||
'advanced/is portable': False,
|
'advanced/is portable': False,
|
||||||
'advanced/max recent files': 20,
|
'advanced/max recent files': 20,
|
||||||
'advanced/print file meta data': False,
|
'advanced/print file meta data': False,
|
||||||
|
@ -230,7 +230,7 @@ def validate_thumb(file_path, thumb_path):
|
|||||||
return image_date <= thumb_date
|
return image_date <= thumb_date
|
||||||
|
|
||||||
|
|
||||||
def resize_image(image_path, width, height, background='#000000'):
|
def resize_image(image_path, width, height, background='#000000', ignore_aspect_ratio=False):
|
||||||
"""
|
"""
|
||||||
Resize an image to fit on the current screen.
|
Resize an image to fit on the current screen.
|
||||||
|
|
||||||
@ -247,7 +247,7 @@ def resize_image(image_path, width, height, background='#000000'):
|
|||||||
image_ratio = reader.size().width() / reader.size().height()
|
image_ratio = reader.size().width() / reader.size().height()
|
||||||
resize_ratio = width / height
|
resize_ratio = width / height
|
||||||
# Figure out the size we want to resize the image to (keep aspect ratio).
|
# Figure out the size we want to resize the image to (keep aspect ratio).
|
||||||
if image_ratio == resize_ratio:
|
if image_ratio == resize_ratio or ignore_aspect_ratio:
|
||||||
size = QtCore.QSize(width, height)
|
size = QtCore.QSize(width, height)
|
||||||
elif image_ratio < resize_ratio:
|
elif image_ratio < resize_ratio:
|
||||||
# Use the image's height as reference for the new size.
|
# Use the image's height as reference for the new size.
|
||||||
|
@ -31,7 +31,7 @@ import queue
|
|||||||
|
|
||||||
from PyQt5 import QtCore
|
from PyQt5 import QtCore
|
||||||
|
|
||||||
from openlp.core.common import Registry
|
from openlp.core.common import Registry, Settings
|
||||||
from openlp.core.lib import ScreenList, resize_image, image_to_byte
|
from openlp.core.lib import ScreenList, resize_image, image_to_byte
|
||||||
|
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
@ -327,7 +327,8 @@ class ImageManager(QtCore.QObject):
|
|||||||
# Let's see if the image was requested with specific dimensions
|
# Let's see if the image was requested with specific dimensions
|
||||||
width = self.width if image.width == -1 else image.width
|
width = self.width if image.width == -1 else image.width
|
||||||
height = self.height if image.height == -1 else image.height
|
height = self.height if image.height == -1 else image.height
|
||||||
image.image = resize_image(image.path, width, height, image.background)
|
image.image = resize_image(image.path, width, height, image.background,
|
||||||
|
Settings().value('advanced/ignore aspect ratio'))
|
||||||
# Set the priority to Lowest and stop here as we need to process more important images first.
|
# Set the priority to Lowest and stop here as we need to process more important images first.
|
||||||
if image.priority == Priority.Normal:
|
if image.priority == Priority.Normal:
|
||||||
self._conversion_queue.modify_priority(image, Priority.Lowest)
|
self._conversion_queue.modify_priority(image, Priority.Lowest)
|
||||||
|
@ -208,6 +208,9 @@ class AdvancedTab(SettingsTab):
|
|||||||
self.display_workaround_group_box.setObjectName('display_workaround_group_box')
|
self.display_workaround_group_box.setObjectName('display_workaround_group_box')
|
||||||
self.display_workaround_layout = QtWidgets.QVBoxLayout(self.display_workaround_group_box)
|
self.display_workaround_layout = QtWidgets.QVBoxLayout(self.display_workaround_group_box)
|
||||||
self.display_workaround_layout.setObjectName('display_workaround_layout')
|
self.display_workaround_layout.setObjectName('display_workaround_layout')
|
||||||
|
self.ignore_aspect_ratio_check_box = QtWidgets.QCheckBox(self.display_workaround_group_box)
|
||||||
|
self.ignore_aspect_ratio_check_box.setObjectName('ignore_aspect_ratio_check_box')
|
||||||
|
self.display_workaround_layout.addWidget(self.ignore_aspect_ratio_check_box)
|
||||||
self.x11_bypass_check_box = QtWidgets.QCheckBox(self.display_workaround_group_box)
|
self.x11_bypass_check_box = QtWidgets.QCheckBox(self.display_workaround_group_box)
|
||||||
self.x11_bypass_check_box.setObjectName('x11_bypass_check_box')
|
self.x11_bypass_check_box.setObjectName('x11_bypass_check_box')
|
||||||
self.display_workaround_layout.addWidget(self.x11_bypass_check_box)
|
self.display_workaround_layout.addWidget(self.x11_bypass_check_box)
|
||||||
@ -311,6 +314,7 @@ class AdvancedTab(SettingsTab):
|
|||||||
translate('OpenLP.AdvancedTab', '<strong>WARNING:</strong> New data directory location contains '
|
translate('OpenLP.AdvancedTab', '<strong>WARNING:</strong> New data directory location contains '
|
||||||
'OpenLP data files. These files WILL be replaced during a copy.'))
|
'OpenLP data files. These files WILL be replaced during a copy.'))
|
||||||
self.display_workaround_group_box.setTitle(translate('OpenLP.AdvancedTab', 'Display Workarounds'))
|
self.display_workaround_group_box.setTitle(translate('OpenLP.AdvancedTab', 'Display Workarounds'))
|
||||||
|
self.ignore_aspect_ratio_check_box.setText(translate('OpenLP.AdvancedTab', 'Ignore Aspect Ratio'))
|
||||||
self.x11_bypass_check_box.setText(translate('OpenLP.AdvancedTab', 'Bypass X11 Window Manager'))
|
self.x11_bypass_check_box.setText(translate('OpenLP.AdvancedTab', 'Bypass X11 Window Manager'))
|
||||||
self.alternate_rows_check_box.setText(translate('OpenLP.AdvancedTab', 'Use alternating row colours in lists'))
|
self.alternate_rows_check_box.setText(translate('OpenLP.AdvancedTab', 'Use alternating row colours in lists'))
|
||||||
# Slide Limits
|
# Slide Limits
|
||||||
@ -355,6 +359,7 @@ class AdvancedTab(SettingsTab):
|
|||||||
default_service_enabled = settings.value('default service enabled')
|
default_service_enabled = settings.value('default service enabled')
|
||||||
self.service_name_check_box.setChecked(default_service_enabled)
|
self.service_name_check_box.setChecked(default_service_enabled)
|
||||||
self.service_name_check_box_toggled(default_service_enabled)
|
self.service_name_check_box_toggled(default_service_enabled)
|
||||||
|
self.ignore_aspect_ratio_check_box.setChecked(settings.value('ignore aspect ratio'))
|
||||||
self.x11_bypass_check_box.setChecked(settings.value('x11 bypass wm'))
|
self.x11_bypass_check_box.setChecked(settings.value('x11 bypass wm'))
|
||||||
self.slide_limits = settings.value('slide limits')
|
self.slide_limits = settings.value('slide limits')
|
||||||
self.is_search_as_you_type_enabled = settings.value('search as type')
|
self.is_search_as_you_type_enabled = settings.value('search as type')
|
||||||
@ -410,6 +415,7 @@ class AdvancedTab(SettingsTab):
|
|||||||
settings.setValue('hide mouse', self.hide_mouse_check_box.isChecked())
|
settings.setValue('hide mouse', self.hide_mouse_check_box.isChecked())
|
||||||
settings.setValue('alternate rows', self.alternate_rows_check_box.isChecked())
|
settings.setValue('alternate rows', self.alternate_rows_check_box.isChecked())
|
||||||
settings.setValue('slide limits', self.slide_limits)
|
settings.setValue('slide limits', self.slide_limits)
|
||||||
|
settings.setValue('ignore aspect ratio', self.ignore_aspect_ratio_check_box.isChecked())
|
||||||
if self.x11_bypass_check_box.isChecked() != settings.value('x11 bypass wm'):
|
if self.x11_bypass_check_box.isChecked() != settings.value('x11 bypass wm'):
|
||||||
settings.setValue('x11 bypass wm', self.x11_bypass_check_box.isChecked())
|
settings.setValue('x11 bypass wm', self.x11_bypass_check_box.isChecked())
|
||||||
self.settings_form.register_post_process('config_screen_changed')
|
self.settings_form.register_post_process('config_screen_changed')
|
||||||
|
@ -704,6 +704,27 @@ class TestLib(TestCase):
|
|||||||
self.assertEqual(wanted_width, result_size.width(), 'The image should have the requested width.')
|
self.assertEqual(wanted_width, result_size.width(), 'The image should have the requested width.')
|
||||||
self.assertEqual(image.pixel(0, 0), wanted_background_rgb, 'The background should be white.')
|
self.assertEqual(image.pixel(0, 0), wanted_background_rgb, 'The background should be white.')
|
||||||
|
|
||||||
|
def test_resize_thumb_ignoring_aspect_ratio(self):
|
||||||
|
"""
|
||||||
|
Test the resize_thumb() function ignoring aspect ratio
|
||||||
|
"""
|
||||||
|
# GIVEN: A path to an image.
|
||||||
|
image_path = os.path.join(TEST_PATH, 'church.jpg')
|
||||||
|
wanted_width = 1000
|
||||||
|
wanted_height = 1000
|
||||||
|
# We want the background to be white.
|
||||||
|
wanted_background_hex = '#FFFFFF'
|
||||||
|
wanted_background_rgb = QtGui.QColor(wanted_background_hex).rgb()
|
||||||
|
|
||||||
|
# WHEN: Resize the image and add a background.
|
||||||
|
image = resize_image(image_path, wanted_width, wanted_height, wanted_background_hex, True)
|
||||||
|
|
||||||
|
# THEN: Check if the size is correct and the background was set.
|
||||||
|
result_size = image.size()
|
||||||
|
self.assertEqual(wanted_height, result_size.height(), 'The image should have the requested height.')
|
||||||
|
self.assertEqual(wanted_width, result_size.width(), 'The image should have the requested width.')
|
||||||
|
self.assertEqual(image.pixel(0, 0), wanted_background_rgb, 'The background should be white.')
|
||||||
|
|
||||||
def test_create_separated_list_qlocate(self):
|
def test_create_separated_list_qlocate(self):
|
||||||
"""
|
"""
|
||||||
Test the create_separated_list function using the Qt provided method
|
Test the create_separated_list function using the Qt provided method
|
||||||
|
Loading…
Reference in New Issue
Block a user