Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Side by Side Diff: ash/common/shelf/shelf.cc

Issue 2274333002: ash: Move more code from Shelf to WmShelf (Closed)
Patch Set: review comments Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ash/common/shelf/shelf.h ('k') | ash/common/shelf/shelf_navigator.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/common/shelf/shelf.h" 5 #include "ash/common/shelf/shelf.h"
6 6
7 #include "ash/common/shelf/shelf_delegate.h" 7 #include "ash/common/shelf/shelf_delegate.h"
8 #include "ash/common/shelf/shelf_item_delegate.h"
9 #include "ash/common/shelf/shelf_model.h"
10 #include "ash/common/shelf/shelf_navigator.h"
11 #include "ash/common/shelf/shelf_view.h" 8 #include "ash/common/shelf/shelf_view.h"
12 #include "ash/common/shelf/wm_shelf.h" 9 #include "ash/common/shelf/wm_shelf.h"
13 #include "ash/common/wm_lookup.h"
14 #include "ash/common/wm_root_window_controller.h" 10 #include "ash/common/wm_root_window_controller.h"
15 #include "ash/common/wm_shell.h" 11 #include "ash/common/wm_shell.h"
16 #include "ash/common/wm_window.h" 12 #include "ash/common/wm_window.h"
17 #include "ash/common/wm_window_property.h"
18 #include "ui/gfx/geometry/point.h"
19 #include "ui/gfx/geometry/rect.h"
20 13
21 namespace ash { 14 namespace ash {
22 15
23 Shelf::Shelf(WmShelf* wm_shelf, 16 Shelf::Shelf(WmShelf* wm_shelf,
24 ShelfView* shelf_view, 17 ShelfView* shelf_view,
25 ShelfWidget* shelf_widget) 18 ShelfWidget* shelf_widget)
26 : wm_shelf_(wm_shelf), 19 : wm_shelf_(wm_shelf),
27 shelf_widget_(shelf_widget), 20 shelf_widget_(shelf_widget),
28 shelf_view_(shelf_view) { 21 shelf_view_(shelf_view) {
29 DCHECK(wm_shelf_); 22 DCHECK(wm_shelf_);
30 DCHECK(shelf_view_); 23 DCHECK(shelf_view_);
31 DCHECK(shelf_widget_); 24 DCHECK(shelf_widget_);
32 } 25 }
33 26
34 Shelf::~Shelf() { 27 Shelf::~Shelf() {
35 WmShell::Get()->shelf_delegate()->OnShelfDestroyed(wm_shelf_); 28 WmShell::Get()->shelf_delegate()->OnShelfDestroyed(wm_shelf_);
36 } 29 }
37 30
38 // static 31 // static
39 Shelf* Shelf::ForPrimaryDisplay() { 32 Shelf* Shelf::ForPrimaryDisplay() {
40 return Shelf::ForWindow(WmShell::Get()->GetPrimaryRootWindow()); 33 return Shelf::ForWindow(WmShell::Get()->GetPrimaryRootWindow());
41 } 34 }
42 35
43 // static 36 // static
44 Shelf* Shelf::ForWindow(WmWindow* window) { 37 Shelf* Shelf::ForWindow(WmWindow* window) {
45 return window->GetRootWindowController()->GetShelf()->shelf(); 38 return window->GetRootWindowController()->GetShelf()->shelf();
46 } 39 }
47 40
48 gfx::Rect Shelf::GetScreenBoundsOfItemIconForWindow(WmWindow* window) {
49 ShelfID id = window->GetIntProperty(WmWindowProperty::SHELF_ID);
50 gfx::Rect bounds(shelf_view_->GetIdealBoundsOfItemIcon(id));
51 gfx::Point screen_origin;
52 views::View::ConvertPointToScreen(shelf_view_, &screen_origin);
53 return gfx::Rect(screen_origin.x() + bounds.x(),
54 screen_origin.y() + bounds.y(), bounds.width(),
55 bounds.height());
56 }
57
58 void Shelf::UpdateIconPositionForWindow(WmWindow* window) {
59 WmWindow* shelf_window = WmLookup::Get()->GetWindowForWidget(shelf_widget_);
60 shelf_view_->UpdatePanelIconPosition(
61 window->GetIntProperty(WmWindowProperty::SHELF_ID),
62 shelf_window->ConvertRectFromScreen(window->GetBoundsInScreen())
63 .CenterPoint());
64 }
65
66 void Shelf::ActivateShelfItem(int index) {
67 // We pass in a keyboard event which will then trigger a switch to the
68 // next item if the current one is already active.
69 ui::KeyEvent event(ui::ET_KEY_RELEASED,
70 ui::VKEY_UNKNOWN, // The actual key gets ignored.
71 ui::EF_NONE);
72
73 ShelfModel* shelf_model = WmShell::Get()->shelf_model();
74 const ShelfItem& item = shelf_model->items()[index];
75 ShelfItemDelegate* item_delegate = shelf_model->GetShelfItemDelegate(item.id);
76 item_delegate->ItemSelected(event);
77 }
78
79 void Shelf::CycleWindowLinear(CycleDirection direction) {
80 int item_index =
81 GetNextActivatedItemIndex(*WmShell::Get()->shelf_model(), direction);
82 if (item_index >= 0)
83 ActivateShelfItem(item_index);
84 }
85
86 AppListButton* Shelf::GetAppListButton() const { 41 AppListButton* Shelf::GetAppListButton() const {
87 return shelf_view_->GetAppListButton(); 42 return shelf_view_->GetAppListButton();
88 } 43 }
89 44
90 void Shelf::LaunchAppIndexAt(int item_index) {
91 ShelfModel* shelf_model = WmShell::Get()->shelf_model();
92 const ShelfItems& items = shelf_model->items();
93 int item_count = shelf_model->item_count();
94 int indexes_left = item_index >= 0 ? item_index : item_count;
95 int found_index = -1;
96
97 // Iterating until we have hit the index we are interested in which
98 // is true once indexes_left becomes negative.
99 for (int i = 0; i < item_count && indexes_left >= 0; i++) {
100 if (items[i].type != TYPE_APP_LIST) {
101 found_index = i;
102 indexes_left--;
103 }
104 }
105
106 // There are two ways how found_index can be valid: a.) the nth item was
107 // found (which is true when indexes_left is -1) or b.) the last item was
108 // requested (which is true when index was passed in as a negative number).
109 if (found_index >= 0 && (indexes_left == -1 || item_index < 0)) {
110 // Then set this one as active (or advance to the next item of its kind).
111 ActivateShelfItem(found_index);
112 }
113 }
114
115 gfx::Rect Shelf::GetVisibleItemsBoundsInScreen() const {
116 return shelf_view_->GetVisibleItemsBoundsInScreen();
117 }
118
119 app_list::ApplicationDragAndDropHost* Shelf::GetDragAndDropHostForAppList() { 45 app_list::ApplicationDragAndDropHost* Shelf::GetDragAndDropHostForAppList() {
120 return shelf_view_; 46 return shelf_view_;
121 } 47 }
122 48
123 void Shelf::UpdateShelfItemBackground(int alpha) {
124 shelf_view_->UpdateShelfItemBackground(alpha);
125 }
126
127 } // namespace ash 49 } // namespace ash
OLDNEW
« no previous file with comments | « ash/common/shelf/shelf.h ('k') | ash/common/shelf/shelf_navigator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698