forked from openlp/openlp
Fix up themes now
This commit is contained in:
parent
76ddf975a7
commit
b0ba4472bd
@ -328,6 +328,7 @@ def build_html(item, screen, alert, islive):
|
|||||||
height = screen[u'size'].height()
|
height = screen[u'size'].height()
|
||||||
theme = item.themedata
|
theme = item.themedata
|
||||||
webkitvers = webkit_version()
|
webkitvers = webkit_version()
|
||||||
|
# Image generated and poked in
|
||||||
if item.bg_image_bytes:
|
if item.bg_image_bytes:
|
||||||
image = u'src="data:image/png;base64,%s"' % item.bg_image_bytes
|
image = u'src="data:image/png;base64,%s"' % item.bg_image_bytes
|
||||||
else:
|
else:
|
||||||
|
@ -31,6 +31,7 @@ to wait for the conversion to happen.
|
|||||||
"""
|
"""
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
import time
|
||||||
|
|
||||||
from PyQt4 import QtCore, QtGui
|
from PyQt4 import QtCore, QtGui
|
||||||
|
|
||||||
@ -94,22 +95,34 @@ class ImageManager(QtCore.QObject):
|
|||||||
self.image_thread.start()
|
self.image_thread.start()
|
||||||
|
|
||||||
def get_image(self, name):
|
def get_image(self, name):
|
||||||
|
"""
|
||||||
|
Return the Qimage from the cache
|
||||||
|
"""
|
||||||
|
log.debug(u'get_image %s' % name)
|
||||||
return self._cache[name].image
|
return self._cache[name].image
|
||||||
|
|
||||||
def get_image_bytes(self, name):
|
def get_image_bytes(self, name):
|
||||||
|
"""
|
||||||
|
Returns the byte string for an image
|
||||||
|
If not present wait for the background thread to process it.
|
||||||
|
"""
|
||||||
|
log.debug(u'get_image_bytes %s' % name)
|
||||||
|
if not self._cache[name].image_bytes:
|
||||||
|
while self._cache[name].dirty:
|
||||||
|
log.debug(u'get_image_bytes - waiting')
|
||||||
|
time.sleep(0.1)
|
||||||
return self._cache[name].image_bytes
|
return self._cache[name].image_bytes
|
||||||
|
|
||||||
def add_image(self, name, path):
|
def add_image(self, name, path):
|
||||||
"""
|
"""
|
||||||
Add image to cache if it is not already there
|
Add image to cache if it is not already there
|
||||||
"""
|
"""
|
||||||
log.debug(u'add_image')
|
log.debug(u'add_image %s:%s' % (name, path))
|
||||||
if not name in self._cache:
|
if not name in self._cache:
|
||||||
image = Image()
|
image = Image()
|
||||||
image.name = name
|
image.name = name
|
||||||
image.path = path
|
image.path = path
|
||||||
fullpath = os.path.join(image.path, image.name)
|
image.image = resize_image(path,
|
||||||
image.image = resize_image(fullpath,
|
|
||||||
self.width, self.height)
|
self.width, self.height)
|
||||||
self._cache[name] = image
|
self._cache[name] = image
|
||||||
self._cache_dirty = True
|
self._cache_dirty = True
|
||||||
|
@ -51,11 +51,6 @@ class Renderer(object):
|
|||||||
self._rect = None
|
self._rect = None
|
||||||
self.theme_name = None
|
self.theme_name = None
|
||||||
self._theme = None
|
self._theme = None
|
||||||
self._bg_image_filename = None
|
|
||||||
self.frame = None
|
|
||||||
self.bg_frame = None
|
|
||||||
self.bg_image = None
|
|
||||||
self.bg_image_bytes = None
|
|
||||||
|
|
||||||
def set_theme(self, theme):
|
def set_theme(self, theme):
|
||||||
"""
|
"""
|
||||||
@ -66,14 +61,7 @@ class Renderer(object):
|
|||||||
"""
|
"""
|
||||||
log.debug(u'set theme')
|
log.debug(u'set theme')
|
||||||
self._theme = theme
|
self._theme = theme
|
||||||
self.bg_frame = None
|
|
||||||
self.bg_image = None
|
|
||||||
self.bg_image_bytes = None
|
|
||||||
self._bg_image_filename = None
|
|
||||||
self.theme_name = theme.theme_name
|
self.theme_name = theme.theme_name
|
||||||
if theme.background_type == u'image':
|
|
||||||
if theme.background_filename:
|
|
||||||
self._bg_image_filename =theme.background_filename
|
|
||||||
|
|
||||||
def set_text_rectangle(self, rect_main, rect_footer):
|
def set_text_rectangle(self, rect_main, rect_footer):
|
||||||
"""
|
"""
|
||||||
@ -105,30 +93,6 @@ class Renderer(object):
|
|||||||
(build_lyrics_format_css(self._theme, self.page_width,
|
(build_lyrics_format_css(self._theme, self.page_width,
|
||||||
self.page_height), build_lyrics_outline_css(self._theme))
|
self.page_height), build_lyrics_outline_css(self._theme))
|
||||||
|
|
||||||
def set_frame_dest(self, frame_width, frame_height):
|
|
||||||
"""
|
|
||||||
Set the size of the slide.
|
|
||||||
|
|
||||||
``frame_width``
|
|
||||||
The width of the slide.
|
|
||||||
|
|
||||||
``frame_height``
|
|
||||||
The height of the slide.
|
|
||||||
|
|
||||||
"""
|
|
||||||
log.debug(u'set frame dest (frame) w %d h %d', frame_width,
|
|
||||||
frame_height)
|
|
||||||
if self._theme.background_type == u'image':
|
|
||||||
frame = QtGui.QImage(frame_width, frame_height,
|
|
||||||
QtGui.QImage.Format_ARGB32_Premultiplied)
|
|
||||||
self.bg_image = resize_image(self._bg_image_filename,
|
|
||||||
frame.width(), frame.height())
|
|
||||||
self.bg_image_bytes = image_to_byte(self.bg_image)
|
|
||||||
else:
|
|
||||||
self.bg_frame = None
|
|
||||||
self.bg_image_bytes = None
|
|
||||||
log.debug(u'end frame dest (frame)')
|
|
||||||
|
|
||||||
def format_slide(self, words, line_break):
|
def format_slide(self, words, line_break):
|
||||||
"""
|
"""
|
||||||
Figure out how much text can appear on a slide, using the current
|
Figure out how much text can appear on a slide, using the current
|
||||||
|
@ -157,7 +157,6 @@ class RenderManager(object):
|
|||||||
self.build_text_rectangle(self.themedata)
|
self.build_text_rectangle(self.themedata)
|
||||||
self.image_manager.add_image(self.themedata.theme_name,
|
self.image_manager.add_image(self.themedata.theme_name,
|
||||||
self.themedata.background_filename)
|
self.themedata.background_filename)
|
||||||
self.renderer.set_frame_dest(self.width, self.height)
|
|
||||||
return self.renderer._rect, self.renderer._rect_footer
|
return self.renderer._rect, self.renderer._rect_footer
|
||||||
|
|
||||||
def build_text_rectangle(self, theme):
|
def build_text_rectangle(self, theme):
|
||||||
|
@ -160,7 +160,6 @@ class ServiceItem(object):
|
|||||||
theme = self.theme
|
theme = self.theme
|
||||||
self.main, self.footer = \
|
self.main, self.footer = \
|
||||||
self.render_manager.set_override_theme(theme, useOverride)
|
self.render_manager.set_override_theme(theme, useOverride)
|
||||||
self.bg_image_bytes = self.render_manager.renderer.bg_image_bytes
|
|
||||||
self.themedata = self.render_manager.renderer._theme
|
self.themedata = self.render_manager.renderer._theme
|
||||||
if self.service_item_type == ServiceItemType.Text:
|
if self.service_item_type == ServiceItemType.Text:
|
||||||
log.debug(u'Formatting slides')
|
log.debug(u'Formatting slides')
|
||||||
|
@ -222,6 +222,14 @@ class MainDisplay(DisplayWidget):
|
|||||||
shrinkItem.resize(self.screen[u'size'].width(),
|
shrinkItem.resize(self.screen[u'size'].width(),
|
||||||
self.screen[u'size'].height())
|
self.screen[u'size'].height())
|
||||||
|
|
||||||
|
def directImage(self, name, path):
|
||||||
|
"""
|
||||||
|
API for replacement backgounds so Images are added directly to cache
|
||||||
|
"""
|
||||||
|
image = self.parent.parent.RenderManager.image_manager. \
|
||||||
|
add_image(name, path)
|
||||||
|
self.image(name)
|
||||||
|
|
||||||
def image(self, name):
|
def image(self, name):
|
||||||
"""
|
"""
|
||||||
Add an image as the background. The image is converted to a
|
Add an image as the background. The image is converted to a
|
||||||
@ -232,7 +240,7 @@ class MainDisplay(DisplayWidget):
|
|||||||
"""
|
"""
|
||||||
log.debug(u'image to display')
|
log.debug(u'image to display')
|
||||||
image = self.parent.parent.RenderManager.image_manager. \
|
image = self.parent.parent.RenderManager.image_manager. \
|
||||||
get_image(name)
|
get_image_bytes(name)
|
||||||
self.resetVideo()
|
self.resetVideo()
|
||||||
self.displayImage(image)
|
self.displayImage(image)
|
||||||
# show screen
|
# show screen
|
||||||
@ -244,11 +252,7 @@ class MainDisplay(DisplayWidget):
|
|||||||
Display an image, as is.
|
Display an image, as is.
|
||||||
"""
|
"""
|
||||||
if image:
|
if image:
|
||||||
if isinstance(image, QtGui.QImage):
|
js = u'show_image("data:image/png;base64,%s");' % image
|
||||||
js = u'show_image("data:image/png;base64,%s");' % \
|
|
||||||
image_to_byte(image)
|
|
||||||
else:
|
|
||||||
js = u'show_image("data:image/png;base64,%s");' % image
|
|
||||||
else:
|
else:
|
||||||
js = u'show_image("");'
|
js = u'show_image("");'
|
||||||
self.frame.evaluateJavaScript(js)
|
self.frame.evaluateJavaScript(js)
|
||||||
@ -395,6 +399,9 @@ class MainDisplay(DisplayWidget):
|
|||||||
self.loaded = False
|
self.loaded = False
|
||||||
self.initialFrame = False
|
self.initialFrame = False
|
||||||
self.serviceItem = serviceItem
|
self.serviceItem = serviceItem
|
||||||
|
if self.serviceItem.themedata.background_filename:
|
||||||
|
self.serviceItem.bg_image_bytes = self.parent.parent.RenderManager.image_manager. \
|
||||||
|
get_image_bytes(self.serviceItem.themedata.theme_name)
|
||||||
html = build_html(self.serviceItem, self.screen, self.parent.alertTab,
|
html = build_html(self.serviceItem, self.screen, self.parent.alertTab,
|
||||||
self.isLive)
|
self.isLive)
|
||||||
log.debug(u'buildHtml - pre setHtml')
|
log.debug(u'buildHtml - pre setHtml')
|
||||||
|
@ -166,9 +166,8 @@ class ImageMediaItem(MediaManagerItem):
|
|||||||
for item in items:
|
for item in items:
|
||||||
bitem = self.listView.item(item.row())
|
bitem = self.listView.item(item.row())
|
||||||
filename = unicode(bitem.data(QtCore.Qt.UserRole).toString())
|
filename = unicode(bitem.data(QtCore.Qt.UserRole).toString())
|
||||||
#frame = QtGui.QImage(unicode(filename))
|
|
||||||
(path, name) = os.path.split(filename)
|
(path, name) = os.path.split(filename)
|
||||||
service_item.add_from_image(path, name, None)
|
service_item.add_from_image(filename, name, None)
|
||||||
return True
|
return True
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
@ -185,7 +184,8 @@ class ImageMediaItem(MediaManagerItem):
|
|||||||
for item in items:
|
for item in items:
|
||||||
bitem = self.listView.item(item.row())
|
bitem = self.listView.item(item.row())
|
||||||
filename = unicode(bitem.data(QtCore.Qt.UserRole).toString())
|
filename = unicode(bitem.data(QtCore.Qt.UserRole).toString())
|
||||||
self.parent.liveController.display.image(filename)
|
(path, name) = os.path.split(filename)
|
||||||
|
self.parent.liveController.display.directImage(name, filename)
|
||||||
self.resetButton.setVisible(True)
|
self.resetButton.setVisible(True)
|
||||||
|
|
||||||
def onPreviewClick(self):
|
def onPreviewClick(self):
|
||||||
|
Loading…
Reference in New Issue
Block a user