Fix up themes now

This commit is contained in:
Tim Bentley 2010-10-23 08:23:49 +01:00
parent 76ddf975a7
commit b0ba4472bd
7 changed files with 39 additions and 56 deletions

View File

@ -90,16 +90,16 @@ body {
var transition = %s;
function show_video(state, path, volume, loop){
// Note, the preferred method for looping would be to use the
// Note, the preferred method for looping would be to use the
// video tag loop attribute.
// But QtWebKit doesn't support this. Neither does it support the
// onended event, hence the setInterval()
// In addition, setting the currentTime attribute to zero to restart
// the video raises an INDEX_SIZE_ERROR: DOM Exception 1
// To complicate it further, sometimes vid.currentTime stops
// To complicate it further, sometimes vid.currentTime stops
// slightly short of vid.duration and vid.ended is intermittent!
//
// Note, currently the background may go black between loops. Not
// Note, currently the background may go black between loops. Not
// desirable. Need to investigate using two <video>'s, and hiding/
// preloading one, and toggle between the two when looping.
@ -132,8 +132,8 @@ body {
vid.style.visibility = 'visible';
if(vid.looping){
video_timer = setInterval(
function() {
show_video('poll');
function() {
show_video('poll');
}, 200);
}
break;
@ -328,6 +328,7 @@ def build_html(item, screen, alert, islive):
height = screen[u'size'].height()
theme = item.themedata
webkitvers = webkit_version()
# Image generated and poked in
if item.bg_image_bytes:
image = u'src="data:image/png;base64,%s"' % item.bg_image_bytes
else:
@ -455,7 +456,7 @@ def build_lyrics_css(item, webkitvers):
if theme.display_outline and webkitvers < 534.3:
shadow = u'padding-left: %spx; padding-top: %spx;' % \
(int(theme.display_shadow_size) +
(int(theme.display_outline_size) * 2),
(int(theme.display_outline_size) * 2),
theme.display_shadow_size)
shadow += build_lyrics_outline_css(theme, True)
else:

View File

@ -31,6 +31,7 @@ to wait for the conversion to happen.
"""
import logging
import os
import time
from PyQt4 import QtCore, QtGui
@ -94,22 +95,34 @@ class ImageManager(QtCore.QObject):
self.image_thread.start()
def get_image(self, name):
"""
Return the Qimage from the cache
"""
log.debug(u'get_image %s' % name)
return self._cache[name].image
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
def add_image(self, name, path):
"""
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:
image = Image()
image.name = name
image.path = path
fullpath = os.path.join(image.path, image.name)
image.image = resize_image(fullpath,
image.image = resize_image(path,
self.width, self.height)
self._cache[name] = image
self._cache_dirty = True

View File

@ -51,11 +51,6 @@ class Renderer(object):
self._rect = None
self.theme_name = 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):
"""
@ -66,14 +61,7 @@ class Renderer(object):
"""
log.debug(u'set 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
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):
"""
@ -105,30 +93,6 @@ class Renderer(object):
(build_lyrics_format_css(self._theme, self.page_width,
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):
"""
Figure out how much text can appear on a slide, using the current

View File

@ -157,7 +157,6 @@ class RenderManager(object):
self.build_text_rectangle(self.themedata)
self.image_manager.add_image(self.themedata.theme_name,
self.themedata.background_filename)
self.renderer.set_frame_dest(self.width, self.height)
return self.renderer._rect, self.renderer._rect_footer
def build_text_rectangle(self, theme):

View File

@ -160,7 +160,6 @@ class ServiceItem(object):
theme = self.theme
self.main, self.footer = \
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
if self.service_item_type == ServiceItemType.Text:
log.debug(u'Formatting slides')

View File

@ -222,6 +222,14 @@ class MainDisplay(DisplayWidget):
shrinkItem.resize(self.screen[u'size'].width(),
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):
"""
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')
image = self.parent.parent.RenderManager.image_manager. \
get_image(name)
get_image_bytes(name)
self.resetVideo()
self.displayImage(image)
# show screen
@ -244,11 +252,7 @@ class MainDisplay(DisplayWidget):
Display an image, as is.
"""
if image:
if isinstance(image, QtGui.QImage):
js = u'show_image("data:image/png;base64,%s");' % \
image_to_byte(image)
else:
js = u'show_image("data:image/png;base64,%s");' % image
js = u'show_image("data:image/png;base64,%s");' % image
else:
js = u'show_image("");'
self.frame.evaluateJavaScript(js)
@ -395,6 +399,9 @@ class MainDisplay(DisplayWidget):
self.loaded = False
self.initialFrame = False
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,
self.isLive)
log.debug(u'buildHtml - pre setHtml')

View File

@ -166,9 +166,8 @@ class ImageMediaItem(MediaManagerItem):
for item in items:
bitem = self.listView.item(item.row())
filename = unicode(bitem.data(QtCore.Qt.UserRole).toString())
#frame = QtGui.QImage(unicode(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
else:
return False
@ -185,7 +184,8 @@ class ImageMediaItem(MediaManagerItem):
for item in items:
bitem = self.listView.item(item.row())
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)
def onPreviewClick(self):