Commit 2e75e0b0 authored by lgcheng's avatar lgcheng Committed by Commit Bot

Respect Children layers' Z order in MoveLayerToParent

When add a view with complicated children layers to parent, the Z order
of children layers is not respected.

TBR=sky@chromium.org

Bug: 797396
Test: Add unit_test to descibe the bug.
Change-Id: I017d857ec64242ba22b79575b0cb768869dc5ea4
Reviewed-on: https://chromium-review.googlesource.com/843446
Commit-Queue: Long Cheng <lgcheng@google.com>
Reviewed-by: default avatarMichael Wasserman <msw@chromium.org>
Cr-Commit-Position: refs/heads/master@{#526088}
parent 2945b4ac
...@@ -1632,7 +1632,7 @@ void View::MoveLayerToParent(ui::Layer* parent_layer, ...@@ -1632,7 +1632,7 @@ void View::MoveLayerToParent(ui::Layer* parent_layer,
SetLayerBounds(size(), local_offset_data); SetLayerBounds(size(), local_offset_data);
} else { } else {
internal::ScopedChildrenLock lock(this); internal::ScopedChildrenLock lock(this);
for (auto* child : children_) for (auto* child : GetChildrenInZOrder())
child->MoveLayerToParent(parent_layer, local_offset_data); child->MoveLayerToParent(parent_layer, local_offset_data);
} }
} }
......
...@@ -4937,6 +4937,41 @@ TEST_F(ViewTest, ChildViewZOrderChanged) { ...@@ -4937,6 +4937,41 @@ TEST_F(ViewTest, ChildViewZOrderChanged) {
} }
} }
TEST_F(ViewTest, AttachChildViewWithComplicatedLayers) {
std::unique_ptr<View> grand_parent_view(new View());
grand_parent_view->SetPaintToLayer();
View* parent_view = new OrderableView();
parent_view->SetPaintToLayer();
// child_view1 has layer and has id OrderableView::VIEW_ID_RAISED.
View* child_view1 = new View;
child_view1->SetPaintToLayer();
child_view1->set_id(OrderableView::VIEW_ID_RAISED);
parent_view->AddChildView(child_view1);
// child_view2 has no layer.
View* child_view2 = new View;
// grand_child_view has layer.
View* grand_child_view = new View();
grand_child_view->SetPaintToLayer();
child_view2->AddChildView(grand_child_view);
parent_view->AddChildView(child_view2);
const std::vector<ui::Layer*>& layers = parent_view->layer()->children();
EXPECT_EQ(2u, layers.size());
EXPECT_EQ(layers[0], grand_child_view->layer());
EXPECT_EQ(layers[1], child_view1->layer());
// Attach parent_view to grand_parent_view. children layers of parent_view
// should not change.
grand_parent_view->AddChildView(parent_view);
const std::vector<ui::Layer*>& layers_after_attached
= parent_view->layer()->children();
EXPECT_EQ(2u, layers_after_attached.size());
EXPECT_EQ(layers_after_attached[0], grand_child_view->layer());
EXPECT_EQ(layers_after_attached[1], child_view1->layer());
}
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
// Observer tests. // Observer tests.
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment