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 | ||||||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Raoul Snyman | Approve | ||
Review via email:
|
Commit message
Description of the change
To post a comment you must log in.
Revision history for this message
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
Tim Bentley (trb143) wrote : | # |
Revision history for this message
![](/+icing/build/overlay/assets/skins/sam/images/close.gif)
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 | 51 | self._theme = None | 51 | self._theme = None |
6 | 52 | self._bg_image_filename = None | 52 | self._bg_image_filename = None |
7 | 53 | self._frame = None | 53 | self._frame = None |
9 | 54 | self._bg_frame = None | 54 | self.bg_frame = None |
10 | 55 | self.bg_image = None | 55 | self.bg_image = None |
12 | 56 | self._bg_frame_small = None | 56 | #self.bg_frame_small = None |
13 | 57 | 57 | ||
14 | 58 | def set_debug(self, debug): | 58 | def set_debug(self, debug): |
15 | 59 | """ | 59 | """ |
16 | @@ -73,7 +73,7 @@ | |||
17 | 73 | """ | 73 | """ |
18 | 74 | log.debug(u'set theme') | 74 | log.debug(u'set theme') |
19 | 75 | self._theme = theme | 75 | self._theme = theme |
21 | 76 | self._bg_frame = None | 76 | self.bg_frame = None |
22 | 77 | self.bg_image = None | 77 | self.bg_image = None |
23 | 78 | self.theme_name = theme.theme_name | 78 | self.theme_name = theme.theme_name |
24 | 79 | self._set_theme_font() | 79 | self._set_theme_font() |
25 | @@ -131,14 +131,14 @@ | |||
26 | 131 | Defaults to *False*. Whether or not to generate a preview. | 131 | Defaults to *False*. Whether or not to generate a preview. |
27 | 132 | """ | 132 | """ |
28 | 133 | if preview == True: | 133 | if preview == True: |
30 | 134 | self._bg_frame = None | 134 | self.bg_frame = None |
31 | 135 | log.debug(u'set frame dest (frame) w %d h %d', frame_width, | 135 | log.debug(u'set frame dest (frame) w %d h %d', frame_width, |
32 | 136 | frame_height) | 136 | frame_height) |
33 | 137 | self._frame = QtGui.QImage(frame_width, frame_height, | 137 | self._frame = QtGui.QImage(frame_width, frame_height, |
34 | 138 | QtGui.QImage.Format_ARGB32_Premultiplied) | 138 | QtGui.QImage.Format_ARGB32_Premultiplied) |
35 | 139 | if self._bg_image_filename is not None and self.bg_image is None: | 139 | if self._bg_image_filename is not None and self.bg_image is None: |
36 | 140 | self.scale_bg_image() | 140 | self.scale_bg_image() |
38 | 141 | if self._bg_frame is None: | 141 | if self.bg_frame is None: |
39 | 142 | self._generate_background_frame() | 142 | self._generate_background_frame() |
40 | 143 | 143 | ||
41 | 144 | def format_slide(self, words, footer): | 144 | def format_slide(self, words, footer): |
42 | @@ -257,7 +257,7 @@ | |||
43 | 257 | if footer_lines is not None: | 257 | if footer_lines is not None: |
44 | 258 | bbox1 = self._render_lines_unaligned(footer_lines, True) | 258 | bbox1 = self._render_lines_unaligned(footer_lines, True) |
45 | 259 | # reset the frame. first time do not worry about what you paint on. | 259 | # reset the frame. first time do not worry about what you paint on. |
47 | 260 | self._frame = QtGui.QImage(self._bg_frame) | 260 | self._frame = QtGui.QImage(self.bg_frame) |
48 | 261 | x, y = self._correctAlignment(self._rect, bbox) | 261 | x, y = self._correctAlignment(self._rect, bbox) |
49 | 262 | bbox = self._render_lines_unaligned(lines, False, (x, y), True) | 262 | bbox = self._render_lines_unaligned(lines, False, (x, y), True) |
50 | 263 | if footer_lines is not None: | 263 | if footer_lines is not None: |
51 | @@ -272,11 +272,11 @@ | |||
52 | 272 | Results are cached for performance reasons. | 272 | Results are cached for performance reasons. |
53 | 273 | """ | 273 | """ |
54 | 274 | assert(self._theme) | 274 | assert(self._theme) |
56 | 275 | self._bg_frame = QtGui.QImage(self._frame.width(), self._frame.height(), | 275 | self.bg_frame = QtGui.QImage(self._frame.width(), self._frame.height(), |
57 | 276 | QtGui.QImage.Format_ARGB32_Premultiplied) | 276 | QtGui.QImage.Format_ARGB32_Premultiplied) |
58 | 277 | log.debug(u'render background %s start', self._theme.background_type) | 277 | log.debug(u'render background %s start', self._theme.background_type) |
59 | 278 | painter = QtGui.QPainter() | 278 | painter = QtGui.QPainter() |
61 | 279 | painter.begin(self._bg_frame) | 279 | painter.begin(self.bg_frame) |
62 | 280 | if self._theme.background_mode == u'transparent': | 280 | if self._theme.background_mode == u'transparent': |
63 | 281 | painter.fillRect(self._frame.rect(), QtCore.Qt.transparent) | 281 | painter.fillRect(self._frame.rect(), QtCore.Qt.transparent) |
64 | 282 | else: | 282 | else: |
65 | @@ -321,8 +321,8 @@ | |||
66 | 321 | if self.bg_image is not None: | 321 | if self.bg_image is not None: |
67 | 322 | painter.drawImage(0, 0, self.bg_image) | 322 | painter.drawImage(0, 0, self.bg_image) |
68 | 323 | painter.end() | 323 | painter.end() |
71 | 324 | self._bg_frame_small = self._bg_frame.scaled(QtCore.QSize(280, 210), | 324 | # self.bg_frame_small = self.bg_frame.scaled(QtCore.QSize(280, 210), |
72 | 325 | QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation) | 325 | # QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation) |
73 | 326 | log.debug(u'render background End') | 326 | log.debug(u'render background End') |
74 | 327 | 327 | ||
75 | 328 | def _correctAlignment(self, rect, bbox): | 328 | def _correctAlignment(self, rect, bbox): |
76 | 329 | 329 | ||
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 | 61 | self.items = [] | 61 | self.items = [] |
82 | 62 | self.iconic_representation = None | 62 | self.iconic_representation = None |
83 | 63 | self.raw_slides = None | 63 | self.raw_slides = None |
84 | 64 | self.frame_titles = [] | ||
85 | 65 | self.command_files = [] | ||
86 | 66 | self.frames = [] | 64 | self.frames = [] |
87 | 67 | self.raw_footer = None | 65 | self.raw_footer = None |
88 | 68 | self.theme = None | 66 | self.theme = None |
89 | 69 | self.service_item_path = None | 67 | self.service_item_path = None |
90 | 70 | self.service_item_type = None | 68 | self.service_item_type = None |
91 | 71 | #log.debug(u'Service item created for %s ', self.shortname) | ||
92 | 72 | self.service_frames = [] | 69 | self.service_frames = [] |
93 | 73 | 70 | ||
94 | 74 | def addIcon(self, icon): | 71 | def addIcon(self, icon): |
95 | @@ -95,12 +92,19 @@ | |||
96 | 95 | self.RenderManager.set_override_theme(None) | 92 | self.RenderManager.set_override_theme(None) |
97 | 96 | else: | 93 | else: |
98 | 97 | self.RenderManager.set_override_theme(self.theme) | 94 | self.RenderManager.set_override_theme(self.theme) |
99 | 95 | firstTime = True | ||
100 | 98 | for slide in self.service_frames: | 96 | for slide in self.service_frames: |
101 | 99 | formated = self.RenderManager.format_slide(slide[u'raw_slide']) | 97 | formated = self.RenderManager.format_slide(slide[u'raw_slide']) |
102 | 100 | for format in formated: | 98 | for format in formated: |
106 | 101 | frame = self.RenderManager.generate_slide(format, | 99 | frame = None |
107 | 102 | self.raw_footer) | 100 | if firstTime: |
108 | 103 | self.frames.append({u'title': slide[u'title'], | 101 | frame = self.RenderManager.generate_slide(format, |
109 | 102 | self.raw_footer) | ||
110 | 103 | firstTime = False | ||
111 | 104 | lines = u'' | ||
112 | 105 | for line in format: | ||
113 | 106 | lines += line + u'\n' | ||
114 | 107 | self.frames.append({u'title': slide[u'title'],u'text':lines, | ||
115 | 104 | u'image': frame}) | 108 | u'image': frame}) |
116 | 105 | elif self.service_item_type == ServiceType.Command: | 109 | elif self.service_item_type == ServiceType.Command: |
117 | 106 | self.frames = self.service_frames | 110 | self.frames = self.service_frames |
118 | @@ -112,6 +116,17 @@ | |||
119 | 112 | else: | 116 | else: |
120 | 113 | log.error(u'Invalid value renderer :%s' % self.service_item_type) | 117 | log.error(u'Invalid value renderer :%s' % self.service_item_type) |
121 | 114 | 118 | ||
122 | 119 | def render_individual(self, row): | ||
123 | 120 | log.debug(u'render individual') | ||
124 | 121 | if self.theme == None: | ||
125 | 122 | self.RenderManager.set_override_theme(None) | ||
126 | 123 | else: | ||
127 | 124 | self.RenderManager.set_override_theme(self.theme) | ||
128 | 125 | format = self.frames[row][u'text'].split(u'\n') | ||
129 | 126 | frame = self.RenderManager.generate_slide(format, | ||
130 | 127 | self.raw_footer) | ||
131 | 128 | return frame | ||
132 | 129 | |||
133 | 115 | def add_from_image(self, path, frame_title, image): | 130 | def add_from_image(self, path, frame_title, image): |
134 | 116 | """ | 131 | """ |
135 | 117 | Add an image slide to the service item. | 132 | Add an image slide to the service item. |
136 | @@ -127,7 +142,7 @@ | |||
137 | 127 | """ | 142 | """ |
138 | 128 | self.service_item_type = ServiceType.Image | 143 | self.service_item_type = ServiceType.Image |
139 | 129 | self.service_item_path = path | 144 | self.service_item_path = path |
141 | 130 | self.service_frames.append({u'title': frame_title, u'image': image}) | 145 | self.service_frames.append({u'title': frame_title, u'text':None, u'image': image}) |
142 | 131 | 146 | ||
143 | 132 | def add_from_text(self, frame_title, raw_slide): | 147 | def add_from_text(self, frame_title, raw_slide): |
144 | 133 | """ | 148 | """ |
145 | 134 | 149 | ||
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 | 166 | self.Toolbar.setSizePolicy(sizeToolbarPolicy) | 166 | self.Toolbar.setSizePolicy(sizeToolbarPolicy) |
151 | 167 | # Screen preview area | 167 | # Screen preview area |
152 | 168 | self.PreviewFrame = QtGui.QFrame(self.Splitter) | 168 | self.PreviewFrame = QtGui.QFrame(self.Splitter) |
154 | 169 | self.PreviewFrame.setGeometry(QtCore.QRect(0, 0, self.settingsmanager.slidecontroller_image, 225)) | 169 | self.PreviewFrame.setGeometry(QtCore.QRect(0, 0, 300, 225)) |
155 | 170 | self.PreviewFrame.setSizePolicy(QtGui.QSizePolicy( | 170 | self.PreviewFrame.setSizePolicy(QtGui.QSizePolicy( |
156 | 171 | QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)) | 171 | QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Minimum)) |
157 | 172 | self.PreviewFrame.setFrameShape(QtGui.QFrame.StyledPanel) | 172 | self.PreviewFrame.setFrameShape(QtGui.QFrame.StyledPanel) |
158 | @@ -293,12 +293,15 @@ | |||
159 | 293 | self.PreviewListWidget.setColumnWidth(0, slide_width) | 293 | self.PreviewListWidget.setColumnWidth(0, slide_width) |
160 | 294 | for framenumber, frame in enumerate(self.serviceitem.frames): | 294 | for framenumber, frame in enumerate(self.serviceitem.frames): |
161 | 295 | self.PreviewListWidget.setRowCount(self.PreviewListWidget.rowCount() + 1) | 295 | self.PreviewListWidget.setRowCount(self.PreviewListWidget.rowCount() + 1) |
162 | 296 | pixmap = self.parent.RenderManager.resize_image(frame[u'image'], slide_width, slide_height) | ||
163 | 297 | item = QtGui.QTableWidgetItem() | 296 | item = QtGui.QTableWidgetItem() |
164 | 298 | label = QtGui.QLabel() | 297 | label = QtGui.QLabel() |
165 | 299 | label.setMargin(8) | 298 | label.setMargin(8) |
168 | 300 | label.setScaledContents(True) | 299 | if frame[u'text'] == None: |
169 | 301 | label.setPixmap(QtGui.QPixmap.fromImage(pixmap)) | 300 | pixmap = self.parent.RenderManager.resize_image(frame[u'image'], slide_width, slide_height) |
170 | 301 | label.setScaledContents(True) | ||
171 | 302 | label.setPixmap(QtGui.QPixmap.fromImage(pixmap)) | ||
172 | 303 | else: | ||
173 | 304 | label.setText(frame[u'text']) | ||
174 | 302 | self.PreviewListWidget.setCellWidget(framenumber, 0, label) | 305 | self.PreviewListWidget.setCellWidget(framenumber, 0, label) |
175 | 303 | self.PreviewListWidget.setItem(framenumber, 0, item) | 306 | self.PreviewListWidget.setItem(framenumber, 0, item) |
176 | 304 | self.PreviewListWidget.setRowHeight(framenumber, slide_height) | 307 | self.PreviewListWidget.setRowHeight(framenumber, slide_height) |
177 | @@ -335,9 +338,12 @@ | |||
178 | 335 | row = self.PreviewListWidget.currentRow() | 338 | row = self.PreviewListWidget.currentRow() |
179 | 336 | if row > -1 and row < self.PreviewListWidget.rowCount(): | 339 | if row > -1 and row < self.PreviewListWidget.rowCount(): |
180 | 337 | label = self.PreviewListWidget.cellWidget(row, 0) | 340 | label = self.PreviewListWidget.cellWidget(row, 0) |
181 | 338 | smallframe = label.pixmap() | ||
182 | 339 | frame = self.serviceitem.frames[row][u'image'] | 341 | frame = self.serviceitem.frames[row][u'image'] |
184 | 340 | self.SlidePreview.setPixmap(smallframe) | 342 | before = time.time() |
185 | 343 | if frame == None: | ||
186 | 344 | frame = self.serviceitem.render_individual(row) | ||
187 | 345 | self.SlidePreview.setPixmap(QtGui.QPixmap.fromImage(frame)) | ||
188 | 346 | log.info(u'Slide Rendering took %4s' % (time.time() - before)) | ||
189 | 341 | if self.isLive: | 347 | if self.isLive: |
190 | 342 | self.parent.mainDisplay.frameView(frame) | 348 | self.parent.mainDisplay.frameView(frame) |
191 | 343 | 349 | ||
192 | @@ -390,7 +396,7 @@ | |||
193 | 390 | def timerEvent(self, event): | 396 | def timerEvent(self, event): |
194 | 391 | if event.timerId() == self.timer_id: | 397 | if event.timerId() == self.timer_id: |
195 | 392 | self.onSlideSelectedNext() | 398 | self.onSlideSelectedNext() |
197 | 393 | 399 | ||
198 | 394 | def onGoLive(self): | 400 | def onGoLive(self): |
199 | 395 | row = self.PreviewListWidget.currentRow() | 401 | row = self.PreviewListWidget.currentRow() |
200 | 396 | if row > -1 and row < self.PreviewListWidget.rowCount(): | 402 | if row > -1 and row < self.PreviewListWidget.rowCount(): |
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.