Title: [109118] trunk/Source/WebKit2
- Revision
- 109118
- Author
- [email protected]
- Date
- 2012-02-28 10:21:02 -0800 (Tue, 28 Feb 2012)
Log Message
Add basic page overlay support to TiledCoreAnimationDrawingArea
https://bugs.webkit.org/show_bug.cgi?id=79716
<rdar://problem/10923079>
Reviewed by Sam Weinig.
* WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
Make TiledCoreAnimationDrawingArea a GraphicsLayerClient.
* WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
(WebKit::TiledCoreAnimationDrawingArea::didInstallPageOverlay):
Create the page overlay layer.
(WebKit::TiledCoreAnimationDrawingArea::didUninstallPageOverlay):
Destroy the page overlay layer.
(WebKit::TiledCoreAnimationDrawingArea::setPageOverlayNeedsDisplay):
Mark the page overlay layer as needing display.
(WebKit::TiledCoreAnimationDrawingArea::notifyAnimationStarted):
(WebKit::TiledCoreAnimationDrawingArea::notifySyncRequired):
Add empty GraphisLayerClient member function implementations.
(WebKit::TiledCoreAnimationDrawingArea::paintContents):
Ask the page overlay to paint itself.
(WebKit::TiledCoreAnimationDrawingArea::flushLayers):
Flush the page overlay layer.
(WebKit::TiledCoreAnimationDrawingArea::updateGeometry):
Resize the page overlay layer.
(WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer):
If we have a page overlay layer, add it as a sublayer of the root layer.
(WebKit::TiledCoreAnimationDrawingArea::createPageOverlayLayer):
Create the page overlay layer and add it as a sublayer of the root layer.
(WebKit::TiledCoreAnimationDrawingArea::destroyPageOverlayLayer):
Remove the page overlay layer and destroy it.
Modified Paths
Diff
Modified: trunk/Source/WebKit2/ChangeLog (109117 => 109118)
--- trunk/Source/WebKit2/ChangeLog 2012-02-28 17:56:35 UTC (rev 109117)
+++ trunk/Source/WebKit2/ChangeLog 2012-02-28 18:21:02 UTC (rev 109118)
@@ -1,3 +1,46 @@
+2012-02-27 Anders Carlsson <[email protected]>
+
+ Add basic page overlay support to TiledCoreAnimationDrawingArea
+ https://bugs.webkit.org/show_bug.cgi?id=79716
+ <rdar://problem/10923079>
+
+ Reviewed by Sam Weinig.
+
+ * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
+ Make TiledCoreAnimationDrawingArea a GraphicsLayerClient.
+
+ * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
+ (WebKit::TiledCoreAnimationDrawingArea::didInstallPageOverlay):
+ Create the page overlay layer.
+
+ (WebKit::TiledCoreAnimationDrawingArea::didUninstallPageOverlay):
+ Destroy the page overlay layer.
+
+ (WebKit::TiledCoreAnimationDrawingArea::setPageOverlayNeedsDisplay):
+ Mark the page overlay layer as needing display.
+
+ (WebKit::TiledCoreAnimationDrawingArea::notifyAnimationStarted):
+ (WebKit::TiledCoreAnimationDrawingArea::notifySyncRequired):
+ Add empty GraphisLayerClient member function implementations.
+
+ (WebKit::TiledCoreAnimationDrawingArea::paintContents):
+ Ask the page overlay to paint itself.
+
+ (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
+ Flush the page overlay layer.
+
+ (WebKit::TiledCoreAnimationDrawingArea::updateGeometry):
+ Resize the page overlay layer.
+
+ (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer):
+ If we have a page overlay layer, add it as a sublayer of the root layer.
+
+ (WebKit::TiledCoreAnimationDrawingArea::createPageOverlayLayer):
+ Create the page overlay layer and add it as a sublayer of the root layer.
+
+ (WebKit::TiledCoreAnimationDrawingArea::destroyPageOverlayLayer):
+ Remove the page overlay layer and destroy it.
+
2012-02-28 Carlos Garcia Campos <[email protected]>
[GTK] Remove virtual methods of WebKitDownload signals in WebKit2 GTK+ API
Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h (109117 => 109118)
--- trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h 2012-02-28 17:56:35 UTC (rev 109117)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h 2012-02-28 18:21:02 UTC (rev 109118)
@@ -27,6 +27,7 @@
#define TiledCoreAnimationDrawingArea_h
#include "DrawingArea.h"
+#include <WebCore/GraphicsLayerClient.h>
#include <WebCore/LayerFlushScheduler.h>
#include <WebCore/LayerFlushSchedulerClient.h>
#include <wtf/RetainPtr.h>
@@ -38,7 +39,7 @@
class RemoteLayerClient;
-class TiledCoreAnimationDrawingArea : public DrawingArea, private WebCore::LayerFlushSchedulerClient {
+class TiledCoreAnimationDrawingArea : public DrawingArea, WebCore::GraphicsLayerClient, WebCore::LayerFlushSchedulerClient {
public:
static PassOwnPtr<TiledCoreAnimationDrawingArea> create(WebPage*, const WebPageCreationParameters&);
virtual ~TiledCoreAnimationDrawingArea();
@@ -56,6 +57,18 @@
virtual void setRootCompositingLayer(WebCore::GraphicsLayer*) OVERRIDE;
virtual void scheduleCompositingLayerSync() OVERRIDE;
+ virtual void didInstallPageOverlay() OVERRIDE;
+ virtual void didUninstallPageOverlay() OVERRIDE;
+ virtual void setPageOverlayNeedsDisplay(const WebCore::IntRect&) OVERRIDE;
+
+ // WebCore::GraphicsLayerClient
+ virtual void notifyAnimationStarted(const WebCore::GraphicsLayer*, double time) OVERRIDE;
+ virtual void notifySyncRequired(const WebCore::GraphicsLayer*) OVERRIDE;
+ virtual void paintContents(const WebCore::GraphicsLayer*, WebCore::GraphicsContext&, WebCore::GraphicsLayerPaintingPhase, const WebCore::IntRect& clipRect) OVERRIDE;
+ virtual bool showDebugBorders(const WebCore::GraphicsLayer*) const OVERRIDE;
+ virtual bool showRepaintCounter(const WebCore::GraphicsLayer*) const OVERRIDE;
+ virtual float deviceScaleFactor() const OVERRIDE;
+
// WebCore::LayerFlushSchedulerClient
virtual bool flushLayers() OVERRIDE;
@@ -65,12 +78,17 @@
void setRootCompositingLayer(CALayer *);
+ void createPageOverlayLayer();
+ void destroyPageOverlayLayer();
+
bool m_layerTreeStateIsFrozen;
WebCore::LayerFlushScheduler m_layerFlushScheduler;
OwnPtr<RemoteLayerClient> m_remoteLayerClient;
RetainPtr<CALayer> m_rootLayer;
RetainPtr<CALayer> m_pendingRootCompositingLayer;
+
+ OwnPtr<WebCore::GraphicsLayer> m_pageOverlayLayer;
};
} // namespace WebKit
Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm (109117 => 109118)
--- trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm 2012-02-28 17:56:35 UTC (rev 109117)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm 2012-02-28 18:21:02 UTC (rev 109118)
@@ -144,6 +144,55 @@
m_layerFlushScheduler.schedule();
}
+void TiledCoreAnimationDrawingArea::didInstallPageOverlay()
+{
+ createPageOverlayLayer();
+ scheduleCompositingLayerSync();
+}
+
+void TiledCoreAnimationDrawingArea::didUninstallPageOverlay()
+{
+ destroyPageOverlayLayer();
+ scheduleCompositingLayerSync();
+}
+
+void TiledCoreAnimationDrawingArea::setPageOverlayNeedsDisplay(const IntRect& rect)
+{
+ ASSERT(m_pageOverlayLayer);
+ m_pageOverlayLayer->setNeedsDisplayInRect(rect);
+ scheduleCompositingLayerSync();
+}
+
+void TiledCoreAnimationDrawingArea::notifyAnimationStarted(const GraphicsLayer*, double)
+{
+}
+
+void TiledCoreAnimationDrawingArea::notifySyncRequired(const GraphicsLayer*)
+{
+}
+
+void TiledCoreAnimationDrawingArea::paintContents(const GraphicsLayer* graphicsLayer, GraphicsContext& graphicsContext, GraphicsLayerPaintingPhase, const IntRect& clipRect)
+{
+ ASSERT_UNUSED(graphicsLayer, graphicsLayer == m_pageOverlayLayer);
+
+ m_webPage->drawPageOverlay(graphicsContext, clipRect);
+}
+
+bool TiledCoreAnimationDrawingArea::showDebugBorders(const GraphicsLayer*) const
+{
+ return m_webPage->corePage()->settings()->showDebugBorders();
+}
+
+bool TiledCoreAnimationDrawingArea::showRepaintCounter(const GraphicsLayer*) const
+{
+ return m_webPage->corePage()->settings()->showRepaintCounter();
+}
+
+float TiledCoreAnimationDrawingArea::deviceScaleFactor() const
+{
+ return m_webPage->corePage()->deviceScaleFactor();
+}
+
bool TiledCoreAnimationDrawingArea::flushLayers()
{
ASSERT(!m_layerTreeStateIsFrozen);
@@ -158,6 +207,9 @@
m_pendingRootCompositingLayer = nullptr;
}
+ if (m_pageOverlayLayer)
+ m_pageOverlayLayer->syncCompositingStateForThisLayerOnly();
+
bool returnValue = m_webPage->corePage()->mainFrame()->view()->syncCompositingStateIncludingSubframes();
[pool drain];
@@ -169,6 +221,9 @@
m_webPage->setSize(viewSize);
m_webPage->layoutIfNeeded();
+ if (m_pageOverlayLayer)
+ m_pageOverlayLayer->setSize(viewSize);
+
if (!m_layerTreeStateIsFrozen)
flushLayers();
@@ -199,10 +254,37 @@
if (!layer)
m_rootLayer.get().sublayers = nil;
- else
+ else {
m_rootLayer.get().sublayers = [NSArray arrayWithObject:layer];
+ if (m_pageOverlayLayer)
+ [m_rootLayer.get() addSublayer:m_pageOverlayLayer->platformLayer()];
+ }
+
[CATransaction commit];
}
+void TiledCoreAnimationDrawingArea::createPageOverlayLayer()
+{
+ ASSERT(!m_pageOverlayLayer);
+
+ m_pageOverlayLayer = GraphicsLayer::create(this);
+#ifndef NDEBUG
+ m_pageOverlayLayer->setName("page overlay content");
+#endif
+
+ m_pageOverlayLayer->setDrawsContent(true);
+ m_pageOverlayLayer->setSize(m_webPage->size());
+
+ [m_rootLayer.get() addSublayer:m_pageOverlayLayer->platformLayer()];
+}
+
+void TiledCoreAnimationDrawingArea::destroyPageOverlayLayer()
+{
+ ASSERT(m_pageOverlayLayer);
+
+ [m_pageOverlayLayer->platformLayer() removeFromSuperlayer];
+ m_pageOverlayLayer = nullptr;
+}
+
} // namespace WebKit
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes