mirror of https://gitlab.com/openlp/openlp.git
New theme adjustments: Adding letter spacing to theme main area; adding line and letter spacing to footer
This commit is contained in:
parent
3e509ec001
commit
50acb6fb64
|
@ -1248,6 +1248,7 @@ var Display = {
|
|||
mainStyle["font-style"] = !!Display._theme.font_main_italics ? "italic" : "";
|
||||
mainStyle["font-weight"] = !!Display._theme.font_main_bold ? "bold" : "";
|
||||
mainStyle["line-height"] = "" + (100 + Display._theme.font_main_line_adjustment) + "%";
|
||||
mainStyle["letter-spacing"] = "" + (Display._theme.font_main_letter_adjustment) + 'px';
|
||||
// Using text-align-last because there is a <br> seperating each line
|
||||
switch (Display._theme.display_horizontal_align) {
|
||||
case HorizontalAlign.Justify:
|
||||
|
@ -1322,6 +1323,8 @@ var Display = {
|
|||
footerStyle["font-size"] = "" + Display._theme.font_footer_size + "pt";
|
||||
footerStyle["font-style"] = !!Display._theme.font_footer_italics ? "italic" : "";
|
||||
footerStyle["font-weight"] = !!Display._theme.font_footer_bold ? "bold" : "";
|
||||
footerStyle["line-height"] = "" + (100 + Display._theme.font_footer_line_adjustment) + "%";
|
||||
footerStyle["letter-spacing"] = "" + (Display._theme.font_footer_letter_adjustment) + 'px';
|
||||
footerStyle["white-space"] = Display._theme.font_footer_wrap ? "normal" : "nowrap";
|
||||
for (var footerKey in footerStyle) {
|
||||
if (footerStyle.hasOwnProperty(footerKey)) {
|
||||
|
|
|
@ -10,12 +10,14 @@
|
|||
},
|
||||
"display" :{
|
||||
"horizontal_align": 0,
|
||||
"horizontal_align_footer": 0,
|
||||
"slide_transition": false,
|
||||
"slide_transition_type": 0,
|
||||
"slide_transition_speed": 0,
|
||||
"slide_transition_direction": 0,
|
||||
"slide_transition_reverse": false,
|
||||
"vertical_align": 0
|
||||
"vertical_align": 0,
|
||||
"vertical_align_footer": 0
|
||||
},
|
||||
"font": {
|
||||
"footer": {
|
||||
|
@ -24,6 +26,7 @@
|
|||
"height": 78,
|
||||
"italics": false,
|
||||
"line_adjustment": 0,
|
||||
"letter_adjustment": 0,
|
||||
"location": "",
|
||||
"name": "Arial",
|
||||
"outline": false,
|
||||
|
@ -44,6 +47,7 @@
|
|||
"height": 690,
|
||||
"italics": false,
|
||||
"line_adjustment": 0,
|
||||
"letter_adjustment": 0,
|
||||
"location": "",
|
||||
"name": "Arial",
|
||||
"outline": false,
|
||||
|
|
|
@ -285,9 +285,9 @@ class VerticalType(object):
|
|||
|
||||
BOOLEAN_LIST = ['bold', 'italics', 'override', 'outline', 'shadow', 'slide_transition', 'slide_transition_reverse']
|
||||
|
||||
INTEGER_LIST = ['size', 'line_adjustment', 'x', 'height', 'y', 'width', 'shadow_size', 'outline_size',
|
||||
'horizontal_align', 'vertical_align', 'wrap_style', 'slide_transition_type', 'slide_transition_speed',
|
||||
'slide_transition_direction']
|
||||
INTEGER_LIST = ['size', 'line_adjustment', 'letter_adjustment', 'x', 'height', 'y', 'width', 'shadow_size',
|
||||
'outline_size', 'horizontal_align', 'vertical_align', 'wrap_style', 'slide_transition_type',
|
||||
'slide_transition_speed', 'slide_transition_direction']
|
||||
|
||||
|
||||
class Theme(object):
|
||||
|
|
|
@ -37,6 +37,7 @@ class FontSelectPage(GridLayoutPage):
|
|||
Outline = 'outline'
|
||||
Shadow = 'shadow'
|
||||
LineSpacing = 'line_spacing'
|
||||
LetterSpacing = 'letter_spacing'
|
||||
|
||||
font_name_changed = QtCore.pyqtSignal(str)
|
||||
font_size_changed = QtCore.pyqtSignal(int)
|
||||
|
@ -44,6 +45,7 @@ class FontSelectPage(GridLayoutPage):
|
|||
is_bold_changed = QtCore.pyqtSignal(bool)
|
||||
is_italic_changed = QtCore.pyqtSignal(bool)
|
||||
line_spacing_changed = QtCore.pyqtSignal(int)
|
||||
letter_spacing_changed = QtCore.pyqtSignal(int)
|
||||
is_outline_enabled_changed = QtCore.pyqtSignal(bool)
|
||||
outline_color_changed = QtCore.pyqtSignal(str)
|
||||
outline_size_changed = QtCore.pyqtSignal(int)
|
||||
|
@ -56,7 +58,8 @@ class FontSelectPage(GridLayoutPage):
|
|||
self.feature_widgets = {
|
||||
FontSelectPage.Outline: [self.outline_groupbox],
|
||||
FontSelectPage.Shadow: [self.shadow_groupbox],
|
||||
FontSelectPage.LineSpacing: [self.line_spacing_label, self.line_spacing_spinbox]
|
||||
FontSelectPage.LineSpacing: [self.line_spacing_label, self.line_spacing_spinbox],
|
||||
FontSelectPage.LetterSpacing: [self.letter_spacing_label, self.letter_spacing_spinbox]
|
||||
}
|
||||
|
||||
def setup_ui(self):
|
||||
|
@ -111,13 +114,22 @@ class FontSelectPage(GridLayoutPage):
|
|||
self.line_spacing_spinbox.setMaximum(250)
|
||||
self.line_spacing_spinbox.setObjectName('line_spacing_spinbox')
|
||||
self.layout.addWidget(self.line_spacing_spinbox, 2, 3)
|
||||
# Letter spacing
|
||||
self.letter_spacing_label = FormLabel(self)
|
||||
self.letter_spacing_label.setObjectName('letter_spacing_label')
|
||||
self.layout.addWidget(self.letter_spacing_label, 3, 2)
|
||||
self.letter_spacing_spinbox = QtWidgets.QDoubleSpinBox(self)
|
||||
self.letter_spacing_spinbox.setMinimum(-250)
|
||||
self.letter_spacing_spinbox.setMaximum(250)
|
||||
self.letter_spacing_spinbox.setObjectName('letter_spacing_spinbox')
|
||||
self.layout.addWidget(self.letter_spacing_spinbox, 3, 3)
|
||||
# Outline
|
||||
self.outline_groupbox = QtWidgets.QGroupBox(self)
|
||||
self.outline_groupbox.setCheckable(True)
|
||||
self.outline_groupbox.setChecked(False)
|
||||
self.outline_groupbox.setObjectName('outline_groupbox')
|
||||
self.outline_layout = QtWidgets.QGridLayout(self.outline_groupbox)
|
||||
self.layout.addWidget(self.outline_groupbox, 3, 0, 1, 2)
|
||||
self.layout.addWidget(self.outline_groupbox, 4, 0, 1, 2)
|
||||
# Outline colour
|
||||
self.outline_color_label = FormLabel(self.outline_groupbox)
|
||||
self.outline_color_label.setObjectName('outline_color_label')
|
||||
|
@ -139,7 +151,7 @@ class FontSelectPage(GridLayoutPage):
|
|||
self.shadow_groupbox.setChecked(False)
|
||||
self.shadow_groupbox.setObjectName('shadow_groupbox')
|
||||
self.shadow_layout = QtWidgets.QGridLayout(self.shadow_groupbox)
|
||||
self.layout.addWidget(self.shadow_groupbox, 3, 2, 1, 2)
|
||||
self.layout.addWidget(self.shadow_groupbox, 4, 2, 1, 2)
|
||||
# Shadow color
|
||||
self.shadow_color_label = FormLabel(self.shadow_groupbox)
|
||||
self.shadow_color_label.setObjectName('shadow_color_label')
|
||||
|
@ -162,6 +174,7 @@ class FontSelectPage(GridLayoutPage):
|
|||
self.style_italic_button.toggled.connect(self._on_style_italic_toggled)
|
||||
self.font_size_spinbox.valueChanged.connect(self._on_font_size_changed)
|
||||
self.line_spacing_spinbox.valueChanged.connect(self._on_line_spacing_changed)
|
||||
self.letter_spacing_spinbox.valueChanged.connect(self._on_letter_spacing_changed)
|
||||
self.outline_groupbox.toggled.connect(self._on_outline_toggled)
|
||||
self.outline_color_button.colorChanged.connect(self._on_outline_color_changed)
|
||||
self.outline_size_spinbox.valueChanged.connect(self._on_outline_size_changed)
|
||||
|
@ -184,6 +197,7 @@ class FontSelectPage(GridLayoutPage):
|
|||
self.font_size_label.setText(translate('OpenLP.FontSelectWidget', 'Size:'))
|
||||
self.font_size_spinbox.setSuffix(' {unit}'.format(unit=UiStrings().FontSizePtUnit))
|
||||
self.line_spacing_label.setText(translate('OpenLP.FontSelectWidget', 'Line Spacing:'))
|
||||
self.letter_spacing_label.setText(translate('OpenLP.FontSelectWidget', 'Letter Spacing:'))
|
||||
self.outline_groupbox.setTitle(translate('OpenLP.FontSelectWidget', 'Outline'))
|
||||
self.outline_color_label.setText(translate('OpenLP.FontSelectWidget', 'Color:'))
|
||||
self.outline_size_label.setText(translate('OpenLP.FontSelectWidget', 'Size:'))
|
||||
|
@ -210,6 +224,9 @@ class FontSelectPage(GridLayoutPage):
|
|||
def _on_line_spacing_changed(self, spacing):
|
||||
self.line_spacing_changed.emit(spacing)
|
||||
|
||||
def _on_letter_spacing_changed(self, spacing):
|
||||
self.letter_spacing_changed.emit(spacing)
|
||||
|
||||
def _on_outline_toggled(self, is_enabled):
|
||||
self.is_outline_enabled_changed.emit(is_enabled)
|
||||
|
||||
|
@ -296,6 +313,14 @@ class FontSelectPage(GridLayoutPage):
|
|||
def line_spacing(self, line_spacing):
|
||||
self.line_spacing_spinbox.setValue(line_spacing)
|
||||
|
||||
@property
|
||||
def letter_spacing(self):
|
||||
return self.letter_spacing_spinbox.value()
|
||||
|
||||
@letter_spacing.setter
|
||||
def letter_spacing(self, letter_spacing):
|
||||
self.letter_spacing_spinbox.setValue(letter_spacing)
|
||||
|
||||
@property
|
||||
def is_outline_enabled(self):
|
||||
return self.outline_groupbox.isChecked()
|
||||
|
|
|
@ -70,12 +70,15 @@ class ThemeForm(QtWidgets.QWizard, Ui_ThemeWizard, RegistryProperties):
|
|||
self.main_area_page.font_name_changed.connect(self.calculate_lines)
|
||||
self.main_area_page.font_size_changed.connect(self.calculate_lines)
|
||||
self.main_area_page.line_spacing_changed.connect(self.calculate_lines)
|
||||
self.main_area_page.letter_spacing_changed.connect(self.calculate_lines)
|
||||
self.main_area_page.is_outline_enabled_changed.connect(self.on_outline_toggled)
|
||||
self.main_area_page.outline_size_changed.connect(self.calculate_lines)
|
||||
self.main_area_page.is_shadow_enabled_changed.connect(self.on_shadow_toggled)
|
||||
self.main_area_page.shadow_size_changed.connect(self.calculate_lines)
|
||||
self.footer_area_page.font_name_changed.connect(self.update_theme)
|
||||
self.footer_area_page.font_size_changed.connect(self.update_theme)
|
||||
self.footer_area_page.line_spacing_changed.connect(self.calculate_lines)
|
||||
self.footer_area_page.letter_spacing_changed.connect(self.calculate_lines)
|
||||
self.setOption(QtWidgets.QWizard.WizardOption.HaveHelpButton, True)
|
||||
self.helpRequested.connect(self.provide_help)
|
||||
|
||||
|
@ -284,6 +287,7 @@ class ThemeForm(QtWidgets.QWizard, Ui_ThemeWizard, RegistryProperties):
|
|||
self.main_area_page.font_color = self.theme.font_main_color
|
||||
self.main_area_page.font_size = self.theme.font_main_size
|
||||
self.main_area_page.line_spacing = self.theme.font_main_line_adjustment
|
||||
self.main_area_page.letter_spacing = self.theme.font_main_letter_adjustment
|
||||
self.main_area_page.is_outline_enabled = self.theme.font_main_outline
|
||||
self.main_area_page.outline_color = self.theme.font_main_outline_color
|
||||
self.main_area_page.outline_size = self.theme.font_main_outline_size
|
||||
|
@ -302,6 +306,8 @@ class ThemeForm(QtWidgets.QWizard, Ui_ThemeWizard, RegistryProperties):
|
|||
self.footer_area_page.is_bold = self.theme.font_footer_bold
|
||||
self.footer_area_page.is_italic = self.theme.font_footer_italics
|
||||
self.footer_area_page.font_size = self.theme.font_footer_size
|
||||
self.footer_area_page.line_spacing = self.theme.font_footer_line_adjustment
|
||||
self.footer_area_page.letter_spacing = self.theme.font_footer_letter_adjustment
|
||||
|
||||
def set_position_page_values(self):
|
||||
"""
|
||||
|
@ -372,6 +378,7 @@ class ThemeForm(QtWidgets.QWizard, Ui_ThemeWizard, RegistryProperties):
|
|||
self.theme.font_main_color = self.main_area_page.font_color
|
||||
self.theme.font_main_size = self.main_area_page.font_size
|
||||
self.theme.font_main_line_adjustment = self.main_area_page.line_spacing
|
||||
self.theme.font_main_letter_adjustment = self.main_area_page.letter_spacing
|
||||
self.theme.font_main_outline = self.main_area_page.is_outline_enabled
|
||||
self.theme.font_main_outline_color = self.main_area_page.outline_color
|
||||
self.theme.font_main_outline_size = self.main_area_page.outline_size
|
||||
|
@ -386,6 +393,8 @@ class ThemeForm(QtWidgets.QWizard, Ui_ThemeWizard, RegistryProperties):
|
|||
self.theme.font_footer_size = self.footer_area_page.font_size
|
||||
self.theme.font_footer_bold = self.footer_area_page.is_bold
|
||||
self.theme.font_footer_italics = self.footer_area_page.is_italic
|
||||
self.theme.font_footer_line_adjustment = self.footer_area_page.line_spacing
|
||||
self.theme.font_footer_letter_adjustment = self.footer_area_page.letter_spacing
|
||||
# position page (main)
|
||||
self.theme.font_main_override = not self.area_position_page.use_main_default_location
|
||||
if self.theme.font_main_override:
|
||||
|
|
|
@ -70,8 +70,7 @@ class Ui_ThemeWizard(object):
|
|||
# Footer Area Page
|
||||
self.footer_area_page = FontSelectPage()
|
||||
self.footer_area_page.setObjectName('footer_area_page')
|
||||
self.footer_area_page.disable_features(FontSelectPage.Outline, FontSelectPage.Shadow,
|
||||
FontSelectPage.LineSpacing)
|
||||
self.footer_area_page.disable_features(FontSelectPage.Outline, FontSelectPage.Shadow)
|
||||
theme_wizard.addPage(self.footer_area_page)
|
||||
# Alignment Page
|
||||
self.alignment_page = AlignmentTransitionsPage()
|
||||
|
|
|
@ -365,4 +365,4 @@ def check_theme(theme):
|
|||
assert 0 == theme.display_vertical_align, 'display_vertical_align should be 0'
|
||||
assert theme.font_footer_bold is False, 'font_footer_bold should be False'
|
||||
assert 'Arial' == theme.font_main_name, 'font_main_name should be "Arial"'
|
||||
assert 53 == len(theme.__dict__), 'The theme should have 53 attributes'
|
||||
assert 57 == len(theme.__dict__), 'The theme should have 57 attributes'
|
||||
|
|
|
@ -96,6 +96,7 @@ def test_setup(settings):
|
|||
theme_form.main_area_page.font_name_changed.connect.assert_called_once_with(theme_form.calculate_lines)
|
||||
theme_form.main_area_page.font_size_changed.connect.assert_called_once_with(theme_form.calculate_lines)
|
||||
theme_form.main_area_page.line_spacing_changed.connect.assert_called_once_with(theme_form.calculate_lines)
|
||||
theme_form.main_area_page.letter_spacing_changed.connect.assert_called_once_with(theme_form.calculate_lines)
|
||||
theme_form.main_area_page.is_outline_enabled_changed.connect.assert_called_once_with(
|
||||
theme_form.on_outline_toggled)
|
||||
theme_form.main_area_page.outline_size_changed.connect.assert_called_once_with(theme_form.calculate_lines)
|
||||
|
@ -104,6 +105,8 @@ def test_setup(settings):
|
|||
theme_form.main_area_page.shadow_size_changed.connect.assert_called_once_with(theme_form.calculate_lines)
|
||||
theme_form.footer_area_page.font_name_changed.connect.assert_called_once_with(theme_form.update_theme)
|
||||
theme_form.footer_area_page.font_size_changed.connect.assert_called_once_with(theme_form.update_theme)
|
||||
theme_form.footer_area_page.line_spacing_changed.connect.assert_called_once_with(theme_form.calculate_lines)
|
||||
theme_form.footer_area_page.letter_spacing_changed.connect.assert_called_once_with(theme_form.calculate_lines)
|
||||
|
||||
|
||||
@patch('openlp.core.ui.themeform.ThemeForm._setup')
|
||||
|
@ -455,9 +458,9 @@ def test_update_theme_static(mocked_setup, settings):
|
|||
theme_form.main_area_page = MagicMock(font_name='Montserrat', font_color='#f00', font_size=50, line_spacing=12,
|
||||
is_outline_enabled=True, outline_color='#00f', outline_size=3,
|
||||
is_shadow_enabled=True, shadow_color='#111', shadow_size=5, is_bold=True,
|
||||
is_italic=False)
|
||||
is_italic=False, letter_spacing=2)
|
||||
theme_form.footer_area_page = MagicMock(font_name='Oxygen', font_color='#fff', font_size=20, is_bold=False,
|
||||
is_italic=True)
|
||||
is_italic=True, line_spacing=2, letter_spacing=-1)
|
||||
theme_form.alignment_page = MagicMock(horizontal_align='left', vertical_align='top', is_transition_enabled=True,
|
||||
transition_type='fade', transition_speed='normal',
|
||||
transition_direction='horizontal', is_transition_reverse_enabled=False)
|
||||
|
@ -472,6 +475,7 @@ def test_update_theme_static(mocked_setup, settings):
|
|||
assert theme_form.theme.font_main_color == '#f00'
|
||||
assert theme_form.theme.font_main_size == 50
|
||||
assert theme_form.theme.font_main_line_adjustment == 12
|
||||
assert theme_form.theme.font_main_letter_adjustment == 2
|
||||
assert theme_form.theme.font_main_outline is True
|
||||
assert theme_form.theme.font_main_outline_color == '#00f'
|
||||
assert theme_form.theme.font_main_outline_size == 3
|
||||
|
@ -489,6 +493,8 @@ def test_update_theme_static(mocked_setup, settings):
|
|||
assert theme_form.theme.font_footer_bold is False
|
||||
assert theme_form.theme.font_footer_italics is True
|
||||
assert theme_form.theme.font_footer_override is False
|
||||
assert theme_form.theme.font_footer_line_adjustment == 2
|
||||
assert theme_form.theme.font_footer_letter_adjustment == -1
|
||||
theme_form.theme.set_default_footer.assert_called_once_with()
|
||||
# Alignment
|
||||
assert theme_form.theme.display_horizontal_align == 'left'
|
||||
|
|
Loading…
Reference in New Issue