2010-07-01 Simon Fraser <simon.fraser@apple.com>
[WebKit-https.git] / WebKit2 / UIProcess / LayerBackedDrawingAreaProxy.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 LayerBackedDrawingAreaProxy_h
27 #define LayerBackedDrawingAreaProxy_h
28
29 #if USE(ACCELERATED_COMPOSITING)
30
31 #include "DrawingAreaProxy.h"
32 #include <WebCore/IntSize.h>
33
34 #if PLATFORM(MAC)
35 #include <wtf/RetainPtr.h>
36 #ifdef __OBJC__
37 @class CALayer;
38 @class WKView;
39 #else
40 class CALayer;
41 class WKView;
42 #endif
43 #endif
44
45 namespace WebKit {
46
47 class WebPageProxy;
48
49 #if PLATFORM(MAC)
50 typedef WKView PlatformWebView;
51 #elif PLATFORM(WIN)
52 class WebView;
53 typedef WebView PlatformWebView;
54 #endif
55
56 class LayerBackedDrawingAreaProxy : public DrawingAreaProxy {
57 public:
58     LayerBackedDrawingAreaProxy(PlatformWebView*);
59     virtual ~LayerBackedDrawingAreaProxy();
60
61     // The DrawingAreaProxy should never be decoded itself. Instead, the DrawingArea should be decoded.
62     virtual void encode(CoreIPC::ArgumentEncoder& encoder) const
63     {
64         DrawingAreaProxy::encode(encoder);
65     }
66
67 private:
68     WebPageProxy* page();
69
70     // DrawingAreaProxy
71     virtual void didReceiveMessage(CoreIPC::Connection*, CoreIPC::MessageID, CoreIPC::ArgumentDecoder&);
72     virtual void paint(const WebCore::IntRect&, PlatformDrawingContext);
73     virtual void setSize(const WebCore::IntSize&);
74     virtual void setPageIsVisible(bool isVisible);
75
76     virtual void attachCompositingContext(uint32_t contextID);
77     virtual void detachCompositingContext();
78     
79     void didSetSize();
80     void update();
81     
82     void platformSetSize();
83
84     bool m_isWaitingForDidSetFrameNotification;
85     bool m_isVisible;
86
87     WebCore::IntSize m_viewSize; // Size of the BackingStore as well.
88     WebCore::IntSize m_lastSetViewSize;
89
90 #if PLATFORM(MAC)
91     RetainPtr<CALayer> m_compositingRootLayer;
92 #endif
93
94     PlatformWebView* m_webView;
95 };
96     
97 } // namespace WebKit
98
99 #endif // USE(ACCELERATED_COMPOSITING)
100
101 #endif // LayerBackedDrawingAreaProxy_h