| Index: ash/common/shelf/shelf_view.cc
|
| diff --git a/ash/shelf/shelf_view.cc b/ash/common/shelf/shelf_view.cc
|
| similarity index 95%
|
| rename from ash/shelf/shelf_view.cc
|
| rename to ash/common/shelf/shelf_view.cc
|
| index 44cd83d6d66f76e5f1e028f9803e844a215506fc..935045d8b729184cafa6605d491fe3e3d92dc8cd 100644
|
| --- a/ash/shelf/shelf_view.cc
|
| +++ b/ash/common/shelf/shelf_view.cc
|
| @@ -2,7 +2,7 @@
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| -#include "ash/shelf/shelf_view.h"
|
| +#include "ash/common/shelf/shelf_view.h"
|
|
|
| #include <algorithm>
|
| #include <memory>
|
| @@ -18,6 +18,7 @@
|
| #include "ash/common/shelf/shelf_button.h"
|
| #include "ash/common/shelf/shelf_constants.h"
|
| #include "ash/common/shelf/shelf_delegate.h"
|
| +#include "ash/common/shelf/shelf_icon_observer.h"
|
| #include "ash/common/shelf/shelf_menu_model.h"
|
| #include "ash/common/shelf/shelf_model.h"
|
| #include "ash/common/shelf/wm_shelf.h"
|
| @@ -26,14 +27,11 @@
|
| #include "ash/common/wm_lookup.h"
|
| #include "ash/common/wm_shell.h"
|
| #include "ash/common/wm_window.h"
|
| -#include "ash/shelf/shelf.h"
|
| -#include "ash/shelf/shelf_icon_observer.h"
|
| #include "ash/shelf/shelf_widget.h"
|
| #include "base/auto_reset.h"
|
| #include "base/metrics/histogram.h"
|
| #include "grit/ash_strings.h"
|
| #include "ui/accessibility/ax_view_state.h"
|
| -#include "ui/aura/window.h"
|
| #include "ui/base/l10n/l10n_util.h"
|
| #include "ui/base/models/simple_menu_model.h"
|
| #include "ui/base/resource/resource_bundle.h"
|
| @@ -359,11 +357,11 @@ const int ShelfView::kMinimumDragDistance = 8;
|
| ShelfView::ShelfView(ShelfModel* model,
|
| ShelfDelegate* delegate,
|
| WmShelf* wm_shelf,
|
| - Shelf* shelf)
|
| + ShelfWidget* shelf_widget)
|
| : model_(model),
|
| delegate_(delegate),
|
| wm_shelf_(wm_shelf),
|
| - shelf_(shelf),
|
| + shelf_widget_(shelf_widget),
|
| view_model_(new views::ViewModel),
|
| first_visible_index_(0),
|
| last_visible_index_(-1),
|
| @@ -391,6 +389,7 @@ ShelfView::ShelfView(ShelfModel* model,
|
| DCHECK(model_);
|
| DCHECK(delegate_);
|
| DCHECK(wm_shelf_);
|
| + DCHECK(shelf_widget_);
|
| bounds_animator_.reset(new views::BoundsAnimator(this));
|
| bounds_animator_->AddObserver(this);
|
| set_context_menu_controller(this);
|
| @@ -478,19 +477,20 @@ void ShelfView::UpdatePanelIconPosition(ShelfID id,
|
|
|
| gfx::Point midpoint_in_view(GetMirroredXInView(midpoint.x()), midpoint.y());
|
| int target_index = current_index;
|
| - while (target_index > first_panel_index &&
|
| - shelf_->PrimaryAxisValue(view_model_->ideal_bounds(target_index).x(),
|
| + while (
|
| + target_index > first_panel_index &&
|
| + wm_shelf_->PrimaryAxisValue(view_model_->ideal_bounds(target_index).x(),
|
| view_model_->ideal_bounds(target_index).y()) >
|
| - shelf_->PrimaryAxisValue(midpoint_in_view.x(),
|
| + wm_shelf_->PrimaryAxisValue(midpoint_in_view.x(),
|
| midpoint_in_view.y())) {
|
| --target_index;
|
| }
|
| while (target_index < view_model_->view_size() - 1 &&
|
| - shelf_->PrimaryAxisValue(
|
| + wm_shelf_->PrimaryAxisValue(
|
| view_model_->ideal_bounds(target_index).right(),
|
| view_model_->ideal_bounds(target_index).bottom()) <
|
| - shelf_->PrimaryAxisValue(midpoint_in_view.x(),
|
| - midpoint_in_view.y())) {
|
| + wm_shelf_->PrimaryAxisValue(midpoint_in_view.x(),
|
| + midpoint_in_view.y())) {
|
| ++target_index;
|
| }
|
| if (current_index != target_index)
|
| @@ -752,7 +752,7 @@ void ShelfView::PointerPressedOnButton(views::View* view,
|
| drag_view_ = static_cast<ShelfButton*>(view);
|
| drag_origin_ = gfx::Point(event.x(), event.y());
|
| UMA_HISTOGRAM_ENUMERATION("Ash.ShelfAlignmentUsage",
|
| - shelf_->SelectValueForShelfAlignment(
|
| + wm_shelf_->SelectValueForShelfAlignment(
|
| SHELF_ALIGNMENT_UMA_ENUM_VALUE_BOTTOM,
|
| SHELF_ALIGNMENT_UMA_ENUM_VALUE_LEFT,
|
| SHELF_ALIGNMENT_UMA_ENUM_VALUE_RIGHT),
|
| @@ -825,7 +825,7 @@ void ShelfView::UpdateAllButtonsVisibilityInOverflowMode() {
|
| }
|
|
|
| void ShelfView::CalculateIdealBounds(IdealBounds* bounds) const {
|
| - int available_size = shelf_->PrimaryAxisValue(width(), height());
|
| + int available_size = wm_shelf_->PrimaryAxisValue(width(), height());
|
| DCHECK(model_->item_count() == view_model_->view_size());
|
| if (!available_size)
|
| return;
|
| @@ -838,8 +838,8 @@ void ShelfView::CalculateIdealBounds(IdealBounds* bounds) const {
|
| int button_size = GetShelfConstant(SHELF_BUTTON_SIZE);
|
| int button_spacing = GetShelfConstant(SHELF_BUTTON_SPACING);
|
|
|
| - int w = shelf_->PrimaryAxisValue(button_size, width());
|
| - int h = shelf_->PrimaryAxisValue(height(), button_size);
|
| + int w = wm_shelf_->PrimaryAxisValue(button_size, width());
|
| + int h = wm_shelf_->PrimaryAxisValue(height(), button_size);
|
| for (int i = 0; i < view_model_->view_size(); ++i) {
|
| if (i < first_visible_index_) {
|
| view_model_->set_ideal_bounds(i, gfx::Rect(x, y, 0, 0));
|
| @@ -847,8 +847,8 @@ void ShelfView::CalculateIdealBounds(IdealBounds* bounds) const {
|
| }
|
|
|
| view_model_->set_ideal_bounds(i, gfx::Rect(x, y, w, h));
|
| - x = shelf_->PrimaryAxisValue(x + w + button_spacing, x);
|
| - y = shelf_->PrimaryAxisValue(y, y + h + button_spacing);
|
| + x = wm_shelf_->PrimaryAxisValue(x + w + button_spacing, x);
|
| + y = wm_shelf_->PrimaryAxisValue(y, y + h + button_spacing);
|
| }
|
|
|
| if (is_overflow_mode()) {
|
| @@ -858,19 +858,19 @@ void ShelfView::CalculateIdealBounds(IdealBounds* bounds) const {
|
|
|
| // Right aligned icons.
|
| int end_position = available_size - button_spacing;
|
| - x = shelf_->PrimaryAxisValue(end_position, 0);
|
| - y = shelf_->PrimaryAxisValue(0, end_position);
|
| + x = wm_shelf_->PrimaryAxisValue(end_position, 0);
|
| + y = wm_shelf_->PrimaryAxisValue(0, end_position);
|
| for (int i = view_model_->view_size() - 1; i >= first_panel_index; --i) {
|
| - x = shelf_->PrimaryAxisValue(x - w - button_spacing, x);
|
| - y = shelf_->PrimaryAxisValue(y, y - h - button_spacing);
|
| + x = wm_shelf_->PrimaryAxisValue(x - w - button_spacing, x);
|
| + y = wm_shelf_->PrimaryAxisValue(y, y - h - button_spacing);
|
| view_model_->set_ideal_bounds(i, gfx::Rect(x, y, w, h));
|
| - end_position = shelf_->PrimaryAxisValue(x, y);
|
| + end_position = wm_shelf_->PrimaryAxisValue(x, y);
|
| }
|
|
|
| // Icons on the left / top are guaranteed up to kLeftIconProportion of
|
| // the available space.
|
| int last_icon_position =
|
| - shelf_->PrimaryAxisValue(
|
| + wm_shelf_->PrimaryAxisValue(
|
| view_model_->ideal_bounds(last_button_index).right(),
|
| view_model_->ideal_bounds(last_button_index).bottom()) +
|
| button_size;
|
| @@ -881,8 +881,8 @@ void ShelfView::CalculateIdealBounds(IdealBounds* bounds) const {
|
| end_position = std::max(end_position, reserved_icon_space);
|
|
|
| bounds->overflow_bounds.set_size(
|
| - gfx::Size(shelf_->PrimaryAxisValue(w, width()),
|
| - shelf_->PrimaryAxisValue(height(), h)));
|
| + gfx::Size(wm_shelf_->PrimaryAxisValue(w, width()),
|
| + wm_shelf_->PrimaryAxisValue(height(), h)));
|
|
|
| last_visible_index_ = DetermineLastVisibleIndex(end_position - button_size);
|
| last_hidden_index_ = DetermineFirstVisiblePanelIndex(end_position) - 1;
|
| @@ -929,10 +929,10 @@ void ShelfView::CalculateIdealBounds(IdealBounds* bounds) const {
|
| x = 0;
|
| y = 0;
|
| } else {
|
| - x = shelf_->PrimaryAxisValue(
|
| + x = wm_shelf_->PrimaryAxisValue(
|
| view_model_->ideal_bounds(last_visible_index_).right(),
|
| view_model_->ideal_bounds(last_visible_index_).x());
|
| - y = shelf_->PrimaryAxisValue(
|
| + y = wm_shelf_->PrimaryAxisValue(
|
| view_model_->ideal_bounds(last_visible_index_).y(),
|
| view_model_->ideal_bounds(last_visible_index_).bottom());
|
| }
|
| @@ -942,8 +942,8 @@ void ShelfView::CalculateIdealBounds(IdealBounds* bounds) const {
|
|
|
| // Add more space between last visible item and overflow button.
|
| // Without this, two buttons look too close compared with other items.
|
| - x = shelf_->PrimaryAxisValue(x + button_spacing, x);
|
| - y = shelf_->PrimaryAxisValue(y, y + button_spacing);
|
| + x = wm_shelf_->PrimaryAxisValue(x + button_spacing, x);
|
| + y = wm_shelf_->PrimaryAxisValue(y, y + button_spacing);
|
|
|
| bounds->overflow_bounds.set_x(x);
|
| bounds->overflow_bounds.set_y(y);
|
| @@ -958,9 +958,9 @@ void ShelfView::CalculateIdealBounds(IdealBounds* bounds) const {
|
| int ShelfView::DetermineLastVisibleIndex(int max_value) const {
|
| int index = model_->FirstPanelIndex() - 1;
|
| while (index >= 0 &&
|
| - shelf_->PrimaryAxisValue(view_model_->ideal_bounds(index).right(),
|
| - view_model_->ideal_bounds(index).bottom()) >
|
| - max_value) {
|
| + wm_shelf_->PrimaryAxisValue(
|
| + view_model_->ideal_bounds(index).right(),
|
| + view_model_->ideal_bounds(index).bottom()) > max_value) {
|
| index--;
|
| }
|
| return index;
|
| @@ -969,9 +969,9 @@ int ShelfView::DetermineLastVisibleIndex(int max_value) const {
|
| int ShelfView::DetermineFirstVisiblePanelIndex(int min_value) const {
|
| int index = model_->FirstPanelIndex();
|
| while (index < view_model_->view_size() &&
|
| - shelf_->PrimaryAxisValue(view_model_->ideal_bounds(index).right(),
|
| - view_model_->ideal_bounds(index).bottom()) <
|
| - min_value) {
|
| + wm_shelf_->PrimaryAxisValue(
|
| + view_model_->ideal_bounds(index).right(),
|
| + view_model_->ideal_bounds(index).bottom()) < min_value) {
|
| ++index;
|
| }
|
| return index;
|
| @@ -1102,7 +1102,7 @@ void ShelfView::ContinueDrag(const ui::LocatedEvent& event) {
|
| last_drag_index > last_visible_index_)
|
| last_drag_index = last_visible_index_;
|
| int x = 0, y = 0;
|
| - if (shelf_->IsHorizontalAlignment()) {
|
| + if (wm_shelf_->IsHorizontalAlignment()) {
|
| x = std::max(view_model_->ideal_bounds(indices.first).x(),
|
| drag_point.x() - drag_origin_.x());
|
| x = std::min(view_model_->ideal_bounds(last_drag_index).right() -
|
| @@ -1124,8 +1124,8 @@ void ShelfView::ContinueDrag(const ui::LocatedEvent& event) {
|
|
|
| int target_index = views::ViewModelUtils::DetermineMoveIndex(
|
| *view_model_, drag_view_,
|
| - shelf_->IsHorizontalAlignment() ? views::ViewModelUtils::HORIZONTAL
|
| - : views::ViewModelUtils::VERTICAL,
|
| + wm_shelf_->IsHorizontalAlignment() ? views::ViewModelUtils::HORIZONTAL
|
| + : views::ViewModelUtils::VERTICAL,
|
| x, y);
|
| target_index =
|
| std::min(indices.second, std::max(target_index, indices.first));
|
| @@ -1154,9 +1154,11 @@ bool ShelfView::HandleRipOffDrag(const ui::LocatedEvent& event) {
|
| std::string dragged_app_id =
|
| delegate_->GetAppIDForShelfID(model_->items()[current_index].id);
|
|
|
| - gfx::Point screen_location = event.root_location();
|
| - ::wm::ConvertPointToScreen(GetWidget()->GetNativeWindow()->GetRootWindow(),
|
| - &screen_location);
|
| + gfx::Point screen_location =
|
| + WmLookup::Get()
|
| + ->GetWindowForWidget(GetWidget())
|
| + ->GetRootWindow()
|
| + ->ConvertPointToScreen(event.root_location());
|
|
|
| // To avoid ugly forwards and backwards flipping we use different constants
|
| // for ripping off / re-inserting the items.
|
| @@ -1373,7 +1375,7 @@ void ShelfView::ToggleOverflowBubble() {
|
| overflow_bubble_.reset(new OverflowBubble(wm_shelf_));
|
|
|
| ShelfView* overflow_view =
|
| - new ShelfView(model_, delegate_, wm_shelf_, shelf_);
|
| + new ShelfView(model_, delegate_, wm_shelf_, shelf_widget_);
|
| overflow_view->overflow_mode_ = true;
|
| overflow_view->Init();
|
| overflow_view->set_owner_overflow_bubble(overflow_bubble_.get());
|
| @@ -1432,7 +1434,7 @@ gfx::Rect ShelfView::GetBoundsForDragInsertInScreen() {
|
| last_button_bounds = overflow_button_->bounds();
|
| }
|
|
|
| - if (shelf_->IsHorizontalAlignment()) {
|
| + if (wm_shelf_->IsHorizontalAlignment()) {
|
| preferred_size = gfx::Size(last_button_bounds.right() + leading_inset_,
|
| GetShelfConstant(SHELF_SIZE));
|
| } else {
|
| @@ -1506,7 +1508,7 @@ gfx::Size ShelfView::GetPreferredSize() const {
|
| ? view_model_->ideal_bounds(last_button_index)
|
| : gfx::Rect(gfx::Size(shelf_size, shelf_size));
|
|
|
| - if (shelf_->IsHorizontalAlignment())
|
| + if (wm_shelf_->IsHorizontalAlignment())
|
| return gfx::Size(last_button_bounds.right() + leading_inset_, shelf_size);
|
|
|
| return gfx::Size(shelf_size, last_button_bounds.bottom() + leading_inset_);
|
| @@ -1837,12 +1839,21 @@ void ShelfView::ShowMenu(std::unique_ptr<ui::MenuModel> menu_model,
|
| anchor.Inset(source->border()->GetInsets());
|
|
|
| // Determine the menu alignment dependent on the shelf.
|
| - menu_alignment = shelf_->SelectValueForShelfAlignment(
|
| - views::MENU_ANCHOR_BUBBLE_ABOVE, views::MENU_ANCHOR_BUBBLE_RIGHT,
|
| - views::MENU_ANCHOR_BUBBLE_LEFT);
|
| + switch (wm_shelf_->GetAlignment()) {
|
| + case SHELF_ALIGNMENT_BOTTOM:
|
| + case SHELF_ALIGNMENT_BOTTOM_LOCKED:
|
| + menu_alignment = views::MENU_ANCHOR_BUBBLE_ABOVE;
|
| + break;
|
| + case SHELF_ALIGNMENT_LEFT:
|
| + menu_alignment = views::MENU_ANCHOR_BUBBLE_RIGHT;
|
| + break;
|
| + case SHELF_ALIGNMENT_RIGHT:
|
| + menu_alignment = views::MENU_ANCHOR_BUBBLE_LEFT;
|
| + break;
|
| + }
|
| }
|
|
|
| - shelf_->shelf_widget()->ForceUndimming(true);
|
| + shelf_widget_->ForceUndimming(true);
|
| // NOTE: if you convert to HAS_MNEMONICS be sure to update menu building code.
|
| launcher_menu_runner_->RunMenuAt(source->GetWidget(), nullptr, anchor,
|
| menu_alignment, source_type);
|
| @@ -1850,7 +1861,7 @@ void ShelfView::ShowMenu(std::unique_ptr<ui::MenuModel> menu_model,
|
|
|
| void ShelfView::OnMenuClosed(views::InkDrop* ink_drop) {
|
| context_menu_id_ = 0;
|
| - shelf_->shelf_widget()->ForceUndimming(false);
|
| + shelf_widget_->ForceUndimming(false);
|
|
|
| // Hide the hide overflow bubble after showing a context menu for its items.
|
| if (owner_overflow_bubble_)
|
| @@ -1913,7 +1924,7 @@ const ShelfItem* ShelfView::ShelfItemForView(const views::View* view) const {
|
|
|
| int ShelfView::CalculateShelfDistance(const gfx::Point& coordinate) const {
|
| const gfx::Rect bounds = GetBoundsInScreen();
|
| - int distance = shelf_->SelectValueForShelfAlignment(
|
| + int distance = wm_shelf_->SelectValueForShelfAlignment(
|
| bounds.y() - coordinate.y(), coordinate.x() - bounds.right(),
|
| bounds.x() - coordinate.x());
|
| return distance > 0 ? distance : 0;
|
|
|