Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(71)

Side by Side Diff: ui/compositor/layer.cc

Issue 25961002: Retain tray bubble's rounded corners when the bubble animates out (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed feedback Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/compositor/layer.h" 5 #include "ui/compositor/layer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 parent_(NULL), 49 parent_(NULL),
50 visible_(true), 50 visible_(true),
51 force_render_surface_(false), 51 force_render_surface_(false),
52 fills_bounds_opaquely_(true), 52 fills_bounds_opaquely_(true),
53 layer_updated_externally_(false), 53 layer_updated_externally_(false),
54 background_blur_radius_(0), 54 background_blur_radius_(0),
55 layer_saturation_(0.0f), 55 layer_saturation_(0.0f),
56 layer_brightness_(0.0f), 56 layer_brightness_(0.0f),
57 layer_grayscale_(0.0f), 57 layer_grayscale_(0.0f),
58 layer_inverted_(false), 58 layer_inverted_(false),
59 layer_mask_(NULL),
60 layer_mask_back_link_(NULL),
61 zoom_(1), 59 zoom_(1),
62 zoom_inset_(0), 60 zoom_inset_(0),
63 delegate_(NULL), 61 delegate_(NULL),
64 cc_layer_(NULL), 62 cc_layer_(NULL),
65 scale_content_(true), 63 scale_content_(true),
66 device_scale_factor_(1.0f) { 64 device_scale_factor_(1.0f) {
67 CreateWebLayer(); 65 CreateWebLayer();
68 } 66 }
69 67
70 Layer::Layer(LayerType type) 68 Layer::Layer(LayerType type)
71 : type_(type), 69 : type_(type),
72 compositor_(NULL), 70 compositor_(NULL),
73 parent_(NULL), 71 parent_(NULL),
74 visible_(true), 72 visible_(true),
75 force_render_surface_(false), 73 force_render_surface_(false),
76 fills_bounds_opaquely_(true), 74 fills_bounds_opaquely_(true),
77 layer_updated_externally_(false), 75 layer_updated_externally_(false),
78 background_blur_radius_(0), 76 background_blur_radius_(0),
79 layer_saturation_(0.0f), 77 layer_saturation_(0.0f),
80 layer_brightness_(0.0f), 78 layer_brightness_(0.0f),
81 layer_grayscale_(0.0f), 79 layer_grayscale_(0.0f),
82 layer_inverted_(false), 80 layer_inverted_(false),
83 layer_mask_(NULL),
84 layer_mask_back_link_(NULL),
85 zoom_(1), 81 zoom_(1),
86 zoom_inset_(0), 82 zoom_inset_(0),
87 delegate_(NULL), 83 delegate_(NULL),
88 cc_layer_(NULL), 84 cc_layer_(NULL),
89 scale_content_(true), 85 scale_content_(true),
90 device_scale_factor_(1.0f) { 86 device_scale_factor_(1.0f) {
91 CreateWebLayer(); 87 CreateWebLayer();
92 } 88 }
93 89
94 Layer::~Layer() { 90 Layer::~Layer() {
95 // Destroying the animator may cause observers to use the layer (and 91 // Destroying the animator may cause observers to use the layer (and
96 // indirectly the WebLayer). Destroy the animator first so that the WebLayer 92 // indirectly the WebLayer). Destroy the animator first so that the WebLayer
97 // is still around. 93 // is still around.
98 if (animator_.get()) 94 if (animator_.get())
99 animator_->SetDelegate(NULL); 95 animator_->SetDelegate(NULL);
100 animator_ = NULL; 96 animator_ = NULL;
101 if (compositor_) 97 if (compositor_)
102 compositor_->SetRootLayer(NULL); 98 compositor_->SetRootLayer(NULL);
103 if (parent_) 99 if (parent_)
104 parent_->Remove(this); 100 parent_->Remove(this);
105 if (layer_mask_)
106 SetMaskLayer(NULL);
107 if (layer_mask_back_link_)
108 layer_mask_back_link_->SetMaskLayer(NULL);
109 for (size_t i = 0; i < children_.size(); ++i) 101 for (size_t i = 0; i < children_.size(); ++i)
110 children_[i]->parent_ = NULL; 102 children_[i]->parent_ = NULL;
103 if (layer_mask_.get())
104 cc_layer_->SetMaskLayer(NULL);
michaelpg 2013/10/04 05:56:41 in lieu of calling SetMaskLayer with an empty scop
111 cc_layer_->RemoveLayerAnimationEventObserver(this); 105 cc_layer_->RemoveLayerAnimationEventObserver(this);
112 cc_layer_->RemoveFromParent(); 106 cc_layer_->RemoveFromParent();
113 } 107 }
114 108
115 Compositor* Layer::GetCompositor() { 109 Compositor* Layer::GetCompositor() {
116 return GetRoot(this)->compositor_; 110 return GetRoot(this)->compositor_;
117 } 111 }
118 112
119 float Layer::opacity() const { 113 float Layer::opacity() const {
120 return cc_layer_->opacity(); 114 return cc_layer_->opacity();
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
273 return animator_->GetTargetGrayscale(); 267 return animator_->GetTargetGrayscale();
274 } 268 }
275 return layer_grayscale(); 269 return layer_grayscale();
276 } 270 }
277 271
278 void Layer::SetLayerInverted(bool inverted) { 272 void Layer::SetLayerInverted(bool inverted) {
279 layer_inverted_ = inverted; 273 layer_inverted_ = inverted;
280 SetLayerFilters(); 274 SetLayerFilters();
281 } 275 }
282 276
283 void Layer::SetMaskLayer(Layer* layer_mask) { 277 void Layer::SetMaskLayer(scoped_ptr<Layer> layer_mask) {
284 // The provided mask should not have a layer mask itself. 278 // The provided mask should not have a layer mask itself.
285 DCHECK(!layer_mask || 279 DCHECK(!layer_mask.get() ||
286 (!layer_mask->layer_mask_layer() && 280 (!layer_mask->layer_mask_layer() &&
287 layer_mask->children().empty() && 281 layer_mask->children().empty()));
288 !layer_mask->layer_mask_back_link_)); 282
289 DCHECK(!layer_mask_back_link_);
290 if (layer_mask_ == layer_mask)
291 return;
292 // We need to de-reference the currently linked object so that no problem
293 // arises if the mask layer gets deleted before this object.
294 if (layer_mask_)
295 layer_mask_->layer_mask_back_link_ = NULL;
296 layer_mask_ = layer_mask;
297 cc_layer_->SetMaskLayer( 283 cc_layer_->SetMaskLayer(
298 layer_mask ? layer_mask->cc_layer() : NULL); 284 layer_mask.get() ? layer_mask->cc_layer() : NULL);
299 // We need to reference the linked object so that it can properly break the 285
300 // link to us when it gets deleted. 286 if (layer_mask)
301 if (layer_mask) {
302 layer_mask->layer_mask_back_link_ = this;
303 layer_mask->OnDeviceScaleFactorChanged(device_scale_factor_); 287 layer_mask->OnDeviceScaleFactorChanged(device_scale_factor_);
304 } 288
289 layer_mask_.reset(layer_mask.release());
michaelpg 2013/10/04 05:56:41 layer_mask is a scoped_ptr that now owns the layer
piman 2013/10/04 18:05:33 Yes, layer_mask_ = layer_mask.Pass(); is more idio
michaelpg 2013/12/10 02:04:03 Ok, thanks.
305 } 290 }
306 291
307 void Layer::SetBackgroundZoom(float zoom, int inset) { 292 void Layer::SetBackgroundZoom(float zoom, int inset) {
308 zoom_ = zoom; 293 zoom_ = zoom;
309 zoom_inset_ = inset; 294 zoom_inset_ = inset;
310 295
311 SetLayerBackgroundFilters(); 296 SetLayerBackgroundFilters();
312 } 297 }
313 298
314 void Layer::SetLayerFilters() { 299 void Layer::SetLayerFilters() {
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
616 gfx::Transform transform = this->transform(); 601 gfx::Transform transform = this->transform();
617 device_scale_factor_ = device_scale_factor; 602 device_scale_factor_ = device_scale_factor;
618 RecomputeCCTransformFromTransform(transform); 603 RecomputeCCTransformFromTransform(transform);
619 RecomputeDrawsContentAndUVRect(); 604 RecomputeDrawsContentAndUVRect();
620 RecomputePosition(); 605 RecomputePosition();
621 SchedulePaint(gfx::Rect(bounds_.size())); 606 SchedulePaint(gfx::Rect(bounds_.size()));
622 if (delegate_) 607 if (delegate_)
623 delegate_->OnDeviceScaleFactorChanged(device_scale_factor); 608 delegate_->OnDeviceScaleFactorChanged(device_scale_factor);
624 for (size_t i = 0; i < children_.size(); ++i) 609 for (size_t i = 0; i < children_.size(); ++i)
625 children_[i]->OnDeviceScaleFactorChanged(device_scale_factor); 610 children_[i]->OnDeviceScaleFactorChanged(device_scale_factor);
626 if (layer_mask_) 611 if (layer_mask_.get())
627 layer_mask_->OnDeviceScaleFactorChanged(device_scale_factor); 612 layer_mask_->OnDeviceScaleFactorChanged(device_scale_factor);
628 } 613 }
629 614
630 void Layer::RequestCopyOfOutput(scoped_ptr<cc::CopyOutputRequest> request) { 615 void Layer::RequestCopyOfOutput(scoped_ptr<cc::CopyOutputRequest> request) {
631 cc_layer_->RequestCopyOfOutput(request.Pass()); 616 cc_layer_->RequestCopyOfOutput(request.Pass());
632 } 617 }
633 618
634 void Layer::PaintContents(SkCanvas* sk_canvas, 619 void Layer::PaintContents(SkCanvas* sk_canvas,
635 gfx::Rect clip, 620 gfx::Rect clip,
636 gfx::RectF* opaque) { 621 gfx::RectF* opaque) {
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after
972 cc_layer_->SetBounds(ConvertSizeToPixel(this, size)); 957 cc_layer_->SetBounds(ConvertSizeToPixel(this, size));
973 } 958 }
974 959
975 void Layer::RecomputePosition() { 960 void Layer::RecomputePosition() {
976 cc_layer_->SetPosition(gfx::ScalePoint( 961 cc_layer_->SetPosition(gfx::ScalePoint(
977 gfx::PointF(bounds_.x(), bounds_.y()), 962 gfx::PointF(bounds_.x(), bounds_.y()),
978 device_scale_factor_)); 963 device_scale_factor_));
979 } 964 }
980 965
981 } // namespace ui 966 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698