Chromium Code Reviews| Index: ui/compositor/layer.cc |
| diff --git a/ui/compositor/layer.cc b/ui/compositor/layer.cc |
| index 2da468a5b48ca5f69c8ebe98ead61cfa42ba8b11..dd1900964658b720836d31986a7247d07f982b85 100644 |
| --- a/ui/compositor/layer.cc |
| +++ b/ui/compositor/layer.cc |
| @@ -56,8 +56,6 @@ Layer::Layer() |
| layer_brightness_(0.0f), |
| layer_grayscale_(0.0f), |
| layer_inverted_(false), |
| - layer_mask_(NULL), |
| - layer_mask_back_link_(NULL), |
| zoom_(1), |
| zoom_inset_(0), |
| delegate_(NULL), |
| @@ -80,8 +78,6 @@ Layer::Layer(LayerType type) |
| layer_brightness_(0.0f), |
| layer_grayscale_(0.0f), |
| layer_inverted_(false), |
| - layer_mask_(NULL), |
| - layer_mask_back_link_(NULL), |
| zoom_(1), |
| zoom_inset_(0), |
| delegate_(NULL), |
| @@ -102,12 +98,10 @@ Layer::~Layer() { |
| compositor_->SetRootLayer(NULL); |
| if (parent_) |
| parent_->Remove(this); |
| - if (layer_mask_) |
| - SetMaskLayer(NULL); |
| - if (layer_mask_back_link_) |
| - layer_mask_back_link_->SetMaskLayer(NULL); |
| for (size_t i = 0; i < children_.size(); ++i) |
| children_[i]->parent_ = NULL; |
| + if (layer_mask_.get()) |
| + cc_layer_->SetMaskLayer(NULL); |
|
michaelpg
2013/10/04 05:56:41
in lieu of calling SetMaskLayer with an empty scop
|
| cc_layer_->RemoveLayerAnimationEventObserver(this); |
| cc_layer_->RemoveFromParent(); |
| } |
| @@ -280,28 +274,19 @@ void Layer::SetLayerInverted(bool inverted) { |
| SetLayerFilters(); |
| } |
| -void Layer::SetMaskLayer(Layer* layer_mask) { |
| +void Layer::SetMaskLayer(scoped_ptr<Layer> layer_mask) { |
| // The provided mask should not have a layer mask itself. |
| - DCHECK(!layer_mask || |
| + DCHECK(!layer_mask.get() || |
| (!layer_mask->layer_mask_layer() && |
| - layer_mask->children().empty() && |
| - !layer_mask->layer_mask_back_link_)); |
| - DCHECK(!layer_mask_back_link_); |
| - if (layer_mask_ == layer_mask) |
| - return; |
| - // We need to de-reference the currently linked object so that no problem |
| - // arises if the mask layer gets deleted before this object. |
| - if (layer_mask_) |
| - layer_mask_->layer_mask_back_link_ = NULL; |
| - layer_mask_ = layer_mask; |
| + layer_mask->children().empty())); |
| + |
| cc_layer_->SetMaskLayer( |
| - layer_mask ? layer_mask->cc_layer() : NULL); |
| - // We need to reference the linked object so that it can properly break the |
| - // link to us when it gets deleted. |
| - if (layer_mask) { |
| - layer_mask->layer_mask_back_link_ = this; |
| + layer_mask.get() ? layer_mask->cc_layer() : NULL); |
| + |
| + if (layer_mask) |
| layer_mask->OnDeviceScaleFactorChanged(device_scale_factor_); |
| - } |
| + |
| + 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.
|
| } |
| void Layer::SetBackgroundZoom(float zoom, int inset) { |
| @@ -623,7 +608,7 @@ void Layer::OnDeviceScaleFactorChanged(float device_scale_factor) { |
| delegate_->OnDeviceScaleFactorChanged(device_scale_factor); |
| for (size_t i = 0; i < children_.size(); ++i) |
| children_[i]->OnDeviceScaleFactorChanged(device_scale_factor); |
| - if (layer_mask_) |
| + if (layer_mask_.get()) |
| layer_mask_->OnDeviceScaleFactorChanged(device_scale_factor); |
| } |