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/system/tray/system_tray_bubble.h" | 5 #include "ash/system/tray/system_tray_bubble.h" |
6 | 6 |
7 #include "ash/shell.h" | 7 #include "ash/shell.h" |
8 #include "ash/system/tray/system_tray.h" | 8 #include "ash/system/tray/system_tray.h" |
9 #include "ash/system/tray/system_tray_delegate.h" | 9 #include "ash/system/tray/system_tray_delegate.h" |
10 #include "ash/system/tray/system_tray_item.h" | 10 #include "ash/system/tray/system_tray_item.h" |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
66 int index = parent->GetIndexOf(owner_); | 66 int index = parent->GetIndexOf(owner_); |
67 insets->Set(index == 0, 1, index != parent->child_count() - 1, 1); | 67 insets->Set(index == 0, 1, index != parent->child_count() - 1, 1); |
68 } | 68 } |
69 | 69 |
70 views::View* owner_; | 70 views::View* owner_; |
71 | 71 |
72 DISALLOW_COPY_AND_ASSIGN(TrayPopupItemBorder); | 72 DISALLOW_COPY_AND_ASSIGN(TrayPopupItemBorder); |
73 }; | 73 }; |
74 | 74 |
75 // A view with some special behaviour for tray items in the popup: | 75 // A view with some special behaviour for tray items in the popup: |
76 // - changes background color on hover. | 76 // - optionally changes background color on hover. |
77 class TrayPopupItemContainer : public views::View { | 77 class TrayPopupItemContainer : public views::View { |
78 public: | 78 public: |
79 explicit TrayPopupItemContainer(views::View* view) : hover_(false) { | 79 TrayPopupItemContainer(views::View* view, bool change_background) |
| 80 : hover_(false), |
| 81 change_background_(change_background) { |
80 set_notify_enter_exit_on_child(true); | 82 set_notify_enter_exit_on_child(true); |
81 set_border(new TrayPopupItemBorder(this)); | 83 set_border(new TrayPopupItemBorder(this)); |
82 views::BoxLayout* layout = new views::BoxLayout( | 84 views::BoxLayout* layout = new views::BoxLayout( |
83 views::BoxLayout::kVertical, 0, 0, 0); | 85 views::BoxLayout::kVertical, 0, 0, 0); |
84 layout->set_spread_blank_space(true); | 86 layout->set_spread_blank_space(true); |
85 SetLayoutManager(layout); | 87 SetLayoutManager(layout); |
86 SetPaintToLayer(view->layer() != NULL); | 88 SetPaintToLayer(view->layer() != NULL); |
87 if (view->layer()) | 89 if (view->layer()) |
88 SetFillsBoundsOpaquely(view->layer()->fills_bounds_opaquely()); | 90 SetFillsBoundsOpaquely(view->layer()->fills_bounds_opaquely()); |
89 AddChildView(view); | 91 AddChildView(view); |
(...skipping 24 matching lines...) Expand all Loading... |
114 hover_ = false; | 116 hover_ = false; |
115 SchedulePaint(); | 117 SchedulePaint(); |
116 } | 118 } |
117 | 119 |
118 virtual void OnPaintBackground(gfx::Canvas* canvas) OVERRIDE { | 120 virtual void OnPaintBackground(gfx::Canvas* canvas) OVERRIDE { |
119 if (child_count() == 0) | 121 if (child_count() == 0) |
120 return; | 122 return; |
121 | 123 |
122 views::View* view = child_at(0); | 124 views::View* view = child_at(0); |
123 if (!view->background()) { | 125 if (!view->background()) { |
124 canvas->FillRect(gfx::Rect(size()), | 126 canvas->FillRect(gfx::Rect(size()), (hover_ && change_background_) ? |
125 hover_ ? kHoverBackgroundColor : kBackgroundColor); | 127 kHoverBackgroundColor : kBackgroundColor); |
126 } | 128 } |
127 } | 129 } |
128 | 130 |
129 bool hover_; | 131 bool hover_; |
| 132 bool change_background_; |
130 | 133 |
131 DISALLOW_COPY_AND_ASSIGN(TrayPopupItemContainer); | 134 DISALLOW_COPY_AND_ASSIGN(TrayPopupItemContainer); |
132 }; | 135 }; |
133 | 136 |
134 // Implicit animation observer that deletes itself and the layer at the end of | 137 // Implicit animation observer that deletes itself and the layer at the end of |
135 // the animation. | 138 // the animation. |
136 class AnimationObserverDeleteLayer : public ui::ImplicitAnimationObserver { | 139 class AnimationObserverDeleteLayer : public ui::ImplicitAnimationObserver { |
137 public: | 140 public: |
138 explicit AnimationObserverDeleteLayer(ui::Layer* layer) | 141 explicit AnimationObserverDeleteLayer(ui::Layer* layer) |
139 : layer_(layer) { | 142 : layer_(layer) { |
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
445 case BUBBLE_TYPE_DEFAULT: | 448 case BUBBLE_TYPE_DEFAULT: |
446 view = (*it)->CreateDefaultView(login_status); | 449 view = (*it)->CreateDefaultView(login_status); |
447 break; | 450 break; |
448 case BUBBLE_TYPE_DETAILED: | 451 case BUBBLE_TYPE_DETAILED: |
449 view = (*it)->CreateDetailedView(login_status); | 452 view = (*it)->CreateDetailedView(login_status); |
450 break; | 453 break; |
451 case BUBBLE_TYPE_NOTIFICATION: | 454 case BUBBLE_TYPE_NOTIFICATION: |
452 view = (*it)->CreateNotificationView(login_status); | 455 view = (*it)->CreateNotificationView(login_status); |
453 break; | 456 break; |
454 } | 457 } |
455 if (view) | 458 if (view) { |
456 bubble_view_->AddChildView(new TrayPopupItemContainer(view)); | 459 bubble_view_->AddChildView(new TrayPopupItemContainer( |
| 460 view, bubble_type_ == BUBBLE_TYPE_DEFAULT)); |
| 461 } |
457 } | 462 } |
458 } | 463 } |
459 | 464 |
460 bool SystemTrayBubble::ProcessLocatedEvent(const aura::LocatedEvent& event) { | 465 bool SystemTrayBubble::ProcessLocatedEvent(const aura::LocatedEvent& event) { |
461 DCHECK_NE(BUBBLE_TYPE_NOTIFICATION, bubble_type_); | 466 DCHECK_NE(BUBBLE_TYPE_NOTIFICATION, bubble_type_); |
462 gfx::Rect bounds = bubble_widget_->GetNativeWindow()->GetBoundsInRootWindow(); | 467 gfx::Rect bounds = bubble_widget_->GetNativeWindow()->GetBoundsInRootWindow(); |
463 if (bounds.Contains(event.root_location())) | 468 if (bounds.Contains(event.root_location())) |
464 return false; | 469 return false; |
465 | 470 |
466 bubble_widget_->Close(); | 471 bubble_widget_->Close(); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
502 } | 507 } |
503 | 508 |
504 void SystemTrayBubble::OnWidgetClosing(views::Widget* widget) { | 509 void SystemTrayBubble::OnWidgetClosing(views::Widget* widget) { |
505 CHECK_EQ(bubble_widget_, widget); | 510 CHECK_EQ(bubble_widget_, widget); |
506 bubble_widget_ = NULL; | 511 bubble_widget_ = NULL; |
507 tray_->RemoveBubble(this); | 512 tray_->RemoveBubble(this); |
508 } | 513 } |
509 | 514 |
510 } // namespace internal | 515 } // namespace internal |
511 } // namespace ash | 516 } // namespace ash |
OLD | NEW |