| OLD | NEW |
| 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 "ash/shelf/shelf_view.h" | 5 #include "ash/common/shelf/shelf_view.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <memory> | 8 #include <memory> |
| 9 | 9 |
| 10 #include "ash/common/ash_constants.h" | 10 #include "ash/common/ash_constants.h" |
| 11 #include "ash/common/ash_switches.h" | 11 #include "ash/common/ash_switches.h" |
| 12 #include "ash/common/drag_drop/drag_image_view.h" | 12 #include "ash/common/drag_drop/drag_image_view.h" |
| 13 #include "ash/common/scoped_root_window_for_new_windows.h" | 13 #include "ash/common/scoped_root_window_for_new_windows.h" |
| 14 #include "ash/common/shelf/app_list_button.h" | 14 #include "ash/common/shelf/app_list_button.h" |
| 15 #include "ash/common/shelf/overflow_bubble.h" | 15 #include "ash/common/shelf/overflow_bubble.h" |
| 16 #include "ash/common/shelf/overflow_bubble_view.h" | 16 #include "ash/common/shelf/overflow_bubble_view.h" |
| 17 #include "ash/common/shelf/overflow_button.h" | 17 #include "ash/common/shelf/overflow_button.h" |
| 18 #include "ash/common/shelf/shelf_button.h" | 18 #include "ash/common/shelf/shelf_button.h" |
| 19 #include "ash/common/shelf/shelf_constants.h" | 19 #include "ash/common/shelf/shelf_constants.h" |
| 20 #include "ash/common/shelf/shelf_delegate.h" | 20 #include "ash/common/shelf/shelf_delegate.h" |
| 21 #include "ash/common/shelf/shelf_icon_observer.h" |
| 21 #include "ash/common/shelf/shelf_menu_model.h" | 22 #include "ash/common/shelf/shelf_menu_model.h" |
| 22 #include "ash/common/shelf/shelf_model.h" | 23 #include "ash/common/shelf/shelf_model.h" |
| 23 #include "ash/common/shelf/wm_shelf.h" | 24 #include "ash/common/shelf/wm_shelf.h" |
| 24 #include "ash/common/shell_delegate.h" | 25 #include "ash/common/shell_delegate.h" |
| 25 #include "ash/common/wm/root_window_finder.h" | 26 #include "ash/common/wm/root_window_finder.h" |
| 26 #include "ash/common/wm_lookup.h" | 27 #include "ash/common/wm_lookup.h" |
| 27 #include "ash/common/wm_shell.h" | 28 #include "ash/common/wm_shell.h" |
| 28 #include "ash/common/wm_window.h" | 29 #include "ash/common/wm_window.h" |
| 29 #include "ash/shelf/shelf.h" | |
| 30 #include "ash/shelf/shelf_icon_observer.h" | |
| 31 #include "ash/shelf/shelf_widget.h" | 30 #include "ash/shelf/shelf_widget.h" |
| 32 #include "base/auto_reset.h" | 31 #include "base/auto_reset.h" |
| 33 #include "base/metrics/histogram.h" | 32 #include "base/metrics/histogram.h" |
| 34 #include "grit/ash_strings.h" | 33 #include "grit/ash_strings.h" |
| 35 #include "ui/accessibility/ax_view_state.h" | 34 #include "ui/accessibility/ax_view_state.h" |
| 36 #include "ui/aura/window.h" | |
| 37 #include "ui/base/l10n/l10n_util.h" | 35 #include "ui/base/l10n/l10n_util.h" |
| 38 #include "ui/base/models/simple_menu_model.h" | 36 #include "ui/base/models/simple_menu_model.h" |
| 39 #include "ui/base/resource/resource_bundle.h" | 37 #include "ui/base/resource/resource_bundle.h" |
| 40 #include "ui/compositor/layer.h" | 38 #include "ui/compositor/layer.h" |
| 41 #include "ui/compositor/layer_animator.h" | 39 #include "ui/compositor/layer_animator.h" |
| 42 #include "ui/compositor/scoped_animation_duration_scale_mode.h" | 40 #include "ui/compositor/scoped_animation_duration_scale_mode.h" |
| 43 #include "ui/events/event_utils.h" | 41 #include "ui/events/event_utils.h" |
| 44 #include "ui/gfx/canvas.h" | 42 #include "ui/gfx/canvas.h" |
| 45 #include "ui/gfx/geometry/point.h" | 43 #include "ui/gfx/geometry/point.h" |
| 46 #include "ui/views/animation/bounds_animator.h" | 44 #include "ui/views/animation/bounds_animator.h" |
| (...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 352 | 350 |
| 353 DISALLOW_COPY_AND_ASSIGN(StartFadeAnimationDelegate); | 351 DISALLOW_COPY_AND_ASSIGN(StartFadeAnimationDelegate); |
| 354 }; | 352 }; |
| 355 | 353 |
| 356 // static | 354 // static |
| 357 const int ShelfView::kMinimumDragDistance = 8; | 355 const int ShelfView::kMinimumDragDistance = 8; |
| 358 | 356 |
| 359 ShelfView::ShelfView(ShelfModel* model, | 357 ShelfView::ShelfView(ShelfModel* model, |
| 360 ShelfDelegate* delegate, | 358 ShelfDelegate* delegate, |
| 361 WmShelf* wm_shelf, | 359 WmShelf* wm_shelf, |
| 362 Shelf* shelf) | 360 ShelfWidget* shelf_widget) |
| 363 : model_(model), | 361 : model_(model), |
| 364 delegate_(delegate), | 362 delegate_(delegate), |
| 365 wm_shelf_(wm_shelf), | 363 wm_shelf_(wm_shelf), |
| 366 shelf_(shelf), | 364 shelf_widget_(shelf_widget), |
| 367 view_model_(new views::ViewModel), | 365 view_model_(new views::ViewModel), |
| 368 first_visible_index_(0), | 366 first_visible_index_(0), |
| 369 last_visible_index_(-1), | 367 last_visible_index_(-1), |
| 370 overflow_button_(nullptr), | 368 overflow_button_(nullptr), |
| 371 owner_overflow_bubble_(nullptr), | 369 owner_overflow_bubble_(nullptr), |
| 372 tooltip_(this), | 370 tooltip_(this), |
| 373 drag_pointer_(NONE), | 371 drag_pointer_(NONE), |
| 374 drag_view_(nullptr), | 372 drag_view_(nullptr), |
| 375 start_drag_index_(-1), | 373 start_drag_index_(-1), |
| 376 context_menu_id_(0), | 374 context_menu_id_(0), |
| 377 leading_inset_(kDefaultLeadingInset), | 375 leading_inset_(kDefaultLeadingInset), |
| 378 cancelling_drag_model_changed_(false), | 376 cancelling_drag_model_changed_(false), |
| 379 last_hidden_index_(0), | 377 last_hidden_index_(0), |
| 380 closing_event_time_(base::TimeTicks()), | 378 closing_event_time_(base::TimeTicks()), |
| 381 drag_and_drop_item_pinned_(false), | 379 drag_and_drop_item_pinned_(false), |
| 382 drag_and_drop_shelf_id_(0), | 380 drag_and_drop_shelf_id_(0), |
| 383 drag_replaced_view_(nullptr), | 381 drag_replaced_view_(nullptr), |
| 384 dragged_off_shelf_(false), | 382 dragged_off_shelf_(false), |
| 385 snap_back_from_rip_off_view_(nullptr), | 383 snap_back_from_rip_off_view_(nullptr), |
| 386 overflow_mode_(false), | 384 overflow_mode_(false), |
| 387 main_shelf_(nullptr), | 385 main_shelf_(nullptr), |
| 388 dragged_off_from_overflow_to_shelf_(false), | 386 dragged_off_from_overflow_to_shelf_(false), |
| 389 is_repost_event_on_same_item_(false), | 387 is_repost_event_on_same_item_(false), |
| 390 last_pressed_index_(-1) { | 388 last_pressed_index_(-1) { |
| 391 DCHECK(model_); | 389 DCHECK(model_); |
| 392 DCHECK(delegate_); | 390 DCHECK(delegate_); |
| 393 DCHECK(wm_shelf_); | 391 DCHECK(wm_shelf_); |
| 392 DCHECK(shelf_widget_); |
| 394 bounds_animator_.reset(new views::BoundsAnimator(this)); | 393 bounds_animator_.reset(new views::BoundsAnimator(this)); |
| 395 bounds_animator_->AddObserver(this); | 394 bounds_animator_->AddObserver(this); |
| 396 set_context_menu_controller(this); | 395 set_context_menu_controller(this); |
| 397 focus_search_.reset(new ShelfFocusSearch(view_model_.get())); | 396 focus_search_.reset(new ShelfFocusSearch(view_model_.get())); |
| 398 } | 397 } |
| 399 | 398 |
| 400 ShelfView::~ShelfView() { | 399 ShelfView::~ShelfView() { |
| 401 bounds_animator_->RemoveObserver(this); | 400 bounds_animator_->RemoveObserver(this); |
| 402 model_->RemoveObserver(this); | 401 model_->RemoveObserver(this); |
| 403 } | 402 } |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 471 | 470 |
| 472 void ShelfView::UpdatePanelIconPosition(ShelfID id, | 471 void ShelfView::UpdatePanelIconPosition(ShelfID id, |
| 473 const gfx::Point& midpoint) { | 472 const gfx::Point& midpoint) { |
| 474 int current_index = model_->ItemIndexByID(id); | 473 int current_index = model_->ItemIndexByID(id); |
| 475 int first_panel_index = model_->FirstPanelIndex(); | 474 int first_panel_index = model_->FirstPanelIndex(); |
| 476 if (current_index < first_panel_index) | 475 if (current_index < first_panel_index) |
| 477 return; | 476 return; |
| 478 | 477 |
| 479 gfx::Point midpoint_in_view(GetMirroredXInView(midpoint.x()), midpoint.y()); | 478 gfx::Point midpoint_in_view(GetMirroredXInView(midpoint.x()), midpoint.y()); |
| 480 int target_index = current_index; | 479 int target_index = current_index; |
| 481 while (target_index > first_panel_index && | 480 while ( |
| 482 shelf_->PrimaryAxisValue(view_model_->ideal_bounds(target_index).x(), | 481 target_index > first_panel_index && |
| 482 wm_shelf_->PrimaryAxisValue(view_model_->ideal_bounds(target_index).x(), |
| 483 view_model_->ideal_bounds(target_index).y()) > | 483 view_model_->ideal_bounds(target_index).y()) > |
| 484 shelf_->PrimaryAxisValue(midpoint_in_view.x(), | 484 wm_shelf_->PrimaryAxisValue(midpoint_in_view.x(), |
| 485 midpoint_in_view.y())) { | 485 midpoint_in_view.y())) { |
| 486 --target_index; | 486 --target_index; |
| 487 } | 487 } |
| 488 while (target_index < view_model_->view_size() - 1 && | 488 while (target_index < view_model_->view_size() - 1 && |
| 489 shelf_->PrimaryAxisValue( | 489 wm_shelf_->PrimaryAxisValue( |
| 490 view_model_->ideal_bounds(target_index).right(), | 490 view_model_->ideal_bounds(target_index).right(), |
| 491 view_model_->ideal_bounds(target_index).bottom()) < | 491 view_model_->ideal_bounds(target_index).bottom()) < |
| 492 shelf_->PrimaryAxisValue(midpoint_in_view.x(), | 492 wm_shelf_->PrimaryAxisValue(midpoint_in_view.x(), |
| 493 midpoint_in_view.y())) { | 493 midpoint_in_view.y())) { |
| 494 ++target_index; | 494 ++target_index; |
| 495 } | 495 } |
| 496 if (current_index != target_index) | 496 if (current_index != target_index) |
| 497 model_->Move(current_index, target_index); | 497 model_->Move(current_index, target_index); |
| 498 } | 498 } |
| 499 | 499 |
| 500 bool ShelfView::IsShowingMenu() const { | 500 bool ShelfView::IsShowingMenu() const { |
| 501 return launcher_menu_runner_.get() && launcher_menu_runner_->IsRunning(); | 501 return launcher_menu_runner_.get() && launcher_menu_runner_->IsRunning(); |
| 502 } | 502 } |
| 503 | 503 |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 745 | 745 |
| 746 // Only when the repost event occurs on the same shelf item, we should ignore | 746 // Only when the repost event occurs on the same shelf item, we should ignore |
| 747 // the call in ShelfView::ButtonPressed(...). | 747 // the call in ShelfView::ButtonPressed(...). |
| 748 is_repost_event_on_same_item_ = | 748 is_repost_event_on_same_item_ = |
| 749 IsRepostEvent(event) && (last_pressed_index_ == index); | 749 IsRepostEvent(event) && (last_pressed_index_ == index); |
| 750 | 750 |
| 751 CHECK_EQ(ShelfButton::kViewClassName, view->GetClassName()); | 751 CHECK_EQ(ShelfButton::kViewClassName, view->GetClassName()); |
| 752 drag_view_ = static_cast<ShelfButton*>(view); | 752 drag_view_ = static_cast<ShelfButton*>(view); |
| 753 drag_origin_ = gfx::Point(event.x(), event.y()); | 753 drag_origin_ = gfx::Point(event.x(), event.y()); |
| 754 UMA_HISTOGRAM_ENUMERATION("Ash.ShelfAlignmentUsage", | 754 UMA_HISTOGRAM_ENUMERATION("Ash.ShelfAlignmentUsage", |
| 755 shelf_->SelectValueForShelfAlignment( | 755 wm_shelf_->SelectValueForShelfAlignment( |
| 756 SHELF_ALIGNMENT_UMA_ENUM_VALUE_BOTTOM, | 756 SHELF_ALIGNMENT_UMA_ENUM_VALUE_BOTTOM, |
| 757 SHELF_ALIGNMENT_UMA_ENUM_VALUE_LEFT, | 757 SHELF_ALIGNMENT_UMA_ENUM_VALUE_LEFT, |
| 758 SHELF_ALIGNMENT_UMA_ENUM_VALUE_RIGHT), | 758 SHELF_ALIGNMENT_UMA_ENUM_VALUE_RIGHT), |
| 759 SHELF_ALIGNMENT_UMA_ENUM_VALUE_COUNT); | 759 SHELF_ALIGNMENT_UMA_ENUM_VALUE_COUNT); |
| 760 } | 760 } |
| 761 | 761 |
| 762 void ShelfView::PointerDraggedOnButton(views::View* view, | 762 void ShelfView::PointerDraggedOnButton(views::View* view, |
| 763 Pointer pointer, | 763 Pointer pointer, |
| 764 const ui::LocatedEvent& event) { | 764 const ui::LocatedEvent& event) { |
| 765 // To prepare all drag types (moving an item in the shelf and dragging off), | 765 // To prepare all drag types (moving an item in the shelf and dragging off), |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 818 // should be always true regardless of its position. | 818 // should be always true regardless of its position. |
| 819 if (dragged_off_from_overflow_to_shelf_ && | 819 if (dragged_off_from_overflow_to_shelf_ && |
| 820 view_model_->view_at(i) == drag_view_) | 820 view_model_->view_at(i) == drag_view_) |
| 821 view_model_->view_at(i)->SetVisible(true); | 821 view_model_->view_at(i)->SetVisible(true); |
| 822 else | 822 else |
| 823 view_model_->view_at(i)->SetVisible(visible); | 823 view_model_->view_at(i)->SetVisible(visible); |
| 824 } | 824 } |
| 825 } | 825 } |
| 826 | 826 |
| 827 void ShelfView::CalculateIdealBounds(IdealBounds* bounds) const { | 827 void ShelfView::CalculateIdealBounds(IdealBounds* bounds) const { |
| 828 int available_size = shelf_->PrimaryAxisValue(width(), height()); | 828 int available_size = wm_shelf_->PrimaryAxisValue(width(), height()); |
| 829 DCHECK(model_->item_count() == view_model_->view_size()); | 829 DCHECK(model_->item_count() == view_model_->view_size()); |
| 830 if (!available_size) | 830 if (!available_size) |
| 831 return; | 831 return; |
| 832 | 832 |
| 833 int first_panel_index = model_->FirstPanelIndex(); | 833 int first_panel_index = model_->FirstPanelIndex(); |
| 834 int last_button_index = first_panel_index - 1; | 834 int last_button_index = first_panel_index - 1; |
| 835 | 835 |
| 836 int x = 0; | 836 int x = 0; |
| 837 int y = 0; | 837 int y = 0; |
| 838 int button_size = GetShelfConstant(SHELF_BUTTON_SIZE); | 838 int button_size = GetShelfConstant(SHELF_BUTTON_SIZE); |
| 839 int button_spacing = GetShelfConstant(SHELF_BUTTON_SPACING); | 839 int button_spacing = GetShelfConstant(SHELF_BUTTON_SPACING); |
| 840 | 840 |
| 841 int w = shelf_->PrimaryAxisValue(button_size, width()); | 841 int w = wm_shelf_->PrimaryAxisValue(button_size, width()); |
| 842 int h = shelf_->PrimaryAxisValue(height(), button_size); | 842 int h = wm_shelf_->PrimaryAxisValue(height(), button_size); |
| 843 for (int i = 0; i < view_model_->view_size(); ++i) { | 843 for (int i = 0; i < view_model_->view_size(); ++i) { |
| 844 if (i < first_visible_index_) { | 844 if (i < first_visible_index_) { |
| 845 view_model_->set_ideal_bounds(i, gfx::Rect(x, y, 0, 0)); | 845 view_model_->set_ideal_bounds(i, gfx::Rect(x, y, 0, 0)); |
| 846 continue; | 846 continue; |
| 847 } | 847 } |
| 848 | 848 |
| 849 view_model_->set_ideal_bounds(i, gfx::Rect(x, y, w, h)); | 849 view_model_->set_ideal_bounds(i, gfx::Rect(x, y, w, h)); |
| 850 x = shelf_->PrimaryAxisValue(x + w + button_spacing, x); | 850 x = wm_shelf_->PrimaryAxisValue(x + w + button_spacing, x); |
| 851 y = shelf_->PrimaryAxisValue(y, y + h + button_spacing); | 851 y = wm_shelf_->PrimaryAxisValue(y, y + h + button_spacing); |
| 852 } | 852 } |
| 853 | 853 |
| 854 if (is_overflow_mode()) { | 854 if (is_overflow_mode()) { |
| 855 const_cast<ShelfView*>(this)->UpdateAllButtonsVisibilityInOverflowMode(); | 855 const_cast<ShelfView*>(this)->UpdateAllButtonsVisibilityInOverflowMode(); |
| 856 return; | 856 return; |
| 857 } | 857 } |
| 858 | 858 |
| 859 // Right aligned icons. | 859 // Right aligned icons. |
| 860 int end_position = available_size - button_spacing; | 860 int end_position = available_size - button_spacing; |
| 861 x = shelf_->PrimaryAxisValue(end_position, 0); | 861 x = wm_shelf_->PrimaryAxisValue(end_position, 0); |
| 862 y = shelf_->PrimaryAxisValue(0, end_position); | 862 y = wm_shelf_->PrimaryAxisValue(0, end_position); |
| 863 for (int i = view_model_->view_size() - 1; i >= first_panel_index; --i) { | 863 for (int i = view_model_->view_size() - 1; i >= first_panel_index; --i) { |
| 864 x = shelf_->PrimaryAxisValue(x - w - button_spacing, x); | 864 x = wm_shelf_->PrimaryAxisValue(x - w - button_spacing, x); |
| 865 y = shelf_->PrimaryAxisValue(y, y - h - button_spacing); | 865 y = wm_shelf_->PrimaryAxisValue(y, y - h - button_spacing); |
| 866 view_model_->set_ideal_bounds(i, gfx::Rect(x, y, w, h)); | 866 view_model_->set_ideal_bounds(i, gfx::Rect(x, y, w, h)); |
| 867 end_position = shelf_->PrimaryAxisValue(x, y); | 867 end_position = wm_shelf_->PrimaryAxisValue(x, y); |
| 868 } | 868 } |
| 869 | 869 |
| 870 // Icons on the left / top are guaranteed up to kLeftIconProportion of | 870 // Icons on the left / top are guaranteed up to kLeftIconProportion of |
| 871 // the available space. | 871 // the available space. |
| 872 int last_icon_position = | 872 int last_icon_position = |
| 873 shelf_->PrimaryAxisValue( | 873 wm_shelf_->PrimaryAxisValue( |
| 874 view_model_->ideal_bounds(last_button_index).right(), | 874 view_model_->ideal_bounds(last_button_index).right(), |
| 875 view_model_->ideal_bounds(last_button_index).bottom()) + | 875 view_model_->ideal_bounds(last_button_index).bottom()) + |
| 876 button_size; | 876 button_size; |
| 877 int reserved_icon_space = available_size * kReservedNonPanelIconProportion; | 877 int reserved_icon_space = available_size * kReservedNonPanelIconProportion; |
| 878 if (last_icon_position < reserved_icon_space) | 878 if (last_icon_position < reserved_icon_space) |
| 879 end_position = last_icon_position; | 879 end_position = last_icon_position; |
| 880 else | 880 else |
| 881 end_position = std::max(end_position, reserved_icon_space); | 881 end_position = std::max(end_position, reserved_icon_space); |
| 882 | 882 |
| 883 bounds->overflow_bounds.set_size( | 883 bounds->overflow_bounds.set_size( |
| 884 gfx::Size(shelf_->PrimaryAxisValue(w, width()), | 884 gfx::Size(wm_shelf_->PrimaryAxisValue(w, width()), |
| 885 shelf_->PrimaryAxisValue(height(), h))); | 885 wm_shelf_->PrimaryAxisValue(height(), h))); |
| 886 | 886 |
| 887 last_visible_index_ = DetermineLastVisibleIndex(end_position - button_size); | 887 last_visible_index_ = DetermineLastVisibleIndex(end_position - button_size); |
| 888 last_hidden_index_ = DetermineFirstVisiblePanelIndex(end_position) - 1; | 888 last_hidden_index_ = DetermineFirstVisiblePanelIndex(end_position) - 1; |
| 889 bool show_overflow = last_visible_index_ < last_button_index || | 889 bool show_overflow = last_visible_index_ < last_button_index || |
| 890 last_hidden_index_ >= first_panel_index; | 890 last_hidden_index_ >= first_panel_index; |
| 891 | 891 |
| 892 // Create Space for the overflow button | 892 // Create Space for the overflow button |
| 893 if (show_overflow) { | 893 if (show_overflow) { |
| 894 // The following code makes sure that platform apps icons (aligned to left / | 894 // The following code makes sure that platform apps icons (aligned to left / |
| 895 // top) are favored over panel apps icons (aligned to right / bottom). | 895 // top) are favored over panel apps icons (aligned to right / bottom). |
| (...skipping 26 matching lines...) Expand all Loading... |
| 922 view_model_->view_at(i)->SetVisible(visible); | 922 view_model_->view_at(i)->SetVisible(visible); |
| 923 } | 923 } |
| 924 | 924 |
| 925 overflow_button_->SetVisible(show_overflow); | 925 overflow_button_->SetVisible(show_overflow); |
| 926 if (show_overflow) { | 926 if (show_overflow) { |
| 927 DCHECK_NE(0, view_model_->view_size()); | 927 DCHECK_NE(0, view_model_->view_size()); |
| 928 if (last_visible_index_ == -1) { | 928 if (last_visible_index_ == -1) { |
| 929 x = 0; | 929 x = 0; |
| 930 y = 0; | 930 y = 0; |
| 931 } else { | 931 } else { |
| 932 x = shelf_->PrimaryAxisValue( | 932 x = wm_shelf_->PrimaryAxisValue( |
| 933 view_model_->ideal_bounds(last_visible_index_).right(), | 933 view_model_->ideal_bounds(last_visible_index_).right(), |
| 934 view_model_->ideal_bounds(last_visible_index_).x()); | 934 view_model_->ideal_bounds(last_visible_index_).x()); |
| 935 y = shelf_->PrimaryAxisValue( | 935 y = wm_shelf_->PrimaryAxisValue( |
| 936 view_model_->ideal_bounds(last_visible_index_).y(), | 936 view_model_->ideal_bounds(last_visible_index_).y(), |
| 937 view_model_->ideal_bounds(last_visible_index_).bottom()); | 937 view_model_->ideal_bounds(last_visible_index_).bottom()); |
| 938 } | 938 } |
| 939 // Set all hidden panel icon positions to be on the overflow button. | 939 // Set all hidden panel icon positions to be on the overflow button. |
| 940 for (int i = first_panel_index; i <= last_hidden_index_; ++i) | 940 for (int i = first_panel_index; i <= last_hidden_index_; ++i) |
| 941 view_model_->set_ideal_bounds(i, gfx::Rect(x, y, w, h)); | 941 view_model_->set_ideal_bounds(i, gfx::Rect(x, y, w, h)); |
| 942 | 942 |
| 943 // Add more space between last visible item and overflow button. | 943 // Add more space between last visible item and overflow button. |
| 944 // Without this, two buttons look too close compared with other items. | 944 // Without this, two buttons look too close compared with other items. |
| 945 x = shelf_->PrimaryAxisValue(x + button_spacing, x); | 945 x = wm_shelf_->PrimaryAxisValue(x + button_spacing, x); |
| 946 y = shelf_->PrimaryAxisValue(y, y + button_spacing); | 946 y = wm_shelf_->PrimaryAxisValue(y, y + button_spacing); |
| 947 | 947 |
| 948 bounds->overflow_bounds.set_x(x); | 948 bounds->overflow_bounds.set_x(x); |
| 949 bounds->overflow_bounds.set_y(y); | 949 bounds->overflow_bounds.set_y(y); |
| 950 if (overflow_bubble_.get() && overflow_bubble_->IsShowing()) | 950 if (overflow_bubble_.get() && overflow_bubble_->IsShowing()) |
| 951 UpdateOverflowRange(overflow_bubble_->shelf_view()); | 951 UpdateOverflowRange(overflow_bubble_->shelf_view()); |
| 952 } else { | 952 } else { |
| 953 if (overflow_bubble_) | 953 if (overflow_bubble_) |
| 954 overflow_bubble_->Hide(); | 954 overflow_bubble_->Hide(); |
| 955 } | 955 } |
| 956 } | 956 } |
| 957 | 957 |
| 958 int ShelfView::DetermineLastVisibleIndex(int max_value) const { | 958 int ShelfView::DetermineLastVisibleIndex(int max_value) const { |
| 959 int index = model_->FirstPanelIndex() - 1; | 959 int index = model_->FirstPanelIndex() - 1; |
| 960 while (index >= 0 && | 960 while (index >= 0 && |
| 961 shelf_->PrimaryAxisValue(view_model_->ideal_bounds(index).right(), | 961 wm_shelf_->PrimaryAxisValue( |
| 962 view_model_->ideal_bounds(index).bottom()) > | 962 view_model_->ideal_bounds(index).right(), |
| 963 max_value) { | 963 view_model_->ideal_bounds(index).bottom()) > max_value) { |
| 964 index--; | 964 index--; |
| 965 } | 965 } |
| 966 return index; | 966 return index; |
| 967 } | 967 } |
| 968 | 968 |
| 969 int ShelfView::DetermineFirstVisiblePanelIndex(int min_value) const { | 969 int ShelfView::DetermineFirstVisiblePanelIndex(int min_value) const { |
| 970 int index = model_->FirstPanelIndex(); | 970 int index = model_->FirstPanelIndex(); |
| 971 while (index < view_model_->view_size() && | 971 while (index < view_model_->view_size() && |
| 972 shelf_->PrimaryAxisValue(view_model_->ideal_bounds(index).right(), | 972 wm_shelf_->PrimaryAxisValue( |
| 973 view_model_->ideal_bounds(index).bottom()) < | 973 view_model_->ideal_bounds(index).right(), |
| 974 min_value) { | 974 view_model_->ideal_bounds(index).bottom()) < min_value) { |
| 975 ++index; | 975 ++index; |
| 976 } | 976 } |
| 977 return index; | 977 return index; |
| 978 } | 978 } |
| 979 | 979 |
| 980 void ShelfView::AddIconObserver(ShelfIconObserver* observer) { | 980 void ShelfView::AddIconObserver(ShelfIconObserver* observer) { |
| 981 observers_.AddObserver(observer); | 981 observers_.AddObserver(observer); |
| 982 } | 982 } |
| 983 | 983 |
| 984 void ShelfView::RemoveIconObserver(ShelfIconObserver* observer) { | 984 void ShelfView::RemoveIconObserver(ShelfIconObserver* observer) { |
| (...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1095 // Constrain the location to the range of valid indices for the type. | 1095 // Constrain the location to the range of valid indices for the type. |
| 1096 std::pair<int, int> indices(GetDragRange(current_index)); | 1096 std::pair<int, int> indices(GetDragRange(current_index)); |
| 1097 int first_drag_index = indices.first; | 1097 int first_drag_index = indices.first; |
| 1098 int last_drag_index = indices.second; | 1098 int last_drag_index = indices.second; |
| 1099 // If the last index isn't valid, we're overflowing. Constrain to the app list | 1099 // If the last index isn't valid, we're overflowing. Constrain to the app list |
| 1100 // (which is the last visible item). | 1100 // (which is the last visible item). |
| 1101 if (first_drag_index < model_->FirstPanelIndex() && | 1101 if (first_drag_index < model_->FirstPanelIndex() && |
| 1102 last_drag_index > last_visible_index_) | 1102 last_drag_index > last_visible_index_) |
| 1103 last_drag_index = last_visible_index_; | 1103 last_drag_index = last_visible_index_; |
| 1104 int x = 0, y = 0; | 1104 int x = 0, y = 0; |
| 1105 if (shelf_->IsHorizontalAlignment()) { | 1105 if (wm_shelf_->IsHorizontalAlignment()) { |
| 1106 x = std::max(view_model_->ideal_bounds(indices.first).x(), | 1106 x = std::max(view_model_->ideal_bounds(indices.first).x(), |
| 1107 drag_point.x() - drag_origin_.x()); | 1107 drag_point.x() - drag_origin_.x()); |
| 1108 x = std::min(view_model_->ideal_bounds(last_drag_index).right() - | 1108 x = std::min(view_model_->ideal_bounds(last_drag_index).right() - |
| 1109 view_model_->ideal_bounds(current_index).width(), | 1109 view_model_->ideal_bounds(current_index).width(), |
| 1110 x); | 1110 x); |
| 1111 if (drag_view_->x() == x) | 1111 if (drag_view_->x() == x) |
| 1112 return; | 1112 return; |
| 1113 drag_view_->SetX(x); | 1113 drag_view_->SetX(x); |
| 1114 } else { | 1114 } else { |
| 1115 y = std::max(view_model_->ideal_bounds(indices.first).y(), | 1115 y = std::max(view_model_->ideal_bounds(indices.first).y(), |
| 1116 drag_point.y() - drag_origin_.y()); | 1116 drag_point.y() - drag_origin_.y()); |
| 1117 y = std::min(view_model_->ideal_bounds(last_drag_index).bottom() - | 1117 y = std::min(view_model_->ideal_bounds(last_drag_index).bottom() - |
| 1118 view_model_->ideal_bounds(current_index).height(), | 1118 view_model_->ideal_bounds(current_index).height(), |
| 1119 y); | 1119 y); |
| 1120 if (drag_view_->y() == y) | 1120 if (drag_view_->y() == y) |
| 1121 return; | 1121 return; |
| 1122 drag_view_->SetY(y); | 1122 drag_view_->SetY(y); |
| 1123 } | 1123 } |
| 1124 | 1124 |
| 1125 int target_index = views::ViewModelUtils::DetermineMoveIndex( | 1125 int target_index = views::ViewModelUtils::DetermineMoveIndex( |
| 1126 *view_model_, drag_view_, | 1126 *view_model_, drag_view_, |
| 1127 shelf_->IsHorizontalAlignment() ? views::ViewModelUtils::HORIZONTAL | 1127 wm_shelf_->IsHorizontalAlignment() ? views::ViewModelUtils::HORIZONTAL |
| 1128 : views::ViewModelUtils::VERTICAL, | 1128 : views::ViewModelUtils::VERTICAL, |
| 1129 x, y); | 1129 x, y); |
| 1130 target_index = | 1130 target_index = |
| 1131 std::min(indices.second, std::max(target_index, indices.first)); | 1131 std::min(indices.second, std::max(target_index, indices.first)); |
| 1132 | 1132 |
| 1133 int first_draggable_item = 0; | 1133 int first_draggable_item = 0; |
| 1134 while (first_draggable_item < static_cast<int>(model_->items().size()) && | 1134 while (first_draggable_item < static_cast<int>(model_->items().size()) && |
| 1135 !model_->GetShelfItemDelegate(model_->items()[first_draggable_item].id) | 1135 !model_->GetShelfItemDelegate(model_->items()[first_draggable_item].id) |
| 1136 ->IsDraggable()) { | 1136 ->IsDraggable()) { |
| 1137 first_draggable_item++; | 1137 first_draggable_item++; |
| 1138 } | 1138 } |
| 1139 | 1139 |
| 1140 target_index = std::max(target_index, first_draggable_item); | 1140 target_index = std::max(target_index, first_draggable_item); |
| 1141 | 1141 |
| 1142 if (target_index == current_index) | 1142 if (target_index == current_index) |
| 1143 return; | 1143 return; |
| 1144 | 1144 |
| 1145 // Change the model, the ShelfItemMoved() callback will handle the | 1145 // Change the model, the ShelfItemMoved() callback will handle the |
| 1146 // |view_model_| update. | 1146 // |view_model_| update. |
| 1147 model_->Move(current_index, target_index); | 1147 model_->Move(current_index, target_index); |
| 1148 bounds_animator_->StopAnimatingView(drag_view_); | 1148 bounds_animator_->StopAnimatingView(drag_view_); |
| 1149 } | 1149 } |
| 1150 | 1150 |
| 1151 bool ShelfView::HandleRipOffDrag(const ui::LocatedEvent& event) { | 1151 bool ShelfView::HandleRipOffDrag(const ui::LocatedEvent& event) { |
| 1152 int current_index = view_model_->GetIndexOfView(drag_view_); | 1152 int current_index = view_model_->GetIndexOfView(drag_view_); |
| 1153 DCHECK_NE(-1, current_index); | 1153 DCHECK_NE(-1, current_index); |
| 1154 std::string dragged_app_id = | 1154 std::string dragged_app_id = |
| 1155 delegate_->GetAppIDForShelfID(model_->items()[current_index].id); | 1155 delegate_->GetAppIDForShelfID(model_->items()[current_index].id); |
| 1156 | 1156 |
| 1157 gfx::Point screen_location = event.root_location(); | 1157 gfx::Point screen_location = |
| 1158 ::wm::ConvertPointToScreen(GetWidget()->GetNativeWindow()->GetRootWindow(), | 1158 WmLookup::Get() |
| 1159 &screen_location); | 1159 ->GetWindowForWidget(GetWidget()) |
| 1160 ->GetRootWindow() |
| 1161 ->ConvertPointToScreen(event.root_location()); |
| 1160 | 1162 |
| 1161 // To avoid ugly forwards and backwards flipping we use different constants | 1163 // To avoid ugly forwards and backwards flipping we use different constants |
| 1162 // for ripping off / re-inserting the items. | 1164 // for ripping off / re-inserting the items. |
| 1163 if (dragged_off_shelf_) { | 1165 if (dragged_off_shelf_) { |
| 1164 // If the shelf/overflow bubble bounds contains |screen_location| we insert | 1166 // If the shelf/overflow bubble bounds contains |screen_location| we insert |
| 1165 // the item back into the shelf. | 1167 // the item back into the shelf. |
| 1166 if (GetBoundsForDragInsertInScreen().Contains(screen_location)) { | 1168 if (GetBoundsForDragInsertInScreen().Contains(screen_location)) { |
| 1167 if (dragged_off_from_overflow_to_shelf_) { | 1169 if (dragged_off_from_overflow_to_shelf_) { |
| 1168 // During the dragging an item from Shelf to Overflow, it can enter here | 1170 // During the dragging an item from Shelf to Overflow, it can enter here |
| 1169 // directly because both are located very closly. | 1171 // directly because both are located very closly. |
| (...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1366 void ShelfView::ToggleOverflowBubble() { | 1368 void ShelfView::ToggleOverflowBubble() { |
| 1367 if (IsShowingOverflowBubble()) { | 1369 if (IsShowingOverflowBubble()) { |
| 1368 overflow_bubble_->Hide(); | 1370 overflow_bubble_->Hide(); |
| 1369 return; | 1371 return; |
| 1370 } | 1372 } |
| 1371 | 1373 |
| 1372 if (!overflow_bubble_) | 1374 if (!overflow_bubble_) |
| 1373 overflow_bubble_.reset(new OverflowBubble(wm_shelf_)); | 1375 overflow_bubble_.reset(new OverflowBubble(wm_shelf_)); |
| 1374 | 1376 |
| 1375 ShelfView* overflow_view = | 1377 ShelfView* overflow_view = |
| 1376 new ShelfView(model_, delegate_, wm_shelf_, shelf_); | 1378 new ShelfView(model_, delegate_, wm_shelf_, shelf_widget_); |
| 1377 overflow_view->overflow_mode_ = true; | 1379 overflow_view->overflow_mode_ = true; |
| 1378 overflow_view->Init(); | 1380 overflow_view->Init(); |
| 1379 overflow_view->set_owner_overflow_bubble(overflow_bubble_.get()); | 1381 overflow_view->set_owner_overflow_bubble(overflow_bubble_.get()); |
| 1380 overflow_view->OnShelfAlignmentChanged(); | 1382 overflow_view->OnShelfAlignmentChanged(); |
| 1381 overflow_view->main_shelf_ = this; | 1383 overflow_view->main_shelf_ = this; |
| 1382 UpdateOverflowRange(overflow_view); | 1384 UpdateOverflowRange(overflow_view); |
| 1383 | 1385 |
| 1384 overflow_bubble_->Show(overflow_button_, overflow_view); | 1386 overflow_bubble_->Show(overflow_button_, overflow_view); |
| 1385 | 1387 |
| 1386 wm_shelf_->UpdateVisibilityState(); | 1388 wm_shelf_->UpdateVisibilityState(); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1425 const int last_button_index = view_model_->view_size() - 1; | 1427 const int last_button_index = view_model_->view_size() - 1; |
| 1426 gfx::Rect last_button_bounds = | 1428 gfx::Rect last_button_bounds = |
| 1427 view_model_->view_at(last_button_index)->bounds(); | 1429 view_model_->view_at(last_button_index)->bounds(); |
| 1428 if (overflow_button_->visible() && | 1430 if (overflow_button_->visible() && |
| 1429 model_->GetItemIndexForType(TYPE_APP_PANEL) == -1) { | 1431 model_->GetItemIndexForType(TYPE_APP_PANEL) == -1) { |
| 1430 // When overflow button is visible and shelf has no panel items, | 1432 // When overflow button is visible and shelf has no panel items, |
| 1431 // last_button_bounds should be overflow button's bounds. | 1433 // last_button_bounds should be overflow button's bounds. |
| 1432 last_button_bounds = overflow_button_->bounds(); | 1434 last_button_bounds = overflow_button_->bounds(); |
| 1433 } | 1435 } |
| 1434 | 1436 |
| 1435 if (shelf_->IsHorizontalAlignment()) { | 1437 if (wm_shelf_->IsHorizontalAlignment()) { |
| 1436 preferred_size = gfx::Size(last_button_bounds.right() + leading_inset_, | 1438 preferred_size = gfx::Size(last_button_bounds.right() + leading_inset_, |
| 1437 GetShelfConstant(SHELF_SIZE)); | 1439 GetShelfConstant(SHELF_SIZE)); |
| 1438 } else { | 1440 } else { |
| 1439 preferred_size = gfx::Size(GetShelfConstant(SHELF_SIZE), | 1441 preferred_size = gfx::Size(GetShelfConstant(SHELF_SIZE), |
| 1440 last_button_bounds.bottom() + leading_inset_); | 1442 last_button_bounds.bottom() + leading_inset_); |
| 1441 } | 1443 } |
| 1442 } | 1444 } |
| 1443 gfx::Point origin(GetMirroredXWithWidthInView(0, preferred_size.width()), 0); | 1445 gfx::Point origin(GetMirroredXWithWidthInView(0, preferred_size.width()), 0); |
| 1444 | 1446 |
| 1445 // In overflow mode, we should use OverflowBubbleView as a source for | 1447 // In overflow mode, we should use OverflowBubbleView as a source for |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1499 if (is_overflow_mode() && dragged_off_shelf_ && | 1501 if (is_overflow_mode() && dragged_off_shelf_ && |
| 1500 !dragged_off_from_overflow_to_shelf_ && | 1502 !dragged_off_from_overflow_to_shelf_ && |
| 1501 RemovableByRipOff(view_model_->GetIndexOfView(drag_view_)) == REMOVABLE) | 1503 RemovableByRipOff(view_model_->GetIndexOfView(drag_view_)) == REMOVABLE) |
| 1502 last_button_index--; | 1504 last_button_index--; |
| 1503 | 1505 |
| 1504 const gfx::Rect last_button_bounds = | 1506 const gfx::Rect last_button_bounds = |
| 1505 last_button_index >= first_visible_index_ | 1507 last_button_index >= first_visible_index_ |
| 1506 ? view_model_->ideal_bounds(last_button_index) | 1508 ? view_model_->ideal_bounds(last_button_index) |
| 1507 : gfx::Rect(gfx::Size(shelf_size, shelf_size)); | 1509 : gfx::Rect(gfx::Size(shelf_size, shelf_size)); |
| 1508 | 1510 |
| 1509 if (shelf_->IsHorizontalAlignment()) | 1511 if (wm_shelf_->IsHorizontalAlignment()) |
| 1510 return gfx::Size(last_button_bounds.right() + leading_inset_, shelf_size); | 1512 return gfx::Size(last_button_bounds.right() + leading_inset_, shelf_size); |
| 1511 | 1513 |
| 1512 return gfx::Size(shelf_size, last_button_bounds.bottom() + leading_inset_); | 1514 return gfx::Size(shelf_size, last_button_bounds.bottom() + leading_inset_); |
| 1513 } | 1515 } |
| 1514 | 1516 |
| 1515 void ShelfView::OnBoundsChanged(const gfx::Rect& previous_bounds) { | 1517 void ShelfView::OnBoundsChanged(const gfx::Rect& previous_bounds) { |
| 1516 // This bounds change is produced by the shelf movement and all content has | 1518 // This bounds change is produced by the shelf movement and all content has |
| 1517 // to follow. Using an animation at that time would produce a time lag since | 1519 // to follow. Using an animation at that time would produce a time lag since |
| 1518 // the animation of the BoundsAnimator has itself a delay before it arrives | 1520 // the animation of the BoundsAnimator has itself a delay before it arrives |
| 1519 // at the required location. As such we tell the animator to go there | 1521 // at the required location. As such we tell the animator to go there |
| (...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1830 // It is possible to invoke the menu while it is sliding into view. To cover | 1832 // It is possible to invoke the menu while it is sliding into view. To cover |
| 1831 // that case, the screen coordinates are offsetted by the animation delta. | 1833 // that case, the screen coordinates are offsetted by the animation delta. |
| 1832 anchor = source->GetBoundsInScreen() + (window->GetTargetBounds().origin() - | 1834 anchor = source->GetBoundsInScreen() + (window->GetTargetBounds().origin() - |
| 1833 window->GetBounds().origin()); | 1835 window->GetBounds().origin()); |
| 1834 | 1836 |
| 1835 // Adjust the anchor location for shelf items with asymmetrical borders. | 1837 // Adjust the anchor location for shelf items with asymmetrical borders. |
| 1836 if (source->border()) | 1838 if (source->border()) |
| 1837 anchor.Inset(source->border()->GetInsets()); | 1839 anchor.Inset(source->border()->GetInsets()); |
| 1838 | 1840 |
| 1839 // Determine the menu alignment dependent on the shelf. | 1841 // Determine the menu alignment dependent on the shelf. |
| 1840 menu_alignment = shelf_->SelectValueForShelfAlignment( | 1842 switch (wm_shelf_->GetAlignment()) { |
| 1841 views::MENU_ANCHOR_BUBBLE_ABOVE, views::MENU_ANCHOR_BUBBLE_RIGHT, | 1843 case SHELF_ALIGNMENT_BOTTOM: |
| 1842 views::MENU_ANCHOR_BUBBLE_LEFT); | 1844 case SHELF_ALIGNMENT_BOTTOM_LOCKED: |
| 1845 menu_alignment = views::MENU_ANCHOR_BUBBLE_ABOVE; |
| 1846 break; |
| 1847 case SHELF_ALIGNMENT_LEFT: |
| 1848 menu_alignment = views::MENU_ANCHOR_BUBBLE_RIGHT; |
| 1849 break; |
| 1850 case SHELF_ALIGNMENT_RIGHT: |
| 1851 menu_alignment = views::MENU_ANCHOR_BUBBLE_LEFT; |
| 1852 break; |
| 1853 } |
| 1843 } | 1854 } |
| 1844 | 1855 |
| 1845 shelf_->shelf_widget()->ForceUndimming(true); | 1856 shelf_widget_->ForceUndimming(true); |
| 1846 // NOTE: if you convert to HAS_MNEMONICS be sure to update menu building code. | 1857 // NOTE: if you convert to HAS_MNEMONICS be sure to update menu building code. |
| 1847 launcher_menu_runner_->RunMenuAt(source->GetWidget(), nullptr, anchor, | 1858 launcher_menu_runner_->RunMenuAt(source->GetWidget(), nullptr, anchor, |
| 1848 menu_alignment, source_type); | 1859 menu_alignment, source_type); |
| 1849 } | 1860 } |
| 1850 | 1861 |
| 1851 void ShelfView::OnMenuClosed(views::InkDrop* ink_drop) { | 1862 void ShelfView::OnMenuClosed(views::InkDrop* ink_drop) { |
| 1852 context_menu_id_ = 0; | 1863 context_menu_id_ = 0; |
| 1853 shelf_->shelf_widget()->ForceUndimming(false); | 1864 shelf_widget_->ForceUndimming(false); |
| 1854 | 1865 |
| 1855 // Hide the hide overflow bubble after showing a context menu for its items. | 1866 // Hide the hide overflow bubble after showing a context menu for its items. |
| 1856 if (owner_overflow_bubble_) | 1867 if (owner_overflow_bubble_) |
| 1857 owner_overflow_bubble_->HideBubbleAndRefreshButton(); | 1868 owner_overflow_bubble_->HideBubbleAndRefreshButton(); |
| 1858 | 1869 |
| 1859 closing_event_time_ = launcher_menu_runner_->closing_event_time(); | 1870 closing_event_time_ = launcher_menu_runner_->closing_event_time(); |
| 1860 | 1871 |
| 1861 if (ink_drop) | 1872 if (ink_drop) |
| 1862 ink_drop->AnimateToState(views::InkDropState::DEACTIVATED); | 1873 ink_drop->AnimateToState(views::InkDropState::DEACTIVATED); |
| 1863 | 1874 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1906 return closing_event_time_ == event.time_stamp(); | 1917 return closing_event_time_ == event.time_stamp(); |
| 1907 } | 1918 } |
| 1908 | 1919 |
| 1909 const ShelfItem* ShelfView::ShelfItemForView(const views::View* view) const { | 1920 const ShelfItem* ShelfView::ShelfItemForView(const views::View* view) const { |
| 1910 const int view_index = view_model_->GetIndexOfView(view); | 1921 const int view_index = view_model_->GetIndexOfView(view); |
| 1911 return (view_index < 0) ? nullptr : &(model_->items()[view_index]); | 1922 return (view_index < 0) ? nullptr : &(model_->items()[view_index]); |
| 1912 } | 1923 } |
| 1913 | 1924 |
| 1914 int ShelfView::CalculateShelfDistance(const gfx::Point& coordinate) const { | 1925 int ShelfView::CalculateShelfDistance(const gfx::Point& coordinate) const { |
| 1915 const gfx::Rect bounds = GetBoundsInScreen(); | 1926 const gfx::Rect bounds = GetBoundsInScreen(); |
| 1916 int distance = shelf_->SelectValueForShelfAlignment( | 1927 int distance = wm_shelf_->SelectValueForShelfAlignment( |
| 1917 bounds.y() - coordinate.y(), coordinate.x() - bounds.right(), | 1928 bounds.y() - coordinate.y(), coordinate.x() - bounds.right(), |
| 1918 bounds.x() - coordinate.x()); | 1929 bounds.x() - coordinate.x()); |
| 1919 return distance > 0 ? distance : 0; | 1930 return distance > 0 ? distance : 0; |
| 1920 } | 1931 } |
| 1921 | 1932 |
| 1922 } // namespace ash | 1933 } // namespace ash |
| OLD | NEW |