forked from openlp/openlp
Fixes to formatting and rendering
Add Blank screen functionality
This commit is contained in:
parent
ee649d9ca7
commit
13766fc7c7
@ -27,7 +27,7 @@ from openlp.core.lib import Receiver
|
|||||||
|
|
||||||
logging.basicConfig(level=logging.DEBUG,
|
logging.basicConfig(level=logging.DEBUG,
|
||||||
format=u'%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
|
format=u'%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
|
||||||
datefmt=u'%m-%d %H:%M',
|
datefmt=u'%m-%d %H:%M:%S',
|
||||||
filename=u'openlp.log',
|
filename=u'openlp.log',
|
||||||
filemode=u'w')
|
filemode=u'w')
|
||||||
|
|
||||||
|
@ -114,7 +114,6 @@ class Renderer:
|
|||||||
|
|
||||||
def render_screen(self, screennum):
|
def render_screen(self, screennum):
|
||||||
log.debug(u'render screen\n %s %s ', screennum, self.words[screennum])
|
log.debug(u'render screen\n %s %s ', screennum, self.words[screennum])
|
||||||
import time
|
|
||||||
t=0.0
|
t=0.0
|
||||||
words=self.words[screennum]
|
words=self.words[screennum]
|
||||||
retval=self._render_lines(words)
|
retval=self._render_lines(words)
|
||||||
@ -173,7 +172,6 @@ class Renderer:
|
|||||||
else:
|
else:
|
||||||
p.fillRect(self._paint.rect(), QtGui.QColor(u'#000000'))
|
p.fillRect(self._paint.rect(), QtGui.QColor(u'#000000'))
|
||||||
p.end()
|
p.end()
|
||||||
log.debug(u'render background done')
|
|
||||||
|
|
||||||
def split_set_of_lines(self, lines, footer):
|
def split_set_of_lines(self, lines, footer):
|
||||||
|
|
||||||
@ -252,7 +250,7 @@ class Renderer:
|
|||||||
|
|
||||||
def render_lines(self, lines, footer_lines=None):
|
def render_lines(self, lines, footer_lines=None):
|
||||||
"""render a set of lines according to the theme, return bounding box"""
|
"""render a set of lines according to the theme, return bounding box"""
|
||||||
#log.debug(u'_render_lines %s', lines)
|
log.debug(u'_render_lines %s', lines)
|
||||||
|
|
||||||
bbox=self._render_lines_unaligned(lines, False) # Main font
|
bbox=self._render_lines_unaligned(lines, False) # Main font
|
||||||
if footer_lines is not None:
|
if footer_lines is not None:
|
||||||
@ -264,11 +262,8 @@ class Renderer:
|
|||||||
bbox=self._render_lines_unaligned(lines, False, (x, y))
|
bbox=self._render_lines_unaligned(lines, False, (x, y))
|
||||||
|
|
||||||
if footer_lines is not None:
|
if footer_lines is not None:
|
||||||
#x, y = self._correctAlignment(self._rect_footer, bbox1)
|
|
||||||
bbox=self._render_lines_unaligned(footer_lines, True, (self._rect_footer.left(), self._rect_footer.top()) )
|
bbox=self._render_lines_unaligned(footer_lines, True, (self._rect_footer.left(), self._rect_footer.top()) )
|
||||||
|
|
||||||
log.debug(u'render lines DONE')
|
|
||||||
|
|
||||||
return bbox
|
return bbox
|
||||||
|
|
||||||
def _render_lines_unaligned(self, lines, footer, tlcorner=(0,0)):
|
def _render_lines_unaligned(self, lines, footer, tlcorner=(0,0)):
|
||||||
@ -279,7 +274,7 @@ class Renderer:
|
|||||||
than a screenful (eg. by using split_set_of_lines)
|
than a screenful (eg. by using split_set_of_lines)
|
||||||
|
|
||||||
Returns the bounding box of the text as QRect"""
|
Returns the bounding box of the text as QRect"""
|
||||||
log.debug(u'render unaligned %s', lines)
|
log.debug(u'render lines unaligned %s', lines)
|
||||||
x, y=tlcorner
|
x, y=tlcorner
|
||||||
brx=x
|
brx=x
|
||||||
bry=y
|
bry=y
|
||||||
@ -298,7 +293,7 @@ class Renderer:
|
|||||||
p.setPen(QtGui.QPen(QtGui.QColor(0,0,255)))
|
p.setPen(QtGui.QPen(QtGui.QColor(0,0,255)))
|
||||||
p.drawRect(retval)
|
p.drawRect(retval)
|
||||||
p.end()
|
p.end()
|
||||||
log.debug(u'render unaligned DONE')
|
|
||||||
|
|
||||||
return retval
|
return retval
|
||||||
|
|
||||||
@ -410,7 +405,7 @@ class Renderer:
|
|||||||
|
|
||||||
return width and height of text as a tuple (w,h)"""
|
return width and height of text as a tuple (w,h)"""
|
||||||
# setup defaults
|
# setup defaults
|
||||||
#log.debug(u"_get_extent_and_render %s %s %s ", [line], tlcorner, draw)
|
log.debug(u'_get_extent_and_render %s %s %s ', [line], tlcorner, draw)
|
||||||
p=QtGui.QPainter()
|
p=QtGui.QPainter()
|
||||||
p.begin(self._paint)
|
p.begin(self._paint)
|
||||||
# 'twould be more efficient to set this once when theme changes
|
# 'twould be more efficient to set this once when theme changes
|
||||||
|
@ -18,6 +18,7 @@ this program; if not, write to the Free Software Foundation, Inc., 59 Temple
|
|||||||
Place, Suite 330, Boston, MA 02111-1307 USA
|
Place, Suite 330, Boston, MA 02111-1307 USA
|
||||||
"""
|
"""
|
||||||
import logging
|
import logging
|
||||||
|
import time
|
||||||
import os, os.path
|
import os, os.path
|
||||||
import sys
|
import sys
|
||||||
from PyQt4 import QtGui, QtCore, Qt
|
from PyQt4 import QtGui, QtCore, Qt
|
||||||
@ -41,21 +42,20 @@ class RenderManager:
|
|||||||
self.current_display = 0
|
self.current_display = 0
|
||||||
self.renderer = Renderer(None)
|
self.renderer = Renderer(None)
|
||||||
self.calculate_default(self.screen_list[self.current_display]['size'])
|
self.calculate_default(self.screen_list[self.current_display]['size'])
|
||||||
self.frame = None
|
|
||||||
|
|
||||||
def set_override_theme(self, theme):
|
def set_override_theme(self, theme):
|
||||||
log.debug("set override theme to %s", theme)
|
log.debug(u'set override theme to %s', theme)
|
||||||
if theme is not None:
|
if theme is not None:
|
||||||
self.theme = theme
|
self.theme = theme
|
||||||
else:
|
else:
|
||||||
self.theme = self.default_theme
|
self.theme = self.default_theme
|
||||||
log.debug("theme is now %s", self.theme)
|
log.debug(u'theme is now %s', self.theme)
|
||||||
self.themedata = self.theme_manager.getThemeData(self.theme)
|
self.themedata = self.theme_manager.getThemeData(self.theme)
|
||||||
self.renderer.set_theme(self.themedata)
|
self.renderer.set_theme(self.themedata)
|
||||||
self.build_text_rectangle(self.themedata)
|
self.build_text_rectangle(self.themedata)
|
||||||
|
|
||||||
def build_text_rectangle(self, theme):
|
def build_text_rectangle(self, theme):
|
||||||
|
log.debug(u'build_text_rectangle ')
|
||||||
main_rect = None
|
main_rect = None
|
||||||
footer_rect = None
|
footer_rect = None
|
||||||
|
|
||||||
@ -74,6 +74,7 @@ class RenderManager:
|
|||||||
self.renderer.set_text_rectangle(main_rect,footer_rect)
|
self.renderer.set_text_rectangle(main_rect,footer_rect)
|
||||||
|
|
||||||
def generate_preview(self, themedata):
|
def generate_preview(self, themedata):
|
||||||
|
log.debug(u'generate preview ')
|
||||||
self.calculate_default(QtCore.QSize(800,600))
|
self.calculate_default(QtCore.QSize(800,600))
|
||||||
self.renderer.set_theme(themedata)
|
self.renderer.set_theme(themedata)
|
||||||
self.build_text_rectangle(themedata)
|
self.build_text_rectangle(themedata)
|
||||||
@ -94,25 +95,23 @@ class RenderManager:
|
|||||||
return frame
|
return frame
|
||||||
|
|
||||||
def format_slide(self, words, footer):
|
def format_slide(self, words, footer):
|
||||||
self.calculate_default(QtCore.QSize(800,600))
|
log.debug(u'format slide')
|
||||||
frame = QtGui.QPixmap(self.width, self.height)
|
self.calculate_default(self.screen_list[self.current_display]['size'])
|
||||||
self.renderer.set_paint_dest(frame)
|
self.renderer.set_paint_dest(QtGui.QPixmap(self.width, self.height))
|
||||||
return self.renderer.format_slide(words, footer)
|
return self.renderer.format_slide(words, footer)
|
||||||
|
|
||||||
def generate_slide(self,main_text, footer_text, preview=True):
|
def generate_slide(self,main_text, footer_text):
|
||||||
if preview == True:
|
log.debug(u'generate slide')
|
||||||
self.calculate_default(QtCore.QSize(800,600))
|
self.calculate_default(self.screen_list[self.current_display]['size'])
|
||||||
|
|
||||||
frame = QtGui.QPixmap(self.width, self.height)
|
frame = QtGui.QPixmap(self.width, self.height)
|
||||||
self.renderer.set_paint_dest(frame)
|
self.renderer.set_paint_dest(frame)
|
||||||
|
|
||||||
answer=self.renderer.render_lines(main_text, footer_text)
|
answer=self.renderer.render_lines(main_text, footer_text)
|
||||||
return frame
|
return frame
|
||||||
|
|
||||||
def calculate_default(self, screen):
|
def calculate_default(self, screen):
|
||||||
|
log.debug(u'calculate default %s' , screen)
|
||||||
self.width = screen.width()
|
self.width = screen.width()
|
||||||
self.height = screen.height()
|
self.height = screen.height()
|
||||||
|
log.debug(u'calculate default %d,%d' , self.width, self.height)
|
||||||
self.footer_start = int(self.height*0.95) # 95% is start of footer
|
self.footer_start = int(self.height*0.95) # 95% is start of footer
|
||||||
#update the rederer frame
|
|
||||||
self.frame = QtGui.QPixmap(self.width, self.height)
|
|
||||||
self.renderer.set_paint_dest(self.frame)
|
|
||||||
|
@ -19,7 +19,8 @@ Place, Suite 330, Boston, MA 02111-1307 USA
|
|||||||
"""
|
"""
|
||||||
import logging
|
import logging
|
||||||
import types
|
import types
|
||||||
from PyQt4 import QtCore, QtGui
|
import time
|
||||||
|
|
||||||
from PyQt4.QtCore import *
|
from PyQt4.QtCore import *
|
||||||
from PyQt4.QtGui import *
|
from PyQt4.QtGui import *
|
||||||
|
|
||||||
@ -51,34 +52,34 @@ class ServiceItem():
|
|||||||
|
|
||||||
def addIcon(self, icon):
|
def addIcon(self, icon):
|
||||||
ButtonIcon = None
|
ButtonIcon = None
|
||||||
if type(icon) is QtGui.QIcon:
|
if type(icon) is QIcon:
|
||||||
ButtonIcon = icon
|
ButtonIcon = icon
|
||||||
elif type(icon) is types.StringType or type(icon) is types.UnicodeType:
|
elif type(icon) is types.StringType or type(icon) is types.UnicodeType:
|
||||||
ButtonIcon = QtGui.QIcon()
|
ButtonIcon = QIcon()
|
||||||
if icon.startswith(u':/'):
|
if icon.startswith(u':/'):
|
||||||
ButtonIcon.addPixmap(QtGui.QPixmap(icon), QtGui.QIcon.Normal,
|
ButtonIcon.addPixmap(QPixmap(icon), QIcon.Normal,
|
||||||
QtGui.QIcon.Off)
|
QIcon.Off)
|
||||||
else:
|
else:
|
||||||
ButtonIcon.addPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(icon)),
|
ButtonIcon.addPixmap(QPixmap.fromImage(QImage(icon)),
|
||||||
QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
QIcon.Normal, QIcon.Off)
|
||||||
self.iconic_representation = ButtonIcon
|
self.iconic_representation = ButtonIcon
|
||||||
|
|
||||||
def render(self):
|
def render(self):
|
||||||
"""
|
"""
|
||||||
The render method is what the plugin uses to render it's meda to the
|
The render method is what renders the frames for the screen.
|
||||||
screen.
|
|
||||||
"""
|
"""
|
||||||
log.debug(u'Render called')
|
log.debug(u'Render called')
|
||||||
if self.theme == None:
|
if self.theme == None:
|
||||||
self.render_manager.set_override_theme(None)
|
self.render_manager.set_override_theme(None)
|
||||||
else:
|
else:
|
||||||
self.render_manager.set_override_theme(self.theme)
|
self.render_manager.set_override_theme(self.theme)
|
||||||
|
log.debug(u'Formatting slides')
|
||||||
for slide in self.raw_slides:
|
for slide in self.raw_slides:
|
||||||
self.format_slides.append(self.render_manager.format_slide(slide, False))
|
self.format_slides.append(self.render_manager.format_slide(slide, False))
|
||||||
|
log.debug(u'Rendering slides')
|
||||||
for slide in self.format_slides:
|
for slide in self.format_slides:
|
||||||
|
self.frames.append(self.render_manager.generate_slide(slide, self.raw_footer))
|
||||||
|
|
||||||
self.frames.append(self.render_manager.generate_slide(slide, self.raw_footer, False))
|
|
||||||
|
|
||||||
def get_parent_node(self):
|
def get_parent_node(self):
|
||||||
"""
|
"""
|
||||||
|
@ -29,6 +29,9 @@ class MainDisplay(QtGui.QWidget):
|
|||||||
self.setWindowTitle(u'OpenLP Display')
|
self.setWindowTitle(u'OpenLP Display')
|
||||||
self.screens = screens
|
self.screens = screens
|
||||||
self.display = QtGui.QLabel(self)
|
self.display = QtGui.QLabel(self)
|
||||||
|
self.display.setScaledContents(True)
|
||||||
|
self.displayBlank = False
|
||||||
|
self.blankFrame= None
|
||||||
|
|
||||||
def setup(self, screenNumber):
|
def setup(self, screenNumber):
|
||||||
"""
|
"""
|
||||||
@ -51,8 +54,25 @@ class MainDisplay(QtGui.QWidget):
|
|||||||
else:
|
else:
|
||||||
self.showMinimized()
|
self.showMinimized()
|
||||||
|
|
||||||
|
painter=QtGui.QPainter()
|
||||||
|
self.blankFrame = QtGui.QPixmap(800, 600)
|
||||||
|
painter.begin(self.blankFrame)
|
||||||
|
painter.fillRect(self.blankFrame.rect(), QtGui.QColor(u'#000000'))
|
||||||
|
|
||||||
def frameView(self, frame):
|
def frameView(self, frame):
|
||||||
|
if self.displayBlank == False:
|
||||||
self.display.setPixmap(frame)
|
self.display.setPixmap(frame)
|
||||||
|
|
||||||
|
def blankDisplay(self):
|
||||||
|
if self.displayBlank == False:
|
||||||
|
self.displayBlank = True
|
||||||
|
self.tempPixmap = self.display.pixmap()
|
||||||
|
self.display.setPixmap(self.blankFrame)
|
||||||
|
else:
|
||||||
|
self.displayBlank = False
|
||||||
|
self.frameView(self.tempPixmap)
|
||||||
|
self.tempPixmap = None
|
||||||
|
|
||||||
|
|
||||||
def kill(self):
|
def kill(self):
|
||||||
pass
|
pass
|
||||||
|
@ -206,7 +206,7 @@ class SlideController(QWidget):
|
|||||||
self.onSlideSelected(row)
|
self.onSlideSelected(row)
|
||||||
|
|
||||||
def onBlankScreen(self):
|
def onBlankScreen(self):
|
||||||
pass
|
self.mainDisplay.blankDisplay()
|
||||||
|
|
||||||
def onSlideSelected(self, index):
|
def onSlideSelected(self, index):
|
||||||
frame = self.PreviewListData.getValue(index)
|
frame = self.PreviewListData.getValue(index)
|
||||||
@ -218,6 +218,7 @@ class SlideController(QWidget):
|
|||||||
self.mainDisplay.frameView(frame)
|
self.mainDisplay.frameView(frame)
|
||||||
|
|
||||||
def addServiceItem(self, serviceitem):
|
def addServiceItem(self, serviceitem):
|
||||||
|
log.debug(u'addServiceItem')
|
||||||
self.serviceitem = serviceitem
|
self.serviceitem = serviceitem
|
||||||
self.serviceitem.render()
|
self.serviceitem.render()
|
||||||
self.PreviewListData.clearItems()
|
self.PreviewListData.clearItems()
|
||||||
|
@ -187,6 +187,7 @@ class CustomMediaItem(MediaManagerItem):
|
|||||||
self.CustomListData.deleteRow(index)
|
self.CustomListData.deleteRow(index)
|
||||||
|
|
||||||
def onCustomPreviewClick(self):
|
def onCustomPreviewClick(self):
|
||||||
|
log.debug(u'Custom Preview Requested')
|
||||||
service_item = ServiceItem(self.parent)
|
service_item = ServiceItem(self.parent)
|
||||||
service_item.addIcon( ":/media/media_song.png")
|
service_item.addIcon( ":/media/media_song.png")
|
||||||
service_item.render_manager = self.parent.render_manager
|
service_item.render_manager = self.parent.render_manager
|
||||||
@ -194,6 +195,7 @@ class CustomMediaItem(MediaManagerItem):
|
|||||||
self.parent.preview_controller.addServiceItem(service_item)
|
self.parent.preview_controller.addServiceItem(service_item)
|
||||||
|
|
||||||
def onCustomLiveClick(self):
|
def onCustomLiveClick(self):
|
||||||
|
log.debug(u'Custom Live Requested')
|
||||||
service_item = ServiceItem(self.parent)
|
service_item = ServiceItem(self.parent)
|
||||||
service_item.addIcon( ":/media/media_song.png")
|
service_item.addIcon( ":/media/media_song.png")
|
||||||
service_item.render_manager = self.parent.render_manager
|
service_item.render_manager = self.parent.render_manager
|
||||||
@ -201,6 +203,7 @@ class CustomMediaItem(MediaManagerItem):
|
|||||||
self.parent.live_controller.addServiceItem(service_item)
|
self.parent.live_controller.addServiceItem(service_item)
|
||||||
|
|
||||||
def onCustomAddClick(self):
|
def onCustomAddClick(self):
|
||||||
|
log.debug(u'Custom Add Requested')
|
||||||
service_item = ServiceItem(self.parent)
|
service_item = ServiceItem(self.parent)
|
||||||
service_item.addIcon( ":/media/media_song.png")
|
service_item.addIcon( ":/media/media_song.png")
|
||||||
service_item.render_manager = self.parent.render_manager
|
service_item.render_manager = self.parent.render_manager
|
||||||
|
Loading…
Reference in New Issue
Block a user