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

Side by Side Diff: ash/launcher/launcher_view.cc

Issue 10829268: chromeos: Sync animation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: for sky's comments in #3 Created 8 years, 4 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 | Annotate | Revision Log
OLDNEW
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/launcher/launcher_view.h" 5 #include "ash/launcher/launcher_view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "ash/launcher/app_list_button.h" 9 #include "ash/launcher/app_list_button.h"
10 #include "ash/launcher/app_placeholder_view.h"
10 #include "ash/launcher/launcher_button.h" 11 #include "ash/launcher/launcher_button.h"
11 #include "ash/launcher/launcher_delegate.h" 12 #include "ash/launcher/launcher_delegate.h"
12 #include "ash/launcher/launcher_icon_observer.h" 13 #include "ash/launcher/launcher_icon_observer.h"
13 #include "ash/launcher/launcher_model.h" 14 #include "ash/launcher/launcher_model.h"
14 #include "ash/launcher/launcher_tooltip_manager.h" 15 #include "ash/launcher/launcher_tooltip_manager.h"
15 #include "ash/launcher/overflow_bubble.h" 16 #include "ash/launcher/overflow_bubble.h"
16 #include "ash/launcher/overflow_button.h" 17 #include "ash/launcher/overflow_button.h"
17 #include "ash/launcher/tabbed_launcher_button.h" 18 #include "ash/launcher/tabbed_launcher_button.h"
18 #include "ash/shell.h" 19 #include "ash/shell.h"
19 #include "ash/shell_delegate.h" 20 #include "ash/shell_delegate.h"
20 #include "base/auto_reset.h" 21 #include "base/auto_reset.h"
22 #include "base/memory/scoped_ptr.h"
21 #include "base/utf_string_conversions.h" 23 #include "base/utf_string_conversions.h"
22 #include "grit/ash_strings.h" 24 #include "grit/ash_strings.h"
23 #include "grit/ui_resources.h" 25 #include "grit/ui_resources.h"
24 #include "ui/aura/window.h" 26 #include "ui/aura/window.h"
25 #include "ui/base/animation/animation.h" 27 #include "ui/base/animation/animation.h"
26 #include "ui/base/animation/throb_animation.h" 28 #include "ui/base/animation/throb_animation.h"
27 #include "ui/base/l10n/l10n_util.h" 29 #include "ui/base/l10n/l10n_util.h"
28 #include "ui/base/models/simple_menu_model.h" 30 #include "ui/base/models/simple_menu_model.h"
29 #include "ui/base/resource/resource_bundle.h" 31 #include "ui/base/resource/resource_bundle.h"
30 #include "ui/compositor/layer.h" 32 #include "ui/compositor/layer.h"
31 #include "ui/gfx/image/image.h" 33 #include "ui/gfx/image/image.h"
32 #include "ui/views/animation/bounds_animator.h" 34 #include "ui/views/animation/bounds_animator.h"
33 #include "ui/views/border.h" 35 #include "ui/views/border.h"
34 #include "ui/views/controls/button/image_button.h"
35 #include "ui/views/controls/menu/menu_model_adapter.h" 36 #include "ui/views/controls/menu/menu_model_adapter.h"
36 #include "ui/views/controls/menu/menu_runner.h" 37 #include "ui/views/controls/menu/menu_runner.h"
37 #include "ui/views/focus/focus_search.h" 38 #include "ui/views/focus/focus_search.h"
38 #include "ui/views/view_model.h" 39 #include "ui/views/view_model.h"
39 #include "ui/views/view_model_utils.h" 40 #include "ui/views/view_model_utils.h"
40 #include "ui/views/widget/root_view.h" 41 #include "ui/views/widget/root_view.h"
41 #include "ui/views/widget/widget.h" 42 #include "ui/views/widget/widget.h"
42 43
43 using ui::Animation; 44 using ui::Animation;
44 using views::View; 45 using views::View;
45 46
46 namespace ash { 47 namespace ash {
47 namespace internal { 48 namespace internal {
48 49
49 // Default amount content is inset on the left edge. 50 // Default amount content is inset on the left edge.
50 static const int kDefaultLeadingInset = 8; 51 const int kDefaultLeadingInset = 8;
51 52
52 // Minimum distance before drag starts. 53 // Minimum distance before drag starts.
53 static const int kMinimumDragDistance = 8; 54 const int kMinimumDragDistance = 8;
54 55
55 // Size between the buttons. 56 // Size between the buttons.
56 static const int kButtonSpacing = 4; 57 const int kButtonSpacing = 4;
57 58
58 namespace { 59 namespace {
59 60
60 // Custom FocusSearch used to navigate the launcher in the order items are in 61 // Custom FocusSearch used to navigate the launcher in the order items are in
61 // the ViewModel. 62 // the ViewModel.
62 class LauncherFocusSearch : public views::FocusSearch { 63 class LauncherFocusSearch : public views::FocusSearch {
63 public: 64 public:
64 explicit LauncherFocusSearch(views::ViewModel* view_model) 65 explicit LauncherFocusSearch(views::ViewModel* view_model)
65 : FocusSearch(NULL, true, true), 66 : FocusSearch(NULL, true, true),
66 view_model_(view_model) {} 67 view_model_(view_model) {}
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
170 DISALLOW_COPY_AND_ASSIGN(FadeInAnimationDelegate); 171 DISALLOW_COPY_AND_ASSIGN(FadeInAnimationDelegate);
171 }; 172 };
172 173
173 void ReflectItemStatus(const ash::LauncherItem& item, 174 void ReflectItemStatus(const ash::LauncherItem& item,
174 LauncherButton* button) { 175 LauncherButton* button) {
175 switch (item.status) { 176 switch (item.status) {
176 case STATUS_CLOSED: 177 case STATUS_CLOSED:
177 button->ClearState(LauncherButton::STATE_ACTIVE); 178 button->ClearState(LauncherButton::STATE_ACTIVE);
178 button->ClearState(LauncherButton::STATE_RUNNING); 179 button->ClearState(LauncherButton::STATE_RUNNING);
179 button->ClearState(LauncherButton::STATE_ATTENTION); 180 button->ClearState(LauncherButton::STATE_ATTENTION);
180 button->ClearState(LauncherButton::STATE_PENDING);
181 break; 181 break;
182 case STATUS_RUNNING: 182 case STATUS_RUNNING:
183 button->ClearState(LauncherButton::STATE_ACTIVE); 183 button->ClearState(LauncherButton::STATE_ACTIVE);
184 button->AddState(LauncherButton::STATE_RUNNING); 184 button->AddState(LauncherButton::STATE_RUNNING);
185 button->ClearState(LauncherButton::STATE_ATTENTION); 185 button->ClearState(LauncherButton::STATE_ATTENTION);
186 button->ClearState(LauncherButton::STATE_PENDING);
187 break; 186 break;
188 case STATUS_ACTIVE: 187 case STATUS_ACTIVE:
189 button->AddState(LauncherButton::STATE_ACTIVE); 188 button->AddState(LauncherButton::STATE_ACTIVE);
190 button->ClearState(LauncherButton::STATE_RUNNING); 189 button->ClearState(LauncherButton::STATE_RUNNING);
191 button->ClearState(LauncherButton::STATE_ATTENTION); 190 button->ClearState(LauncherButton::STATE_ATTENTION);
192 button->ClearState(LauncherButton::STATE_PENDING);
193 break; 191 break;
194 case STATUS_ATTENTION: 192 case STATUS_ATTENTION:
195 button->ClearState(LauncherButton::STATE_ACTIVE); 193 button->ClearState(LauncherButton::STATE_ACTIVE);
196 button->ClearState(LauncherButton::STATE_RUNNING); 194 button->ClearState(LauncherButton::STATE_RUNNING);
197 button->AddState(LauncherButton::STATE_ATTENTION); 195 button->AddState(LauncherButton::STATE_ATTENTION);
198 button->ClearState(LauncherButton::STATE_PENDING);
199 break;
200 case STATUS_IS_PENDING:
201 button->ClearState(LauncherButton::STATE_ACTIVE);
202 button->ClearState(LauncherButton::STATE_RUNNING);
203 button->ClearState(LauncherButton::STATE_ATTENTION);
204 button->AddState(LauncherButton::STATE_PENDING);
205 break; 196 break;
206 } 197 }
207 } 198 }
208 199
209 } // namespace 200 } // namespace
210 201
211 // AnimationDelegate used when inserting a new item. This steadily decreased the 202 // AnimationDelegate used when inserting a new item. This steadily decreased the
212 // opacity of the layer as the animation progress. 203 // opacity of the layer as the animation progress.
213 class LauncherView::FadeOutAnimationDelegate 204 class LauncherView::FadeOutAnimationDelegate
214 : public views::BoundsAnimator::OwnedAnimationDelegate { 205 : public views::BoundsAnimator::OwnedAnimationDelegate {
(...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after
513 case TYPE_APP_SHORTCUT: 504 case TYPE_APP_SHORTCUT:
514 case TYPE_PLATFORM_APP: 505 case TYPE_PLATFORM_APP:
515 case TYPE_APP_PANEL: { 506 case TYPE_APP_PANEL: {
516 LauncherButton* button = LauncherButton::Create(this, this); 507 LauncherButton* button = LauncherButton::Create(this, this);
517 button->SetImage(item.image); 508 button->SetImage(item.image);
518 ReflectItemStatus(item, button); 509 ReflectItemStatus(item, button);
519 view = button; 510 view = button;
520 break; 511 break;
521 } 512 }
522 513
514 case TYPE_APP_PLACEHOLDER:
515 view = new AppPlaceholderView;
516 break;
517
523 case TYPE_APP_LIST: { 518 case TYPE_APP_LIST: {
524 // TODO(dave): turn this into a LauncherButton too. 519 // TODO(dave): turn this into a LauncherButton too.
525 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); 520 ResourceBundle& rb = ResourceBundle::GetSharedInstance();
526 AppListButton* button = new AppListButton(this, this); 521 AppListButton* button = new AppListButton(this, this);
527 button->SetImage( 522 button->SetImage(
528 views::CustomButton::BS_NORMAL, 523 views::CustomButton::BS_NORMAL,
529 rb.GetImageNamed(IDR_AURA_LAUNCHER_ICON_APPLIST).ToImageSkia()); 524 rb.GetImageNamed(IDR_AURA_LAUNCHER_ICON_APPLIST).ToImageSkia());
530 button->SetImage( 525 button->SetImage(
531 views::CustomButton::BS_HOT, 526 views::CustomButton::BS_HOT,
532 rb.GetImageNamed(IDR_AURA_LAUNCHER_ICON_APPLIST_HOT). 527 rb.GetImageNamed(IDR_AURA_LAUNCHER_ICON_APPLIST_HOT).
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
652 bool LauncherView::SameDragType(LauncherItemType typea, 647 bool LauncherView::SameDragType(LauncherItemType typea,
653 LauncherItemType typeb) const { 648 LauncherItemType typeb) const {
654 switch (typea) { 649 switch (typea) {
655 case TYPE_TABBED: 650 case TYPE_TABBED:
656 case TYPE_APP_PANEL: 651 case TYPE_APP_PANEL:
657 case TYPE_PLATFORM_APP: 652 case TYPE_PLATFORM_APP:
658 return (typeb == TYPE_TABBED || 653 return (typeb == TYPE_TABBED ||
659 typeb == TYPE_APP_PANEL || 654 typeb == TYPE_APP_PANEL ||
660 typeb == TYPE_PLATFORM_APP); 655 typeb == TYPE_PLATFORM_APP);
661 case TYPE_APP_SHORTCUT: 656 case TYPE_APP_SHORTCUT:
657 case TYPE_APP_PLACEHOLDER:
662 case TYPE_APP_LIST: 658 case TYPE_APP_LIST:
663 case TYPE_BROWSER_SHORTCUT: 659 case TYPE_BROWSER_SHORTCUT:
664 return typeb == typea; 660 return typeb == typea;
665 } 661 }
666 NOTREACHED(); 662 NOTREACHED();
667 return false; 663 return false;
668 } 664 }
669 665
670 std::pair<int, int> LauncherView::GetDragRange(int index) { 666 std::pair<int, int> LauncherView::GetDragRange(int index) {
671 int min_index = -1; 667 int min_index = -1;
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after
967 if (!delegate_) 963 if (!delegate_)
968 return string16(); 964 return string16();
969 int view_index = view_model_->GetIndexOfView(view); 965 int view_index = view_model_->GetIndexOfView(view);
970 // May be -1 while in the process of animating closed. 966 // May be -1 while in the process of animating closed.
971 if (view_index == -1) 967 if (view_index == -1)
972 return string16(); 968 return string16();
973 969
974 switch (model_->items()[view_index].type) { 970 switch (model_->items()[view_index].type) {
975 case TYPE_TABBED: 971 case TYPE_TABBED:
976 case TYPE_APP_PANEL: 972 case TYPE_APP_PANEL:
973 case TYPE_APP_PLACEHOLDER:
977 case TYPE_APP_SHORTCUT: 974 case TYPE_APP_SHORTCUT:
978 case TYPE_PLATFORM_APP: 975 case TYPE_PLATFORM_APP:
979 return delegate_->GetTitle(model_->items()[view_index]); 976 return delegate_->GetTitle(model_->items()[view_index]);
980 977
981 case TYPE_APP_LIST: 978 case TYPE_APP_LIST:
982 return l10n_util::GetStringUTF16(IDS_AURA_APP_LIST_TITLE); 979 return l10n_util::GetStringUTF16(IDS_AURA_APP_LIST_TITLE);
983 980
984 case TYPE_BROWSER_SHORTCUT: 981 case TYPE_BROWSER_SHORTCUT:
985 return l10n_util::GetStringUTF16(IDS_AURA_NEW_TAB); 982 return l10n_util::GetStringUTF16(IDS_AURA_NEW_TAB);
986 } 983 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1028 case TYPE_BROWSER_SHORTCUT: 1025 case TYPE_BROWSER_SHORTCUT:
1029 // Click on browser icon is counted in app clicks. 1026 // Click on browser icon is counted in app clicks.
1030 Shell::GetInstance()->delegate()->RecordUserMetricsAction( 1027 Shell::GetInstance()->delegate()->RecordUserMetricsAction(
1031 UMA_LAUNCHER_CLICK_ON_APP); 1028 UMA_LAUNCHER_CLICK_ON_APP);
1032 1029
1033 if (event.flags() & ui::EF_CONTROL_DOWN) 1030 if (event.flags() & ui::EF_CONTROL_DOWN)
1034 delegate_->CreateNewWindow(); 1031 delegate_->CreateNewWindow();
1035 else 1032 else
1036 delegate_->CreateNewTab(); 1033 delegate_->CreateNewTab();
1037 break; 1034 break;
1035
1036 case TYPE_APP_PLACEHOLDER:
1037 // Do nothing.
1038 break;
1038 } 1039 }
1039 } 1040 }
1040 1041
1041 void LauncherView::ShowContextMenuForView(views::View* source, 1042 void LauncherView::ShowContextMenuForView(views::View* source,
1042 const gfx::Point& point) { 1043 const gfx::Point& point) {
1043 if (!delegate_) 1044 if (!delegate_)
1044 return; 1045 return;
1045 1046
1046 int view_index = view_model_->GetIndexOfView(source); 1047 int view_index = view_model_->GetIndexOfView(source);
1047 if (view_index != -1 && 1048 if (view_index != -1 &&
(...skipping 28 matching lines...) Expand all
1076 FOR_EACH_OBSERVER(LauncherIconObserver, observers_, 1077 FOR_EACH_OBSERVER(LauncherIconObserver, observers_,
1077 OnLauncherIconPositionsChanged()); 1078 OnLauncherIconPositionsChanged());
1078 PreferredSizeChanged(); 1079 PreferredSizeChanged();
1079 } 1080 }
1080 1081
1081 void LauncherView::OnBoundsAnimatorDone(views::BoundsAnimator* animator) { 1082 void LauncherView::OnBoundsAnimatorDone(views::BoundsAnimator* animator) {
1082 } 1083 }
1083 1084
1084 } // namespace internal 1085 } // namespace internal
1085 } // namespace ash 1086 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698