[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

girish at forwardbias.in girish at forwardbias.in
Wed Dec 22 14:43:43 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 31b99c2d5599f98d3b420e760ff8f1eeffae3624
Author: girish at forwardbias.in <girish at forwardbias.in@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Mon Oct 18 19:13:56 2010 +0000

    [Qt] Implement Accelerated Composition for NPAPI Plugins.
    
    Reviewed by Ariya Hidayat.
    
    https://bugs.webkit.org/show_bug.cgi?id=35524
    
    * plugins/PluginView.h:
    (WebCore::PluginView::platformLayer):
    * plugins/qt/PluginViewQt.cpp:
    (WebCore::PluginGraphicsLayerQt::PluginGraphicsLayerQt):
    (WebCore::PluginGraphicsLayerQt::~PluginGraphicsLayerQt):
    (WebCore::PluginGraphicsLayerQt::paint):
    (WebCore::PluginView::updatePluginWidget):
    (WebCore::PluginView::paint):
    (WebCore::PluginView::invalidateRect):
    (WebCore::PluginView::invalidateRegion):
    (WebCore::PluginView::platformStart):
    (WebCore::PluginView::platformLayer):
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@69981 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
index 97c043f..3bf9911 100644
--- a/WebCore/ChangeLog
+++ b/WebCore/ChangeLog
@@ -1,3 +1,24 @@
+2010-10-18  Girish Ramakrishnan  <girish at forwardbias.in>
+
+        Reviewed by Ariya Hidayat.
+
+        [Qt] Implement Accelerated Composition for NPAPI Plugins.
+
+        https://bugs.webkit.org/show_bug.cgi?id=35524
+
+        * plugins/PluginView.h:
+        (WebCore::PluginView::platformLayer):
+        * plugins/qt/PluginViewQt.cpp:
+        (WebCore::PluginGraphicsLayerQt::PluginGraphicsLayerQt):
+        (WebCore::PluginGraphicsLayerQt::~PluginGraphicsLayerQt):
+        (WebCore::PluginGraphicsLayerQt::paint):
+        (WebCore::PluginView::updatePluginWidget):
+        (WebCore::PluginView::paint):
+        (WebCore::PluginView::invalidateRect):
+        (WebCore::PluginView::invalidateRegion):
+        (WebCore::PluginView::platformStart):
+        (WebCore::PluginView::platformLayer):
+
 2010-10-18  Stuart Morgan  <stuartmorgan at chromium.org>
 
         Reviewed by Eric Seidel.
diff --git a/WebCore/plugins/PluginView.h b/WebCore/plugins/PluginView.h
index b1372fc..deaec99 100644
--- a/WebCore/plugins/PluginView.h
+++ b/WebCore/plugins/PluginView.h
@@ -58,6 +58,7 @@ typedef PlatformWidget PlatformPluginWidget;
 #endif
 #endif
 #if PLATFORM(QT)
+#include <QGraphicsItem>
 #include <QImage>
 class QPainter;
 #endif
@@ -247,6 +248,14 @@ namespace WebCore {
 #endif
         void keepAlive();
 
+#if USE(ACCELERATED_COMPOSITING)
+#if defined(XP_UNIX) && ENABLE(NETSCAPE_PLUGIN_API) && PLATFORM(QT)
+        virtual PlatformLayer* platformLayer() const;
+#else
+        virtual PlatformLayer* platformLayer() const { return 0; }
+#endif
+#endif
+
     private:
         PluginView(Frame* parentFrame, const IntSize&, PluginPackage*, Element*, const KURL&, const Vector<String>& paramNames, const Vector<String>& paramValues, const String& mimeType, bool loadManually);
 
@@ -413,8 +422,12 @@ private:
 #endif
 #if defined(XP_UNIX) && ENABLE(NETSCAPE_PLUGIN_API)
         void paintUsingXPixmap(QPainter* painter, const QRect &exposedRect);
+#if USE(ACCELERATED_COMPOSITING)
+        OwnPtr<PlatformLayer> m_platformLayer;
+        friend class PluginGraphicsLayerQt;
+#endif // USE(ACCELERATED_COMPOSITING)
 #endif
-#endif
+#endif // PLATFORM(QT)
 
         IntRect m_clipRect; // The clip rect to apply to a windowed plug-in
         IntRect m_windowRect; // Our window rect.
diff --git a/WebCore/plugins/qt/PluginViewQt.cpp b/WebCore/plugins/qt/PluginViewQt.cpp
index 26e5b82..9b4e595 100644
--- a/WebCore/plugins/qt/PluginViewQt.cpp
+++ b/WebCore/plugins/qt/PluginViewQt.cpp
@@ -31,6 +31,8 @@
 #if USE(JSC)
 #include "Bridge.h"
 #endif
+#include "Chrome.h"
+#include "ChromeClient.h"
 #include "Document.h"
 #include "DocumentLoader.h"
 #include "Element.h"
@@ -69,8 +71,10 @@
 
 #include <QApplication>
 #include <QDesktopWidget>
+#include <QGraphicsWidget>
 #include <QKeyEvent>
 #include <QPainter>
+#include <QStyleOptionGraphicsItem>
 #include <QWidget>
 #include <QX11Info>
 #include <X11/X.h>
@@ -96,6 +100,24 @@ namespace WebCore {
 
 using namespace HTMLNames;
 
+#if USE(ACCELERATED_COMPOSITING)
+// Qt's GraphicsLayer (GraphicsLayerQt) requires layers to be QGraphicsWidgets
+class PluginGraphicsLayerQt : public QGraphicsWidget {
+public:
+    PluginGraphicsLayerQt(PluginView* view) : m_view(view) { }
+    ~PluginGraphicsLayerQt() { }
+
+    void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget = 0)
+    {
+        Q_UNUSED(widget);
+        m_view->paintUsingXPixmap(painter, option->exposedRect.toRect());
+    }
+
+private:
+    PluginView* m_view;
+};
+#endif
+
 void PluginView::updatePluginWidget()
 {
     if (!parent())
@@ -145,9 +167,11 @@ void PluginView::updatePluginWidget()
         || (QWebPagePrivate::drtRun && platformPluginWidget() && (m_windowRect != oldWindowRect || m_clipRect != oldClipRect)))
         setNPWindowIfNeeded();
 
-    // Make sure we get repainted afterwards. This is necessary for downward
-    // scrolling to move the plugin widget properly.
-    invalidate();
+    if (!m_platformLayer) {
+        // Make sure we get repainted afterwards. This is necessary for downward
+        // scrolling to move the plugin widget properly.
+        invalidate();
+    }
 }
 
 void PluginView::setFocus(bool focused)
@@ -314,6 +338,11 @@ void PluginView::paint(GraphicsContext* context, const IntRect& rect)
     if (m_isWindowed)
         return;
 
+#if USE(ACCELERATED_COMPOSITING)
+    if (m_platformLayer)
+        return;
+#endif
+
     if (!m_drawable
 #if defined(MOZ_PLATFORM_MAEMO) && (MOZ_PLATFORM_MAEMO >= 5)
         && m_image.isNull()
@@ -755,6 +784,13 @@ bool PluginView::platformGetValue(NPNVariable variable, void* value, NPError* re
 
 void PluginView::invalidateRect(const IntRect& rect)
 {
+#if USE(ACCELERATED_COMPOSITING)
+    if (m_platformLayer) {
+        m_platformLayer->update(QRectF(rect));
+        return;
+    }
+#endif
+
     if (m_isWindowed) {
         if (platformWidget())
             platformWidget()->update(rect);
@@ -771,11 +807,12 @@ void PluginView::invalidateRect(NPRect* rect)
         return;
     }
     IntRect r(rect->left, rect->top, rect->right - rect->left, rect->bottom - rect->top);
-    invalidateWindowlessPluginRect(r);
+    invalidateRect(r);
 }
 
 void PluginView::invalidateRegion(NPRegion region)
 {
+    Q_UNUSED(region);
     invalidate();
 }
 
@@ -880,6 +917,16 @@ bool PluginView::platformStart()
     } else {
         setPlatformWidget(0);
         m_pluginDisplay = getPluginDisplay();
+
+#if USE(ACCELERATED_COMPOSITING)
+        if (m_parentFrame->page()->chrome()->client()->allowsAcceleratedCompositing()
+            && m_parentFrame->page()->settings() 
+            && m_parentFrame->page()->settings()->acceleratedCompositingEnabled()) {
+            m_platformLayer = new PluginGraphicsLayerQt(this);
+            // Trigger layer computation in RenderLayerCompositor
+            m_element->setNeedsStyleRecalc(SyntheticStyleChange);
+        }
+#endif
     }
 
     show();
@@ -953,5 +1000,12 @@ void PluginView::halt()
 void PluginView::restart()
 {
 }
+ 
+#if USE(ACCELERATED_COMPOSITING)
+PlatformLayer* PluginView::platformLayer() const
+{
+    return m_platformLayer.get();
+}
+#endif
 
 } // namespace WebCore

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list