| Index: ash/system/tray/tray_views.cc
|
| diff --git a/ash/system/tray/tray_views.cc b/ash/system/tray/tray_views.cc
|
| index 86d9f0514284f77ab558be1ab25f705eb472b59d..1975c441c7e39cd44d29c3969f2e7d70177914fe 100644
|
| --- a/ash/system/tray/tray_views.cc
|
| +++ b/ash/system/tray/tray_views.cc
|
| @@ -14,6 +14,8 @@
|
| #include "ui/base/accessibility/accessible_view_state.h"
|
| #include "ui/base/events/event.h"
|
| #include "ui/base/resource/resource_bundle.h"
|
| +#include "ui/compositor/layer.h"
|
| +#include "ui/compositor/scoped_layer_animation_settings.h"
|
| #include "ui/gfx/canvas.h"
|
| #include "ui/gfx/image/image.h"
|
| #include "ui/gfx/image/image_skia.h"
|
| @@ -24,6 +26,7 @@
|
| #include "ui/views/border.h"
|
| #include "ui/views/controls/button/image_button.h"
|
| #include "ui/views/controls/label.h"
|
| +#include "ui/views/controls/throbber.h"
|
| #include "ui/views/layout/box_layout.h"
|
| #include "ui/views/layout/fill_layout.h"
|
| #include "ui/views/layout/grid_layout.h"
|
| @@ -40,6 +43,12 @@ const int kSpecialPopupRowHeight = 55;
|
| const int kTrayPopupLabelButtonPaddingHorizontal = 16;
|
| const int kTrayPopupLabelButtonPaddingVertical = 8;
|
|
|
| +// Time in ms per throbber frame.
|
| +const int kThrobberFrameMs = 50;
|
| +
|
| +// Duration for showing/hiding animation in milliseconds.
|
| +const int kThrobberAnimationDurationMs = 200;
|
| +
|
| const int kBarImagesActive[] = {
|
| IDR_SLIDER_ACTIVE_LEFT,
|
| IDR_SLIDER_ACTIVE_CENTER,
|
| @@ -611,6 +620,67 @@ void TrayBarButtonWithTitle::UpdateButton(bool control_on) {
|
| image_->Update(control_on);
|
| }
|
|
|
| +ThrobberView::ThrobberView() {
|
| + throbber_ = new views::SmoothedThrobber(kThrobberFrameMs);
|
| + throbber_->set_stop_delay_ms(kThrobberAnimationDurationMs);
|
| + throbber_->set_interactive(false);
|
| + AddChildView(throbber_);
|
| +
|
| + SetPaintToLayer(true);
|
| + layer()->SetFillsBoundsOpaquely(false);
|
| + layer()->SetOpacity(0.0);
|
| +}
|
| +
|
| +ThrobberView::~ThrobberView() {
|
| +}
|
| +
|
| +gfx::Size ThrobberView::GetPreferredSize() {
|
| + return gfx::Size(ash::kTrayPopupItemHeight, ash::kTrayPopupItemHeight);
|
| +}
|
| +
|
| +void ThrobberView::Layout() {
|
| + View* child = child_at(0);
|
| + gfx::Size ps = child->GetPreferredSize();
|
| + child->SetBounds((width() - ps.width()) / 2,
|
| + (height() - ps.height()) / 2,
|
| + ps.width(), ps.height());
|
| + SizeToPreferredSize();
|
| +}
|
| +
|
| +bool ThrobberView::GetTooltipText(const gfx::Point& p,
|
| + string16* tooltip) const {
|
| + if (tooltip_text_.empty())
|
| + return false;
|
| +
|
| + *tooltip = tooltip_text_;
|
| + return true;
|
| +}
|
| +
|
| +void ThrobberView::Start() {
|
| + ScheduleAnimation(true);
|
| + throbber_->Start();
|
| +}
|
| +
|
| +void ThrobberView::Stop() {
|
| + ScheduleAnimation(false);
|
| + throbber_->Stop();
|
| +}
|
| +
|
| +void ThrobberView::SetTooltipText(const string16& tooltip_text) {
|
| + tooltip_text_ = tooltip_text;
|
| +}
|
| +
|
| +void ThrobberView::ScheduleAnimation(bool start_throbber) {
|
| + // Stop any previous animation.
|
| + layer()->GetAnimator()->StopAnimating();
|
| +
|
| + ui::ScopedLayerAnimationSettings animation(layer()->GetAnimator());
|
| + animation.SetTransitionDuration(
|
| + base::TimeDelta::FromMilliseconds(kThrobberAnimationDurationMs));
|
| +
|
| + layer()->SetOpacity(start_throbber ? 1.0 : 0.0);
|
| +}
|
| +
|
| ////////////////////////////////////////////////////////////////////////////////
|
| // SpecialPopupRow
|
|
|
| @@ -669,6 +739,15 @@ void SpecialPopupRow::AddButton(TrayPopupHeaderButton* button) {
|
| button_container_->AddChildView(button);
|
| }
|
|
|
| +void SpecialPopupRow::AddThrobber(ThrobberView* throbber) {
|
| + if (!button_container_) {
|
| + button_container_ = CreatePopupHeaderButtonsContainer();
|
| + AddChildView(button_container_);
|
| + }
|
| +
|
| + button_container_->AddChildView(throbber);
|
| +}
|
| +
|
| gfx::Size SpecialPopupRow::GetPreferredSize() {
|
| gfx::Size size = views::View::GetPreferredSize();
|
| size.set_height(kSpecialPopupRowHeight);
|
|
|