Pass the right color space over to the web process so we can set it on our CA context
[WebKit-https.git] / Source / WebKit2 / WebProcess / WebPage / mac / TiledCoreAnimationDrawingArea.h
1 /*
2  * Copyright (C) 2011 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 TiledCoreAnimationDrawingArea_h
27 #define TiledCoreAnimationDrawingArea_h
28
29 #if ENABLE(THREADED_SCROLLING)
30
31 #include "DrawingArea.h"
32 #include "LayerTreeContext.h"
33 #include <WebCore/GraphicsLayerClient.h>
34 #include <WebCore/LayerFlushScheduler.h>
35 #include <WebCore/LayerFlushSchedulerClient.h>
36 #include <wtf/RetainPtr.h>
37
38 OBJC_CLASS CALayer;
39 OBJC_CLASS WKContentLayer;
40
41 namespace WebKit {
42
43 class LayerHostingContext;
44
45 class TiledCoreAnimationDrawingArea : public DrawingArea, WebCore::GraphicsLayerClient, WebCore::LayerFlushSchedulerClient {
46 public:
47     static PassOwnPtr<TiledCoreAnimationDrawingArea> create(WebPage*, const WebPageCreationParameters&);
48     virtual ~TiledCoreAnimationDrawingArea();
49
50 private:
51     TiledCoreAnimationDrawingArea(WebPage*, const WebPageCreationParameters&);
52
53     // DrawingArea
54     virtual void setNeedsDisplay(const WebCore::IntRect&) OVERRIDE;
55     virtual void scroll(const WebCore::IntRect& scrollRect, const WebCore::IntSize& scrollOffset) OVERRIDE;
56
57     virtual void forceRepaint() OVERRIDE;
58     virtual bool forceRepaintAsync(uint64_t callbackID) OVERRIDE;
59     virtual void setLayerTreeStateIsFrozen(bool) OVERRIDE;
60     virtual bool layerTreeStateIsFrozen() const OVERRIDE;
61     virtual void setRootCompositingLayer(WebCore::GraphicsLayer*) OVERRIDE;
62     virtual void scheduleCompositingLayerSync() OVERRIDE;
63
64     virtual void didInstallPageOverlay() OVERRIDE;
65     virtual void didUninstallPageOverlay() OVERRIDE;
66     virtual void setPageOverlayNeedsDisplay(const WebCore::IntRect&) OVERRIDE;
67     virtual void updatePreferences() OVERRIDE;
68
69     virtual void dispatchAfterEnsuringUpdatedScrollPosition(const Function<void ()>&) OVERRIDE;
70
71     // WebCore::GraphicsLayerClient
72     virtual void notifyAnimationStarted(const WebCore::GraphicsLayer*, double time) OVERRIDE;
73     virtual void notifySyncRequired(const WebCore::GraphicsLayer*) OVERRIDE;
74     virtual void paintContents(const WebCore::GraphicsLayer*, WebCore::GraphicsContext&, WebCore::GraphicsLayerPaintingPhase, const WebCore::IntRect& clipRect) OVERRIDE;
75     virtual bool showDebugBorders(const WebCore::GraphicsLayer*) const OVERRIDE;
76     virtual bool showRepaintCounter(const WebCore::GraphicsLayer*) const OVERRIDE;
77     virtual float deviceScaleFactor() const OVERRIDE;
78
79     // WebCore::LayerFlushSchedulerClient
80     virtual bool flushLayers() OVERRIDE;
81
82     // Message handlers.
83     virtual void suspendPainting() OVERRIDE;
84     virtual void resumePainting() OVERRIDE;
85     virtual void updateGeometry(const WebCore::IntSize& viewSize) OVERRIDE;
86     virtual void setDeviceScaleFactor(float) OVERRIDE;
87     virtual void setLayerHostingMode(uint32_t) OVERRIDE;
88     virtual void setColorSpace(const ColorSpaceData&) OVERRIDE;
89
90     void updateLayerHostingContext();
91
92     void setRootCompositingLayer(CALayer *);
93
94     void createPageOverlayLayer();
95     void destroyPageOverlayLayer();
96
97     bool m_layerTreeStateIsFrozen;
98     WebCore::LayerFlushScheduler m_layerFlushScheduler;
99
100     OwnPtr<LayerHostingContext> m_layerHostingContext;
101
102     RetainPtr<CALayer> m_rootLayer;
103     RetainPtr<CALayer> m_pendingRootCompositingLayer;
104
105     RetainPtr<CALayer> m_debugInfoLayer;
106
107     OwnPtr<WebCore::GraphicsLayer> m_pageOverlayLayer;
108
109     bool m_isPaintingSuspended;
110 };
111
112 } // namespace WebKit
113
114 #endif // ENABLE(THREADED_SCROLLING)
115
116 #endif // TiledCoreAnimationDrawingArea_h