Index: ash/system/audio/tray_volume.cc |
diff --git a/ash/system/audio/tray_volume.cc b/ash/system/audio/tray_volume.cc |
deleted file mode 100644 |
index ff9c9791b68ee182b12344a1a79c5ee1a490ef3d..0000000000000000000000000000000000000000 |
--- a/ash/system/audio/tray_volume.cc |
+++ /dev/null |
@@ -1,288 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "ash/system/audio/tray_volume.h" |
- |
-#include <cmath> |
- |
-#include "ash/ash_constants.h" |
-#include "ash/shell.h" |
-#include "ash/system/tray/system_tray_delegate.h" |
-#include "ash/system/tray/system_tray_notifier.h" |
-#include "ash/system/tray/tray_bar_button_with_title.h" |
-#include "ash/system/tray/tray_constants.h" |
-#include "ash/volume_control_delegate.h" |
-#include "base/utf_string_conversions.h" |
-#include "grit/ash_resources.h" |
-#include "grit/ash_strings.h" |
-#include "third_party/skia/include/core/SkCanvas.h" |
-#include "third_party/skia/include/core/SkPaint.h" |
-#include "third_party/skia/include/core/SkRect.h" |
-#include "third_party/skia/include/effects/SkGradientShader.h" |
-#include "ui/base/resource/resource_bundle.h" |
-#include "ui/gfx/canvas.h" |
-#include "ui/gfx/image/image.h" |
-#include "ui/gfx/image/image_skia_operations.h" |
-#include "ui/views/controls/button/image_button.h" |
-#include "ui/views/controls/image_view.h" |
-#include "ui/views/controls/label.h" |
-#include "ui/views/controls/slider.h" |
-#include "ui/views/layout/box_layout.h" |
-#include "ui/views/view.h" |
- |
-namespace ash { |
-namespace internal { |
- |
-namespace { |
-const int kVolumeImageWidth = 25; |
-const int kVolumeImageHeight = 25; |
- |
-// IDR_AURA_UBER_TRAY_VOLUME_LEVELS contains 5 images, |
-// The one for mute is at the 0 index and the other |
-// four are used for ascending volume levels. |
-const int kVolumeLevels = 4; |
- |
-bool IsAudioMuted() { |
- return Shell::GetInstance()->system_tray_delegate()-> |
- GetVolumeControlDelegate()->IsAudioMuted(); |
-} |
- |
-float GetVolumeLevel() { |
- return Shell::GetInstance()->system_tray_delegate()-> |
- GetVolumeControlDelegate()->GetVolumeLevel(); |
-} |
- |
-} // namespace |
- |
-namespace tray { |
- |
-class VolumeButton : public views::ToggleImageButton { |
- public: |
- explicit VolumeButton(views::ButtonListener* listener) |
- : views::ToggleImageButton(listener), |
- image_index_(-1) { |
- SetImageAlignment(ALIGN_CENTER, ALIGN_MIDDLE); |
- image_ = ui::ResourceBundle::GetSharedInstance().GetImageNamed( |
- IDR_AURA_UBER_TRAY_VOLUME_LEVELS); |
- SetPreferredSize(gfx::Size(kTrayPopupItemHeight, kTrayPopupItemHeight)); |
- Update(); |
- } |
- |
- virtual ~VolumeButton() {} |
- |
- void Update() { |
- float level = GetVolumeLevel(); |
- int image_index = IsAudioMuted() ? |
- 0 : (level == 1.0 ? |
- kVolumeLevels : |
- std::max(1, int(std::ceil(level * (kVolumeLevels - 1))))); |
- if (image_index != image_index_) { |
- gfx::Rect region(0, image_index * kVolumeImageHeight, |
- kVolumeImageWidth, kVolumeImageHeight); |
- gfx::ImageSkia image_skia = gfx::ImageSkiaOperations::ExtractSubset( |
- *(image_.ToImageSkia()), region); |
- SetImage(views::CustomButton::STATE_NORMAL, &image_skia); |
- image_index_ = image_index; |
- } |
- SchedulePaint(); |
- } |
- |
- private: |
- // Overridden from views::View. |
- virtual gfx::Size GetPreferredSize() OVERRIDE { |
- gfx::Size size = views::ToggleImageButton::GetPreferredSize(); |
- size.set_height(kTrayPopupItemHeight); |
- return size; |
- } |
- |
- gfx::Image image_; |
- int image_index_; |
- |
- DISALLOW_COPY_AND_ASSIGN(VolumeButton); |
-}; |
- |
-class MuteButton : public TrayBarButtonWithTitle { |
- public: |
- explicit MuteButton(views::ButtonListener* listener) |
- : TrayBarButtonWithTitle(listener, |
- -1, // no title under mute button |
- kTrayBarButtonWidth) { |
- Update(); |
- } |
- virtual ~MuteButton() {} |
- |
- void Update() { |
- UpdateButton(IsAudioMuted()); |
- SchedulePaint(); |
- } |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(MuteButton); |
-}; |
- |
-class VolumeSlider : public views::Slider { |
- public: |
- explicit VolumeSlider(views::SliderListener* listener) |
- : views::Slider(listener, views::Slider::HORIZONTAL) { |
- set_focus_border_color(kFocusBorderColor); |
- SetValue(GetVolumeLevel()); |
- SetAccessibleName( |
- ui::ResourceBundle::GetSharedInstance().GetLocalizedString( |
- IDS_ASH_STATUS_TRAY_VOLUME)); |
- Update(); |
- } |
- virtual ~VolumeSlider() {} |
- |
- void Update() { |
- UpdateState(!IsAudioMuted()); |
- } |
- |
- DISALLOW_COPY_AND_ASSIGN(VolumeSlider); |
-}; |
- |
-class VolumeView : public views::View, |
- public views::ButtonListener, |
- public views::SliderListener { |
- public: |
- VolumeView() { |
- SetLayoutManager(new views::BoxLayout(views::BoxLayout::kHorizontal, |
- kTrayPopupPaddingHorizontal, 0, kTrayPopupPaddingBetweenItems)); |
- |
- icon_ = new VolumeButton(this); |
- AddChildView(icon_); |
- |
- mute_ = new MuteButton(this); |
- AddChildView(mute_); |
- |
- slider_ = new VolumeSlider(this); |
- AddChildView(slider_); |
- } |
- |
- virtual ~VolumeView() {} |
- |
- void Update() { |
- icon_->Update(); |
- mute_->Update(); |
- slider_->Update(); |
- } |
- |
- void SetVolumeLevel(float percent) { |
- // The change in volume will be reflected via accessibility system events, |
- // so we prevent the UI event from being sent here. |
- slider_->set_enable_accessibility_events(false); |
- slider_->SetValue(percent); |
- // It is possible that the volume was (un)muted, but the actual volume level |
- // did not change. In that case, setting the value of the slider won't |
- // trigger an update. So explicitly trigger an update. |
- Update(); |
- slider_->set_enable_accessibility_events(true); |
- } |
- |
- private: |
- // Overridden from views::View. |
- virtual void OnBoundsChanged(const gfx::Rect& old_bounds) OVERRIDE { |
- int w = width() - slider_->x(); |
- slider_->SetSize(gfx::Size(w, slider_->height())); |
- } |
- |
- // Overridden from views::ButtonListener. |
- virtual void ButtonPressed(views::Button* sender, |
- const ui::Event& event) OVERRIDE { |
- CHECK(sender == icon_ || sender == mute_); |
- ash::Shell::GetInstance()->system_tray_delegate()-> |
- GetVolumeControlDelegate()->SetAudioMuted(!IsAudioMuted()); |
- } |
- |
- // Overridden from views:SliderListener. |
- virtual void SliderValueChanged(views::Slider* sender, |
- float value, |
- float old_value, |
- views::SliderChangeReason reason) OVERRIDE { |
- if (reason == views::VALUE_CHANGED_BY_USER) { |
- ash::Shell::GetInstance()->system_tray_delegate()-> |
- GetVolumeControlDelegate()->SetVolumeLevel(value); |
- } |
- icon_->Update(); |
- } |
- |
- VolumeButton* icon_; |
- MuteButton* mute_; |
- VolumeSlider* slider_; |
- |
- DISALLOW_COPY_AND_ASSIGN(VolumeView); |
-}; |
- |
-} // namespace tray |
- |
-TrayVolume::TrayVolume(SystemTray* system_tray) |
- : TrayImageItem(system_tray, IDR_AURA_UBER_TRAY_VOLUME_MUTE), |
- volume_view_(NULL), |
- is_default_view_(false) { |
- Shell::GetInstance()->system_tray_notifier()->AddAudioObserver(this); |
-} |
- |
-TrayVolume::~TrayVolume() { |
- Shell::GetInstance()->system_tray_notifier()->RemoveAudioObserver(this); |
-} |
- |
-bool TrayVolume::GetInitialVisibility() { |
- return IsAudioMuted(); |
-} |
- |
-views::View* TrayVolume::CreateDefaultView(user::LoginStatus status) { |
- volume_view_ = new tray::VolumeView; |
- is_default_view_ = true; |
- return volume_view_; |
-} |
- |
-views::View* TrayVolume::CreateDetailedView(user::LoginStatus status) { |
- volume_view_ = new tray::VolumeView; |
- is_default_view_ = false; |
- return volume_view_; |
-} |
- |
-void TrayVolume::DestroyDefaultView() { |
- if (is_default_view_) |
- volume_view_ = NULL; |
-} |
- |
-void TrayVolume::DestroyDetailedView() { |
- if (!is_default_view_) |
- volume_view_ = NULL; |
-} |
- |
-bool TrayVolume::ShouldHideArrow() const { |
- return true; |
-} |
- |
-bool TrayVolume::ShouldShowLauncher() const { |
- return false; |
-} |
- |
-void TrayVolume::OnVolumeChanged(float percent) { |
- if (tray_view()) |
- tray_view()->SetVisible(GetInitialVisibility()); |
- |
- if (volume_view_) { |
- if (IsAudioMuted()) |
- percent = 0.0; |
- volume_view_->SetVolumeLevel(percent); |
- SetDetailedViewCloseDelay(kTrayPopupAutoCloseDelayInSeconds); |
- return; |
- } |
- PopupDetailedView(kTrayPopupAutoCloseDelayInSeconds, false); |
-} |
- |
-void TrayVolume::OnMuteToggled() { |
- if (tray_view()) |
- tray_view()->SetVisible(GetInitialVisibility()); |
- |
- if (volume_view_) |
- volume_view_->Update(); |
- else |
- PopupDetailedView(kTrayPopupAutoCloseDelayInSeconds, false); |
-} |
- |
-} // namespace internal |
-} // namespace ash |