| Index: ui/views/view_model_utils.cc
|
| diff --git a/ui/views/view_model_utils.cc b/ui/views/view_model_utils.cc
|
| index addeee7caff7a42a153cd2e154a7dc9c6f5aa2c6..1d33b141aa1e95229db60f0529fa4a1fe1f3ea67 100644
|
| --- a/ui/views/view_model_utils.cc
|
| +++ b/ui/views/view_model_utils.cc
|
| @@ -11,6 +11,17 @@
|
|
|
| namespace views {
|
|
|
| +namespace {
|
| +
|
| +// Used in calculating ideal bounds.
|
| +int primary_axis_coordinate(ViewModelUtils::Alignment alignment,
|
| + int x,
|
| + int y) {
|
| + return alignment == ViewModelUtils::HORIZONTAL ? x : y;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| // static
|
| void ViewModelUtils::SetViewBoundsToIdealBounds(const ViewModel& model) {
|
| for (int i = 0; i < model.view_size(); ++i)
|
| @@ -30,12 +41,18 @@ bool ViewModelUtils::IsAtIdealBounds(const ViewModel& model) {
|
| // static
|
| int ViewModelUtils::DetermineMoveIndex(const ViewModel& model,
|
| View* view,
|
| - int x) {
|
| + Alignment alignment,
|
| + int x,
|
| + int y) {
|
| + int value = primary_axis_coordinate(alignment, x, y);
|
| int current_index = model.GetIndexOfView(view);
|
| DCHECK_NE(-1, current_index);
|
| for (int i = 0; i < current_index; ++i) {
|
| - int mid_x = model.ideal_bounds(i).x() + model.ideal_bounds(i).width() / 2;
|
| - if (x < mid_x)
|
| + int mid_point = primary_axis_coordinate(
|
| + alignment,
|
| + model.ideal_bounds(i).x() + model.ideal_bounds(i).width() / 2,
|
| + model.ideal_bounds(i).y() + model.ideal_bounds(i).height() / 2);
|
| + if (value < mid_point)
|
| return i;
|
| }
|
|
|
| @@ -44,12 +61,19 @@ int ViewModelUtils::DetermineMoveIndex(const ViewModel& model,
|
|
|
| // For indices after the current index ignore the bounds of the view being
|
| // dragged. This keeps the view from bouncing around as moved.
|
| - int delta = model.ideal_bounds(current_index + 1).x() -
|
| - model.ideal_bounds(current_index).x();
|
| + int delta = primary_axis_coordinate(
|
| + alignment,
|
| + model.ideal_bounds(current_index + 1).x() -
|
| + model.ideal_bounds(current_index).x(),
|
| + model.ideal_bounds(current_index + 1).y() -
|
| + model.ideal_bounds(current_index).y());
|
| for (int i = current_index + 1; i < model.view_size(); ++i) {
|
| const gfx::Rect& bounds(model.ideal_bounds(i));
|
| - int mid_x = bounds.x() + bounds.width() / 2 - delta;
|
| - if (x < mid_x)
|
| + int mid_point = primary_axis_coordinate(
|
| + alignment,
|
| + bounds.x() + bounds.width() / 2 - delta,
|
| + bounds.y() + bounds.height() / 2 - delta);
|
| + if (value < mid_point)
|
| return i - 1;
|
| }
|
| return model.view_size() - 1;
|
|
|