[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