diff --git a/openlp/core/display/__init__.py b/openlp/core/display/__init__.py new file mode 100644 index 000000000..e4eb883a2 --- /dev/null +++ b/openlp/core/display/__init__.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +# vim: autoindent shiftwidth=4 expandtab textwidth=120 tabstop=4 softtabstop=4 + +############################################################################### +# OpenLP - Open Source Lyrics Projection # +# --------------------------------------------------------------------------- # +# Copyright (c) 2008-2017 OpenLP Developers # +# --------------------------------------------------------------------------- # +# This program is free software; you can redistribute it and/or modify it # +# under the terms of the GNU General Public License as published by the Free # +# Software Foundation; version 2 of the License. # +# # +# This program is distributed in the hope that it will be useful, but WITHOUT # +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or # +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for # +# more details. # +# # +# You should have received a copy of the GNU General Public License along # +# with this program; if not, write to the Free Software Foundation, Inc., 59 # +# Temple Place, Suite 330, Boston, MA 02111-1307 USA # +############################################################################### +""" +The Display module. +""" diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/display/canvas.py similarity index 97% rename from openlp/core/ui/maindisplay.py rename to openlp/core/display/canvas.py index 862fcd0bc..9e3381d59 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/display/canvas.py @@ -20,7 +20,7 @@ # Temple Place, Suite 330, Boston, MA 02111-1307 USA # ############################################################################### """ -The :mod:`maindisplay` module provides the functionality to display screens and play multimedia within OpenLP. +The :mod:`canvas` module provides the functionality to display screens and play multimedia within OpenLP. Some of the code for this form is based on the examples at: @@ -72,7 +72,7 @@ QGraphicsView { """ -class Display(QtWidgets.QGraphicsView): +class Canvas(QtWidgets.QGraphicsView): """ This is a general display screen class. Here the general display settings will done. It will be used as specialized classes by Main Display and Preview display. @@ -86,7 +86,7 @@ class Display(QtWidgets.QGraphicsView): self.is_live = True if self.is_live: self.parent = lambda: parent - super(Display, self).__init__() + super(Canvas, self).__init__() self.controller = parent self.screen = {} @@ -128,7 +128,7 @@ class Display(QtWidgets.QGraphicsView): self.web_loaded = True -class MainDisplay(OpenLPMixin, Display, RegistryProperties): +class MainCanvas(OpenLPMixin, Display, RegistryProperties): """ This is the display screen as a specialized class from the Display class """ @@ -136,7 +136,7 @@ class MainDisplay(OpenLPMixin, Display, RegistryProperties): """ Constructor """ - super(MainDisplay, self).__init__(parent) + super(MainCanvas, self).__init__(parent) self.screens = ScreenList() self.rebuild_css = False self.hide_mode = None @@ -175,7 +175,7 @@ class MainDisplay(OpenLPMixin, Display, RegistryProperties): pythonapi.PyCapsule_SetName(nsview_pointer, c_char_p(b"objc.__object__")) # Covert the NSView pointer into a pyobjc NSView object self.pyobjc_nsview = objc_object(cobject=nsview_pointer) - # Set the window level so that the MainDisplay is above the menu bar and dock + # Set the window level so that the MainCanvas is above the menu bar and dock self.pyobjc_nsview.window().setLevel_(NSMainMenuWindowLevel + 2) # Set the collection behavior so the window is visible when Mission Control is activated self.pyobjc_nsview.window().setCollectionBehavior_(NSWindowCollectionBehaviorManaged) @@ -244,16 +244,16 @@ class MainDisplay(OpenLPMixin, Display, RegistryProperties): """ Setup the interface translation strings. """ - self.setWindowTitle(translate('OpenLP.MainDisplay', 'OpenLP Display')) + self.setWindowTitle(translate('OpenLP.MainCanvas', 'OpenLP Display')) def setup(self): """ Set up and build the output screen """ - self.log_debug('Start MainDisplay setup (live = {islive})'.format(islive=self.is_live)) + self.log_debug('Start MainCanvas setup (live = {islive})'.format(islive=self.is_live)) self.screen = self.screens.current self.setVisible(False) - Display.setup(self) + Canvas.setup(self) if self.is_live: # Build the initial frame. background_color = QtGui.QColor() diff --git a/openlp/core/display/html/black.css b/openlp/core/display/html/black.css new file mode 100644 index 000000000..96e4fd480 --- /dev/null +++ b/openlp/core/display/html/black.css @@ -0,0 +1,292 @@ +/** + * Black theme for reveal.js. This is the opposite of the 'white' theme. + * + * By Hakim El Hattab, http://hakim.se + */ +@import url(../../lib/font/source-sans-pro/source-sans-pro.css); +section.has-light-background, section.has-light-background h1, section.has-light-background h2, section.has-light-background h3, section.has-light-background h4, section.has-light-background h5, section.has-light-background h6 { + color: #222; } + +/********************************************* + * GLOBAL STYLES + *********************************************/ +body { + background: #222; + background-color: #222; } + +.reveal { + font-family: "Source Sans Pro", Helvetica, sans-serif; + font-size: 42px; + font-weight: normal; + color: #fff; } + +::selection { + color: #fff; + background: #bee4fd; + text-shadow: none; } + +::-moz-selection { + color: #fff; + background: #bee4fd; + text-shadow: none; } + +.reveal .slides > section, +.reveal .slides > section > section { + line-height: 1.3; + font-weight: inherit; } + +/********************************************* + * HEADERS + *********************************************/ +.reveal h1, +.reveal h2, +.reveal h3, +.reveal h4, +.reveal h5, +.reveal h6 { + margin: 0 0 20px 0; + color: #fff; + font-family: "Source Sans Pro", Helvetica, sans-serif; + font-weight: 600; + line-height: 1.2; + letter-spacing: normal; + text-transform: uppercase; + text-shadow: none; + word-wrap: break-word; } + +.reveal h1 { + font-size: 2.5em; } + +.reveal h2 { + font-size: 1.6em; } + +.reveal h3 { + font-size: 1.3em; } + +.reveal h4 { + font-size: 1em; } + +.reveal h1 { + text-shadow: none; } + +/********************************************* + * OTHER + *********************************************/ +.reveal p { + margin: 20px 0; + line-height: 1.3; } + +/* Ensure certain elements are never larger than the slide itself */ +.reveal img, +.reveal video, +.reveal iframe { + max-width: 95%; + max-height: 95%; } + +.reveal strong, +.reveal b { + font-weight: bold; } + +.reveal em { + font-style: italic; } + +.reveal ol, +.reveal dl, +.reveal ul { + display: inline-block; + text-align: left; + margin: 0 0 0 1em; } + +.reveal ol { + list-style-type: decimal; } + +.reveal ul { + list-style-type: disc; } + +.reveal ul ul { + list-style-type: square; } + +.reveal ul ul ul { + list-style-type: circle; } + +.reveal ul ul, +.reveal ul ol, +.reveal ol ol, +.reveal ol ul { + display: block; + margin-left: 40px; } + +.reveal dt { + font-weight: bold; } + +.reveal dd { + margin-left: 40px; } + +.reveal q, +.reveal blockquote { + quotes: none; } + +.reveal blockquote { + display: block; + position: relative; + width: 70%; + margin: 20px auto; + padding: 5px; + font-style: italic; + background: rgba(255, 255, 255, 0.05); + box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.2); } + +.reveal blockquote p:first-child, +.reveal blockquote p:last-child { + display: inline-block; } + +.reveal q { + font-style: italic; } + +.reveal pre { + display: block; + position: relative; + width: 90%; + margin: 20px auto; + text-align: left; + font-size: 0.55em; + font-family: monospace; + line-height: 1.2em; + word-wrap: break-word; + box-shadow: 0px 0px 6px rgba(0, 0, 0, 0.3); } + +.reveal code { + font-family: monospace; } + +.reveal pre code { + display: block; + padding: 5px; + overflow: auto; + max-height: 400px; + word-wrap: normal; } + +.reveal table { + margin: auto; + border-collapse: collapse; + border-spacing: 0; } + +.reveal table th { + font-weight: bold; } + +.reveal table th, +.reveal table td { + text-align: left; + padding: 0.2em 0.5em 0.2em 0.5em; + border-bottom: 1px solid; } + +.reveal table th[align="center"], +.reveal table td[align="center"] { + text-align: center; } + +.reveal table th[align="right"], +.reveal table td[align="right"] { + text-align: right; } + +.reveal table tbody tr:last-child th, +.reveal table tbody tr:last-child td { + border-bottom: none; } + +.reveal sup { + vertical-align: super; } + +.reveal sub { + vertical-align: sub; } + +.reveal small { + display: inline-block; + font-size: 0.6em; + line-height: 1.2em; + vertical-align: top; } + +.reveal small * { + vertical-align: top; } + +/********************************************* + * LINKS + *********************************************/ +.reveal a { + color: #42affa; + text-decoration: none; + -webkit-transition: color .15s ease; + -moz-transition: color .15s ease; + transition: color .15s ease; } + +.reveal a:hover { + color: #8dcffc; + text-shadow: none; + border: none; } + +.reveal .roll span:after { + color: #fff; + background: #068de9; } + +/********************************************* + * IMAGES + *********************************************/ +.reveal section img { + margin: 15px 0px; + background: rgba(255, 255, 255, 0.12); + border: 4px solid #fff; + box-shadow: 0 0 10px rgba(0, 0, 0, 0.15); } + +.reveal section img.plain { + border: 0; + box-shadow: none; } + +.reveal a img { + -webkit-transition: all .15s linear; + -moz-transition: all .15s linear; + transition: all .15s linear; } + +.reveal a:hover img { + background: rgba(255, 255, 255, 0.2); + border-color: #42affa; + box-shadow: 0 0 20px rgba(0, 0, 0, 0.55); } + +/********************************************* + * NAVIGATION CONTROLS + *********************************************/ +.reveal .controls .navigate-left, +.reveal .controls .navigate-left.enabled { + border-right-color: #42affa; } + +.reveal .controls .navigate-right, +.reveal .controls .navigate-right.enabled { + border-left-color: #42affa; } + +.reveal .controls .navigate-up, +.reveal .controls .navigate-up.enabled { + border-bottom-color: #42affa; } + +.reveal .controls .navigate-down, +.reveal .controls .navigate-down.enabled { + border-top-color: #42affa; } + +.reveal .controls .navigate-left.enabled:hover { + border-right-color: #8dcffc; } + +.reveal .controls .navigate-right.enabled:hover { + border-left-color: #8dcffc; } + +.reveal .controls .navigate-up.enabled:hover { + border-bottom-color: #8dcffc; } + +.reveal .controls .navigate-down.enabled:hover { + border-top-color: #8dcffc; } + +/********************************************* + * PROGRESS BAR + *********************************************/ +.reveal .progress { + background: rgba(0, 0, 0, 0.2); } + +.reveal .progress span { + background: #42affa; + -webkit-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); + -moz-transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); + transition: width 800ms cubic-bezier(0.26, 0.86, 0.44, 0.985); } diff --git a/openlp/core/display/html/display.html b/openlp/core/display/html/display.html new file mode 100644 index 000000000..8c05e434c --- /dev/null +++ b/openlp/core/display/html/display.html @@ -0,0 +1,25 @@ + + +
and tags + */ +function _prepareText(text) { + return "
" + _nl2br(text) + "
Keyboard Shortcuts