Chromium Code Reviews| Index: ui/views/view.cc |
| diff --git a/ui/views/view.cc b/ui/views/view.cc |
| index d65f4bc25926d324ee7ea48ed5732ec678c93523..f54e55ac04de070c910503ecc5478dfabe9c483b 100644 |
| --- a/ui/views/view.cc |
| +++ b/ui/views/view.cc |
| @@ -523,24 +523,55 @@ void View::SetTransform(const gfx::Transform& transform) { |
| } |
| } else { |
| if (!layer()) |
| - CreateLayer(); |
| + CreateLayer(ui::LAYER_TEXTURED); |
| layer()->SetTransform(transform); |
| layer()->ScheduleDraw(); |
| } |
| } |
| -void View::SetPaintToLayer(bool paint_to_layer) { |
| - if (paint_to_layer_ == paint_to_layer) |
| +void View::SetPaintToLayer(ui::LayerType layer_type) { |
| + if (paint_to_layer_ && (layer()->type() == layer_type)) |
| return; |
| - paint_to_layer_ = paint_to_layer; |
| - if (paint_to_layer_ && !layer()) { |
| - CreateLayer(); |
| - } else if (!paint_to_layer_ && layer()) { |
| + paint_to_layer_ = true; |
| + if (layer()) { |
|
sky
2017/01/23 21:21:05
Reduce the conditional to:
DestroyLayer(); (it ha
yiyix
2017/01/24 03:14:53
You are right. Sorry, i should thought about it.
|
| DestroyLayer(); |
| + CreateLayer(layer_type); |
| + } else { |
| + CreateLayer(layer_type); |
| } |
| } |
| +void View::DestroyLayer() { |
| + if (!paint_to_layer_) |
| + return; |
| + |
| + paint_to_layer_ = false; |
| + if (!layer()) |
| + return; |
| + |
| + ui::Layer* new_parent = layer()->parent(); |
| + std::vector<ui::Layer*> children = layer()->children(); |
| + for (size_t i = 0; i < children.size(); ++i) { |
| + layer()->Remove(children[i]); |
| + if (new_parent) |
| + new_parent->Add(children[i]); |
| + } |
| + |
| + LayerOwner::DestroyLayer(); |
| + |
| + if (new_parent) |
| + ReorderLayers(); |
| + |
| + UpdateChildLayerBounds(CalculateOffsetToAncestorWithLayer(NULL)); |
| + |
| + SchedulePaint(); |
| + |
| + Widget* widget = GetWidget(); |
| + if (widget) |
| + widget->UpdateRootLayers(); |
| +} |
| + |
| std::unique_ptr<ui::Layer> View::RecreateLayer() { |
| std::unique_ptr<ui::Layer> old_layer = LayerOwner::RecreateLayer(); |
| Widget* widget = GetWidget(); |
| @@ -2184,7 +2215,7 @@ bool View::ConvertRectFromAncestor(const View* ancestor, |
| // Accelerated painting -------------------------------------------------------- |
| -void View::CreateLayer() { |
| +void View::CreateLayer(ui::LayerType layer_type) { |
| // A new layer is being created for the view. So all the layers of the |
| // sub-tree can inherit the visibility of the corresponding view. |
| { |
| @@ -2193,7 +2224,7 @@ void View::CreateLayer() { |
| child->UpdateChildLayerVisibility(true); |
| } |
| - SetLayer(base::MakeUnique<ui::Layer>()); |
| + SetLayer(base::MakeUnique<ui::Layer>(layer_type)); |
| layer()->set_delegate(this); |
| layer()->set_name(GetClassName()); |
| @@ -2260,29 +2291,6 @@ void View::ReparentLayer(const gfx::Vector2d& offset, ui::Layer* parent_layer) { |
| MoveLayerToParent(layer(), gfx::Point()); |
| } |
| -void View::DestroyLayer() { |
| - ui::Layer* new_parent = layer()->parent(); |
| - std::vector<ui::Layer*> children = layer()->children(); |
| - for (size_t i = 0; i < children.size(); ++i) { |
| - layer()->Remove(children[i]); |
| - if (new_parent) |
| - new_parent->Add(children[i]); |
| - } |
| - |
| - LayerOwner::DestroyLayer(); |
| - |
| - if (new_parent) |
| - ReorderLayers(); |
| - |
| - UpdateChildLayerBounds(CalculateOffsetToAncestorWithLayer(NULL)); |
| - |
| - SchedulePaint(); |
| - |
| - Widget* widget = GetWidget(); |
| - if (widget) |
| - widget->UpdateRootLayers(); |
| -} |
| - |
| // Input ----------------------------------------------------------------------- |
| bool View::ProcessMousePressed(const ui::MouseEvent& event) { |