diff --git a/openlp/core/display/render.py b/openlp/core/display/render.py index c72a8db08..cb4a0639b 100644 --- a/openlp/core/display/render.py +++ b/openlp/core/display/render.py @@ -28,7 +28,7 @@ import math import re import time -from PyQt5 import QtWidgets +from PyQt5 import QtWidgets, QtGui from openlp.core.lib.formattingtags import FormattingTags from openlp.core.common.registry import Registry, RegistryBase @@ -469,24 +469,13 @@ class Renderer(RegistryBase, LogMixin, RegistryProperties, DisplayWindow): self.set_theme(theme_data) self.theme_height = theme_data.font_main_height slides = self.format_slide(render_tags(VERSE), None) - print(slides) verses = dict() verses['title'] = TITLE verses['text'] = slides[0] verses['verse'] = 'V1' self.load_verses([verses]) self.force_page = False - QtWidgets.QApplication.instance().processEvents() - pixmap = self.webview.grab() - QtWidgets.QApplication.instance().processEvents() - pixmap = self.webview.grab() - time.sleep(0.5) - self.show() - QtWidgets.QApplication.instance().processEvents() - pixmap = self.grab() - self.hide() - #pixmap.save('/tmp/screen-grab.png', 'png') - return pixmap + return self.save_screenshot() self.force_page = False return None @@ -724,3 +713,23 @@ class Renderer(RegistryBase, LogMixin, RegistryProperties, DisplayWindow): self.run_javascript('Display.addTextSlide("v1", "{text}");'.format(text=text), is_sync=True) does_text_fits = self.run_javascript('Display.doesContentFit();', is_sync=True) return does_text_fits + + def save_screenshot(self, fname=None): + """ + Save a screenshot, either returning it or saving it to file. Do some extra work to actually get a picture. + """ + self.setVisible(True) + pixmap = self.grab() + for i in range(0, 4): + QtWidgets.QApplication.instance().processEvents() + time.sleep(0.05) + QtWidgets.QApplication.instance().processEvents() + pixmap = self.grab() + self.setVisible(False) + pixmap = QtGui.QPixmap(self.webview.size()) + self.webview.render(pixmap) + if fname: + ext = os.path.splitext(fname)[-1][1:] + pixmap.save(fname, ext) + else: + return pixmap diff --git a/openlp/core/display/webengine.py b/openlp/core/display/webengine.py index 39ba7e9bd..1d357a6ce 100644 --- a/openlp/core/display/webengine.py +++ b/openlp/core/display/webengine.py @@ -53,9 +53,10 @@ class WebEnginePage(QtWebEngineWidgets.QWebEnginePage): class WebEngineView(QtWebEngineWidgets.QWebEngineView): """ - A sub-classed QWebEngineView to handle paint events of OpenGL + A sub-classed QWebEngineView to handle paint events of OpenGL (does not seem to work) + and set some attributtes. """ - _child = None # QtWidgets.QOpenGLWidget + _child = None # QtWidgets.QOpenGLWidget or QWidget? delegatePaint = QtCore.pyqtSignal() def __init__(self, parent=None): @@ -84,9 +85,9 @@ class WebEngineView(QtWebEngineWidgets.QWebEngineView): Handle events """ if ev.type() == QtCore.QEvent.ChildAdded: - # Only use QOpenGLWidget child + # Only use QWidget child (used to be QOpenGLWidget) w = ev.child() - if w and isinstance(w, QtWidgets.QOpenGLWidget): + if w and isinstance(w, QtWidgets.QWidget): self._child = w w.installEventFilter(self) return super(WebEngineView, self).event(ev) diff --git a/openlp/core/ui/themestab.py b/openlp/core/ui/themestab.py index 53e3a84f5..555c72200 100644 --- a/openlp/core/ui/themestab.py +++ b/openlp/core/ui/themestab.py @@ -188,7 +188,7 @@ class ThemesTab(SettingsTab): Set the global default theme """ self.global_theme = self.default_combo_box.currentText() - self.renderer.set_global_theme() + # self.renderer.set_global_theme() self._preview_global_theme() def update_theme_list(self, theme_list):