blob: f573d8e30e93a5717e699197f1766832e27420d7 [file] [log] [blame]
[email protected]036e6c972012-01-03 18:48:051// Copyright (c) 2012 The Chromium Authors. All rights reserved.
[email protected]adc93fa72011-06-21 19:47:392// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
[email protected]116302fc2012-05-05 21:45:415#ifndef UI_COMPOSITOR_LAYER_H_
6#define UI_COMPOSITOR_LAYER_H_
[email protected]adc93fa72011-06-21 19:47:397
avi87b8b582015-12-24 21:35:258#include <stddef.h>
9
[email protected]33699e622011-11-17 18:29:3010#include <string>
[email protected]adc93fa72011-06-21 19:47:3911#include <vector>
12
[email protected]7fca53d42011-09-29 15:38:1213#include "base/compiler_specific.h"
avi87b8b582015-12-24 21:35:2514#include "base/macros.h"
[email protected]51f1b482011-06-23 16:52:1215#include "base/memory/ref_counted.h"
[email protected]7fca53d42011-09-29 15:38:1216#include "base/memory/scoped_ptr.h"
[email protected]4e2d03e22013-07-18 04:19:5417#include "base/message_loop/message_loop.h"
danakj0b5eae6c2015-04-24 22:35:1118#include "cc/base/region.h"
[email protected]cc3cfaa2013-03-18 09:05:5219#include "cc/layers/content_layer_client.h"
[email protected]29e17b02013-08-30 02:13:3320#include "cc/layers/layer_client.h"
jbaumandbccae1ab2014-11-06 23:26:4421#include "cc/layers/surface_layer.h"
[email protected]cc3cfaa2013-03-18 09:05:5222#include "cc/layers/texture_layer_client.h"
[email protected]42f40a52013-06-08 04:38:5123#include "cc/resources/texture_mailbox.h"
[email protected]ca2c3ea2014-07-26 19:35:3024#include "cc/surfaces/surface_id.h"
[email protected]116302fc2012-05-05 21:45:4125#include "third_party/skia/include/core/SkColor.h"
26#include "third_party/skia/include/core/SkRegion.h"
27#include "ui/compositor/compositor.h"
28#include "ui/compositor/layer_animation_delegate.h"
29#include "ui/compositor/layer_delegate.h"
loyso1fe980f2016-01-18 23:58:1530#include "ui/compositor/layer_threaded_animation_delegate.h"
[email protected]116302fc2012-05-05 21:45:4131#include "ui/compositor/layer_type.h"
tfarina3b0452d2014-12-31 15:20:0932#include "ui/gfx/geometry/rect.h"
hshi270f6222015-03-17 21:18:3433#include "ui/gfx/image/image_skia.h"
[email protected]adc93fa72011-06-21 19:47:3934#include "ui/gfx/transform.h"
35
[email protected]892ad8a2011-07-27 02:47:2236class SkCanvas;
[email protected]adc93fa72011-06-21 19:47:3937
[email protected]ec05af52012-11-21 23:07:0038namespace cc {
39class ContentLayer;
[email protected]a7fcdda32013-07-04 02:23:0740class CopyOutputRequest;
[email protected]09f67382013-10-09 21:03:4541class DelegatedFrameProvider;
[email protected]b14d40d2013-03-06 03:53:2742class DelegatedRendererLayer;
[email protected]ec05af52012-11-21 23:07:0043class Layer;
[email protected]98a59132014-07-16 22:49:5244class NinePatchLayer;
[email protected]ec05af52012-11-21 23:07:0045class ResourceUpdateQueue;
46class SolidColorLayer;
[email protected]ca2c3ea2014-07-26 19:35:3047class SurfaceLayer;
[email protected]ec05af52012-11-21 23:07:0048class TextureLayer;
[email protected]e00bab022013-08-19 00:42:4549struct ReturnedResource;
50typedef std::vector<ReturnedResource> ReturnedResourceArray;
[email protected]ec05af52012-11-21 23:07:0051}
52
[email protected]adc93fa72011-06-21 19:47:3953namespace ui {
54
55class Compositor;
[email protected]fe7074c62011-10-28 15:22:5456class LayerAnimator;
[email protected]07ae973e2014-03-05 18:51:1057class LayerOwner;
[email protected]adc93fa72011-06-21 19:47:3958
59// Layer manages a texture, transform and a set of child Layers. Any View that
60// has enabled layers ends up creating a Layer to manage the texture.
[email protected]28cd2bb2011-09-19 21:04:1961// A Layer can also be created without a texture, in which case it renders
62// nothing and is simply used as a node in a hierarchy of layers.
[email protected]cd9a61c72012-05-08 19:16:5963// Coordinate system used in layers is DIP (Density Independent Pixel)
64// coordinates unless explicitly mentioned as pixel coordinates.
[email protected]adc93fa72011-06-21 19:47:3965//
[email protected]ae2202a2014-01-07 11:11:1066// NOTE: Unlike Views, each Layer does *not* own its child Layers. If you
67// delete a Layer and it has children, the parent of each child Layer is set to
[email protected]adc93fa72011-06-21 19:47:3968// NULL, but the children are not deleted.
[email protected]2700daddd2012-07-13 19:35:3769class COMPOSITOR_EXPORT Layer
70 : public LayerAnimationDelegate,
loyso1fe980f2016-01-18 23:58:1571 public LayerThreadedAnimationDelegate,
[email protected]ec05af52012-11-21 23:07:0072 NON_EXPORTED_BASE(public cc::ContentLayerClient),
[email protected]bf912272013-02-23 01:54:1673 NON_EXPORTED_BASE(public cc::TextureLayerClient),
loyso1fbd9f92015-12-17 07:43:1374 NON_EXPORTED_BASE(public cc::LayerClient) {
[email protected]adc93fa72011-06-21 19:47:3975 public:
[email protected]7ab3f272011-11-16 00:51:5676 Layer();
77 explicit Layer(LayerType type);
dcheng08038792014-10-21 10:53:2678 ~Layer() override;
[email protected]adc93fa72011-06-21 19:47:3979
loysoa6edaaff2015-05-25 03:26:4480 static const cc::LayerSettings& UILayerSettings();
81 static void InitializeUILayerSettings();
82
[email protected]993d6b322011-09-27 19:14:3883 // Retrieves the Layer's compositor. The Layer will walk up its parent chain
84 // to locate it. Returns NULL if the Layer is not attached to a compositor.
sky6dd206092014-10-29 17:26:1685 Compositor* GetCompositor() {
86 return const_cast<Compositor*>(
87 const_cast<const Layer*>(this)->GetCompositor());
88 }
89 const Compositor* GetCompositor() const;
[email protected]993d6b322011-09-27 19:14:3890
91 // Called by the compositor when the Layer is set as its root Layer. This can
92 // only ever be called on the root layer.
loysoac008462015-05-27 01:05:5093 void SetCompositor(Compositor* compositor,
94 scoped_refptr<cc::Layer> root_layer);
95 void ResetCompositor();
[email protected]993d6b322011-09-27 19:14:3896
[email protected]00b86982011-09-01 00:02:0997 LayerDelegate* delegate() { return delegate_; }
98 void set_delegate(LayerDelegate* delegate) { delegate_ = delegate; }
99
[email protected]07ae973e2014-03-05 18:51:10100 LayerOwner* owner() { return owner_; }
101
[email protected]adc93fa72011-06-21 19:47:39102 // Adds a new Layer to this Layer.
103 void Add(Layer* child);
104
105 // Removes a Layer from this Layer.
106 void Remove(Layer* child);
107
[email protected]5e4e61f2011-11-22 16:55:24108 // Stacks |child| above all other children.
109 void StackAtTop(Layer* child);
[email protected]18dab372011-10-03 21:21:44110
[email protected]ebc335f2011-11-23 00:43:51111 // Stacks |child| directly above |other|. Both must be children of this
112 // layer. Note that if |child| is initially stacked even higher, calling this
113 // method will result in |child| being lowered in the stacking order.
[email protected]5e4e61f2011-11-22 16:55:24114 void StackAbove(Layer* child, Layer* other);
[email protected]62dd7ea2011-11-08 15:51:47115
[email protected]44c6f8d2011-12-27 23:49:04116 // Stacks |child| below all other children.
117 void StackAtBottom(Layer* child);
118
119 // Stacks |child| directly below |other|. Both must be children of this
120 // layer.
121 void StackBelow(Layer* child, Layer* other);
122
[email protected]adc93fa72011-06-21 19:47:39123 // Returns the child Layers.
[email protected]25ae9a12011-10-12 14:55:22124 const std::vector<Layer*>& children() const { return children_; }
[email protected]adc93fa72011-06-21 19:47:39125
126 // The parent.
127 const Layer* parent() const { return parent_; }
128 Layer* parent() { return parent_; }
129
[email protected]036e6c972012-01-03 18:48:05130 LayerType type() const { return type_; }
131
[email protected]ad7258912011-08-29 20:33:53132 // Returns true if this Layer contains |other| somewhere in its children.
133 bool Contains(const Layer* other) const;
134
[email protected]fe7074c62011-10-28 15:22:54135 // The layer's animator is responsible for causing automatic animations when
136 // properties are set. It also manages a queue of pending animations and
137 // handles blending of animations. The layer takes ownership of the animator.
138 void SetAnimator(LayerAnimator* animator);
139
140 // Returns the layer's animator. Creates a default animator of one has not
141 // been set. Will not return NULL.
142 LayerAnimator* GetAnimator();
[email protected]7fca53d42011-09-29 15:38:12143
[email protected]adc93fa72011-06-21 19:47:39144 // The transform, relative to the parent.
[email protected]0f0453e2012-10-14 18:15:35145 void SetTransform(const gfx::Transform& transform);
[email protected]712f4b642013-03-14 07:09:15146 gfx::Transform transform() const;
[email protected]fe7074c62011-10-28 15:22:54147
loysoac008462015-05-27 01:05:50148 gfx::PointF position() const { return cc_layer_->position(); }
149
[email protected]fe7074c62011-10-28 15:22:54150 // Return the target transform if animator is running, or the current
151 // transform otherwise.
[email protected]0f0453e2012-10-14 18:15:35152 gfx::Transform GetTargetTransform() const;
[email protected]adc93fa72011-06-21 19:47:39153
154 // The bounds, relative to the parent.
[email protected]c155c252011-07-29 16:17:55155 void SetBounds(const gfx::Rect& bounds);
[email protected]adc93fa72011-06-21 19:47:39156 const gfx::Rect& bounds() const { return bounds_; }
weiliangca032f93b2015-07-13 22:39:47157 const gfx::Size& size() const { return bounds_.size(); }
[email protected]adc93fa72011-06-21 19:47:39158
[email protected]ea2910152014-06-10 12:32:35159 // The offset from our parent (stored in bounds.origin()) is an integer but we
160 // may need to be at a fractional pixel offset to align properly on screen.
a.berwalb98996a2015-05-04 08:28:37161 void SetSubpixelPositionOffset(const gfx::Vector2dF& offset);
[email protected]e09c592ff2014-07-17 06:55:07162 const gfx::Vector2dF& subpixel_position_offset() const {
163 return subpixel_position_offset_;
164 }
[email protected]ea2910152014-06-10 12:32:35165
[email protected]5ba9d5f2011-10-20 01:58:33166 // Return the target bounds if animator is running, or the current bounds
167 // otherwise.
168 gfx::Rect GetTargetBounds() const;
169
[email protected]7adee632012-03-15 19:15:08170 // Sets/gets whether or not drawing of child layers should be clipped to the
171 // bounds of this layer.
172 void SetMasksToBounds(bool masks_to_bounds);
173 bool GetMasksToBounds() const;
174
[email protected]7fca53d42011-09-29 15:38:12175 // The opacity of the layer. The opacity is applied to each pixel of the
176 // texture (resulting alpha = opacity * alpha).
[email protected]bf912272013-02-23 01:54:16177 float opacity() const;
[email protected]7fca53d42011-09-29 15:38:12178 void SetOpacity(float opacity);
179
[email protected]fb4d9d12012-08-24 00:44:54180 // Returns the actual opacity, which the opacity of this layer multipled by
181 // the combined opacity of the parent.
182 float GetCombinedOpacity() const;
183
[email protected]2a6c5672012-04-23 19:37:09184 // Blur pixels by this amount in anything below the layer and visible through
185 // the layer.
186 int background_blur() const { return background_blur_radius_; }
187 void SetBackgroundBlur(int blur_radius);
188
[email protected]e5da6622012-05-30 19:58:16189 // Saturate all pixels of this layer by this amount.
[email protected]815d0c382012-07-21 08:13:44190 // This effect will get "combined" with the inverted,
191 // brightness and grayscale setting.
[email protected]e5da6622012-05-30 19:58:16192 float layer_saturation() const { return layer_saturation_; }
193 void SetLayerSaturation(float saturation);
194
195 // Change the brightness of all pixels from this layer by this amount.
[email protected]815d0c382012-07-21 08:13:44196 // This effect will get "combined" with the inverted, saturate
197 // and grayscale setting.
[email protected]e5da6622012-05-30 19:58:16198 float layer_brightness() const { return layer_brightness_; }
199 void SetLayerBrightness(float brightness);
200
[email protected]815d0c382012-07-21 08:13:44201 // Return the target brightness if animator is running, or the current
202 // brightness otherwise.
203 float GetTargetBrightness() const;
204
205 // Change the grayscale of all pixels from this layer by this amount.
206 // This effect will get "combined" with the inverted, saturate
207 // and brightness setting.
208 float layer_grayscale() const { return layer_grayscale_; }
209 void SetLayerGrayscale(float grayscale);
210
211 // Return the target grayscale if animator is running, or the current
212 // grayscale otherwise.
213 float GetTargetGrayscale() const;
214
[email protected]56322be2013-03-13 18:27:37215 // Zoom the background by a factor of |zoom|. The effect is blended along the
216 // edge across |inset| pixels.
217 void SetBackgroundZoom(float zoom, int inset);
[email protected]77f7c132012-11-15 06:52:54218
[email protected]fbb145c2014-04-16 19:21:28219 // Set the shape of this layer.
jackhou1d1fa232014-09-11 01:18:41220 SkRegion* alpha_shape() const { return alpha_shape_.get(); }
[email protected]fbb145c2014-04-16 19:21:28221 void SetAlphaShape(scoped_ptr<SkRegion> region);
222
[email protected]f48075d2012-05-24 11:06:51223 // Invert the layer.
[email protected]e5da6622012-05-30 19:58:16224 bool layer_inverted() const { return layer_inverted_; }
225 void SetLayerInverted(bool inverted);
[email protected]f48075d2012-05-24 11:06:51226
[email protected]3f1f5e6a2011-11-11 15:09:02227 // Return the target opacity if animator is running, or the current opacity
[email protected]fe7074c62011-10-28 15:22:54228 // otherwise.
229 float GetTargetOpacity() const;
230
[email protected]498e623c2012-07-12 21:12:42231 // Set a layer mask for a layer.
232 // Note the provided layer mask can neither have a layer mask itself nor can
[email protected]c0dc4b172014-01-07 11:24:09233 // it have any children. The ownership of |layer_mask| will not be
234 // transferred with this call.
[email protected]498e623c2012-07-12 21:12:42235 // Furthermore: A mask layer can only be set to one layer.
[email protected]c0dc4b172014-01-07 11:24:09236 void SetMaskLayer(Layer* layer_mask);
237 Layer* layer_mask_layer() { return layer_mask_; }
[email protected]498e623c2012-07-12 21:12:42238
[email protected]e4e8afef2011-10-05 13:58:33239 // Sets the visibility of the Layer. A Layer may be visible but not
240 // drawn. This happens if any ancestor of a Layer is not visible.
[email protected]993d6b322011-09-27 19:14:38241 void SetVisible(bool visible);
[email protected]f941f47a2011-10-15 18:44:51242 bool visible() const { return visible_; }
[email protected]3aa43942011-09-13 20:59:53243
[email protected]a67935f2012-02-10 14:26:24244 // Returns the target visibility if the animator is running. Otherwise, it
245 // returns the current visibility.
246 bool GetTargetVisibility() const;
247
[email protected]e4e8afef2011-10-05 13:58:33248 // Returns true if this Layer is drawn. A Layer is drawn only if all ancestors
249 // are visible.
250 bool IsDrawn() const;
251
[email protected]c1f67302011-09-27 14:18:09252 // Returns true if this layer can have a texture (has_texture_ is true)
253 // and is not completely obscured by a child.
[email protected]332749032011-10-22 00:32:46254 bool ShouldDraw() const;
[email protected]c1f67302011-09-27 14:18:09255
[email protected]ad7258912011-08-29 20:33:53256 // Converts a point from the coordinates of |source| to the coordinates of
257 // |target|. Necessarily, |source| and |target| must inhabit the same Layer
258 // tree.
259 static void ConvertPointToLayer(const Layer* source,
260 const Layer* target,
261 gfx::Point* point);
262
[email protected]bdcf3bbf2013-03-25 18:39:03263 // Converts a transform to be relative to the given |ancestor|. Returns
264 // whether success (that is, whether the given ancestor was really an
265 // ancestor of this layer).
266 bool GetTargetTransformRelativeTo(const Layer* ancestor,
267 gfx::Transform* transform) const;
268
[email protected]c155c252011-07-29 16:17:55269 // See description in View for details
270 void SetFillsBoundsOpaquely(bool fills_bounds_opaquely);
271 bool fills_bounds_opaquely() const { return fills_bounds_opaquely_; }
272
[email protected]1d96e032014-03-25 05:59:08273 // Set to true if this layer always paints completely within its bounds. If so
274 // we can omit an unnecessary clear, even if the layer is transparent.
275 void SetFillsBoundsCompletely(bool fills_bounds_completely);
276
[email protected]33699e622011-11-17 18:29:30277 const std::string& name() const { return name_; }
278 void set_name(const std::string& name) { name_ = name; }
279
[email protected]42f40a52013-06-08 04:38:51280 // Set new TextureMailbox for this layer. Note that |mailbox| may hold a
281 // shared memory resource or an actual mailbox for a texture.
[email protected]9260757f2013-09-17 01:24:16282 void SetTextureMailbox(const cc::TextureMailbox& mailbox,
283 scoped_ptr<cc::SingleReleaseCallback> release_callback,
[email protected]4508b152014-04-09 22:14:17284 gfx::Size texture_size_in_dip);
285 void SetTextureSize(gfx::Size texture_size_in_dip);
achaulk01137b82015-01-30 01:03:05286 void SetTextureFlipped(bool flipped);
287 bool TextureFlipped() const;
[email protected]42f40a52013-06-08 04:38:51288
[email protected]09f67382013-10-09 21:03:45289 // Begins showing delegated frames from the |frame_provider|.
290 void SetShowDelegatedContent(cc::DelegatedFrameProvider* frame_provider,
291 gfx::Size frame_size_in_dip);
[email protected]b14d40d2013-03-06 03:53:27292
[email protected]ca2c3ea2014-07-26 19:35:30293 // Begins showing content from a surface with a particular id.
jbaumandbccae1ab2014-11-06 23:26:44294 void SetShowSurface(cc::SurfaceId surface_id,
295 const cc::SurfaceLayer::SatisfyCallback& satisfy_callback,
296 const cc::SurfaceLayer::RequireCallback& require_callback,
jbauman5a8f0ab2014-11-07 01:41:16297 gfx::Size surface_size,
jbaumanb71b07c22014-11-13 01:10:34298 float scale,
jbaumandbccae1ab2014-11-06 23:26:44299 gfx::Size frame_size_in_dip);
[email protected]ca2c3ea2014-07-26 19:35:30300
[email protected]a7fcdda32013-07-04 02:23:07301 bool has_external_content() {
[email protected]ca2c3ea2014-07-26 19:35:30302 return texture_layer_.get() || delegated_renderer_layer_.get() ||
303 surface_layer_.get();
[email protected]a7fcdda32013-07-04 02:23:07304 }
305
jbaumanf472c6872014-10-13 20:06:43306 // Show a solid color instead of delegated or surface contents.
307 void SetShowSolidColorContent();
[email protected]785b0af2013-10-02 18:08:41308
[email protected]da7584c2012-01-28 03:19:12309 // Sets the layer's fill color. May only be called for LAYER_SOLID_COLOR.
310 void SetColor(SkColor color);
jbaumande1a4092015-04-29 23:32:26311 SkColor GetTargetColor();
312 SkColor background_color() const;
[email protected]da7584c2012-01-28 03:19:12313
hshi270f6222015-03-17 21:18:34314 // Updates the nine patch layer's image, aperture and border. May only be
hshid89c83ac2014-09-19 17:39:28315 // called for LAYER_NINE_PATCH.
hshi270f6222015-03-17 21:18:34316 void UpdateNinePatchLayerImage(const gfx::ImageSkia& image);
317 void UpdateNinePatchLayerAperture(const gfx::Rect& aperture_in_dip);
[email protected]98a59132014-07-16 22:49:52318 void UpdateNinePatchLayerBorder(const gfx::Rect& border);
319
[email protected]870119a2011-09-30 18:13:22320 // Adds |invalid_rect| to the Layer's pending invalid rect and calls
[email protected]f78649ea2012-02-23 18:39:04321 // ScheduleDraw(). Returns false if the paint request is ignored.
322 bool SchedulePaint(const gfx::Rect& invalid_rect);
[email protected]00b86982011-09-01 00:02:09323
[email protected]870119a2011-09-30 18:13:22324 // Schedules a redraw of the layer tree at the compositor.
[email protected]35470cc2012-02-23 23:04:31325 // Note that this _does not_ invalidate any region of this layer; use
326 // SchedulePaint() for that.
[email protected]870119a2011-09-30 18:13:22327 void ScheduleDraw();
328
[email protected]1e5da63d2014-01-16 22:44:00329 // Uses damaged rectangles recorded in |damaged_region_| to invalidate the
330 // |cc_layer_|.
[email protected]cedc3952012-03-06 06:15:55331 void SendDamagedRects();
danakj0b5eae6c2015-04-24 22:35:11332 void ClearDamagedRects();
[email protected]f78649ea2012-02-23 18:39:04333
danakj0b5eae6c2015-04-24 22:35:11334 const cc::Region& damaged_region() const { return damaged_region_; }
[email protected]88fa18e82013-12-03 16:29:37335
[email protected]9034a282014-06-05 03:11:47336 void CompleteAllAnimations();
337
[email protected]1e5da63d2014-01-16 22:44:00338 // Suppresses painting the content by disconnecting |delegate_|.
[email protected]f78649ea2012-02-23 18:39:04339 void SuppressPaint();
340
[email protected]cd9a61c72012-05-08 19:16:59341 // Notifies the layer that the device scale factor has changed.
342 void OnDeviceScaleFactorChanged(float device_scale_factor);
343
enne9a3ddb32014-08-23 21:27:46344 // Notifies the layer that one of its children has received a new
345 // delegated frame.
346 void OnDelegatedFrameDamage(const gfx::Rect& damage_rect_in_dip);
347
[email protected]a7fcdda32013-07-04 02:23:07348 // Requets a copy of the layer's output as a texture or bitmap.
349 void RequestCopyOfOutput(scoped_ptr<cc::CopyOutputRequest> request);
350
[email protected]ec05af52012-11-21 23:07:00351 // ContentLayerClient
chrishtr01539b802015-11-24 08:11:32352 gfx::Rect PaintableRegion() override;
jbroman16d628c2015-05-29 20:11:59353 scoped_refptr<cc::DisplayItemList> PaintContentsToDisplayList(
schenney0154bfa2015-02-05 19:46:49354 ContentLayerClient::PaintingControlSetting painting_control) override;
dcheng08038792014-10-21 10:53:26355 bool FillsBoundsCompletely() const override;
jbroman9f60f1a2015-07-16 21:40:32356 size_t GetApproximateUnsharedMemoryUsage() const override;
[email protected]332749032011-10-22 00:32:46357
loysoac008462015-05-27 01:05:50358 cc::Layer* cc_layer_for_testing() { return cc_layer_; }
[email protected]332749032011-10-22 00:32:46359
[email protected]ec05af52012-11-21 23:07:00360 // TextureLayerClient
dcheng08038792014-10-21 10:53:26361 bool PrepareTextureMailbox(
[email protected]9260757f2013-09-17 01:24:16362 cc::TextureMailbox* mailbox,
363 scoped_ptr<cc::SingleReleaseCallback>* release_callback,
mostynb3b3d52b2014-10-09 10:54:27364 bool use_shared_memory) override;
[email protected]7ba5f4b62012-08-25 01:19:36365
[email protected]cd9a61c72012-05-08 19:16:59366 float device_scale_factor() const { return device_scale_factor_; }
367
[email protected]09c01c12012-05-26 00:07:19368 // Forces a render surface to be used on this layer. This has no positive
369 // impact, and is only used for benchmarking/testing purpose.
370 void SetForceRenderSurface(bool force);
371 bool force_render_surface() const { return force_render_surface_; }
372
[email protected]29e17b02013-08-30 02:13:33373 // LayerClient
jbroman60b29f02015-11-23 21:51:25374 scoped_refptr<base::trace_event::ConvertableToTraceFormat> TakeDebugInfo(
375 cc::Layer* layer) override;
[email protected]9f3be432013-12-03 03:53:22376
[email protected]f2891462013-03-11 23:26:51377 // Whether this layer has animations waiting to get sent to its cc::Layer.
loyso1fe980f2016-01-18 23:58:15378 bool HasPendingThreadedAnimationsForTesting() const;
[email protected]f2891462013-03-11 23:26:51379
[email protected]ffd1ccb2013-03-15 07:48:24380 // Triggers a call to SwitchToLayer.
381 void SwitchCCLayerForTest();
382
[email protected]adc93fa72011-06-21 19:47:39383 private:
[email protected]07ae973e2014-03-05 18:51:10384 friend class LayerOwner;
385
[email protected]9034a282014-06-05 03:11:47386 void CollectAnimators(std::vector<scoped_refptr<LayerAnimator> >* animators);
387
[email protected]44c6f8d2011-12-27 23:49:04388 // Stacks |child| above or below |other|. Helper method for StackAbove() and
389 // StackBelow().
390 void StackRelativeTo(Layer* child, Layer* other, bool above);
391
[email protected]ad7258912011-08-29 20:33:53392 bool ConvertPointForAncestor(const Layer* ancestor, gfx::Point* point) const;
393 bool ConvertPointFromAncestor(const Layer* ancestor, gfx::Point* point) const;
394
[email protected]fe7074c62011-10-28 15:22:54395 // Implementation of LayerAnimatorDelegate
dcheng08038792014-10-21 10:53:26396 void SetBoundsFromAnimation(const gfx::Rect& bounds) override;
397 void SetTransformFromAnimation(const gfx::Transform& transform) override;
398 void SetOpacityFromAnimation(float opacity) override;
399 void SetVisibilityFromAnimation(bool visibility) override;
400 void SetBrightnessFromAnimation(float brightness) override;
401 void SetGrayscaleFromAnimation(float grayscale) override;
402 void SetColorFromAnimation(SkColor color) override;
403 void ScheduleDrawForAnimation() override;
404 const gfx::Rect& GetBoundsForAnimation() const override;
405 gfx::Transform GetTransformForAnimation() const override;
406 float GetOpacityForAnimation() const override;
407 bool GetVisibilityForAnimation() const override;
408 float GetBrightnessForAnimation() const override;
409 float GetGrayscaleForAnimation() const override;
410 SkColor GetColorForAnimation() const override;
411 float GetDeviceScaleFactor() const override;
loyso1fe980f2016-01-18 23:58:15412 cc::Layer* GetCcLayer() const override;
413 LayerThreadedAnimationDelegate* GetThreadedAnimationDelegate() override;
414 LayerAnimatorCollection* GetLayerAnimatorCollection() override;
415
416 // Implementation of LayerThreadedAnimationDelegate.
dcheng08038792014-10-21 10:53:26417 void AddThreadedAnimation(scoped_ptr<cc::Animation> animation) override;
418 void RemoveThreadedAnimation(int animation_id) override;
[email protected]7fca53d42011-09-29 15:38:12419
[email protected]1e5da63d2014-01-16 22:44:00420 // Creates a corresponding composited layer for |type_|.
jbaumanf472c6872014-10-13 20:06:43421 void CreateCcLayer();
[email protected]1e5da63d2014-01-16 22:44:00422
423 // Recomputes and sets to |cc_layer_|.
[email protected]b9616d592011-11-14 20:04:42424 void RecomputeDrawsContentAndUVRect();
[email protected]b9cff562013-04-06 00:04:42425 void RecomputePosition();
[email protected]332749032011-10-22 00:32:46426
[email protected]e5da6622012-05-30 19:58:16427 // Set all filters which got applied to the layer.
428 void SetLayerFilters();
429
[email protected]77f7c132012-11-15 06:52:54430 // Set all filters which got applied to the layer background.
431 void SetLayerBackgroundFilters();
432
[email protected]1e5da63d2014-01-16 22:44:00433 // Cleanup |cc_layer_| and replaces it with |new_layer|.
[email protected]b14d40d2013-03-06 03:53:27434 void SwitchToLayer(scoped_refptr<cc::Layer> new_layer);
435
[email protected]f2891462013-03-11 23:26:51436 // We cannot send animations to our cc_layer_ until we have been added to a
437 // layer tree. Instead, we hold on to these animations in
438 // pending_threaded_animations_, and expect SendPendingThreadedAnimations to
439 // be called once we have been added to a tree.
440 void SendPendingThreadedAnimations();
441
loyso841229002015-12-21 10:03:24442 void SetCompositorForAnimatorsInTree(Compositor* compositor);
443 void ResetCompositorForAnimatorsInTree(Compositor* compositor);
[email protected]9034a282014-06-05 03:11:47444
[email protected]993d6b322011-09-27 19:14:38445 const LayerType type_;
446
[email protected]adc93fa72011-06-21 19:47:39447 Compositor* compositor_;
448
[email protected]adc93fa72011-06-21 19:47:39449 Layer* parent_;
450
[email protected]ebc335f2011-11-23 00:43:51451 // This layer's children, in bottom-to-top stacking order.
[email protected]adc93fa72011-06-21 19:47:39452 std::vector<Layer*> children_;
453
[email protected]adc93fa72011-06-21 19:47:39454 gfx::Rect bounds_;
[email protected]ea2910152014-06-10 12:32:35455 gfx::Vector2dF subpixel_position_offset_;
[email protected]adc93fa72011-06-21 19:47:39456
[email protected]e4e8afef2011-10-05 13:58:33457 // Visibility of this layer. See SetVisible/IsDrawn for more details.
[email protected]3aa43942011-09-13 20:59:53458 bool visible_;
459
[email protected]09c01c12012-05-26 00:07:19460 bool force_render_surface_;
461
[email protected]c155c252011-07-29 16:17:55462 bool fills_bounds_opaquely_;
[email protected]1d96e032014-03-25 05:59:08463 bool fills_bounds_completely_;
[email protected]c155c252011-07-29 16:17:55464
danakj0b5eae6c2015-04-24 22:35:11465 // Union of damaged rects, in layer space, to be used when compositor is ready
466 // to paint the content.
467 cc::Region damaged_region_;
[email protected]f78649ea2012-02-23 18:39:04468
[email protected]2a6c5672012-04-23 19:37:09469 int background_blur_radius_;
[email protected]e5da6622012-05-30 19:58:16470
471 // Several variables which will change the visible representation of
472 // the layer.
473 float layer_saturation_;
474 float layer_brightness_;
[email protected]815d0c382012-07-21 08:13:44475 float layer_grayscale_;
[email protected]e5da6622012-05-30 19:58:16476 bool layer_inverted_;
[email protected]b4bb9ca2011-09-23 20:53:14477
[email protected]c0dc4b172014-01-07 11:24:09478 // The associated mask layer with this layer.
479 Layer* layer_mask_;
480 // The back link from the mask layer to it's associated masked layer.
481 // We keep this reference for the case that if the mask layer gets deleted
482 // while attached to the main layer before the main layer is deleted.
483 Layer* layer_mask_back_link_;
[email protected]498e623c2012-07-12 21:12:42484
[email protected]77f7c132012-11-15 06:52:54485 // The zoom factor to scale the layer by. Zooming is disabled when this is
486 // set to 1.
487 float zoom_;
488
489 // Width of the border in pixels, where the scaling is blended.
490 int zoom_inset_;
491
[email protected]fbb145c2014-04-16 19:21:28492 // Shape of the window.
493 scoped_ptr<SkRegion> alpha_shape_;
494
[email protected]33699e622011-11-17 18:29:30495 std::string name_;
496
[email protected]00b86982011-09-01 00:02:09497 LayerDelegate* delegate_;
498
[email protected]07ae973e2014-03-05 18:51:10499 LayerOwner* owner_;
500
[email protected]5d86a112012-09-23 00:21:58501 scoped_refptr<LayerAnimator> animator_;
[email protected]7fca53d42011-09-29 15:38:12502
[email protected]f2891462013-03-11 23:26:51503 // Animations that are passed to AddThreadedAnimation before this layer is
504 // added to a tree.
vmpstra370ef52015-11-18 10:41:28505 std::vector<scoped_ptr<cc::Animation>> pending_threaded_animations_;
[email protected]f2891462013-03-11 23:26:51506
[email protected]66efabe2012-08-18 03:06:06507 // Ownership of the layer is held through one of the strongly typed layer
508 // pointers, depending on which sort of layer this is.
[email protected]dafdf5052014-03-13 17:02:57509 scoped_refptr<cc::Layer> content_layer_;
[email protected]98a59132014-07-16 22:49:52510 scoped_refptr<cc::NinePatchLayer> nine_patch_layer_;
[email protected]ec05af52012-11-21 23:07:00511 scoped_refptr<cc::TextureLayer> texture_layer_;
512 scoped_refptr<cc::SolidColorLayer> solid_color_layer_;
[email protected]b14d40d2013-03-06 03:53:27513 scoped_refptr<cc::DelegatedRendererLayer> delegated_renderer_layer_;
[email protected]ca2c3ea2014-07-26 19:35:30514 scoped_refptr<cc::SurfaceLayer> surface_layer_;
[email protected]ec05af52012-11-21 23:07:00515 cc::Layer* cc_layer_;
[email protected]332749032011-10-22 00:32:46516
[email protected]cd9a61c72012-05-08 19:16:59517 // A cached copy of |Compositor::device_scale_factor()|.
518 float device_scale_factor_;
519
hshi270f6222015-03-17 21:18:34520 // A cached copy of the nine patch layer's image and aperture.
521 // These are required for device scale factor change.
522 gfx::ImageSkia nine_patch_layer_image_;
523 gfx::Rect nine_patch_layer_aperture_;
524
[email protected]4508b152014-04-09 22:14:17525 // The mailbox used by texture_layer_.
[email protected]42f40a52013-06-08 04:38:51526 cc::TextureMailbox mailbox_;
527
[email protected]4508b152014-04-09 22:14:17528 // The callback to release the mailbox. This is only set after
529 // SetTextureMailbox is called, before we give it to the TextureLayer.
530 scoped_ptr<cc::SingleReleaseCallback> mailbox_release_callback_;
[email protected]42f40a52013-06-08 04:38:51531
[email protected]4508b152014-04-09 22:14:17532 // The size of the frame or texture in DIP, set when SetShowDelegatedContent
533 // or SetTextureMailbox was called.
534 gfx::Size frame_size_in_dip_;
[email protected]b14d40d2013-03-06 03:53:27535
[email protected]adc93fa72011-06-21 19:47:39536 DISALLOW_COPY_AND_ASSIGN(Layer);
537};
538
539} // namespace ui
540
[email protected]116302fc2012-05-05 21:45:41541#endif // UI_COMPOSITOR_LAYER_H_