• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #include "ash/system/tray/throbber_view.h"
6 
7 #include "ash/system/tray/tray_constants.h"
8 #include "grit/ash_resources.h"
9 #include "ui/base/resource/resource_bundle.h"
10 #include "ui/compositor/layer.h"
11 #include "ui/compositor/scoped_layer_animation_settings.h"
12 
13 namespace ash {
14 namespace {
15 
16 // Time in ms per throbber frame.
17 const int kThrobberFrameMs = 30;
18 
19 // Duration for showing/hiding animation in milliseconds.
20 const int kThrobberAnimationDurationMs = 200;
21 
22 }  // namespace
23 
SystemTrayThrobber(int frame_delay_ms)24 SystemTrayThrobber::SystemTrayThrobber(int frame_delay_ms)
25     : views::SmoothedThrobber(frame_delay_ms) {
26 }
27 
~SystemTrayThrobber()28 SystemTrayThrobber::~SystemTrayThrobber() {
29 }
30 
SetTooltipText(const base::string16 & tooltip_text)31 void SystemTrayThrobber::SetTooltipText(const base::string16& tooltip_text) {
32   tooltip_text_ = tooltip_text;
33 }
34 
GetTooltipText(const gfx::Point & p,base::string16 * tooltip) const35 bool SystemTrayThrobber::GetTooltipText(const gfx::Point& p,
36                                         base::string16* tooltip) const {
37   if (tooltip_text_.empty())
38     return false;
39 
40   *tooltip = tooltip_text_;
41   return true;
42 }
43 
ThrobberView()44 ThrobberView::ThrobberView() {
45   throbber_ = new SystemTrayThrobber(kThrobberFrameMs);
46   throbber_->SetFrames(ui::ResourceBundle::GetSharedInstance().GetImageNamed(
47       IDR_AURA_CROS_DEFAULT_THROBBER).ToImageSkia());
48   throbber_->set_stop_delay_ms(kThrobberAnimationDurationMs);
49   AddChildView(throbber_);
50 
51   SetPaintToLayer(true);
52   layer()->SetFillsBoundsOpaquely(false);
53   layer()->SetOpacity(0.0);
54 }
55 
~ThrobberView()56 ThrobberView::~ThrobberView() {
57 }
58 
GetPreferredSize() const59 gfx::Size ThrobberView::GetPreferredSize() const {
60   return gfx::Size(ash::kTrayPopupItemHeight, ash::kTrayPopupItemHeight);
61 }
62 
Layout()63 void ThrobberView::Layout() {
64   View* child = child_at(0);
65   gfx::Size ps = child->GetPreferredSize();
66   child->SetBounds((width() - ps.width()) / 2,
67                    (height() - ps.height()) / 2,
68                    ps.width(), ps.height());
69   SizeToPreferredSize();
70 }
71 
GetTooltipText(const gfx::Point & p,base::string16 * tooltip) const72 bool ThrobberView::GetTooltipText(const gfx::Point& p,
73                                   base::string16* tooltip) const {
74   if (tooltip_text_.empty())
75     return false;
76 
77   *tooltip = tooltip_text_;
78   return true;
79 }
80 
Start()81 void ThrobberView::Start() {
82   ScheduleAnimation(true);
83   throbber_->Start();
84 }
85 
Stop()86 void ThrobberView::Stop() {
87   ScheduleAnimation(false);
88   throbber_->Stop();
89 }
90 
SetTooltipText(const base::string16 & tooltip_text)91 void ThrobberView::SetTooltipText(const base::string16& tooltip_text) {
92   tooltip_text_ = tooltip_text;
93   throbber_->SetTooltipText(tooltip_text);
94 }
95 
ScheduleAnimation(bool start_throbber)96 void ThrobberView::ScheduleAnimation(bool start_throbber) {
97   // Stop any previous animation.
98   layer()->GetAnimator()->StopAnimating();
99 
100   ui::ScopedLayerAnimationSettings animation(layer()->GetAnimator());
101   animation.SetTransitionDuration(
102       base::TimeDelta::FromMilliseconds(kThrobberAnimationDurationMs));
103 
104   layer()->SetOpacity(start_throbber ? 1.0 : 0.0);
105 }
106 
107 }  // namespace ash
108