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/launcher/launcher_tooltip_manager.h" | 5 #include "ash/launcher/launcher_tooltip_manager.h" |
6 | 6 |
7 #include "ash/launcher/launcher_view.h" | 7 #include "ash/launcher/launcher_view.h" |
8 #include "ash/shell.h" | 8 #include "ash/shell.h" |
9 #include "ash/shell_window_ids.h" | 9 #include "ash/shell_window_ids.h" |
10 #include "ash/wm/session_state_controller.h" | 10 #include "ash/wm/session_state_controller.h" |
11 #include "ash/wm/session_state_observer.h" | 11 #include "ash/wm/session_state_observer.h" |
| 12 #include "ash/wm/shelf_layout_manager.h" |
12 #include "ash/wm/window_animations.h" | 13 #include "ash/wm/window_animations.h" |
13 #include "base/bind.h" | 14 #include "base/bind.h" |
14 #include "base/message_loop.h" | 15 #include "base/message_loop.h" |
15 #include "base/time.h" | 16 #include "base/time.h" |
16 #include "base/timer.h" | 17 #include "base/timer.h" |
17 #include "ui/aura/root_window.h" | 18 #include "ui/aura/root_window.h" |
18 #include "ui/aura/window.h" | 19 #include "ui/aura/window.h" |
19 #include "ui/base/events/event.h" | 20 #include "ui/base/events/event.h" |
20 #include "ui/base/events/event_constants.h" | 21 #include "ui/base/events/event_constants.h" |
21 #include "ui/gfx/insets.h" | 22 #include "ui/gfx/insets.h" |
(...skipping 12 matching lines...) Expand all Loading... |
34 const int kTooltipMinHeight = 29 - 2 * kTooltipTopBottomMargin; | 35 const int kTooltipMinHeight = 29 - 2 * kTooltipTopBottomMargin; |
35 const SkColor kTooltipTextColor = SkColorSetRGB(0x22, 0x22, 0x22); | 36 const SkColor kTooltipTextColor = SkColorSetRGB(0x22, 0x22, 0x22); |
36 | 37 |
37 // The maximum width of the tooltip bubble. Borrowed the value from | 38 // The maximum width of the tooltip bubble. Borrowed the value from |
38 // ash/tooltip/tooltip_controller.cc | 39 // ash/tooltip/tooltip_controller.cc |
39 const int kTooltipMaxWidth = 250; | 40 const int kTooltipMaxWidth = 250; |
40 | 41 |
41 // The distance between the arrow tip and edge of the anchor view. | 42 // The distance between the arrow tip and edge of the anchor view. |
42 const int kArrowOffset = 10; | 43 const int kArrowOffset = 10; |
43 | 44 |
44 views::BubbleBorder::ArrowLocation GetArrowLocation(ShelfAlignment alignment) { | |
45 switch (alignment) { | |
46 case SHELF_ALIGNMENT_LEFT: | |
47 return views::BubbleBorder::LEFT_CENTER; | |
48 case SHELF_ALIGNMENT_RIGHT: | |
49 return views::BubbleBorder::RIGHT_CENTER; | |
50 case SHELF_ALIGNMENT_BOTTOM: | |
51 return views::BubbleBorder::BOTTOM_CENTER; | |
52 } | |
53 | |
54 return views::BubbleBorder::NONE; | |
55 } | |
56 } // namespace | 45 } // namespace |
57 | 46 |
58 // The implementation of tooltip of the launcher. | 47 // The implementation of tooltip of the launcher. |
59 class LauncherTooltipManager::LauncherTooltipBubble | 48 class LauncherTooltipManager::LauncherTooltipBubble |
60 : public views::BubbleDelegateView { | 49 : public views::BubbleDelegateView { |
61 public: | 50 public: |
62 LauncherTooltipBubble(views::View* anchor, | 51 LauncherTooltipBubble(views::View* anchor, |
63 views::BubbleBorder::ArrowLocation arrow_location, | 52 views::BubbleBorder::ArrowLocation arrow_location, |
64 LauncherTooltipManager* host); | 53 LauncherTooltipManager* host); |
65 | 54 |
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
132 gfx::Size LauncherTooltipManager::LauncherTooltipBubble::GetPreferredSize() { | 121 gfx::Size LauncherTooltipManager::LauncherTooltipBubble::GetPreferredSize() { |
133 gfx::Size pref_size = views::BubbleDelegateView::GetPreferredSize(); | 122 gfx::Size pref_size = views::BubbleDelegateView::GetPreferredSize(); |
134 if (pref_size.height() < kTooltipMinHeight) | 123 if (pref_size.height() < kTooltipMinHeight) |
135 pref_size.set_height(kTooltipMinHeight); | 124 pref_size.set_height(kTooltipMinHeight); |
136 if (pref_size.width() > kTooltipMaxWidth) | 125 if (pref_size.width() > kTooltipMaxWidth) |
137 pref_size.set_width(kTooltipMaxWidth); | 126 pref_size.set_width(kTooltipMaxWidth); |
138 return pref_size; | 127 return pref_size; |
139 } | 128 } |
140 | 129 |
141 LauncherTooltipManager::LauncherTooltipManager( | 130 LauncherTooltipManager::LauncherTooltipManager( |
142 ShelfAlignment alignment, | |
143 ShelfLayoutManager* shelf_layout_manager, | 131 ShelfLayoutManager* shelf_layout_manager, |
144 LauncherView* launcher_view) | 132 LauncherView* launcher_view) |
145 : view_(NULL), | 133 : view_(NULL), |
146 widget_(NULL), | 134 widget_(NULL), |
147 anchor_(NULL), | 135 anchor_(NULL), |
148 alignment_(alignment), | |
149 shelf_layout_manager_(shelf_layout_manager), | 136 shelf_layout_manager_(shelf_layout_manager), |
150 launcher_view_(launcher_view) { | 137 launcher_view_(launcher_view) { |
151 if (shelf_layout_manager) | 138 if (shelf_layout_manager) |
152 shelf_layout_manager->AddObserver(this); | 139 shelf_layout_manager->AddObserver(this); |
153 if (Shell::HasInstance()) { | 140 if (Shell::HasInstance()) { |
154 Shell::GetInstance()->AddPreTargetHandler(this); | 141 Shell::GetInstance()->AddPreTargetHandler(this); |
155 Shell::GetInstance()->session_state_controller()->AddObserver(this); | 142 Shell::GetInstance()->session_state_controller()->AddObserver(this); |
156 } | 143 } |
157 } | 144 } |
158 | 145 |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
210 } | 197 } |
211 } | 198 } |
212 | 199 |
213 void LauncherTooltipManager::OnBubbleClosed(views::BubbleDelegateView* view) { | 200 void LauncherTooltipManager::OnBubbleClosed(views::BubbleDelegateView* view) { |
214 if (view == view_) { | 201 if (view == view_) { |
215 view_ = NULL; | 202 view_ = NULL; |
216 widget_ = NULL; | 203 widget_ = NULL; |
217 } | 204 } |
218 } | 205 } |
219 | 206 |
220 void LauncherTooltipManager::SetArrowLocation(ShelfAlignment alignment) { | 207 void LauncherTooltipManager::UpdateArrowLocation() { |
221 if (alignment_ == alignment) | |
222 return; | |
223 | |
224 alignment_ = alignment; | |
225 if (view_) { | 208 if (view_) { |
226 CancelHidingAnimation(); | 209 CancelHidingAnimation(); |
227 Close(); | 210 Close(); |
228 ShowImmediately(anchor_, text_); | 211 ShowImmediately(anchor_, text_); |
229 } | 212 } |
230 } | 213 } |
231 | 214 |
232 void LauncherTooltipManager::ResetTimer() { | 215 void LauncherTooltipManager::ResetTimer() { |
233 if (timer_.get() && timer_->IsRunning()) { | 216 if (timer_.get() && timer_->IsRunning()) { |
234 timer_->Reset(); | 217 timer_->Reset(); |
(...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
361 | 344 |
362 timer_.reset(); | 345 timer_.reset(); |
363 } | 346 } |
364 | 347 |
365 void LauncherTooltipManager::CreateBubble(views::View* anchor, | 348 void LauncherTooltipManager::CreateBubble(views::View* anchor, |
366 const string16& text) { | 349 const string16& text) { |
367 DCHECK(!view_); | 350 DCHECK(!view_); |
368 | 351 |
369 anchor_ = anchor; | 352 anchor_ = anchor; |
370 text_ = text; | 353 text_ = text; |
371 view_ = new LauncherTooltipBubble( | 354 views::BubbleBorder::ArrowLocation arrow_location = |
372 anchor, GetArrowLocation(alignment_), this); | 355 shelf_layout_manager_->SelectValueForShelfAlignment( |
| 356 views::BubbleBorder::BOTTOM_CENTER, |
| 357 views::BubbleBorder::LEFT_CENTER, |
| 358 views::BubbleBorder::RIGHT_CENTER); |
| 359 |
| 360 view_ = new LauncherTooltipBubble(anchor, arrow_location, this); |
373 widget_ = view_->GetWidget(); | 361 widget_ = view_->GetWidget(); |
374 view_->SetText(text_); | 362 view_->SetText(text_); |
375 | 363 |
376 gfx::NativeView native_view = widget_->GetNativeView(); | 364 gfx::NativeView native_view = widget_->GetNativeView(); |
377 views::corewm::SetWindowVisibilityAnimationType( | 365 views::corewm::SetWindowVisibilityAnimationType( |
378 native_view, views::corewm::WINDOW_VISIBILITY_ANIMATION_TYPE_VERTICAL); | 366 native_view, views::corewm::WINDOW_VISIBILITY_ANIMATION_TYPE_VERTICAL); |
379 views::corewm::SetWindowVisibilityAnimationTransition( | 367 views::corewm::SetWindowVisibilityAnimationTransition( |
380 native_view, views::corewm::ANIMATE_HIDE); | 368 native_view, views::corewm::ANIMATE_HIDE); |
381 } | 369 } |
382 | 370 |
383 } // namespace internal | 371 } // namespace internal |
384 } // namespace ash | 372 } // namespace ash |
OLD | NEW |