Merge lp:~trb143/openlp/bugfixes into lp:openlp

Proposed by Tim Bentley
Status: Merged
Merged at revision: not available
Proposed branch: lp:~trb143/openlp/bugfixes
Merge into: lp:openlp
Diff against target: None lines
To merge this branch: bzr merge lp:~trb143/openlp/bugfixes
Reviewer Review Type Date Requested Status
Raoul Snyman Approve
Review via email: mp+11821@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Tim Bentley (trb143) wrote :

Revamped the rendering to do it when required.
No caching so memory usable will be reduced.
Handles different themes on preview and live at same time.

Revision history for this message
Raoul Snyman (raoul-snyman) wrote :

Needs some ui tweaking, but that's fine, we can work on it.

review: Approve
lp:~trb143/openlp/bugfixes updated
543. By Tim Bentley

Renderer handling changes

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'openlp/core/lib/renderer.py'
2--- openlp/core/lib/renderer.py 2009-09-13 07:39:48 +0000
3+++ openlp/core/lib/renderer.py 2009-09-15 19:06:40 +0000
4@@ -51,9 +51,9 @@
5 self._theme = None
6 self._bg_image_filename = None
7 self._frame = None
8- self._bg_frame = None
9+ self.bg_frame = None
10 self.bg_image = None
11- self._bg_frame_small = None
12+ #self.bg_frame_small = None
13
14 def set_debug(self, debug):
15 """
16@@ -73,7 +73,7 @@
17 """
18 log.debug(u'set theme')
19 self._theme = theme
20- self._bg_frame = None
21+ self.bg_frame = None
22 self.bg_image = None
23 self.theme_name = theme.theme_name
24 self._set_theme_font()
25@@ -131,14 +131,14 @@
26 Defaults to *False*. Whether or not to generate a preview.
27 """
28 if preview == True:
29- self._bg_frame = None
30+ self.bg_frame = None
31 log.debug(u'set frame dest (frame) w %d h %d', frame_width,
32 frame_height)
33 self._frame = QtGui.QImage(frame_width, frame_height,
34 QtGui.QImage.Format_ARGB32_Premultiplied)
35 if self._bg_image_filename is not None and self.bg_image is None:
36 self.scale_bg_image()
37- if self._bg_frame is None:
38+ if self.bg_frame is None:
39 self._generate_background_frame()
40
41 def format_slide(self, words, footer):
42@@ -257,7 +257,7 @@
43 if footer_lines is not None:
44 bbox1 = self._render_lines_unaligned(footer_lines, True)
45 # reset the frame. first time do not worry about what you paint on.
46- self._frame = QtGui.QImage(self._bg_frame)
47+ self._frame = QtGui.QImage(self.bg_frame)
48 x, y = self._correctAlignment(self._rect, bbox)
49 bbox = self._render_lines_unaligned(lines, False, (x, y), True)
50 if footer_lines is not None:
51@@ -272,11 +272,11 @@
52 Results are cached for performance reasons.
53 """
54 assert(self._theme)
55- self._bg_frame = QtGui.QImage(self._frame.width(), self._frame.height(),
56+ self.bg_frame = QtGui.QImage(self._frame.width(), self._frame.height(),
57 QtGui.QImage.Format_ARGB32_Premultiplied)
58 log.debug(u'render background %s start', self._theme.background_type)
59 painter = QtGui.QPainter()
60- painter.begin(self._bg_frame)
61+ painter.begin(self.bg_frame)
62 if self._theme.background_mode == u'transparent':
63 painter.fillRect(self._frame.rect(), QtCore.Qt.transparent)
64 else:
65@@ -321,8 +321,8 @@
66 if self.bg_image is not None:
67 painter.drawImage(0, 0, self.bg_image)
68 painter.end()
69- self._bg_frame_small = self._bg_frame.scaled(QtCore.QSize(280, 210),
70- QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
71+# self.bg_frame_small = self.bg_frame.scaled(QtCore.QSize(280, 210),
72+# QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)
73 log.debug(u'render background End')
74
75 def _correctAlignment(self, rect, bbox):
76
77=== modified file 'openlp/core/lib/serviceitem.py'
78--- openlp/core/lib/serviceitem.py 2009-09-13 07:39:48 +0000
79+++ openlp/core/lib/serviceitem.py 2009-09-15 19:06:40 +0000
80@@ -61,14 +61,11 @@
81 self.items = []
82 self.iconic_representation = None
83 self.raw_slides = None
84- self.frame_titles = []
85- self.command_files = []
86 self.frames = []
87 self.raw_footer = None
88 self.theme = None
89 self.service_item_path = None
90 self.service_item_type = None
91- #log.debug(u'Service item created for %s ', self.shortname)
92 self.service_frames = []
93
94 def addIcon(self, icon):
95@@ -95,12 +92,19 @@
96 self.RenderManager.set_override_theme(None)
97 else:
98 self.RenderManager.set_override_theme(self.theme)
99+ firstTime = True
100 for slide in self.service_frames:
101 formated = self.RenderManager.format_slide(slide[u'raw_slide'])
102 for format in formated:
103- frame = self.RenderManager.generate_slide(format,
104- self.raw_footer)
105- self.frames.append({u'title': slide[u'title'],
106+ frame = None
107+ if firstTime:
108+ frame = self.RenderManager.generate_slide(format,
109+ self.raw_footer)
110+ firstTime = False
111+ lines = u''
112+ for line in format:
113+ lines += line + u'\n'
114+ self.frames.append({u'title': slide[u'title'],u'text':lines,
115 u'image': frame})
116 elif self.service_item_type == ServiceType.Command:
117 self.frames = self.service_frames
118@@ -112,6 +116,17 @@
119 else:
120 log.error(u'Invalid value renderer :%s' % self.service_item_type)
121
122+ def render_individual(self, row):
123+ log.debug(u'render individual')
124+ if self.theme == None:
125+ self.RenderManager.set_override_theme(None)
126+ else:
127+ self.RenderManager.set_override_theme(self.theme)
128+ format = self.frames[row][u'text'].split(u'\n')
129+ frame = self.RenderManager.generate_slide(format,
130+ self.raw_footer)
131+ return frame
132+
133 def add_from_image(self, path, frame_title, image):
134 """
135 Add an image slide to the service item.
136@@ -127,7 +142,7 @@
137 """
138 self.service_item_type = ServiceType.Image
139 self.service_item_path = path
140- self.service_frames.append({u'title': frame_title, u'image': image})
141+ self.service_frames.append({u'title': frame_title, u'text':None, u'image': image})
142
143 def add_from_text(self, frame_title, raw_slide):
144 """
145
146=== modified file 'openlp/core/ui/slidecontroller.py'
147--- openlp/core/ui/slidecontroller.py 2009-09-14 19:36:50 +0000
148+++ openlp/core/ui/slidecontroller.py 2009-09-15 19:06:40 +0000
149@@ -166,7 +166,7 @@
150 self.Toolbar.setSizePolicy(sizeToolbarPolicy)
151 # Screen preview area
152 self.PreviewFrame = QtGui.QFrame(self.Splitter)
153- self.PreviewFrame.setGeometry(QtCore.QRect(0, 0, self.settingsmanager.slidecontroller_image, 225))
154+ self.PreviewFrame.setGeometry(QtCore.QRect(0, 0, 300, 225))
155 self.PreviewFrame.setSizePolicy(QtGui.QSizePolicy(
156 QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum))
157 self.PreviewFrame.setFrameShape(QtGui.QFrame.StyledPanel)
158@@ -293,12 +293,15 @@
159 self.PreviewListWidget.setColumnWidth(0, slide_width)
160 for framenumber, frame in enumerate(self.serviceitem.frames):
161 self.PreviewListWidget.setRowCount(self.PreviewListWidget.rowCount() + 1)
162- pixmap = self.parent.RenderManager.resize_image(frame[u'image'], slide_width, slide_height)
163 item = QtGui.QTableWidgetItem()
164 label = QtGui.QLabel()
165 label.setMargin(8)
166- label.setScaledContents(True)
167- label.setPixmap(QtGui.QPixmap.fromImage(pixmap))
168+ if frame[u'text'] == None:
169+ pixmap = self.parent.RenderManager.resize_image(frame[u'image'], slide_width, slide_height)
170+ label.setScaledContents(True)
171+ label.setPixmap(QtGui.QPixmap.fromImage(pixmap))
172+ else:
173+ label.setText(frame[u'text'])
174 self.PreviewListWidget.setCellWidget(framenumber, 0, label)
175 self.PreviewListWidget.setItem(framenumber, 0, item)
176 self.PreviewListWidget.setRowHeight(framenumber, slide_height)
177@@ -335,9 +338,12 @@
178 row = self.PreviewListWidget.currentRow()
179 if row > -1 and row < self.PreviewListWidget.rowCount():
180 label = self.PreviewListWidget.cellWidget(row, 0)
181- smallframe = label.pixmap()
182 frame = self.serviceitem.frames[row][u'image']
183- self.SlidePreview.setPixmap(smallframe)
184+ before = time.time()
185+ if frame == None:
186+ frame = self.serviceitem.render_individual(row)
187+ self.SlidePreview.setPixmap(QtGui.QPixmap.fromImage(frame))
188+ log.info(u'Slide Rendering took %4s' % (time.time() - before))
189 if self.isLive:
190 self.parent.mainDisplay.frameView(frame)
191
192@@ -390,7 +396,7 @@
193 def timerEvent(self, event):
194 if event.timerId() == self.timer_id:
195 self.onSlideSelectedNext()
196-
197+
198 def onGoLive(self):
199 row = self.PreviewListWidget.currentRow()
200 if row > -1 and row < self.PreviewListWidget.rowCount():