ca476179e1da7974add501b6d291bb84134fe5d3
[WebKit-https.git] / Source / WebKit2 / WebProcess / WebPage / DrawingArea.h
1 /*
2  * Copyright (C) 2010 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 DrawingArea_h
27 #define DrawingArea_h
28
29 #include "DrawingAreaInfo.h"
30 #include <WebCore/FloatPoint.h>
31 #include <WebCore/IntRect.h>
32 #include <wtf/Forward.h>
33 #include <wtf/Noncopyable.h>
34 #include <wtf/PassOwnPtr.h>
35
36 namespace CoreIPC {
37     class ArgumentDecoder;
38     class Connection;
39     class MessageID;
40 }
41
42 namespace WebCore {
43     class GraphicsLayer;
44     class GraphicsLayerFactory;
45 }
46
47 namespace WebKit {
48
49 struct ColorSpaceData;
50 class LayerTreeHost;
51 class WebPage;
52 struct WebPageCreationParameters;
53 struct WebPreferencesStore;
54
55 #if PLATFORM(WIN)
56 struct WindowGeometry;
57 #endif
58
59 class DrawingArea {
60     WTF_MAKE_NONCOPYABLE(DrawingArea);
61
62 public:
63     static PassOwnPtr<DrawingArea> create(WebPage*, const WebPageCreationParameters&);
64     virtual ~DrawingArea();
65     
66     void didReceiveDrawingAreaMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*);
67
68     virtual void setNeedsDisplay(const WebCore::IntRect&) = 0;
69     virtual void scroll(const WebCore::IntRect& scrollRect, const WebCore::IntSize& scrollOffset) = 0;
70
71     // FIXME: These should be pure virtual.
72     virtual void pageBackgroundTransparencyChanged() { }
73     virtual void forceRepaint() { }
74     virtual bool forceRepaintAsync(uint64_t /*callbackID*/) { return false; }
75     virtual void setLayerTreeStateIsFrozen(bool) { }
76     virtual bool layerTreeStateIsFrozen() const { return false; }
77     virtual LayerTreeHost* layerTreeHost() const { return 0; }
78
79     virtual void didInstallPageOverlay() { }
80     virtual void didUninstallPageOverlay() { }
81     virtual void setPageOverlayNeedsDisplay(const WebCore::IntRect&) { }
82     virtual void setPageOverlayOpacity(float) { }
83     // If this function returns false, PageOverlay should apply opacity when painting.
84     virtual bool pageOverlayShouldApplyFadeWhenPainting() const { return true; }
85     virtual void pageCustomRepresentationChanged() { }
86
87     virtual void setPaintingEnabled(bool) { }
88     virtual void updatePreferences(const WebPreferencesStore&) { }
89
90 #if USE(ACCELERATED_COMPOSITING)
91     virtual WebCore::GraphicsLayerFactory* graphicsLayerFactory() { return 0; }
92     virtual void setRootCompositingLayer(WebCore::GraphicsLayer*) = 0;
93     virtual void scheduleCompositingLayerFlush() = 0;
94 #endif
95
96 #if USE(COORDINATED_GRAPHICS)
97     virtual void didReceiveLayerTreeCoordinatorMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder*) = 0;
98 #endif
99
100 #if PLATFORM(WIN)
101     virtual void scheduleChildWindowGeometryUpdate(const WindowGeometry&) = 0;
102 #endif
103
104     virtual void dispatchAfterEnsuringUpdatedScrollPosition(const Function<void ()>&);
105
106 protected:
107     DrawingArea(DrawingAreaType, WebPage*);
108
109     DrawingAreaType m_type;
110     WebPage* m_webPage;
111
112 private:
113     // CoreIPC message handlers.
114     // FIXME: These should be pure virtual.
115     virtual void updateBackingStoreState(uint64_t /*backingStoreStateID*/, bool /*respondImmediately*/, float /*deviceScaleFactor*/, const WebCore::IntSize& /*size*/, 
116                                          const WebCore::IntSize& /*scrollOffset*/) { }
117     virtual void didUpdate() { }
118     virtual void suspendPainting() { }
119     virtual void resumePainting() { }
120     virtual void setLayerHostingMode(uint32_t) { }
121
122 #if PLATFORM(MAC)
123     // Used by TiledCoreAnimationDrawingArea.
124     virtual void updateGeometry(const WebCore::IntSize& viewSize) { }
125     virtual void setDeviceScaleFactor(float) { }
126     virtual void setColorSpace(const ColorSpaceData&) { }
127 #endif
128 };
129
130 } // namespace WebKit
131
132 #endif // DrawingArea_h