[chromium] Change WebLayer from a concrete type to a pure virtual interface
[WebKit-https.git] / Source / WebKit / chromium / src / NonCompositedContentHost.h
1 /*
2  * Copyright (C) 2011 Google 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  *
8  * 1.  Redistributions of source code must retain the above copyright
9  *     notice, this list of conditions and the following disclaimer.
10  * 2.  Redistributions in binary form must reproduce the above copyright
11  *     notice, this list of conditions and the following disclaimer in the
12  *     documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17  * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
18  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
20  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
21  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
23  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef NonCompositedContentHost_h
27 #define NonCompositedContentHost_h
28
29 #include "GraphicsLayerClient.h"
30 #include "IntSize.h"
31
32 #include <public/WebLayer.h>
33 #include <wtf/Noncopyable.h>
34 #include <wtf/OwnPtr.h>
35 #include <wtf/PassOwnPtr.h>
36
37 namespace WebCore {
38 class Color;
39 class GraphicsLayer;
40 class GraphicsContext;
41 class IntPoint;
42 class IntRect;
43 }
44
45 namespace WebKit {
46 class WebViewImpl;
47
48 class NonCompositedContentHost : public WebCore::GraphicsLayerClient {
49 WTF_MAKE_NONCOPYABLE(NonCompositedContentHost);
50 public:
51     static PassOwnPtr<NonCompositedContentHost> create(WebViewImpl* webView)
52     {
53         return adoptPtr(new NonCompositedContentHost(webView));
54     }
55     virtual ~NonCompositedContentHost();
56
57     void invalidateRect(const WebCore::IntRect&);
58     void setBackgroundColor(const WebCore::Color&);
59     void setOpaque(bool);
60     void setScrollLayer(WebCore::GraphicsLayer*);
61     void setViewport(const WebCore::IntSize& viewportSize, const WebCore::IntSize& contentsSize, const WebCore::IntPoint& scrollPosition, const WebCore::IntPoint& scrollOrigin, float deviceScale);
62     WebCore::GraphicsLayer* topLevelRootLayer() const { return m_graphicsLayer.get(); }
63
64     void setShowDebugBorders(bool);
65
66 protected:
67     explicit NonCompositedContentHost(WebViewImpl*);
68
69 private:
70     // GraphicsLayerClient
71     virtual void notifyAnimationStarted(const WebCore::GraphicsLayer*, double time);
72     virtual void notifySyncRequired(const WebCore::GraphicsLayer*);
73     virtual void paintContents(const WebCore::GraphicsLayer*, WebCore::GraphicsContext&, WebCore::GraphicsLayerPaintingPhase, const WebCore::IntRect& clipRect);
74     virtual bool showDebugBorders(const WebCore::GraphicsLayer*) const;
75     virtual bool showRepaintCounter(const WebCore::GraphicsLayer*) const;
76     // The deviceScaleFactor given to the GraphicsLayer can be non-1 when the
77     // contents are scaled in the compositor instead of by the pageScaleFactor.
78     // However, the pageScaleFactor is always baked into the GraphicsLayer's
79     // size, so it is always 1 for the GraphicsLayer.
80     virtual float deviceScaleFactor() const OVERRIDE { return m_deviceScaleFactor; }
81
82     bool haveScrollLayer();
83     WebLayer* scrollLayer();
84
85     OwnPtr<WebCore::GraphicsLayer> m_graphicsLayer;
86     WebViewImpl* m_webView;
87     WebCore::IntSize m_viewportSize;
88     WebCore::IntSize m_layerAdjust;
89
90     bool m_opaque;
91     bool m_showDebugBorders;
92     float m_deviceScaleFactor;
93 };
94
95 } // namespace WebKit
96
97 #endif // NonCompositedContentHost_h