From 1c60a29d686bed0afb4ed8aa8c53629ced846d49 Mon Sep 17 00:00:00 2001 From: Tim Bentley Date: Sat, 28 Nov 2009 09:12:22 +0000 Subject: [PATCH] Basic Tranisitions --- openlp/core/lib/renderer.py | 22 +++++++++++++++++++++- openlp/core/ui/maindisplay.py | 14 +++++++++++++- openlp/core/ui/slidecontroller.py | 16 ++++++++-------- 3 files changed, 42 insertions(+), 10 deletions(-) diff --git a/openlp/core/lib/renderer.py b/openlp/core/lib/renderer.py index 69252ecde..d41fc988b 100644 --- a/openlp/core/lib/renderer.py +++ b/openlp/core/lib/renderer.py @@ -49,6 +49,7 @@ class Renderer(object): self._theme = None self._bg_image_filename = None self._frame = None + self._frameOp = None self.bg_frame = None self.bg_image = None @@ -134,6 +135,8 @@ class Renderer(object): frame_height) self._frame = QtGui.QImage(frame_width, frame_height, QtGui.QImage.Format_ARGB32_Premultiplied) + self._frameOp = QtGui.QImage(frame_width, frame_height, + QtGui.QImage.Format_ARGB32_Premultiplied) if self._bg_image_filename and not self.bg_image: self.scale_bg_image() if self.bg_frame is None: @@ -255,13 +258,14 @@ class Renderer(object): bbox1 = self._render_lines_unaligned(footer_lines, True) # reset the frame. first time do not worry about what you paint on. self._frame = QtGui.QImage(self.bg_frame) + self._frameOp = QtGui.QImage(self.bg_frame) x, y = self._correctAlignment(self._rect, bbox) bbox = self._render_lines_unaligned(lines, False, (x, y), True) if footer_lines: bbox = self._render_lines_unaligned(footer_lines, True, (self._rect_footer.left(), self._rect_footer.top()), True) log.debug(u'generate_frame_from_lines - Finish') - return {u'main':self._frame, u'trans':None} + return {u'main':self._frame, u'trans':self._frameOp} def _generate_background_frame(self): """ @@ -569,6 +573,22 @@ class Renderer(object): if draw: painter.drawText(x, y + metrics.ascent(), line) painter.end() + # Print 2nd image with 50% weight + painter = QtGui.QPainter() + painter.begin(self._frameOp) + painter.setRenderHint(QtGui.QPainter.Antialiasing); + painter.setOpacity(0.5) + painter.setFont(font) + if color is None: + if footer: + painter.setPen(QtGui.QColor(self._theme.font_footer_color)) + else: + painter.setPen(QtGui.QColor(self._theme.font_main_color)) + else: + painter.setPen(QtGui.QColor(color)) + if draw: + painter.drawText(x, y + metrics.ascent(), line) + painter.end() return (w, h) def snoop_Image(self, image, image2=None): diff --git a/openlp/core/ui/maindisplay.py b/openlp/core/ui/maindisplay.py index 8e35ed896..20574ab2e 100644 --- a/openlp/core/ui/maindisplay.py +++ b/openlp/core/ui/maindisplay.py @@ -24,6 +24,7 @@ import logging import os +import time from PyQt4 import QtCore, QtGui from PyQt4.phonon import Phonon @@ -110,6 +111,7 @@ class MainDisplay(DisplayWidget): self.timer_id = 0 self.firstTime = True self.mediaLoaded = False + self.hasTransition = False QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'alert_text'), self.displayAlert) QtCore.QObject.connect(Receiver.get_receiver(), @@ -127,6 +129,7 @@ class MainDisplay(DisplayWidget): QtCore.QObject.connect(Receiver.get_receiver(), QtCore.SIGNAL(u'media_stop'), self.onMediaStop) + def setup(self, screenNumber): """ Sets up the screen on a particular screen. @@ -194,10 +197,19 @@ class MainDisplay(DisplayWidget): self.displayAlert() elif not self.displayBlank: if transition: + if self.hasTransition: + delay = 0.1 + self.display.setPixmap(QtGui.QPixmap.fromImage(self.frame[u'trans'])) + self.repaint() + time.sleep(delay) + self.display.setPixmap(QtGui.QPixmap.fromImage(frame[u'trans'])) + self.repaint() + time.sleep(delay) + self.hasTransition = True self.display.setPixmap(QtGui.QPixmap.fromImage(frame[u'main'])) + self.repaint() else: self.display.setPixmap(QtGui.QPixmap.fromImage(frame)) -# QtCore.QTimer.singleShot(500, self.aa ) if not self.isVisible(): self.setVisible(True) self.showFullScreen() diff --git a/openlp/core/ui/slidecontroller.py b/openlp/core/ui/slidecontroller.py index 5bb9a8765..3cd440c5b 100644 --- a/openlp/core/ui/slidecontroller.py +++ b/openlp/core/ui/slidecontroller.py @@ -352,14 +352,14 @@ class SlideController(QtGui.QWidget): self.Songbar.actions[action].setVisible(False) if item.verse_order: verses = item.verse_order.split(u' ') - for verse in verses: - if not verse or int(verse) > 12: - break - try: - self.Songbar.actions[verse].setVisible(True) - except: - #More than 20 verses hard luck - pass +# for verse in verses: +# if not verse or int(verse) > 12: +# break +# try: +# self.Songbar.actions[verse].setVisible(True) +# except: +# #More than 20 verses hard luck +# pass self.Songbar.setVisible(True) elif item.is_image(): #Not sensible to allow loops with 1 frame