WebBrowser/SpeedDial/PageThumbnailer.py

changeset 4959
8cae2a004559
parent 4917
682750cc7bd5
child 5389
9b1c800daff3
diff -r ef400197e7d5 -r 8cae2a004559 WebBrowser/SpeedDial/PageThumbnailer.py
--- a/WebBrowser/SpeedDial/PageThumbnailer.py	Sat Apr 30 20:01:30 2016 +0200
+++ b/WebBrowser/SpeedDial/PageThumbnailer.py	Sun May 01 16:41:08 2016 +0200
@@ -9,10 +9,9 @@
 
 from __future__ import unicode_literals
 
-from PyQt5.QtCore import pyqtSignal, pyqtSlot, QObject, QSize, Qt, QUrl, \
-    QTimer
-from PyQt5.QtGui import QPixmap
-from PyQt5.QtQuickWidgets import QQuickWidget
+from PyQt5.QtCore import pyqtSignal, QObject, QSize, Qt, QUrl, QTimer
+from PyQt5.QtGui import QPixmap, QImage, QPainter
+from PyQt5.QtWebEngineWidgets import QWebEngineView
 
 
 class PageThumbnailer(QObject):
@@ -37,10 +36,9 @@
         self.__title = ""
         self.__url = QUrl()
         
-        self.__view = QQuickWidget()
+        self.__view = QWebEngineView()
         self.__view.setAttribute(Qt.WA_DontShowOnScreen)
-        self.__view.setSource(QUrl("qrc:qml/thumbnailer.qml"))
-        self.__view.rootContext().setContextProperty("thumbnailer", self)
+        self.__view.resize(1920, 1080)
         self.__view.show()
     
     def setSize(self, size):
@@ -104,15 +102,12 @@
         """
         Public method to start the thumbnailing action.
         """
-        if self.__view.rootObject():
-            self.__view.rootObject().setProperty("url", self.__url)
-        else:
-            QTimer.singleShot(0, lambda: self.thumbnailCreated.emit(QPixmap()))
+        self.__view.loadFinished.connect(self.__createThumbnail)
+        self.__view.load(self.__url)
     
-    @pyqtSlot(bool)
-    def createThumbnail(self, status):
+    def __createThumbnail(self, status):
         """
-        Public slot creating the thumbnail of the web site.
+        Private slot creating the thumbnail of the web site.
         
         @param status flag indicating a successful load of the web site
             (boolean)
@@ -127,9 +122,15 @@
         """
         Private slot to grab the thumbnail image from the view.
         """
-        self.__title = self.__view.rootObject().property("title")
-        pixmap = QPixmap.fromImage(
-            self.__view.grabFramebuffer().scaled(
-                self.__size, Qt.KeepAspectRatioByExpanding,
-                Qt.SmoothTransformation))
-        self.thumbnailCreated.emit(pixmap)
+        self.__title = self.__view.title()
+        
+        image = QImage(self.__view.size(), QImage.Format_ARGB32)
+        painter = QPainter(image)
+        self.__view.render(painter)
+        painter.end()
+        
+        scaledImage = image.scaled(self.__size,
+                                   Qt.KeepAspectRatioByExpanding,
+                                   Qt.SmoothTransformation)
+        
+        self.thumbnailCreated.emit(QPixmap.fromImage(scaledImage))

eric ide

mercurial