Fixes to formatting and rendering

Add Blank screen functionality
This commit is contained in:
Tim Bentley 2009-05-04 14:48:12 +01:00
parent ee649d9ca7
commit 13766fc7c7
7 changed files with 56 additions and 37 deletions

View File

@ -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')

View File

@ -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

View File

@ -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)

View File

@ -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):
"""

View File

@ -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

View File

@ -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()

View File

@ -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