12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2010 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_H_ 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define CC_LAYERS_LAYER_H_ 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 83551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include <set> 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include <string> 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/callback.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/ref_counted.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/observer_list.h" 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/animation/layer_animation_controller.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/animation/layer_animation_value_observer.h" 16a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)#include "cc/animation/layer_animation_value_provider.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/base/cc_export.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/base/region.h" 1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "cc/base/scoped_ptr_vector.h" 204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "cc/debug/micro_benchmark.h" 2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "cc/layers/compositing_reasons.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/draw_properties.h" 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "cc/layers/layer_lists.h" 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "cc/layers/layer_position_constraint.h" 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "cc/layers/paint_properties.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/layers/render_surface.h" 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "cc/output/filter_operations.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "cc/trees/occlusion_tracker.h" 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "skia/ext/refptr.h" 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/skia/include/core/SkColor.h" 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "third_party/skia/include/core/SkImageFilter.h" 323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)#include "third_party/skia/include/core/SkPicture.h" 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "third_party/skia/include/core/SkXfermode.h" 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/rect.h" 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/rect_f.h" 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/gfx/transform.h" 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 383551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)namespace gfx { 393551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class BoxF; 403551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)} 413551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 42a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)namespace base { 43a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)namespace debug { 44a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)class ConvertableToTraceFormat; 45a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 46a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)} 47a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace cc { 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class Animation; 51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass AnimationDelegate; 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct AnimationEvent; 5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class CopyOutputRequest; 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LayerAnimationDelegate; 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class LayerAnimationEventObserver; 563551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class LayerClient; 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LayerImpl; 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LayerTreeHost; 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class LayerTreeImpl; 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class PriorityCalculator; 61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class RenderingStatsInstrumentation; 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class ResourceUpdateQueue; 6358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)class ScrollbarLayerInterface; 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)struct AnimationEvent; 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Base class for composited layers. Special layer types are derived from 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// this class. 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class CC_EXPORT Layer : public base::RefCounted<Layer>, 69a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public LayerAnimationValueObserver, 70a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) public LayerAnimationValueProvider { 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 728bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) typedef RenderSurfaceLayerList RenderSurfaceListType; 738bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) typedef LayerList LayerListType; 748bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) typedef RenderSurface RenderSurfaceType; 758bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) enum LayerIdLabels { 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) INVALID_ID = -1, 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) }; 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static scoped_refptr<Layer> Create(); 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int id() const { return layer_id_; } 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Layer* RootLayer(); 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Layer* parent() { return parent_; } 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Layer* parent() const { return parent_; } 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void AddChild(scoped_refptr<Layer> child); 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void InsertChild(scoped_refptr<Layer> child, size_t index); 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void ReplaceChild(Layer* reference, scoped_refptr<Layer> new_layer); 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void RemoveFromParent(); 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void RemoveAllChildren(); 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetChildren(const LayerList& children); 9358e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch bool HasAncestor(const Layer* ancestor) const; 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const LayerList& children() const { return children_; } 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Layer* child_at(size_t index) { return children_[index].get(); } 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 9890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // This requests the layer and its subtree be rendered and given to the 9990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // callback. If the copy is unable to be produced (the layer is destroyed 10090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // first), then the callback is called with a NULL/empty result. 10190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void RequestCopyOfOutput(scoped_ptr<CopyOutputRequest> request); 10290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) bool HasCopyRequest() const { 10390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return !copy_requests_.empty(); 104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetAnchorPoint(gfx::PointF anchor_point); 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::PointF anchor_point() const { return anchor_point_; } 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetAnchorPointZ(float anchor_point_z); 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float anchor_point_z() const { return anchor_point_z_; } 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetBackgroundColor(SkColor background_color); 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkColor background_color() const { return background_color_; } 114868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // If contents_opaque(), return an opaque color else return a 115868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) // non-opaque color. Tries to return background_color(), if possible. 116868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) SkColor SafeOpaqueBackgroundColor() const; 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // A layer's bounds are in logical, non-page-scaled pixels (however, the 1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // root layer's bounds are in physical pixels). 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetBounds(gfx::Size bounds); 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size bounds() const { return bounds_; } 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetMasksToBounds(bool masks_to_bounds); 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool masks_to_bounds() const { return masks_to_bounds_; } 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetMaskLayer(Layer* mask_layer); 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Layer* mask_layer() { return mask_layer_.get(); } 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Layer* mask_layer() const { return mask_layer_.get(); } 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetNeedsDisplayRect(const gfx::RectF& dirty_rect); 1312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetNeedsDisplay() { SetNeedsDisplayRect(gfx::RectF(bounds())); } 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetOpacity(float opacity); 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float opacity() const { return opacity_; } 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool OpacityIsAnimating() const; 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool OpacityCanAnimateOnImplThread() const; 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void SetBlendMode(SkXfermode::Mode blend_mode); 139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SkXfermode::Mode blend_mode() const { return blend_mode_; } 140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool uses_default_blend_mode() const { 142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return blend_mode_ == SkXfermode::kSrcOver_Mode; 143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // A layer is root for an isolated group when it and all its descendants are 146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // drawn over a black and fully transparent background, creating an isolated 147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // group. It should be used along with SetBlendMode(), in order to restrict 148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // layers within the group to blend with layers outside this group. 149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void SetIsRootForIsolatedGroup(bool root); 150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool is_root_for_isolated_group() const { 151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return is_root_for_isolated_group_; 152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 153f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 154eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void SetFilters(const FilterOperations& filters); 155eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const FilterOperations& filters() const { return filters_; } 1564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) bool FilterIsAnimating() const; 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Background filters are filters applied to what is behind this layer, when 1592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // they are viewed through non-opaque regions in this layer. They are used 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // through the WebLayer interface, and are not exposed to HTML. 161eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void SetBackgroundFilters(const FilterOperations& filters); 162eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const FilterOperations& background_filters() const { 1632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return background_filters_; 1642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetContentsOpaque(bool opaque); 1672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool contents_opaque() const { return contents_opaque_; } 1682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetPosition(gfx::PointF position); 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::PointF position() const { return position_; } 1712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetIsContainerForFixedPositionLayers(bool container); 173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) bool IsContainerForFixedPositionLayers() const; 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 175c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetPositionConstraint(const LayerPositionConstraint& constraint); 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const LayerPositionConstraint& position_constraint() const { 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return position_constraint_; 178c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetSublayerTransform(const gfx::Transform& sublayer_transform); 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Transform& sublayer_transform() const { 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return sublayer_transform_; 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetTransform(const gfx::Transform& transform); 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Transform& transform() const { return transform_; } 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool TransformIsAnimating() const; 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) void SetScrollParent(Layer* parent); 1903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) Layer* scroll_parent() { return scroll_parent_; } 1923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const Layer* scroll_parent() const { return scroll_parent_; } 1933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) void AddScrollChild(Layer* child); 1953551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) void RemoveScrollChild(Layer* child); 1963551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 1973551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::set<Layer*>* scroll_children() { return scroll_children_.get(); } 1983551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::set<Layer*>* scroll_children() const { 1993551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return scroll_children_.get(); 2003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 2013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) void SetClipParent(Layer* ancestor); 2033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) Layer* clip_parent() { return clip_parent_; } 2053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const Layer* clip_parent() const { 2063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return clip_parent_; 2073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 2083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2093551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) void AddClipChild(Layer* child); 2103551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) void RemoveClipChild(Layer* child); 2113551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2123551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) std::set<Layer*>* clip_children() { return clip_children_.get(); } 2133551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) const std::set<Layer*>* clip_children() const { 2143551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return clip_children_.get(); 2153551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 2163551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 2178bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) DrawProperties<Layer>& draw_properties() { return draw_properties_; } 2188bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) const DrawProperties<Layer>& draw_properties() const { 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return draw_properties_; 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The following are shortcut accessors to get various information from 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // draw_properties_ 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Transform& draw_transform() const { 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return draw_properties_.target_space_transform; 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const gfx::Transform& screen_space_transform() const { 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return draw_properties_.screen_space_transform; 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float draw_opacity() const { return draw_properties_.opacity; } 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool draw_opacity_is_animating() const { 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return draw_properties_.opacity_is_animating; 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool draw_transform_is_animating() const { 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return draw_properties_.target_space_transform_is_animating; 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool screen_space_transform_is_animating() const { 2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return draw_properties_.screen_space_transform_is_animating; 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool screen_space_opacity_is_animating() const { 2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return draw_properties_.screen_space_opacity_is_animating; 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool can_use_lcd_text() const { return draw_properties_.can_use_lcd_text; } 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool is_clipped() const { return draw_properties_.is_clipped; } 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect clip_rect() const { return draw_properties_.clip_rect; } 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect drawable_content_rect() const { 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return draw_properties_.drawable_content_rect; 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect visible_content_rect() const { 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return draw_properties_.visible_content_rect; 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Layer* render_target() { 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!draw_properties_.render_target || 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) draw_properties_.render_target->render_surface()); 2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return draw_properties_.render_target; 2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Layer* render_target() const { 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DCHECK(!draw_properties_.render_target || 2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) draw_properties_.render_target->render_surface()); 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return draw_properties_.render_target; 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) RenderSurface* render_surface() const { 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return draw_properties_.render_surface.get(); 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 265424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) int num_unclipped_descendants() const { 266424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) return draw_properties_.num_unclipped_descendants; 267424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) } 2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetScrollOffset(gfx::Vector2d scroll_offset); 2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Vector2d scroll_offset() const { return scroll_offset_; } 271868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) void SetScrollOffsetFromImplSide(gfx::Vector2d scroll_offset); 2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetMaxScrollOffset(gfx::Vector2d max_scroll_offset); 2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Vector2d max_scroll_offset() const { return max_scroll_offset_; } 2752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetScrollable(bool scrollable); 2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool scrollable() const { return scrollable_; } 2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2798bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) void SetUserScrollable(bool horizontal, bool vertical); 2808bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) bool user_scrollable_horizontal() const { 2818bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) return user_scrollable_horizontal_; 2828bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) } 2838bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) bool user_scrollable_vertical() const { return user_scrollable_vertical_; } 2848bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) 2852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetShouldScrollOnMainThread(bool should_scroll_on_main_thread); 2862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool should_scroll_on_main_thread() const { 2872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return should_scroll_on_main_thread_; 2882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetHaveWheelEventHandlers(bool have_wheel_event_handlers); 2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool have_wheel_event_handlers() const { return have_wheel_event_handlers_; } 2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetNonFastScrollableRegion(const Region& non_fast_scrollable_region); 2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Region& non_fast_scrollable_region() const { 2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return non_fast_scrollable_region_; 2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetTouchEventHandlerRegion(const Region& touch_event_handler_region); 2992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Region& touch_event_handler_region() const { 3002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return touch_event_handler_region_; 3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 303eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void set_did_scroll_callback(const base::Closure& callback) { 304eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch did_scroll_callback_ = callback; 3052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetDrawCheckerboardForMissingTiles(bool checkerboard); 3082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool DrawCheckerboardForMissingTiles() const { 3092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return draw_checkerboard_for_missing_tiles_; 3102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetForceRenderSurface(bool force_render_surface); 3132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool force_render_surface() const { return force_render_surface_; } 3142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 315c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) gfx::Vector2d ScrollDelta() const { return gfx::Vector2d(); } 3167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch gfx::Vector2dF TotalScrollOffset() const { 3177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Floating point to match the LayerImpl version. 3187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return scroll_offset() + ScrollDelta(); 3197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 3202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetDoubleSided(bool double_sided); 3222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool double_sided() const { return double_sided_; } 3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetPreserves3d(bool preserves_3d) { preserves_3d_ = preserves_3d; } 3252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool preserves_3d() const { return preserves_3d_; } 3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_use_parent_backface_visibility(bool use) { 3282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) use_parent_backface_visibility_ = use; 3292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool use_parent_backface_visibility() const { 3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return use_parent_backface_visibility_; 3322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetLayerTreeHost(LayerTreeHost* host); 3352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool HasDelegatedContent() const { return false; } 3372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool HasContributingDelegatedRenderPasses() const { return false; } 3382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetIsDrawable(bool is_drawable); 3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 341eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void SetHideLayerAndSubtree(bool hide); 342eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool hide_layer_and_subtree() const { return hide_layer_and_subtree_; } 343eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetReplicaLayer(Layer* layer); 3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Layer* replica_layer() { return replica_layer_.get(); } 3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const Layer* replica_layer() const { return replica_layer_.get(); } 3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 348868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) bool has_mask() const { return !!mask_layer_.get(); } 349868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) bool has_replica() const { return !!replica_layer_.get(); } 3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool replica_has_mask() const { 351868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) return replica_layer_.get() && 352868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) (mask_layer_.get() || replica_layer_->mask_layer_.get()); 3532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 3542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // These methods typically need to be overwritten by derived classes. 3562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool DrawsContent() const; 357c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) virtual void SavePaintProperties(); 3587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // Returns true iff any resources were updated that need to be committed. 3597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch virtual bool Update(ResourceUpdateQueue* queue, 3607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch const OcclusionTracker* occlusion); 3612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool NeedMoreUpdates(); 3622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetIsMask(bool is_mask) {} 36390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void ReduceMemoryUsage() {} 3644e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void OnOutputSurfaceCreated() {} 3652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3663551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual std::string DebugName(); 367a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual scoped_refptr<base::debug::ConvertableToTraceFormat> TakeDebugInfo(); 3683551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 3693551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) void SetLayerClient(LayerClient* client) { client_ = client; } 3703551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 37190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) void SetCompositingReasons(CompositingReasons reasons); 3722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void PushPropertiesTo(LayerImpl* layer); 3742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void CreateRenderSurface(); 376c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void ClearRenderSurface(); 3772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The contents scale converts from logical, non-page-scaled pixels to target 3792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // pixels. The contents scale is 1 for the root layer as it is already in 3802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // physical pixels. By default contents scale is forced to be 1 except for 3812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // subclasses of ContentsScalingLayer. 3822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float contents_scale_x() const { return draw_properties_.contents_scale_x; } 3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float contents_scale_y() const { return draw_properties_.contents_scale_y; } 3842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size content_bounds() const { return draw_properties_.content_bounds; } 3852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void CalculateContentsScale(float ideal_contents_scale, 387b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) float device_scale_factor, 388b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) float page_scale_factor, 3892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool animating_transform_to_screen, 3902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float* contents_scale_x, 3912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float* contents_scale_y, 3922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size* content_bounds); 3932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 394424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) LayerTreeHost* layer_tree_host() { return layer_tree_host_; } 395424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) const LayerTreeHost* layer_tree_host() const { return layer_tree_host_; } 3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 3972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Set the priority of all desired textures in this layer. 3982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetTexturePriorities(const PriorityCalculator& priority_calc) {} 3992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool AddAnimation(scoped_ptr<Animation> animation); 4012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void PauseAnimation(int animation_id, double time_offset); 4022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void RemoveAnimation(int animation_id); 4032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) bool AnimatedBoundsForBox(const gfx::BoxF& box, gfx::BoxF* bounds) { 4053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) return layer_animation_controller_->AnimatedBoundsForBox(box, bounds); 4063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) } 4073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LayerAnimationController* layer_animation_controller() { 4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return layer_animation_controller_.get(); 4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 411c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void SetLayerAnimationControllerForTest( 4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<LayerAnimationController> controller); 4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 414eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void set_layer_animation_delegate(AnimationDelegate* delegate) { 415c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) layer_animation_controller_->set_layer_animation_delegate(delegate); 4162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 4172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool HasActiveAnimation() const; 4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void AddLayerAnimationEventObserver( 4212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LayerAnimationEventObserver* animation_observer); 4222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void RemoveLayerAnimationEventObserver( 4232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LayerAnimationEventObserver* animation_observer); 4242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual Region VisibleContentOpaqueRegion() const; 4262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 42758537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles) virtual ScrollbarLayerInterface* ToScrollbarLayer(); 4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Rect LayerRectToContentRect(const gfx::RectF& layer_rect) const; 4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4313551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) virtual skia::RefPtr<SkPicture> GetPicture() const; 4323551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Constructs a LayerImpl of the correct runtime type for this Layer type. 4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual scoped_ptr<LayerImpl> CreateLayerImpl(LayerTreeImpl* tree_impl); 4352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 436a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) bool NeedsDisplayForTesting() const { return !update_rect_.IsEmpty(); } 437a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) void ResetNeedsDisplayForTesting() { update_rect_ = gfx::RectF(); } 4382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 439c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) RenderingStatsInstrumentation* rendering_stats_instrumentation() const; 440c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 441c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const PaintProperties& paint_properties() const { 442c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return paint_properties_; 443c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 444c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 445b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // The scale at which contents should be rastered, to match the scale at 446b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // which they will drawn to the screen. This scale is a component of the 447b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // contents scale but does not include page/device scale factors. 448b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) // TODO(danakj): This goes away when TiledLayer goes away. 449b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) void set_raster_scale(float scale) { raster_scale_ = scale; } 450b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) float raster_scale() const { return raster_scale_; } 451b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) bool raster_scale_is_unknown() const { return raster_scale_ == 0.f; } 452b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 45390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual bool SupportsLCDText() const; 45490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 4557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool needs_push_properties() const { return needs_push_properties_; } 4567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool descendant_needs_push_properties() const { 4577dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return num_dependents_need_push_properties_ > 0; 4587dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 4597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 4604e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void RunMicroBenchmark(MicroBenchmark* benchmark); 4614e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class LayerImpl; 4642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class TreeSynchronizer; 4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~Layer(); 4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Layer(); 4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 469558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // These SetNeeds functions are in order of severity of update: 470558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // 471558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // Called when this layer has been modified in some way, but isn't sure 472558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // that it needs a commit yet. It needs CalcDrawProperties and UpdateLayers 473558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // before it knows whether or not a commit is required. 474558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch void SetNeedsUpdate(); 475558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // Called when a property has been modified in a way that the layer 476558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // knows immediately that a commit is required. This implies SetNeedsUpdate 477558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // as well as SetNeedsPushProperties to push that property. 4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetNeedsCommit(); 479558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // Called when there's been a change in layer structure. Implies both 480558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // SetNeedsUpdate and SetNeedsCommit, but not SetNeedsPushProperties. 4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetNeedsFullTreeSync(); 482424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 483424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // Called when the next commit should wait until the pending tree is activated 484424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // before finishing the commit and unblocking the main thread. Used to ensure 485424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) // unused resources on the impl thread are returned before commit completes. 486424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) void SetNextCommitWaitsForActivation(); 4872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 488f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Called when the blend mode or filters have been changed. 489f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) void SetNeedsFilterContextIfNeeded(); 490f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 4917dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void SetNeedsPushProperties(); 4927dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void AddDependentNeedsPushProperties(); 4937dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch void RemoveDependentNeedsPushProperties(); 4947dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool parent_should_know_need_push_properties() const { 4957dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch return needs_push_properties() || descendant_needs_push_properties(); 4967dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch } 4977dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 498424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) bool IsPropertyChangeAllowed() const; 499424c4d7b64af9d0d8fd9624f381f469654d5e3d2Torne (Richard Coles) 5003551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // If this layer has a scroll parent, it removes |this| from its list of 5013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // scroll children. 5023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) void RemoveFromScrollTree(); 5033551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 5043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // If this layer has a clip parent, it removes |this| from its list of clip 5053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) // children. 5063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) void RemoveFromClipTree(); 5073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 508b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) void reset_raster_scale_to_unknown() { raster_scale_ = 0.f; } 509b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles) 5107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // This flag is set when the layer needs to push properties to the impl 5117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // side. 5127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch bool needs_push_properties_; 5137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 5147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // The number of direct children or dependent layers that need to be recursed 5157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // to in order for them or a descendent of them to push properties to the impl 5167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch // side. 5177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch int num_dependents_need_push_properties_; 5187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch 5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Tracks whether this layer may have changed stacking order with its 5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // siblings. 5212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool stacking_order_changed_; 5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // The update rect is the region of the compositor resource that was 5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // actually updated by the compositor. For layers that may do updating 5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // outside the compositor's control (i.e. plugin layers), this information 5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // is not available and the update rect will remain empty. 5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Note this rect is in layer space (not content space). 5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::RectF update_rect_; 5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<Layer> mask_layer_; 5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int layer_id_; 5332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // When true, the layer is about to perform an update. Any commit requests 535558790d6acca3451cf3a6b497803a5f07d0bec58Ben Murdoch // will be handled implicitly after the update completes. 5362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool ignore_set_needs_commit_; 5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) friend class base::RefCounted<Layer>; 5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void SetParent(Layer* layer); 5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) bool DescendantIsFixedToContainerLayer() const; 5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Returns the index of the child or -1 if not found. 5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int IndexOfChild(const Layer* reference); 5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This should only be called from RemoveFromParent(). 5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void RemoveChildOrDependent(Layer* child); 5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 550a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) // LayerAnimationValueProvider implementation. 551a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual gfx::Vector2dF ScrollOffsetForAnimation() const OVERRIDE; 552a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) 5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // LayerAnimationValueObserver implementation. 5544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void OnFilterAnimated(const FilterOperations& filters) OVERRIDE; 5552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnOpacityAnimated(float opacity) OVERRIDE; 5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void OnTransformAnimated(const gfx::Transform& transform) OVERRIDE; 557a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) virtual void OnScrollOffsetAnimated(gfx::Vector2dF scroll_offset) OVERRIDE; 558f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void OnAnimationWaitingForDeletion() OVERRIDE; 5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool IsActive() const OVERRIDE; 5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LayerList children_; 5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Layer* parent_; 5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Layer instances have a weak pointer to their LayerTreeHost. 5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // This pointer value is nil when a Layer is not in a tree and is 5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // updated via SetLayerTreeHost() if a layer moves between trees. 5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) LayerTreeHost* layer_tree_host_; 5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<LayerAnimationController> layer_animation_controller_; 5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Layer properties. 5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Size bounds_; 5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Vector2d scroll_offset_; 5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Vector2d max_scroll_offset_; 576a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool scrollable_ : 1; 577a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool should_scroll_on_main_thread_ : 1; 578a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool have_wheel_event_handlers_ : 1; 579a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool user_scrollable_horizontal_ : 1; 580a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool user_scrollable_vertical_ : 1; 581a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool is_root_for_isolated_group_ : 1; 582a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool is_container_for_fixed_position_layers_ : 1; 583a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool is_drawable_ : 1; 584a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool hide_layer_and_subtree_ : 1; 585a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool masks_to_bounds_ : 1; 586a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool contents_opaque_ : 1; 587a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool double_sided_ : 1; 588a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool preserves_3d_ : 1; 589a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool use_parent_backface_visibility_ : 1; 590a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool draw_checkerboard_for_missing_tiles_ : 1; 591a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) bool force_render_surface_ : 1; 5922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Region non_fast_scrollable_region_; 5932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Region touch_event_handler_region_; 5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::PointF position_; 5952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::PointF anchor_point_; 5962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) SkColor background_color_; 59790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) CompositingReasons compositing_reasons_; 5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float opacity_; 599f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) SkXfermode::Mode blend_mode_; 600eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FilterOperations filters_; 601eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch FilterOperations background_filters_; 6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float anchor_point_z_; 603c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) LayerPositionConstraint position_constraint_; 6043551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) Layer* scroll_parent_; 6053551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) scoped_ptr<std::set<Layer*> > scroll_children_; 6063551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 6073551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) Layer* clip_parent_; 6083551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) scoped_ptr<std::set<Layer*> > clip_children_; 6092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Transform transform_; 6112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) gfx::Transform sublayer_transform_; 6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Replica layer used for reflections. 6142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<Layer> replica_layer_; 6152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Transient properties. 6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) float raster_scale_; 6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6193551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) LayerClient* client_; 6203551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) 62190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ScopedPtrVector<CopyOutputRequest> copy_requests_; 6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 623eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::Closure did_scroll_callback_; 6242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6258bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) DrawProperties<Layer> draw_properties_; 6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 627c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) PaintProperties paint_properties_; 628c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 6292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(Layer); 6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 6312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace cc 6332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 6342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif // CC_LAYERS_LAYER_H_ 635