[iOS] Rename the various VisibleExtent variations to exposedContentRect
[WebKit-https.git] / Source / WebKit2 / WebProcess / WebPage / mac / RemoteLayerTreeDrawingArea.h
1 /*
2  * Copyright (C) 2012 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef RemoteLayerTreeDrawingArea_h
27 #define RemoteLayerTreeDrawingArea_h
28
29 #include "DrawingArea.h"
30 #include "GraphicsLayerCARemote.h"
31 #include <WebCore/GraphicsLayerClient.h>
32 #include <WebCore/Timer.h>
33 #include <wtf/HashMap.h>
34
35 namespace WebCore {
36 class PlatformCALayer;
37 }
38
39 namespace WebKit {
40
41 class RemoteLayerTreeContext;
42
43 class RemoteLayerTreeDrawingArea : public DrawingArea, public WebCore::GraphicsLayerClient {
44 public:
45     RemoteLayerTreeDrawingArea(WebPage*, const WebPageCreationParameters&);
46     virtual ~RemoteLayerTreeDrawingArea();
47
48 private:
49     // DrawingArea
50     virtual void setNeedsDisplay() override;
51     virtual void setNeedsDisplayInRect(const WebCore::IntRect&) override;
52     virtual void scroll(const WebCore::IntRect& scrollRect, const WebCore::IntSize& scrollDelta) override;
53     virtual void updateGeometry(const WebCore::IntSize& viewSize, const WebCore::IntSize& layerPosition) override;
54
55     virtual WebCore::GraphicsLayerFactory* graphicsLayerFactory() override;
56     virtual void setRootCompositingLayer(WebCore::GraphicsLayer*) override;
57     virtual void scheduleCompositingLayerFlush() override;
58
59     virtual bool shouldUseTiledBackingForFrameView(const WebCore::FrameView*) override;
60
61     virtual void updatePreferences(const WebPreferencesStore&) override;
62
63     virtual void didInstallPageOverlay(PageOverlay*) override;
64     virtual void didUninstallPageOverlay(PageOverlay*) override;
65     virtual void setPageOverlayNeedsDisplay(PageOverlay*, const WebCore::IntRect&) override;
66     virtual void setPageOverlayOpacity(PageOverlay*, float) override;
67     virtual void clearPageOverlay(PageOverlay*) override;
68     virtual bool supportsAsyncScrolling() override { return true; }
69
70     virtual void setLayerTreeStateIsFrozen(bool) override;
71
72     virtual void forceRepaint() override;
73     virtual bool forceRepaintAsync(uint64_t) override { return false; }
74
75     virtual void setExposedRect(const WebCore::FloatRect&) override;
76     virtual WebCore::FloatRect exposedRect() const override { return m_scrolledExposedRect; }
77
78 #if PLATFORM(IOS)
79     virtual void setExposedContentRect(const WebCore::FloatRect&) override;
80 #endif
81
82     virtual void setCustomFixedPositionRect(const WebCore::FloatRect&) override;
83
84     // WebCore::GraphicsLayerClient
85     virtual void notifyAnimationStarted(const WebCore::GraphicsLayer*, double time) override { }
86     virtual void notifyFlushRequired(const WebCore::GraphicsLayer*) override { }
87     virtual void paintContents(const WebCore::GraphicsLayer*, WebCore::GraphicsContext&, WebCore::GraphicsLayerPaintingPhase, const WebCore::FloatRect& clipRect) override;
88     virtual float deviceScaleFactor() const override;
89     virtual void didCommitChangesForLayer(const WebCore::GraphicsLayer*) const override { }
90 #if PLATFORM(IOS)
91     virtual void setDeviceScaleFactor(float) override;
92 #endif
93
94     void updateScrolledExposedRect();
95
96     void layerFlushTimerFired(WebCore::Timer<RemoteLayerTreeDrawingArea>*);
97     void flushLayers();
98
99     WebCore::TiledBacking* mainFrameTiledBacking() const;
100
101     std::unique_ptr<RemoteLayerTreeContext> m_remoteLayerTreeContext;
102     RefPtr<WebCore::PlatformCALayer> m_rootLayer;
103
104     HashMap<PageOverlay*, std::unique_ptr<GraphicsLayerCARemote>> m_pageOverlayLayers;
105
106     WebCore::IntSize m_viewSize;
107
108     WebCore::FloatRect m_exposedRect;
109     WebCore::FloatRect m_scrolledExposedRect;
110
111     WebCore::Timer<RemoteLayerTreeDrawingArea> m_layerFlushTimer;
112     bool m_isFlushingSuspended;
113     bool m_hasDeferredFlush;
114 };
115
116 DRAWING_AREA_TYPE_CASTS(RemoteLayerTreeDrawingArea, type() == DrawingAreaTypeRemoteLayerTree);
117
118 } // namespace WebKit
119
120 #endif // RemoteLayerTreeDrawingArea_h