12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2011 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef CC_LAYERS_LAYER_IMPL_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CC_LAYERS_LAYER_IMPL_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/logging.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/values.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/animation/layer_animation_controller.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/animation/layer_animation_value_observer.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/base/cc_export.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/base/region.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/base/scoped_ptr_vector.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/input/input_handler.h" 1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "cc/layers/compositing_reasons.h" 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/draw_properties.h" 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "cc/layers/layer_lists.h" 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "cc/layers/layer_position_constraint.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/render_surface_impl.h" 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "cc/output/filter_operations.h" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/quads/render_pass.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/quads/shared_quad_state.h" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/resources/resource_provider.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "skia/ext/refptr.h" 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/skia/include/core/SkColor.h" 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/skia/include/core/SkImageFilter.h" 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/skia/include/core/SkPicture.h" 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/rect.h" 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/rect_f.h" 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/transform.h" 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace base { 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class DictionaryValue; 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LayerTreeHostImpl; 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LayerTreeImpl; 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class QuadSink; 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Renderer; 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ScrollbarAnimationController; 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ScrollbarLayerImpl; 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Layer; 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct AppendQuadsData; 512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 52868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)enum DrawMode { 53868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DRAW_MODE_NONE, 54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DRAW_MODE_HARDWARE, 55868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DRAW_MODE_SOFTWARE, 56868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DRAW_MODE_RESOURCELESS_SOFTWARE 57868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)}; 58868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CC_EXPORT LayerImpl : LayerAnimationValueObserver { 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_ptr<LayerImpl> Create(LayerTreeImpl* tree_impl, int id) { 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return make_scoped_ptr(new LayerImpl(tree_impl, id)); 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~LayerImpl(); 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int id() const { return layer_id_; } 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // LayerAnimationValueObserver implementation. 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnOpacityAnimated(float opacity) OVERRIDE; 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnTransformAnimated(const gfx::Transform& transform) OVERRIDE; 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool IsActive() const OVERRIDE; 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Tree structure. 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LayerImpl* parent() { return parent_; } 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const LayerImpl* parent() const { return parent_; } 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const OwnedLayerImplList& children() const { return children_; } 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OwnedLayerImplList& children() { return children_; } 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LayerImpl* child_at(size_t index) const { return children_[index]; } 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void AddChild(scoped_ptr<LayerImpl> child); 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<LayerImpl> RemoveChild(LayerImpl* child); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_parent(LayerImpl* parent) { parent_ = parent; } 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Warning: This does not preserve tree structure invariants. 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ClearChildList(); 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 8690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void PassCopyRequests(ScopedPtrVector<CopyOutputRequest>* requests); 87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void TakeCopyRequestsAndTransformToTarget( 88eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ScopedPtrVector<CopyOutputRequest>* request); 8990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool HasCopyRequest() const { return !copy_requests_.empty(); } 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetMaskLayer(scoped_ptr<LayerImpl> mask_layer); 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LayerImpl* mask_layer() { return mask_layer_.get(); } 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const LayerImpl* mask_layer() const { return mask_layer_.get(); } 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<LayerImpl> TakeMaskLayer(); 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetReplicaLayer(scoped_ptr<LayerImpl> replica_layer); 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LayerImpl* replica_layer() { return replica_layer_.get(); } 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const LayerImpl* replica_layer() const { return replica_layer_.get(); } 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<LayerImpl> TakeReplicaLayer(); 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool has_mask() const { return mask_layer_; } 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool has_replica() const { return replica_layer_; } 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool replica_has_mask() const { 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return replica_layer_ && (mask_layer_ || replica_layer_->mask_layer_); 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LayerTreeImpl* layer_tree_impl() const { return layer_tree_impl_; } 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<SharedQuadState> CreateSharedQuadState() const; 110868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // WillDraw must be called before AppendQuads. If WillDraw returns false, 111868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // AppendQuads and DidDraw will not be called. If WillDraw returns true, 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // DidDraw is guaranteed to be called before another WillDraw or before 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the layer is destroyed. To enforce this, any class that overrides 114868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // WillDraw/DidDraw must call the base class version only if WillDraw 115868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // returns true. 116868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual bool WillDraw(DrawMode draw_mode, 117868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) ResourceProvider* resource_provider); 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void AppendQuads(QuadSink* quad_sink, 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AppendQuadsData* append_quads_data) {} 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DidDraw(ResourceProvider* resource_provider); 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ResourceProvider::ResourceId ContentsResourceId() const; 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool HasDelegatedContent() const; 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool HasContributingDelegatedRenderPasses() const; 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual RenderPass::Id FirstContributingRenderPassId() const; 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual RenderPass::Id NextContributingRenderPassId(RenderPass::Id id) const; 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void UpdateTilePriorities() {} 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ScrollbarLayerImpl* ToScrollbarLayer(); 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns true if this layer has content to draw. 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetDrawsContent(bool draws_content); 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool DrawsContent() const { return draws_content_; } 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 137eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void SetHideLayerAndSubtree(bool hide); 138eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool hide_layer_and_subtree() const { return hide_layer_and_subtree_; } 139eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool force_render_surface() const { return force_render_surface_; } 1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetForceRenderSurface(bool force) { force_render_surface_ = force; } 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetAnchorPoint(gfx::PointF anchor_point); 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::PointF anchor_point() const { return anchor_point_; } 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetAnchorPointZ(float anchor_point_z); 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float anchor_point_z() const { return anchor_point_z_; } 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetBackgroundColor(SkColor background_color); 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkColor background_color() const { return background_color_; } 151868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // If contents_opaque(), return an opaque color else return a 152868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // non-opaque color. Tries to return background_color(), if possible. 153868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SkColor SafeOpaqueBackgroundColor() const; 1542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 155eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void SetFilters(const FilterOperations& filters); 156eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const FilterOperations& filters() const { return filters_; } 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 158eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void SetBackgroundFilters(const FilterOperations& filters); 159eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const FilterOperations& background_filters() const { 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return background_filters_; 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetFilter(const skia::RefPtr<SkImageFilter>& filter); 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) skia::RefPtr<SkImageFilter> filter() const { return filter_; } 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetMasksToBounds(bool masks_to_bounds); 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool masks_to_bounds() const { return masks_to_bounds_; } 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetContentsOpaque(bool opaque); 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool contents_opaque() const { return contents_opaque_; } 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetOpacity(float opacity); 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float opacity() const { return opacity_; } 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool OpacityIsAnimating() const; 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool OpacityIsAnimatingOnImplOnly() const; 1762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetPosition(gfx::PointF position); 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::PointF position() const { return position_; } 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetIsContainerForFixedPositionLayers(bool container) { 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) is_container_for_fixed_position_layers_ = container; 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // This is a non-trivial function in Layer. 184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool IsContainerForFixedPositionLayers() const { 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return is_container_for_fixed_position_layers_; 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetFixedContainerSizeDelta(gfx::Vector2dF delta) { 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) fixed_container_size_delta_ = delta; 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) gfx::Vector2dF fixed_container_size_delta() const { 192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return fixed_container_size_delta_; 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetPositionConstraint(const LayerPositionConstraint& constraint) { 196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) position_constraint_ = constraint; 197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const LayerPositionConstraint& position_constraint() const { 199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return position_constraint_; 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetPreserves3d(bool preserves_3d); 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool preserves_3d() const { return preserves_3d_; } 2042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetUseParentBackfaceVisibility(bool use) { 2062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) use_parent_backface_visibility_ = use; 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool use_parent_backface_visibility() const { 2092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return use_parent_backface_visibility_; 2102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetSublayerTransform(const gfx::Transform& sublayer_transform); 2132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Transform& sublayer_transform() const { 2142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return sublayer_transform_; 2152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Debug layer name. 2182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetDebugName(const std::string& debug_name) { debug_name_ = debug_name; } 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string debug_name() const { return debug_name_; } 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 22190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void SetCompositingReasons(CompositingReasons reasons) { 22290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) compositing_reasons_ = reasons; 22390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 22490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 22590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CompositingReasons compositing_reasons() const { 22690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return compositing_reasons_; 22790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 22890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool ShowDebugBorders() const; 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // These invalidate the host's render surface layer list. The caller 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // is responsible for calling set_needs_update_draw_properties on the tree 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // so that its list can be recreated. 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void CreateRenderSurface(); 235c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ClearRenderSurface(); 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DrawProperties<LayerImpl, RenderSurfaceImpl>& draw_properties() { 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return draw_properties_; 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const DrawProperties<LayerImpl, RenderSurfaceImpl>& draw_properties() const { 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return draw_properties_; 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The following are shortcut accessors to get various information from 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // draw_properties_ 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Transform& draw_transform() const { 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return draw_properties_.target_space_transform; 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Transform& screen_space_transform() const { 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return draw_properties_.screen_space_transform; 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float draw_opacity() const { return draw_properties_.opacity; } 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool draw_opacity_is_animating() const { 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return draw_properties_.opacity_is_animating; 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool draw_transform_is_animating() const { 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return draw_properties_.target_space_transform_is_animating; 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool screen_space_transform_is_animating() const { 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return draw_properties_.screen_space_transform_is_animating; 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool screen_space_opacity_is_animating() const { 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return draw_properties_.screen_space_opacity_is_animating; 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool can_use_lcd_text() const { return draw_properties_.can_use_lcd_text; } 2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_clipped() const { return draw_properties_.is_clipped; } 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect clip_rect() const { return draw_properties_.clip_rect; } 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect drawable_content_rect() const { 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return draw_properties_.drawable_content_rect; 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect visible_content_rect() const { 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return draw_properties_.visible_content_rect; 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LayerImpl* render_target() { 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!draw_properties_.render_target || 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) draw_properties_.render_target->render_surface()); 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return draw_properties_.render_target; 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const LayerImpl* render_target() const { 2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!draw_properties_.render_target || 2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) draw_properties_.render_target->render_surface()); 2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return draw_properties_.render_target; 2832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderSurfaceImpl* render_surface() const { 285c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return draw_properties_.render_surface.get(); 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The client should be responsible for setting bounds, content bounds and 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // contents scale to appropriate values. LayerImpl doesn't calculate any of 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // them from the other values. 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetBounds(gfx::Size bounds); 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size bounds() const { return bounds_; } 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetContentBounds(gfx::Size content_bounds); 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size content_bounds() const { return draw_properties_.content_bounds; } 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float contents_scale_x() const { return draw_properties_.contents_scale_x; } 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float contents_scale_y() const { return draw_properties_.contents_scale_y; } 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetContentsScale(float contents_scale_x, float contents_scale_y); 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void CalculateContentsScale(float ideal_contents_scale, 303b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) float device_scale_factor, 304b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) float page_scale_factor, 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool animating_transform_to_screen, 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float* contents_scale_x, 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float* contents_scale_y, 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size* content_bounds); 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 310c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetScrollOffsetDelegate( 311c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LayerScrollOffsetDelegate* scroll_offset_delegate); 31274e8edfcf043ca9542cfaea3aa69e6bb2e1054baAlexandre Elias bool IsExternalFlingActive() const; 31374e8edfcf043ca9542cfaea3aa69e6bb2e1054baAlexandre Elias 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetScrollOffset(gfx::Vector2d scroll_offset); 3152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Vector2d scroll_offset() const { return scroll_offset_; } 3162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetMaxScrollOffset(gfx::Vector2d max_scroll_offset); 3182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Vector2d max_scroll_offset() const { return max_scroll_offset_; } 3192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetScrollDelta(gfx::Vector2dF scroll_delta); 321c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) gfx::Vector2dF ScrollDelta() const; 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Vector2dF TotalScrollOffset() const; 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetSentScrollDelta(gfx::Vector2d sent_scroll_delta); 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Vector2d sent_scroll_delta() const { return sent_scroll_delta_; } 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns the delta of the scroll that was outside of the bounds of the 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // initial scroll 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Vector2dF ScrollBy(gfx::Vector2dF scroll); 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetScrollable(bool scrollable) { scrollable_ = scrollable; } 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool scrollable() const { return scrollable_; } 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 335558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch void ApplySentScrollDeltas(); 336558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetShouldScrollOnMainThread(bool should_scroll_on_main_thread) { 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) should_scroll_on_main_thread_ = should_scroll_on_main_thread; 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool should_scroll_on_main_thread() const { 3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return should_scroll_on_main_thread_; 3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetHaveWheelEventHandlers(bool have_wheel_event_handlers) { 3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) have_wheel_event_handlers_ = have_wheel_event_handlers; 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool have_wheel_event_handlers() const { return have_wheel_event_handlers_; } 3482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetNonFastScrollableRegion(const Region& region) { 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) non_fast_scrollable_region_ = region; 3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Region& non_fast_scrollable_region() const { 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return non_fast_scrollable_region_; 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetTouchEventHandlerRegion(const Region& region) { 3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) touch_event_handler_region_ = region; 3582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Region& touch_event_handler_region() const { 3602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return touch_event_handler_region_; 3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetDrawCheckerboardForMissingTiles(bool checkerboard) { 3642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) draw_checkerboard_for_missing_tiles_ = checkerboard; 3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool DrawCheckerboardForMissingTiles() const; 3672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 368c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) InputHandler::ScrollStatus TryScroll( 3692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::PointF screen_space_point, 370c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) InputHandler::ScrollInputType type) const; 3712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetDoubleSided(bool double_sided); 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool double_sided() const { return double_sided_; } 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetTransform(const gfx::Transform& transform); 3762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Transform& transform() const { return transform_; } 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool TransformIsAnimating() const; 3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool TransformIsAnimatingOnImplOnly() const; 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 380c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Note this rect is in layer space (not content space). 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_update_rect(const gfx::RectF& update_rect) { 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) update_rect_ = update_rect; 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::RectF& update_rect() const { return update_rect_; } 3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual base::DictionaryValue* LayerTreeAsJson() const; 3872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetStackingOrderChanged(bool stacking_order_changed); 3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool LayerPropertyChanged() const { 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return layer_property_changed_ || LayerIsAlwaysDamaged(); 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool LayerSurfacePropertyChanged() const; 3942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ResetAllChangeTrackingForSubtree(); 3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool LayerIsAlwaysDamaged() const; 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LayerAnimationController* layer_animation_controller() { 4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return layer_animation_controller_.get(); 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual Region VisibleContentOpaqueRegion() const; 4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DidBecomeActive(); 4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 407868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) virtual void DidBeginTracing(); 408868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) 4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Indicates that the surface previously used to render this layer 4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // was lost and that a new one has been created. Won't be called 4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // until the new surface has been created successfully. 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void DidLoseOutputSurface(); 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScrollbarAnimationController* scrollbar_animation_controller() const { 4152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return scrollbar_animation_controller_.get(); 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetScrollbarOpacity(float opacity); 4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetHorizontalScrollbarLayer(ScrollbarLayerImpl* scrollbar_layer); 4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScrollbarLayerImpl* horizontal_scrollbar_layer() { 4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return horizontal_scrollbar_layer_; 4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetVerticalScrollbarLayer(ScrollbarLayerImpl* scrollbar_layer); 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScrollbarLayerImpl* vertical_scrollbar_layer() { 4272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return vertical_scrollbar_layer_; 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect LayerRectToContentRect(const gfx::RectF& layer_rect) const; 4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual skia::RefPtr<SkPicture> GetPicture(); 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool CanClipSelf() const; 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool AreVisibleResourcesReady() const; 4372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl); 4392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void PushPropertiesTo(LayerImpl* layer); 4402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 441b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) scoped_ptr<base::Value> AsValue() const; 44290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual size_t GPUMemoryUsageInBytes() const; 4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // TODO(danakj): Be true only if needed. crbug.com/259511 4457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool needs_push_properties() const { return true; } 4467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool descendant_needs_push_properties() const { return true; } 4477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LayerImpl(LayerTreeImpl* layer_impl, int id); 4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Get the color and size of the layer's debug border. 4522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void GetDebugBorderProperties(SkColor* color, float* width) const; 4532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void AppendDebugBorderQuad(QuadSink* quad_sink, 4552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const SharedQuadState* shared_quad_state, 4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AppendQuadsData* append_quads_data) const; 45790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void AppendDebugBorderQuad(QuadSink* quad_sink, 45890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) const SharedQuadState* shared_quad_state, 45990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) AppendQuadsData* append_quads_data, 46090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) SkColor color, 46190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) float width) const; 4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 463b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) virtual void AsValueInto(base::DictionaryValue* dict) const; 4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void NoteLayerSurfacePropertyChanged(); 4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void NoteLayerPropertyChanged(); 4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void NoteLayerPropertyChangedForSubtree(); 4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Note carefully this does not affect the current layer. 4702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void NoteLayerPropertyChangedForDescendants(); 4712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void UpdateScrollbarPositions(); 4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual const char* LayerTypeAsString() const; 4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Properties internal to LayerImpl 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LayerImpl* parent_; 479c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) OwnedLayerImplList children_; 4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // mask_layer_ can be temporarily stolen during tree sync, we need this ID to 4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // confirm newly assigned layer is still the previous one 4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int mask_layer_id_; 4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<LayerImpl> mask_layer_; 4842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int replica_layer_id_; // ditto 4852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<LayerImpl> replica_layer_; 4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int layer_id_; 4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LayerTreeImpl* layer_tree_impl_; 4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Properties synchronized from the associated Layer. 4902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::PointF anchor_point_; 4912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float anchor_point_z_; 4922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size bounds_; 4932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Vector2d scroll_offset_; 494c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LayerScrollOffsetDelegate* scroll_offset_delegate_; 4952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool scrollable_; 4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool should_scroll_on_main_thread_; 4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool have_wheel_event_handlers_; 4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Region non_fast_scrollable_region_; 4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Region touch_event_handler_region_; 5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkColor background_color_; 5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool stacking_order_changed_; 5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Whether the "back" of this layer should draw. 5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool double_sided_; 5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Tracks if drawing-related properties have changed since last redraw. 5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool layer_property_changed_; 5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Indicates that a property has changed on this layer that would not 5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // affect the pixels on its target surface, but would require redrawing 5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // the target_surface onto its ancestor target_surface. 5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // For layers that do not own a surface this flag acts as 5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // layer_property_changed_. 5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool layer_surface_property_changed_; 5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool masks_to_bounds_; 5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool contents_opaque_; 5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float opacity_; 5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::PointF position_; 5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool preserves_3d_; 5212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool use_parent_backface_visibility_; 5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool draw_checkerboard_for_missing_tiles_; 5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Transform sublayer_transform_; 5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Transform transform_; 5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool draws_content_; 527eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool hide_layer_and_subtree_; 5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool force_render_surface_; 5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set for the layer that other layers are fixed to. 5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_container_for_fixed_position_layers_; 532c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // This property is effective when 533c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // is_container_for_fixed_position_layers_ == true, 534c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) gfx::Vector2dF fixed_container_size_delta_; 535c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 536c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LayerPositionConstraint position_constraint_; 5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Vector2dF scroll_delta_; 5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Vector2d sent_scroll_delta_; 5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Vector2d max_scroll_offset_; 5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Vector2dF last_scroll_offset_; 5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The global depth value of the center of the layer. This value is used 5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // to sort layers from back to front. 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float draw_depth_; 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Debug layer name. 5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string debug_name_; 54990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CompositingReasons compositing_reasons_; 5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 551eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FilterOperations filters_; 552eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FilterOperations background_filters_; 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) skia::RefPtr<SkImageFilter> filter_; 5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 555868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) protected: 556868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) DrawMode current_draw_mode_; 5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 558868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) private: 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Rect indicating what was repainted/updated during update. 5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Note that plugin layers bypass this and leave it empty. 5612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Uses layer's content space. 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::RectF update_rect_; 5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Manages animations for this layer. 5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<LayerAnimationController> layer_animation_controller_; 5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Manages scrollbars for this layer 5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<ScrollbarAnimationController> scrollbar_animation_controller_; 5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Weak pointers to this layer's scrollbars, if it has them. Updated during 5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // tree synchronization. 5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScrollbarLayerImpl* horizontal_scrollbar_layer_; 5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ScrollbarLayerImpl* vertical_scrollbar_layer_; 5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 57590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ScopedPtrVector<CopyOutputRequest> copy_requests_; 576c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Group of properties that need to be computed based on the layer tree 5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // hierarchy before layers can be drawn. 5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DrawProperties<LayerImpl, RenderSurfaceImpl> draw_properties_; 5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(LayerImpl); 5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 584c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace cc 5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CC_LAYERS_LAYER_IMPL_H_ 587