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 | #pragma once |
27 | |
28 | #include "TiledBacking.h" |
29 | #include <wtf/Forward.h> |
30 | |
31 | namespace WebCore { |
32 | |
33 | class FloatPoint; |
34 | class FloatRect; |
35 | class GraphicsContext; |
36 | class GraphicsLayer; |
37 | class IntPoint; |
38 | class IntRect; |
39 | class TransformationMatrix; |
40 | |
41 | enum GraphicsLayerPaintingPhaseFlags { |
42 | GraphicsLayerPaintBackground = 1 << 0, |
43 | GraphicsLayerPaintForeground = 1 << 1, |
44 | GraphicsLayerPaintMask = 1 << 2, |
45 | GraphicsLayerPaintClipPath = 1 << 3, |
46 | GraphicsLayerPaintOverflowContents = 1 << 4, |
47 | GraphicsLayerPaintCompositedScroll = 1 << 5, |
48 | GraphicsLayerPaintChildClippingMask = 1 << 6, |
49 | GraphicsLayerPaintAllWithOverflowClip = GraphicsLayerPaintBackground | GraphicsLayerPaintForeground |
50 | }; |
51 | typedef uint8_t GraphicsLayerPaintingPhase; |
52 | |
53 | enum AnimatedPropertyID { |
54 | AnimatedPropertyInvalid, |
55 | AnimatedPropertyTransform, |
56 | AnimatedPropertyOpacity, |
57 | AnimatedPropertyBackgroundColor, |
58 | AnimatedPropertyFilter, |
59 | #if ENABLE(FILTERS_LEVEL_2) |
60 | AnimatedPropertyWebkitBackdropFilter, |
61 | #endif |
62 | }; |
63 | |
64 | enum LayerTreeAsTextBehaviorFlags { |
65 | LayerTreeAsTextBehaviorNormal = 0, |
66 | LayerTreeAsTextDebug = 1 << 0, // Dump extra debugging info like layer addresses. |
67 | LayerTreeAsTextIncludeVisibleRects = 1 << 1, |
68 | LayerTreeAsTextIncludeTileCaches = 1 << 2, |
69 | LayerTreeAsTextIncludeRepaintRects = 1 << 3, |
70 | LayerTreeAsTextIncludePaintingPhases = 1 << 4, |
71 | LayerTreeAsTextIncludeContentLayers = 1 << 5, |
72 | LayerTreeAsTextIncludePageOverlayLayers = 1 << 6, |
73 | LayerTreeAsTextIncludeAcceleratesDrawing = 1 << 7, |
74 | LayerTreeAsTextIncludeBackingStoreAttached = 1 << 8, |
75 | LayerTreeAsTextIncludeRootLayerProperties = 1 << 9, |
76 | LayerTreeAsTextIncludeEventRegion = 1 << 10, |
77 | LayerTreeAsTextShowAll = 0xFFFF |
78 | }; |
79 | typedef unsigned LayerTreeAsTextBehavior; |
80 | |
81 | enum GraphicsLayerPaintFlags { |
82 | GraphicsLayerPaintNormal = 0, |
83 | GraphicsLayerPaintSnapshotting = 1 << 0, |
84 | GraphicsLayerPaintFirstTilePaint = 1 << 1, |
85 | }; |
86 | typedef unsigned GraphicsLayerPaintBehavior; |
87 | |
88 | class GraphicsLayerClient { |
89 | public: |
90 | virtual ~GraphicsLayerClient() = default; |
91 | |
92 | virtual void tiledBackingUsageChanged(const GraphicsLayer*, bool /*usingTiledBacking*/) { } |
93 | |
94 | // Callback for when hardware-accelerated animation started. |
95 | virtual void notifyAnimationStarted(const GraphicsLayer*, const String& /*animationKey*/, MonotonicTime /*time*/) { } |
96 | virtual void notifyAnimationEnded(const GraphicsLayer*, const String& /*animationKey*/) { } |
97 | |
98 | // Notification that a layer property changed that requires a subsequent call to flushCompositingState() |
99 | // to appear on the screen. |
100 | virtual void notifyFlushRequired(const GraphicsLayer*) { } |
101 | |
102 | // Notification that this layer requires a flush before the next display refresh. |
103 | virtual void notifyFlushBeforeDisplayRefresh(const GraphicsLayer*) { } |
104 | |
105 | virtual void paintContents(const GraphicsLayer*, GraphicsContext&, GraphicsLayerPaintingPhase, const FloatRect& /* inClip */, GraphicsLayerPaintBehavior) { } |
106 | virtual void didChangePlatformLayerForLayer(const GraphicsLayer*) { } |
107 | |
108 | // Provides current transform (taking transform-origin and animations into account). Input matrix has been |
109 | // initialized to identity already. Returns false if the layer has no transform. |
110 | virtual bool getCurrentTransform(const GraphicsLayer*, TransformationMatrix&) const { return false; } |
111 | |
112 | // Allows the client to modify a layer position used during the visibleRect calculation, for example to ignore |
113 | // scroll overhang. |
114 | virtual void customPositionForVisibleRectComputation(const GraphicsLayer*, FloatPoint&) const { } |
115 | |
116 | // Multiplier for backing store size, related to high DPI. |
117 | virtual float deviceScaleFactor() const { return 1; } |
118 | // Page scale factor. |
119 | virtual float pageScaleFactor() const { return 1; } |
120 | virtual float zoomedOutPageScaleFactor() const { return 0; } |
121 | |
122 | virtual float contentsScaleMultiplierForNewTiles(const GraphicsLayer*) const { return 1; } |
123 | virtual bool paintsOpaquelyAtNonIntegralScales(const GraphicsLayer*) const { return false; } |
124 | |
125 | virtual bool isTrackingRepaints() const { return false; } |
126 | |
127 | virtual bool shouldSkipLayerInDump(const GraphicsLayer*, LayerTreeAsTextBehavior) const { return false; } |
128 | virtual bool shouldDumpPropertyForLayer(const GraphicsLayer*, const char*, LayerTreeAsTextBehavior) const { return true; } |
129 | |
130 | virtual bool shouldAggressivelyRetainTiles(const GraphicsLayer*) const { return false; } |
131 | virtual bool shouldTemporarilyRetainTileCohorts(const GraphicsLayer*) const { return true; } |
132 | |
133 | virtual bool useGiantTiles() const { return false; } |
134 | |
135 | virtual bool needsPixelAligment() const { return false; } |
136 | |
137 | virtual bool needsIOSDumpRenderTreeMainFrameRenderViewLayerIsAlwaysOpaqueHack(const GraphicsLayer&) const { return false; } |
138 | |
139 | virtual void logFilledVisibleFreshTile(unsigned) { }; |
140 | |
141 | #ifndef NDEBUG |
142 | // RenderLayerBacking overrides this to verify that it is not |
143 | // currently painting contents. An ASSERT fails, if it is. |
144 | // This is executed in GraphicsLayer construction and destruction |
145 | // to verify that we don't create or destroy GraphicsLayers |
146 | // while painting. |
147 | virtual void verifyNotPainting() { } |
148 | #endif |
149 | }; |
150 | |
151 | } // namespace WebCore |
152 | |
153 | |