Changeset 109118 in webkit


Ignore:
Timestamp:
Feb 28, 2012, 10:21:02 AM (13 years ago)
Author:
andersca@apple.com
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.

Location:
trunk/Source/WebKit2
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r109117 r109118  
     12012-02-27  Anders Carlsson  <andersca@apple.com>
     2
     3        Add basic page overlay support to TiledCoreAnimationDrawingArea
     4        https://bugs.webkit.org/show_bug.cgi?id=79716
     5        <rdar://problem/10923079>
     6
     7        Reviewed by Sam Weinig.
     8
     9        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
     10        Make TiledCoreAnimationDrawingArea a GraphicsLayerClient.
     11
     12        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
     13        (WebKit::TiledCoreAnimationDrawingArea::didInstallPageOverlay):
     14        Create the page overlay layer.
     15
     16        (WebKit::TiledCoreAnimationDrawingArea::didUninstallPageOverlay):
     17        Destroy the page overlay layer.
     18
     19        (WebKit::TiledCoreAnimationDrawingArea::setPageOverlayNeedsDisplay):
     20        Mark the page overlay layer as needing display.
     21
     22        (WebKit::TiledCoreAnimationDrawingArea::notifyAnimationStarted):
     23        (WebKit::TiledCoreAnimationDrawingArea::notifySyncRequired):
     24        Add empty GraphisLayerClient member function implementations.
     25
     26        (WebKit::TiledCoreAnimationDrawingArea::paintContents):
     27        Ask the page overlay to paint itself.
     28
     29        (WebKit::TiledCoreAnimationDrawingArea::flushLayers):
     30        Flush the page overlay layer.
     31       
     32        (WebKit::TiledCoreAnimationDrawingArea::updateGeometry):
     33        Resize the page overlay layer.
     34
     35        (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer):
     36        If we have a page overlay layer, add it as a sublayer of the root layer.
     37
     38        (WebKit::TiledCoreAnimationDrawingArea::createPageOverlayLayer):
     39        Create the page overlay layer and add it as a sublayer of the root layer.
     40
     41        (WebKit::TiledCoreAnimationDrawingArea::destroyPageOverlayLayer):
     42        Remove the page overlay layer and destroy it.
     43
    1442012-02-28  Carlos Garcia Campos  <cgarcia@igalia.com>
    245
  • trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h

    r108946 r109118  
    2828
    2929#include "DrawingArea.h"
     30#include <WebCore/GraphicsLayerClient.h>
    3031#include <WebCore/LayerFlushScheduler.h>
    3132#include <WebCore/LayerFlushSchedulerClient.h>
     
    3940class RemoteLayerClient;
    4041
    41 class TiledCoreAnimationDrawingArea : public DrawingArea, private WebCore::LayerFlushSchedulerClient {
     42class TiledCoreAnimationDrawingArea : public DrawingArea, WebCore::GraphicsLayerClient, WebCore::LayerFlushSchedulerClient {
    4243public:
    4344    static PassOwnPtr<TiledCoreAnimationDrawingArea> create(WebPage*, const WebPageCreationParameters&);
     
    5758    virtual void scheduleCompositingLayerSync() OVERRIDE;
    5859
     60    virtual void didInstallPageOverlay() OVERRIDE;
     61    virtual void didUninstallPageOverlay() OVERRIDE;
     62    virtual void setPageOverlayNeedsDisplay(const WebCore::IntRect&) OVERRIDE;
     63
     64    // WebCore::GraphicsLayerClient
     65    virtual void notifyAnimationStarted(const WebCore::GraphicsLayer*, double time) OVERRIDE;
     66    virtual void notifySyncRequired(const WebCore::GraphicsLayer*) OVERRIDE;
     67    virtual void paintContents(const WebCore::GraphicsLayer*, WebCore::GraphicsContext&, WebCore::GraphicsLayerPaintingPhase, const WebCore::IntRect& clipRect) OVERRIDE;
     68    virtual bool showDebugBorders(const WebCore::GraphicsLayer*) const OVERRIDE;
     69    virtual bool showRepaintCounter(const WebCore::GraphicsLayer*) const OVERRIDE;
     70    virtual float deviceScaleFactor() const OVERRIDE;
     71
    5972    // WebCore::LayerFlushSchedulerClient
    6073    virtual bool flushLayers() OVERRIDE;
     
    6679    void setRootCompositingLayer(CALayer *);
    6780
     81    void createPageOverlayLayer();
     82    void destroyPageOverlayLayer();
     83
    6884    bool m_layerTreeStateIsFrozen;
    6985    WebCore::LayerFlushScheduler m_layerFlushScheduler;
     
    7288    RetainPtr<CALayer> m_rootLayer;
    7389    RetainPtr<CALayer> m_pendingRootCompositingLayer;
     90
     91    OwnPtr<WebCore::GraphicsLayer> m_pageOverlayLayer;
    7492};
    7593
  • trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm

    r108946 r109118  
    145145}
    146146
     147void TiledCoreAnimationDrawingArea::didInstallPageOverlay()
     148{
     149    createPageOverlayLayer();
     150    scheduleCompositingLayerSync();
     151}
     152
     153void TiledCoreAnimationDrawingArea::didUninstallPageOverlay()
     154{
     155    destroyPageOverlayLayer();
     156    scheduleCompositingLayerSync();
     157}
     158
     159void TiledCoreAnimationDrawingArea::setPageOverlayNeedsDisplay(const IntRect& rect)
     160{
     161    ASSERT(m_pageOverlayLayer);
     162    m_pageOverlayLayer->setNeedsDisplayInRect(rect);
     163    scheduleCompositingLayerSync();
     164}
     165
     166void TiledCoreAnimationDrawingArea::notifyAnimationStarted(const GraphicsLayer*, double)
     167{
     168}
     169
     170void TiledCoreAnimationDrawingArea::notifySyncRequired(const GraphicsLayer*)
     171{
     172}
     173
     174void TiledCoreAnimationDrawingArea::paintContents(const GraphicsLayer* graphicsLayer, GraphicsContext& graphicsContext, GraphicsLayerPaintingPhase, const IntRect& clipRect)
     175{
     176    ASSERT_UNUSED(graphicsLayer, graphicsLayer == m_pageOverlayLayer);
     177
     178    m_webPage->drawPageOverlay(graphicsContext, clipRect);
     179}
     180
     181bool TiledCoreAnimationDrawingArea::showDebugBorders(const GraphicsLayer*) const
     182{
     183    return m_webPage->corePage()->settings()->showDebugBorders();
     184}
     185
     186bool TiledCoreAnimationDrawingArea::showRepaintCounter(const GraphicsLayer*) const
     187{
     188    return m_webPage->corePage()->settings()->showRepaintCounter();
     189}
     190
     191float TiledCoreAnimationDrawingArea::deviceScaleFactor() const
     192{
     193    return m_webPage->corePage()->deviceScaleFactor();
     194}
     195
    147196bool TiledCoreAnimationDrawingArea::flushLayers()
    148197{
     
    159208    }
    160209
     210    if (m_pageOverlayLayer)
     211        m_pageOverlayLayer->syncCompositingStateForThisLayerOnly();
     212
    161213    bool returnValue = m_webPage->corePage()->mainFrame()->view()->syncCompositingStateIncludingSubframes();
    162214
     
    169221    m_webPage->setSize(viewSize);
    170222    m_webPage->layoutIfNeeded();
     223
     224    if (m_pageOverlayLayer)
     225        m_pageOverlayLayer->setSize(viewSize);
    171226
    172227    if (!m_layerTreeStateIsFrozen)
     
    200255    if (!layer)
    201256        m_rootLayer.get().sublayers = nil;
    202     else
     257    else {
    203258        m_rootLayer.get().sublayers = [NSArray arrayWithObject:layer];
    204259
     260        if (m_pageOverlayLayer)
     261            [m_rootLayer.get() addSublayer:m_pageOverlayLayer->platformLayer()];
     262    }
     263
    205264    [CATransaction commit];
    206265}
    207266
     267void TiledCoreAnimationDrawingArea::createPageOverlayLayer()
     268{
     269    ASSERT(!m_pageOverlayLayer);
     270
     271    m_pageOverlayLayer = GraphicsLayer::create(this);
     272#ifndef NDEBUG
     273    m_pageOverlayLayer->setName("page overlay content");
     274#endif
     275
     276    m_pageOverlayLayer->setDrawsContent(true);
     277    m_pageOverlayLayer->setSize(m_webPage->size());
     278
     279    [m_rootLayer.get() addSublayer:m_pageOverlayLayer->platformLayer()];
     280}
     281
     282void TiledCoreAnimationDrawingArea::destroyPageOverlayLayer()
     283{
     284    ASSERT(m_pageOverlayLayer);
     285
     286    [m_pageOverlayLayer->platformLayer() removeFromSuperlayer];
     287    m_pageOverlayLayer = nullptr;
     288}
     289
    208290} // namespace WebKit
Note: See TracChangeset for help on using the changeset viewer.