diff --git a/openlp/core/lib/rendermanager.py b/openlp/core/lib/rendermanager.py index 6d36743ac..b9de5365d 100644 --- a/openlp/core/lib/rendermanager.py +++ b/openlp/core/lib/rendermanager.py @@ -112,7 +112,7 @@ class RenderManager(object): """ self.service_theme = service_theme - def set_override_theme(self, theme): + def set_override_theme(self, theme, overrideLevels=False): """ Set the appropriate theme depending on the theme level. Called by the service item when building a display frame @@ -122,9 +122,12 @@ class RenderManager(object): item wants to use the given value. """ log.debug(u'set override theme to %s', theme) - if self.theme_level == ThemeLevel.Global: + theme_level = self.theme_level + if overrideLevels: + theme_level = ThemeLevel.Song + if theme_level == ThemeLevel.Global: self.theme = self.global_theme - elif self.theme_level == ThemeLevel.Service: + elif theme_level == ThemeLevel.Service: if self.service_theme == u'': self.theme = self.global_theme else: @@ -132,15 +135,16 @@ class RenderManager(object): else: if theme: self.theme = theme - elif self.theme_level == ThemeLevel.Song or \ - self.theme_level == ThemeLevel.Service: + elif theme_level == ThemeLevel.Song or \ + theme_level == ThemeLevel.Service: if self.service_theme == u'': self.theme = self.global_theme else: self.theme = self.service_theme else: self.theme = self.global_theme - if self.theme != self.renderer.theme_name or self.themedata is None: + if self.theme != self.renderer.theme_name or self.themedata is None \ + or overrideLevels: log.debug(u'theme is now %s', self.theme) self.themedata = self.theme_manager.getThemeData(self.theme) self.calculate_default(self.screens.current[u'size']) @@ -185,11 +189,6 @@ class RenderManager(object): log.debug(u'generate preview') # set the default image size for previews self.calculate_default(self.screens.preview[u'size']) - self.renderer.set_theme(themedata) - self.build_text_rectangle(themedata) - self.renderer.set_frame_dest(self.width, self.height, True) - # Reset the real screen size for subsequent render requests - self.calculate_default(self.screens.current[u'size']) verse = u'Amazing Grace!\n'\ 'How sweet the sound\n'\ 'To save a wretch like me;\n'\ @@ -201,13 +200,17 @@ class RenderManager(object): footer.append(u'CCLI 123456') # build a service item to generate preview serviceItem = ServiceItem() + serviceItem.theme = themedata serviceItem.add_from_text(u'', verse, footer) serviceItem.render_manager = self - serviceItem.render() + serviceItem.render(True) serviceItem.raw_footer = footer self.display.buildHtml(serviceItem) frame, raw_html = serviceItem.get_rendered_frame(0) - return self.display.text(raw_html) + preview = self.display.text(raw_html) + # Reset the real screen size for subsequent render requests + self.calculate_default(self.screens.current[u'size']) + return preview def format_slide(self, words, line_break): """ diff --git a/openlp/core/lib/serviceitem.py b/openlp/core/lib/serviceitem.py index 8632228e1..90a51a8d4 100644 --- a/openlp/core/lib/serviceitem.py +++ b/openlp/core/lib/serviceitem.py @@ -131,7 +131,7 @@ class ServiceItem(object): self.icon = icon self.iconic_representation = build_icon(icon) - def render(self): + def render(self, useOverride=False): """ The render method is what generates the frames for the screen and obtains the display information from the renderemanager. @@ -150,7 +150,7 @@ class ServiceItem(object): if not self.theme: theme = self.theme self.main, self.footer = \ - self.render_manager.set_override_theme(theme) + self.render_manager.set_override_theme(theme, useOverride) self.bg_frame = self.render_manager.renderer.bg_frame self.themedata = self.render_manager.renderer._theme for slide in self._raw_frames: