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 WebLayerTreeView_h 27 #define WebLayerTreeView_h 28 29 #include "WebColor.h" 30 #include "WebCommon.h" 31 #include "WebFloatPoint.h" 32 #include "WebNonCopyable.h" 33 #include "WebPrivateOwnPtr.h" 34 #include "WebSize.h" 35 36 class SkBitmap; 37 38 namespace blink { 39 class WebCompositeAndReadbackAsyncCallback; 40 class WebGraphicsContext3D; 41 class WebLayer; 42 struct WebPoint; 43 struct WebRect; 44 struct WebRenderingStats; 45 46 class WebLayerTreeView { 47 public: ~WebLayerTreeView()48 virtual ~WebLayerTreeView() { } 49 50 // Initialization and lifecycle -------------------------------------- 51 52 // Indicates that the compositing surface used by this WebLayerTreeView is ready to use. 53 // A WebLayerTreeView may request a context from its client before the surface is ready, 54 // but it won't attempt to use it. 55 virtual void setSurfaceReady() = 0; 56 57 // Sets the root of the tree. The root is set by way of the constructor. 58 virtual void setRootLayer(const WebLayer&) = 0; 59 virtual void clearRootLayer() = 0; 60 61 62 // View properties --------------------------------------------------- 63 64 virtual void setViewportSize(const WebSize& deviceViewportSize) = 0; 65 // Gives the viewport size in physical device pixels. 66 virtual WebSize deviceViewportSize() const = 0; 67 68 virtual void setDeviceScaleFactor(float) = 0; 69 virtual float deviceScaleFactor() const = 0; 70 71 // Sets the background color for the viewport. 72 virtual void setBackgroundColor(WebColor) = 0; 73 74 // Sets the background transparency for the viewport. The default is 'false'. 75 virtual void setHasTransparentBackground(bool) = 0; 76 77 // Sets the overhang gutter bitmap. setOverhangBitmap(const SkBitmap &)78 virtual void setOverhangBitmap(const SkBitmap&) { } 79 80 // Sets whether this view is visible. In threaded mode, a view that is not visible will not 81 // composite or trigger updateAnimations() or layout() calls until it becomes visible. 82 virtual void setVisible(bool) = 0; 83 84 // Sets the current page scale factor and minimum / maximum limits. Both limits are initially 1 (no page scale allowed). 85 virtual void setPageScaleFactorAndLimits(float pageScaleFactor, float minimum, float maximum) = 0; 86 87 // Starts an animation of the page scale to a target scale factor and scroll offset. 88 // If useAnchor is true, destination is a point on the screen that will remain fixed for the duration of the animation. 89 // If useAnchor is false, destination is the final top-left scroll position. 90 virtual void startPageScaleAnimation(const WebPoint& destination, bool useAnchor, float newPageScale, double durationSec) = 0; 91 heuristicsForGpuRasterizationUpdated(bool)92 virtual void heuristicsForGpuRasterizationUpdated(bool) { } 93 94 95 // Flow control and scheduling --------------------------------------- 96 97 // Indicates that an animation needs to be updated. 98 virtual void setNeedsAnimate() = 0; 99 100 // Indicates whether a commit is pending. 101 virtual bool commitRequested() const = 0; 102 103 // Relays the end of a fling animation. didStopFlinging()104 virtual void didStopFlinging() { } 105 106 // The caller is responsible for keeping the WebCompositeAndReadbackAsyncCallback 107 // object alive until it is called. compositeAndReadbackAsync(WebCompositeAndReadbackAsyncCallback *)108 virtual void compositeAndReadbackAsync(WebCompositeAndReadbackAsyncCallback*) { } 109 110 // Blocks until the most recently composited frame has finished rendering on the GPU. 111 // This can have a significant performance impact and should be used with care. 112 virtual void finishAllRendering() = 0; 113 114 // Prevents updates to layer tree from becoming visible. setDeferCommits(bool deferCommits)115 virtual void setDeferCommits(bool deferCommits) { } 116 117 // Take responsiblity for this layer's animations, even if this layer hasn't yet 118 // been added to the tree. registerForAnimations(WebLayer * layer)119 virtual void registerForAnimations(WebLayer* layer) { } 120 121 // Identify key layers to the compositor when using the pinch virtual viewport. registerViewportLayers(const WebLayer * pageScaleLayerLayer,const WebLayer * innerViewportScrollLayer,const WebLayer * outerViewportScrollLayer)122 virtual void registerViewportLayers( 123 const WebLayer* pageScaleLayerLayer, 124 const WebLayer* innerViewportScrollLayer, 125 const WebLayer* outerViewportScrollLayer) { } clearViewportLayers()126 virtual void clearViewportLayers() { } 127 128 // Debugging / dangerous --------------------------------------------- 129 130 // Toggles the FPS counter in the HUD layer setShowFPSCounter(bool)131 virtual void setShowFPSCounter(bool) { } 132 133 // Toggles the paint rects in the HUD layer setShowPaintRects(bool)134 virtual void setShowPaintRects(bool) { } 135 136 // Toggles the debug borders on layers setShowDebugBorders(bool)137 virtual void setShowDebugBorders(bool) { } 138 139 // Toggles continuous painting setContinuousPaintingEnabled(bool)140 virtual void setContinuousPaintingEnabled(bool) { } 141 142 // Toggles scroll bottleneck rects on the HUD layer setShowScrollBottleneckRects(bool)143 virtual void setShowScrollBottleneckRects(bool) { } 144 }; 145 146 } // namespace blink 147 148 #endif // WebLayerTreeView_h 149