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,
|
||||
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',
|
||||
filemode=u'w')
|
||||
|
||||
|
@ -114,7 +114,6 @@ class Renderer:
|
||||
|
||||
def render_screen(self, screennum):
|
||||
log.debug(u'render screen\n %s %s ', screennum, self.words[screennum])
|
||||
import time
|
||||
t=0.0
|
||||
words=self.words[screennum]
|
||||
retval=self._render_lines(words)
|
||||
@ -173,7 +172,6 @@ class Renderer:
|
||||
else:
|
||||
p.fillRect(self._paint.rect(), QtGui.QColor(u'#000000'))
|
||||
p.end()
|
||||
log.debug(u'render background done')
|
||||
|
||||
def split_set_of_lines(self, lines, footer):
|
||||
|
||||
@ -252,7 +250,7 @@ class Renderer:
|
||||
|
||||
def render_lines(self, lines, footer_lines=None):
|
||||
"""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
|
||||
if footer_lines is not None:
|
||||
@ -264,11 +262,8 @@ class Renderer:
|
||||
bbox=self._render_lines_unaligned(lines, False, (x, y))
|
||||
|
||||
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()) )
|
||||
|
||||
log.debug(u'render lines DONE')
|
||||
|
||||
return bbox
|
||||
|
||||
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)
|
||||
|
||||
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
|
||||
brx=x
|
||||
bry=y
|
||||
@ -298,7 +293,7 @@ class Renderer:
|
||||
p.setPen(QtGui.QPen(QtGui.QColor(0,0,255)))
|
||||
p.drawRect(retval)
|
||||
p.end()
|
||||
log.debug(u'render unaligned DONE')
|
||||
|
||||
|
||||
return retval
|
||||
|
||||
@ -410,7 +405,7 @@ class Renderer:
|
||||
|
||||
return width and height of text as a tuple (w,h)"""
|
||||
# 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.begin(self._paint)
|
||||
# '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
|
||||
"""
|
||||
import logging
|
||||
import time
|
||||
import os, os.path
|
||||
import sys
|
||||
from PyQt4 import QtGui, QtCore, Qt
|
||||
@ -41,21 +42,20 @@ class RenderManager:
|
||||
self.current_display = 0
|
||||
self.renderer = Renderer(None)
|
||||
self.calculate_default(self.screen_list[self.current_display]['size'])
|
||||
self.frame = None
|
||||
|
||||
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:
|
||||
self.theme = theme
|
||||
else:
|
||||
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.renderer.set_theme(self.themedata)
|
||||
self.build_text_rectangle(self.themedata)
|
||||
|
||||
def build_text_rectangle(self, theme):
|
||||
|
||||
log.debug(u'build_text_rectangle ')
|
||||
main_rect = None
|
||||
footer_rect = None
|
||||
|
||||
@ -74,6 +74,7 @@ class RenderManager:
|
||||
self.renderer.set_text_rectangle(main_rect,footer_rect)
|
||||
|
||||
def generate_preview(self, themedata):
|
||||
log.debug(u'generate preview ')
|
||||
self.calculate_default(QtCore.QSize(800,600))
|
||||
self.renderer.set_theme(themedata)
|
||||
self.build_text_rectangle(themedata)
|
||||
@ -94,25 +95,23 @@ class RenderManager:
|
||||
return frame
|
||||
|
||||
def format_slide(self, words, footer):
|
||||
self.calculate_default(QtCore.QSize(800,600))
|
||||
frame = QtGui.QPixmap(self.width, self.height)
|
||||
self.renderer.set_paint_dest(frame)
|
||||
log.debug(u'format slide')
|
||||
self.calculate_default(self.screen_list[self.current_display]['size'])
|
||||
self.renderer.set_paint_dest(QtGui.QPixmap(self.width, self.height))
|
||||
return self.renderer.format_slide(words, footer)
|
||||
|
||||
def generate_slide(self,main_text, footer_text, preview=True):
|
||||
if preview == True:
|
||||
self.calculate_default(QtCore.QSize(800,600))
|
||||
def generate_slide(self,main_text, footer_text):
|
||||
log.debug(u'generate slide')
|
||||
self.calculate_default(self.screen_list[self.current_display]['size'])
|
||||
|
||||
frame = QtGui.QPixmap(self.width, self.height)
|
||||
self.renderer.set_paint_dest(frame)
|
||||
|
||||
answer=self.renderer.render_lines(main_text, footer_text)
|
||||
return frame
|
||||
|
||||
def calculate_default(self, screen):
|
||||
log.debug(u'calculate default %s' , screen)
|
||||
self.width = screen.width()
|
||||
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
|
||||
#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 types
|
||||
from PyQt4 import QtCore, QtGui
|
||||
import time
|
||||
|
||||
from PyQt4.QtCore import *
|
||||
from PyQt4.QtGui import *
|
||||
|
||||
@ -51,34 +52,34 @@ class ServiceItem():
|
||||
|
||||
def addIcon(self, icon):
|
||||
ButtonIcon = None
|
||||
if type(icon) is QtGui.QIcon:
|
||||
if type(icon) is QIcon:
|
||||
ButtonIcon = icon
|
||||
elif type(icon) is types.StringType or type(icon) is types.UnicodeType:
|
||||
ButtonIcon = QtGui.QIcon()
|
||||
ButtonIcon = QIcon()
|
||||
if icon.startswith(u':/'):
|
||||
ButtonIcon.addPixmap(QtGui.QPixmap(icon), QtGui.QIcon.Normal,
|
||||
QtGui.QIcon.Off)
|
||||
ButtonIcon.addPixmap(QPixmap(icon), QIcon.Normal,
|
||||
QIcon.Off)
|
||||
else:
|
||||
ButtonIcon.addPixmap(QtGui.QPixmap.fromImage(QtGui.QImage(icon)),
|
||||
QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||
ButtonIcon.addPixmap(QPixmap.fromImage(QImage(icon)),
|
||||
QIcon.Normal, QIcon.Off)
|
||||
self.iconic_representation = ButtonIcon
|
||||
|
||||
def render(self):
|
||||
"""
|
||||
The render method is what the plugin uses to render it's meda to the
|
||||
screen.
|
||||
The render method is what renders the frames for the screen.
|
||||
"""
|
||||
log.debug(u'Render called')
|
||||
if self.theme == None:
|
||||
self.render_manager.set_override_theme(None)
|
||||
else:
|
||||
self.render_manager.set_override_theme(self.theme)
|
||||
|
||||
log.debug(u'Formatting slides')
|
||||
for slide in self.raw_slides:
|
||||
self.format_slides.append(self.render_manager.format_slide(slide, False))
|
||||
log.debug(u'Rendering 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):
|
||||
"""
|
||||
|
@ -29,6 +29,9 @@ class MainDisplay(QtGui.QWidget):
|
||||
self.setWindowTitle(u'OpenLP Display')
|
||||
self.screens = screens
|
||||
self.display = QtGui.QLabel(self)
|
||||
self.display.setScaledContents(True)
|
||||
self.displayBlank = False
|
||||
self.blankFrame= None
|
||||
|
||||
def setup(self, screenNumber):
|
||||
"""
|
||||
@ -51,8 +54,25 @@ class MainDisplay(QtGui.QWidget):
|
||||
else:
|
||||
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):
|
||||
self.display.setPixmap(frame)
|
||||
if self.displayBlank == False:
|
||||
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):
|
||||
pass
|
||||
|
@ -206,7 +206,7 @@ class SlideController(QWidget):
|
||||
self.onSlideSelected(row)
|
||||
|
||||
def onBlankScreen(self):
|
||||
pass
|
||||
self.mainDisplay.blankDisplay()
|
||||
|
||||
def onSlideSelected(self, index):
|
||||
frame = self.PreviewListData.getValue(index)
|
||||
@ -218,6 +218,7 @@ class SlideController(QWidget):
|
||||
self.mainDisplay.frameView(frame)
|
||||
|
||||
def addServiceItem(self, serviceitem):
|
||||
log.debug(u'addServiceItem')
|
||||
self.serviceitem = serviceitem
|
||||
self.serviceitem.render()
|
||||
self.PreviewListData.clearItems()
|
||||
|
@ -187,6 +187,7 @@ class CustomMediaItem(MediaManagerItem):
|
||||
self.CustomListData.deleteRow(index)
|
||||
|
||||
def onCustomPreviewClick(self):
|
||||
log.debug(u'Custom Preview Requested')
|
||||
service_item = ServiceItem(self.parent)
|
||||
service_item.addIcon( ":/media/media_song.png")
|
||||
service_item.render_manager = self.parent.render_manager
|
||||
@ -194,6 +195,7 @@ class CustomMediaItem(MediaManagerItem):
|
||||
self.parent.preview_controller.addServiceItem(service_item)
|
||||
|
||||
def onCustomLiveClick(self):
|
||||
log.debug(u'Custom Live Requested')
|
||||
service_item = ServiceItem(self.parent)
|
||||
service_item.addIcon( ":/media/media_song.png")
|
||||
service_item.render_manager = self.parent.render_manager
|
||||
@ -201,6 +203,7 @@ class CustomMediaItem(MediaManagerItem):
|
||||
self.parent.live_controller.addServiceItem(service_item)
|
||||
|
||||
def onCustomAddClick(self):
|
||||
log.debug(u'Custom Add Requested')
|
||||
service_item = ServiceItem(self.parent)
|
||||
service_item.addIcon( ":/media/media_song.png")
|
||||
service_item.render_manager = self.parent.render_manager
|
||||
|
Loading…
Reference in New Issue
Block a user