forked from openlp/openlp
Merge branch 'new-rendering-engine-transitions' into 'master'
New rendering engine transitions Closes #308 See merge request openlp/openlp!54
This commit is contained in:
commit
4d395ee6e7
@ -43,6 +43,26 @@ var VerticalAlign = {
|
||||
Bottom: 2
|
||||
};
|
||||
|
||||
/**
|
||||
* Transition type enumeration
|
||||
*/
|
||||
var TransitionType = {
|
||||
Fade: 0,
|
||||
Slide: 1,
|
||||
Convex: 2,
|
||||
Concave: 3,
|
||||
Zoom: 4
|
||||
};
|
||||
|
||||
/**
|
||||
* Transition speed enumeration
|
||||
*/
|
||||
var TransitionSpeed = {
|
||||
Normal: 0,
|
||||
Fast: 1,
|
||||
Slow: 2
|
||||
};
|
||||
|
||||
/**
|
||||
* Audio state enumeration
|
||||
*/
|
||||
@ -329,6 +349,7 @@ var Display = {
|
||||
_alertState: AlertState.NotDisplaying,
|
||||
_transitionState: TransitionState.NoTransition,
|
||||
_animationState: AnimationState.NoAnimation,
|
||||
_doTransitions: false,
|
||||
_revealConfig: {
|
||||
margin: 0.0,
|
||||
minScale: 1.0,
|
||||
@ -348,7 +369,8 @@ var Display = {
|
||||
/**
|
||||
* Start up reveal and do any other initialisation
|
||||
*/
|
||||
init: function () {
|
||||
init: function (doTransitions=false) {
|
||||
Display._doTransitions = doTransitions;
|
||||
Reveal.initialize(Display._revealConfig);
|
||||
},
|
||||
/**
|
||||
@ -360,9 +382,10 @@ var Display = {
|
||||
/**
|
||||
* Set the transition type
|
||||
* @param {string} transitionType - Can be one of "none", "fade", "slide", "convex", "concave", "zoom"
|
||||
* @param {string} transitionSpeed - Can be one of "default", "fast", "slow"
|
||||
*/
|
||||
setTransition: function (transitionType) {
|
||||
Reveal.configure({"transition": transitionType});
|
||||
setTransition: function (transitionType, transitionSpeed) {
|
||||
Reveal.configure({"transition": transitionType, "transitionSpeed": transitionSpeed});
|
||||
},
|
||||
/**
|
||||
* Clear the current list of slides
|
||||
@ -869,6 +892,44 @@ var Display = {
|
||||
},
|
||||
setTheme: function (theme) {
|
||||
Display._theme = theme;
|
||||
// Set slide transitions
|
||||
var new_transition_type = "none",
|
||||
new_transition_speed = "default";
|
||||
if (!!theme.display_slide_transition && Display._doTransitions) {
|
||||
switch (theme.display_slide_transition_type) {
|
||||
case TransitionType.Fade:
|
||||
new_transition_type = "fade";
|
||||
break;
|
||||
case TransitionType.Slide:
|
||||
new_transition_type = "slide";
|
||||
break;
|
||||
case TransitionType.Convex:
|
||||
new_transition_type = "convex";
|
||||
break;
|
||||
case TransitionType.Concave:
|
||||
new_transition_type = "concave";
|
||||
break;
|
||||
case TransitionType.Zoom:
|
||||
new_transition_type = "zoom";
|
||||
break;
|
||||
default:
|
||||
new_transition_type = "fade";
|
||||
}
|
||||
switch (theme.display_slide_transition_speed) {
|
||||
case TransitionSpeed.Normal:
|
||||
new_transition_speed = "default";
|
||||
break;
|
||||
case TransitionSpeed.Fast:
|
||||
new_transition_speed = "fast";
|
||||
break;
|
||||
case TransitionSpeed.Slow:
|
||||
new_transition_speed = "slow";
|
||||
break;
|
||||
default:
|
||||
new_transition_speed = "default";
|
||||
}
|
||||
}
|
||||
Display.setTransition(new_transition_type, new_transition_speed);
|
||||
// Set the background
|
||||
var globalBackground = $("#global-background")[0];
|
||||
var backgroundStyle = {};
|
||||
|
@ -198,7 +198,8 @@ class DisplayWindow(QtWidgets.QWidget):
|
||||
"""
|
||||
Add stuff after page initialisation
|
||||
"""
|
||||
self.run_javascript('Display.init();')
|
||||
js_is_display = str(self.is_display).lower()
|
||||
self.run_javascript('Display.init({do_transitions});'.format(do_transitions=js_is_display))
|
||||
self._is_initialised = True
|
||||
if self._can_show_startup_screen:
|
||||
self.set_startup_screen()
|
||||
|
@ -11,6 +11,8 @@
|
||||
"display" :{
|
||||
"horizontal_align": 0,
|
||||
"slide_transition": false,
|
||||
"slide_transition_type": 0,
|
||||
"slide_transition_speed": 0,
|
||||
"vertical_align": 0
|
||||
},
|
||||
"font": {
|
||||
|
@ -127,6 +127,82 @@ class BackgroundGradientType(object):
|
||||
return BackgroundGradientType.LeftBottom
|
||||
|
||||
|
||||
class TransitionType(object):
|
||||
"""
|
||||
Type enumeration for transition types.
|
||||
"""
|
||||
Fade = 0
|
||||
Slide = 1
|
||||
Convex = 2
|
||||
Concave = 3
|
||||
Zoom = 4
|
||||
|
||||
@staticmethod
|
||||
def to_string(transition_type):
|
||||
"""
|
||||
Return a string representation of a transition type.
|
||||
"""
|
||||
if transition_type == TransitionType.Fade:
|
||||
return 'fade'
|
||||
elif transition_type == TransitionType.Slide:
|
||||
return 'slide'
|
||||
elif transition_type == TransitionType.Convex:
|
||||
return 'convex'
|
||||
elif transition_type == TransitionType.Concave:
|
||||
return 'concave'
|
||||
elif transition_type == TransitionType.Zoom:
|
||||
return 'zoom'
|
||||
|
||||
@staticmethod
|
||||
def from_string(type_string):
|
||||
"""
|
||||
Return a transition type for the given string.
|
||||
"""
|
||||
if type_string == 'fade':
|
||||
return TransitionType.Fade
|
||||
elif type_string == 'slide':
|
||||
return TransitionType.Slide
|
||||
elif type_string == 'convex':
|
||||
return TransitionType.Convex
|
||||
elif type_string == 'concave':
|
||||
return TransitionType.Concave
|
||||
elif type_string == 'zoom':
|
||||
return TransitionType.Zoom
|
||||
|
||||
|
||||
class TransitionSpeed(object):
|
||||
"""
|
||||
Type enumeration for transition types.
|
||||
"""
|
||||
Normal = 0
|
||||
Fast = 1
|
||||
Slow = 2
|
||||
|
||||
@staticmethod
|
||||
def to_string(transition_speed):
|
||||
"""
|
||||
Return a string representation of a transition type.
|
||||
"""
|
||||
if transition_speed == TransitionSpeed.Normal:
|
||||
return 'normal'
|
||||
elif transition_speed == TransitionSpeed.Fast:
|
||||
return 'fast'
|
||||
elif transition_speed == TransitionSpeed.Slow:
|
||||
return 'slow'
|
||||
|
||||
@staticmethod
|
||||
def from_string(type_string):
|
||||
"""
|
||||
Return a transition type for the given string.
|
||||
"""
|
||||
if type_string == 'normal':
|
||||
return TransitionSpeed.Normal
|
||||
if type_string == 'fast':
|
||||
return TransitionSpeed.Fast
|
||||
elif type_string == 'slow':
|
||||
return TransitionSpeed.Slow
|
||||
|
||||
|
||||
class HorizontalType(object):
|
||||
"""
|
||||
Type enumeration for horizontal alignment.
|
||||
@ -153,7 +229,7 @@ class VerticalType(object):
|
||||
BOOLEAN_LIST = ['bold', 'italics', 'override', 'outline', 'shadow', 'slide_transition']
|
||||
|
||||
INTEGER_LIST = ['size', 'line_adjustment', 'x', 'height', 'y', 'width', 'shadow_size', 'outline_size',
|
||||
'horizontal_align', 'vertical_align', 'wrap_style']
|
||||
'horizontal_align', 'vertical_align', 'wrap_style', 'slide_transition_type', 'slide_transition_speed']
|
||||
|
||||
|
||||
class Theme(object):
|
||||
|
@ -98,6 +98,7 @@ class ThemeForm(QtWidgets.QWizard, Ui_ThemeWizard, RegistryProperties):
|
||||
self.main_font_combo_box.activated.connect(self.calculate_lines)
|
||||
self.footer_font_combo_box.activated.connect(self.update_theme)
|
||||
self.footer_size_spin_box.valueChanged.connect(self.update_theme)
|
||||
self.transitions_check_box.stateChanged.connect(self.on_transitions_check_box_state_changed)
|
||||
|
||||
def set_defaults(self):
|
||||
"""
|
||||
@ -145,6 +146,8 @@ class ThemeForm(QtWidgets.QWizard, Ui_ThemeWizard, RegistryProperties):
|
||||
self.background_page.registerField('horizontal', self.horizontal_combo_box)
|
||||
self.background_page.registerField('vertical', self.vertical_combo_box)
|
||||
self.background_page.registerField('slide_transition', self.transitions_check_box)
|
||||
self.background_page.registerField('slide_transition_type', self.transition_combo_box)
|
||||
self.background_page.registerField('slide_transition_speed', self.transition_speed_combo_box)
|
||||
self.background_page.registerField('name', self.theme_name_edit)
|
||||
|
||||
def calculate_lines(self):
|
||||
@ -251,10 +254,7 @@ class ThemeForm(QtWidgets.QWizard, Ui_ThemeWizard, RegistryProperties):
|
||||
Change state as Shadow check box changed
|
||||
"""
|
||||
if self.update_theme_allowed:
|
||||
if state == QtCore.Qt.Checked:
|
||||
self.theme.font_main_shadow = True
|
||||
else:
|
||||
self.theme.font_main_shadow = False
|
||||
self.theme.font_main_shadow = state == QtCore.Qt.Checked
|
||||
self.shadow_color_button.setEnabled(self.theme.font_main_shadow)
|
||||
self.shadow_size_spin_box.setEnabled(self.theme.font_main_shadow)
|
||||
self.calculate_lines()
|
||||
@ -275,6 +275,16 @@ class ThemeForm(QtWidgets.QWizard, Ui_ThemeWizard, RegistryProperties):
|
||||
if self.update_theme_allowed:
|
||||
self.theme.font_footer_override = (value != QtCore.Qt.Checked)
|
||||
|
||||
def on_transitions_check_box_state_changed(self, state):
|
||||
"""
|
||||
Change state as Transitions check box is changed
|
||||
"""
|
||||
if self.update_theme_allowed:
|
||||
self.theme.display_slide_transition = state == QtCore.Qt.Checked
|
||||
self.transition_combo_box.setEnabled(self.theme.display_slide_transition)
|
||||
self.transition_speed_combo_box.setEnabled(self.theme.display_slide_transition)
|
||||
self.calculate_lines()
|
||||
|
||||
def exec(self, edit=False):
|
||||
"""
|
||||
Run the wizard.
|
||||
@ -395,6 +405,8 @@ class ThemeForm(QtWidgets.QWizard, Ui_ThemeWizard, RegistryProperties):
|
||||
self.setField('horizontal', self.theme.display_horizontal_align)
|
||||
self.setField('vertical', self.theme.display_vertical_align)
|
||||
self.setField('slide_transition', self.theme.display_slide_transition)
|
||||
self.setField('slide_transition_type', self.theme.display_slide_transition_type)
|
||||
self.setField('slide_transition_speed', self.theme.display_slide_transition_speed)
|
||||
|
||||
def set_preview_page_values(self):
|
||||
"""
|
||||
@ -538,6 +550,8 @@ class ThemeForm(QtWidgets.QWizard, Ui_ThemeWizard, RegistryProperties):
|
||||
self.theme.display_horizontal_align = self.horizontal_combo_box.currentIndex()
|
||||
self.theme.display_vertical_align = self.vertical_combo_box.currentIndex()
|
||||
self.theme.display_slide_transition = self.field('slide_transition')
|
||||
self.theme.display_slide_transition_type = self.field('slide_transition_type')
|
||||
self.theme.display_slide_transition_speed = self.field('slide_transition_speed')
|
||||
|
||||
def accept(self):
|
||||
"""
|
||||
|
@ -25,7 +25,13 @@ from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
|
||||
from openlp.core.common import is_macosx
|
||||
from openlp.core.common.i18n import UiStrings, translate
|
||||
from openlp.core.lib.theme import BackgroundGradientType, BackgroundType, HorizontalType
|
||||
from openlp.core.lib.theme import (
|
||||
BackgroundGradientType,
|
||||
BackgroundType,
|
||||
HorizontalType,
|
||||
TransitionType,
|
||||
TransitionSpeed
|
||||
)
|
||||
from openlp.core.lib.ui import add_welcome_page, create_valign_selection_widgets
|
||||
from openlp.core.ui.icons import UiIcons
|
||||
from openlp.core.widgets.buttons import ColorButton
|
||||
@ -271,12 +277,22 @@ class Ui_ThemeWizard(object):
|
||||
self.vertical_label.setObjectName('vertical_label')
|
||||
self.vertical_combo_box.setObjectName('vertical_combo_box')
|
||||
self.alignment_layout.addRow(self.vertical_label, self.vertical_combo_box)
|
||||
self.transitions_label = QtWidgets.QLabel(self.alignment_page)
|
||||
self.transitions_label.setObjectName('transitions_label')
|
||||
self.transitions_check_box = QtWidgets.QCheckBox(self.alignment_page)
|
||||
self.transitions_check_box.setObjectName('transitions_check_box')
|
||||
self.alignment_layout.addRow(self.transitions_label, self.transitions_check_box)
|
||||
self.alignment_layout.setItem(3, QtWidgets.QFormLayout.LabelRole, self.spacer)
|
||||
self.transition_layout = QtWidgets.QHBoxLayout()
|
||||
self.transition_layout.setObjectName("transition_layout")
|
||||
self.transition_combo_box = QtWidgets.QComboBox(self.alignment_page)
|
||||
self.transition_combo_box.setObjectName("transition_combo_box")
|
||||
self.transition_combo_box.addItems(['', '', '', '', ''])
|
||||
self.transition_layout.addWidget(self.transition_combo_box)
|
||||
self.transition_speed_label = QtWidgets.QLabel(self.alignment_page)
|
||||
self.transition_speed_label.setObjectName("transition_speed_label")
|
||||
self.transition_layout.addWidget(self.transition_speed_label)
|
||||
self.transition_speed_combo_box = QtWidgets.QComboBox(self.alignment_page)
|
||||
self.transition_speed_combo_box.setObjectName("transition_speed_combo_box")
|
||||
self.transition_speed_combo_box.addItems(['', '', ''])
|
||||
self.transition_layout.addWidget(self.transition_speed_combo_box)
|
||||
self.alignment_layout.addRow(self.transitions_check_box, self.transition_layout)
|
||||
theme_wizard.addPage(self.alignment_page)
|
||||
# Area Position Page
|
||||
self.area_position_page = QtWidgets.QWizardPage()
|
||||
@ -460,7 +476,16 @@ class Ui_ThemeWizard(object):
|
||||
self.horizontal_combo_box.setItemText(HorizontalType.Right, translate('OpenLP.ThemeWizard', 'Right'))
|
||||
self.horizontal_combo_box.setItemText(HorizontalType.Center, translate('OpenLP.ThemeWizard', 'Center'))
|
||||
self.horizontal_combo_box.setItemText(HorizontalType.Justify, translate('OpenLP.ThemeWizard', 'Justify'))
|
||||
self.transitions_label.setText(translate('OpenLP.ThemeWizard', 'Transitions:'))
|
||||
self.transitions_check_box.setText(translate('OpenLP.ThemeWizard', 'Transitions:'))
|
||||
self.transition_combo_box.setItemText(TransitionType.Fade, translate('OpenLP.ThemeWizard', 'Fade'))
|
||||
self.transition_combo_box.setItemText(TransitionType.Slide, translate('OpenLP.ThemeWizard', 'Slide'))
|
||||
self.transition_combo_box.setItemText(TransitionType.Concave, translate('OpenLP.ThemeWizard', 'Concave'))
|
||||
self.transition_combo_box.setItemText(TransitionType.Convex, translate('OpenLP.ThemeWizard', 'Convex'))
|
||||
self.transition_combo_box.setItemText(TransitionType.Zoom, translate('OpenLP.ThemeWizard', 'Zoom'))
|
||||
self.transition_speed_label.setText(translate('OpenLP.ThemeWizard', 'Speed:'))
|
||||
self.transition_speed_combo_box.setItemText(TransitionSpeed.Normal, translate('OpenLP.ThemeWizard', 'Normal'))
|
||||
self.transition_speed_combo_box.setItemText(TransitionSpeed.Fast, translate('OpenLP.ThemeWizard', 'Fast'))
|
||||
self.transition_speed_combo_box.setItemText(TransitionSpeed.Slow, translate('OpenLP.ThemeWizard', 'Slow'))
|
||||
self.area_position_page.setTitle(translate('OpenLP.ThemeWizard', 'Output Area Locations'))
|
||||
self.area_position_page.setSubTitle(translate('OpenLP.ThemeWizard', 'Allows you to change and move the'
|
||||
' Main and Footer areas.'))
|
||||
|
@ -765,13 +765,72 @@ p, li { white-space: pre-wrap; }
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<item row="2" column="0">
|
||||
<widget class="QCheckBox" name="transitionsCheckBox">
|
||||
<property name="text">
|
||||
<string>Transitions</string>
|
||||
<string>Transitions:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="1">
|
||||
<layout class="QHBoxLayout" name="transitionLayout">
|
||||
<item>
|
||||
<widget class="QComboBox" name="transitionComboBox">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Fade</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Slide</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Convex</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Concave</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Zoom</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="transitionSpeedLabel">
|
||||
<property name="text">
|
||||
<string>Speed:</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QComboBox" name="transitionSpeedComboBox">
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Normal</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Fast</string>
|
||||
</property>
|
||||
</item>
|
||||
<item>
|
||||
<property name="text">
|
||||
<string>Slow</string>
|
||||
</property>
|
||||
</item>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<widget class="QWizardPage" name="areaPositionPage">
|
||||
|
@ -181,4 +181,4 @@ class TestTheme(TestCase):
|
||||
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 49 == len(theme.__dict__), 'The theme should have 49 attributes'
|
||||
assert 51 == len(theme.__dict__), 'The theme should have 51 attributes'
|
||||
|
@ -123,12 +123,6 @@ describe("The Display object", function () {
|
||||
expect(Display.setTransition).toBeDefined();
|
||||
});
|
||||
|
||||
it("should have a correctly functioning setTransition() method", function () {
|
||||
spyOn(Reveal, "configure");
|
||||
Display.setTransition("fade");
|
||||
expect(Reveal.configure).toHaveBeenCalledWith({"transition": "fade"});
|
||||
});
|
||||
|
||||
it("should have a correctly functioning clearSlides() method", function () {
|
||||
expect(Display.clearSlides).toBeDefined();
|
||||
|
||||
@ -156,6 +150,55 @@ describe("The Display object", function () {
|
||||
|
||||
});
|
||||
|
||||
describe("Transitions", function () {
|
||||
beforeEach(function() {
|
||||
document.body.innerHTML = "";
|
||||
_createDiv({"class": "slides"});
|
||||
_createDiv({"class": "footer"});
|
||||
_createDiv({"id": "global-background"});
|
||||
Display._slides = {};
|
||||
});
|
||||
afterEach(function() {
|
||||
// Reset theme
|
||||
Display._theme = null;
|
||||
});
|
||||
|
||||
it("should have a correctly functioning setTransition() method", function () {
|
||||
spyOn(Reveal, "configure");
|
||||
Display.setTransition("fade", "slow");
|
||||
expect(Reveal.configure).toHaveBeenCalledWith({"transition": "fade", "transitionSpeed": "slow"});
|
||||
});
|
||||
|
||||
it("should have enabled transitions when _doTransitions is true and setTheme is run", function () {
|
||||
spyOn(Display, "setTransition");
|
||||
Display._doTransitions = true;
|
||||
var theme = {
|
||||
"display_slide_transition": true,
|
||||
"display_slide_transition_type": TransitionType.Slide,
|
||||
"display_slide_transition_speed": TransitionSpeed.Fast
|
||||
}
|
||||
|
||||
Display.setTheme(theme);
|
||||
|
||||
expect(Display.setTransition).toHaveBeenCalledWith("slide", "fast");
|
||||
});
|
||||
|
||||
it("should have not enabled transitions when init() with no transitions and setTheme is run", function () {
|
||||
spyOn(Display, "setTransition");
|
||||
Display._doTransitions = false;
|
||||
var theme = {
|
||||
"display_slide_transition": true,
|
||||
"display_slide_transition_type": TransitionType.Slide,
|
||||
"display_slide_transition_speed": TransitionSpeed.Fast,
|
||||
}
|
||||
|
||||
Display.setTheme(theme);
|
||||
|
||||
expect(Display.setTransition).toHaveBeenCalledWith("none", "default");
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
describe("Display.alert", function () {
|
||||
var alertContainer, alertBackground, alertText, settings, text;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user