Use NeverDestroyed instead of DEPRECATED_DEFINE_STATIC_LOCAL
[WebKit-https.git] / Source / WebCore / platform / graphics / GraphicsLayerClient.h
1 /*
2  * Copyright (C) 2009 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. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #ifndef GraphicsLayerClient_h
27 #define GraphicsLayerClient_h
28
29 #include "IntSize.h"
30 #include "TiledBacking.h"
31 #include <wtf/Forward.h>
32
33 namespace WebCore {
34
35 class FloatPoint;
36 class FloatRect;
37 class GraphicsContext;
38 class GraphicsLayer;
39 class IntPoint;
40 class IntRect;
41 class TransformationMatrix;
42
43 enum GraphicsLayerPaintingPhaseFlags {
44     GraphicsLayerPaintBackground            = 1 << 0,
45     GraphicsLayerPaintForeground            = 1 << 1,
46     GraphicsLayerPaintMask                  = 1 << 2,
47     GraphicsLayerPaintClipPath              = 1 << 3,
48     GraphicsLayerPaintOverflowContents      = 1 << 4,
49     GraphicsLayerPaintCompositedScroll      = 1 << 5,
50     GraphicsLayerPaintChildClippingMask     = 1 << 6,
51     GraphicsLayerPaintAllWithOverflowClip   = GraphicsLayerPaintBackground | GraphicsLayerPaintForeground
52 };
53 typedef unsigned GraphicsLayerPaintingPhase;
54
55 enum AnimatedPropertyID {
56     AnimatedPropertyInvalid,
57     AnimatedPropertyTransform,
58     AnimatedPropertyOpacity,
59     AnimatedPropertyBackgroundColor,
60     AnimatedPropertyFilter
61 #if ENABLE(FILTERS_LEVEL_2)
62     , AnimatedPropertyWebkitBackdropFilter
63 #endif
64 };
65
66 enum LayerTreeAsTextBehaviorFlags {
67     LayerTreeAsTextBehaviorNormal               = 0,
68     LayerTreeAsTextDebug                        = 1 << 0, // Dump extra debugging info like layer addresses.
69     LayerTreeAsTextIncludeVisibleRects          = 1 << 1,
70     LayerTreeAsTextIncludeTileCaches            = 1 << 2,
71     LayerTreeAsTextIncludeRepaintRects          = 1 << 3,
72     LayerTreeAsTextIncludePaintingPhases        = 1 << 4,
73     LayerTreeAsTextIncludeContentLayers         = 1 << 5,
74     LayerTreeAsTextIncludePageOverlayLayers     = 1 << 6,
75 };
76 typedef unsigned LayerTreeAsTextBehavior;
77
78 class GraphicsLayerClient {
79 public:
80     virtual ~GraphicsLayerClient() {}
81
82     virtual void tiledBackingUsageChanged(const GraphicsLayer*, bool /*usingTiledBacking*/) { }
83     
84     // Callback for when hardware-accelerated animation started.
85     virtual void notifyAnimationStarted(const GraphicsLayer*, const String& /*animationKey*/, double /*time*/) { }
86     virtual void notifyAnimationEnded(const GraphicsLayer*, const String& /*animationKey*/) { }
87
88     // Notification that a layer property changed that requires a subsequent call to flushCompositingState()
89     // to appear on the screen.
90     virtual void notifyFlushRequired(const GraphicsLayer*) { }
91     
92     // Notification that this layer requires a flush before the next display refresh.
93     virtual void notifyFlushBeforeDisplayRefresh(const GraphicsLayer*) { }
94
95     virtual void paintContents(const GraphicsLayer*, GraphicsContext&, GraphicsLayerPaintingPhase, const FloatRect& /* inClip */) { }
96     virtual void didCommitChangesForLayer(const GraphicsLayer*) const { }
97
98     // Provides current transform (taking transform-origin and animations into account). Input matrix has been
99     // initialized to identity already. Returns false if the layer has no transform.
100     virtual bool getCurrentTransform(const GraphicsLayer*, TransformationMatrix&) const { return false; }
101
102     // Allows the client to modify a layer position used during the visibleRect calculation, for example to ignore
103     // scroll overhang.
104     virtual void customPositionForVisibleRectComputation(const GraphicsLayer*, FloatPoint&) const { }
105
106     // Multiplier for backing store size, related to high DPI.
107     virtual float deviceScaleFactor() const { return 1; }
108     // Page scale factor.
109     virtual float pageScaleFactor() const { return 1; }
110     virtual float zoomedOutPageScaleFactor() const { return 0; }
111
112     virtual float contentsScaleMultiplierForNewTiles(const GraphicsLayer*) const { return 1; }
113     virtual bool paintsOpaquelyAtNonIntegralScales(const GraphicsLayer*) const { return false; }
114
115     virtual bool isTrackingRepaints() const { return false; }
116
117     virtual bool shouldSkipLayerInDump(const GraphicsLayer*, LayerTreeAsTextBehavior) const { return false; }
118     virtual bool shouldDumpPropertyForLayer(const GraphicsLayer*, const char*) const { return true; }
119
120     virtual bool shouldAggressivelyRetainTiles(const GraphicsLayer*) const { return false; }
121     virtual bool shouldTemporarilyRetainTileCohorts(const GraphicsLayer*) const { return true; }
122
123     virtual IntSize tileSize() const { return defaultTileSize(); }
124
125     virtual bool needsPixelAligment() const { return false; }
126
127     virtual bool needsIOSDumpRenderTreeMainFrameRenderViewLayerIsAlwaysOpaqueHack(const GraphicsLayer&) const { return false; }
128
129 #ifndef NDEBUG
130     // RenderLayerBacking overrides this to verify that it is not
131     // currently painting contents. An ASSERT fails, if it is.
132     // This is executed in GraphicsLayer construction and destruction
133     // to verify that we don't create or destroy GraphicsLayers
134     // while painting.
135     virtual void verifyNotPainting() { }
136 #endif
137 };
138
139 } // namespace WebCore
140
141 #endif // GraphicsLayerClient_h