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/audio/tray_volume.h" | 5 #include "ash/system/audio/tray_volume.h" |
6 | 6 |
7 #include <cmath> | |
8 | |
7 #include "ash/shell.h" | 9 #include "ash/shell.h" |
8 #include "ash/system/tray/system_tray_delegate.h" | 10 #include "ash/system/tray/system_tray_delegate.h" |
9 #include "ash/system/tray/tray_constants.h" | 11 #include "ash/system/tray/tray_constants.h" |
10 #include "ash/system/tray/tray_views.h" | 12 #include "ash/system/tray/tray_views.h" |
11 #include "base/utf_string_conversions.h" | 13 #include "base/utf_string_conversions.h" |
12 #include "grit/ash_strings.h" | 14 #include "grit/ash_strings.h" |
13 #include "grit/ui_resources.h" | 15 #include "grit/ui_resources.h" |
14 #include "third_party/skia/include/core/SkCanvas.h" | 16 #include "third_party/skia/include/core/SkCanvas.h" |
15 #include "third_party/skia/include/core/SkPaint.h" | 17 #include "third_party/skia/include/core/SkPaint.h" |
16 #include "third_party/skia/include/core/SkRect.h" | 18 #include "third_party/skia/include/core/SkRect.h" |
17 #include "third_party/skia/include/effects/SkGradientShader.h" | 19 #include "third_party/skia/include/effects/SkGradientShader.h" |
18 #include "ui/base/resource/resource_bundle.h" | 20 #include "ui/base/resource/resource_bundle.h" |
19 #include "ui/gfx/canvas.h" | 21 #include "ui/gfx/canvas.h" |
20 #include "ui/gfx/image/image.h" | 22 #include "ui/gfx/image/image.h" |
23 #include "ui/gfx/image/image_skia_operations.h" | |
21 #include "ui/views/controls/button/image_button.h" | 24 #include "ui/views/controls/button/image_button.h" |
22 #include "ui/views/controls/image_view.h" | 25 #include "ui/views/controls/image_view.h" |
23 #include "ui/views/controls/label.h" | 26 #include "ui/views/controls/label.h" |
24 #include "ui/views/controls/slider.h" | 27 #include "ui/views/controls/slider.h" |
25 #include "ui/views/layout/box_layout.h" | 28 #include "ui/views/layout/box_layout.h" |
26 #include "ui/views/view.h" | 29 #include "ui/views/view.h" |
27 | 30 |
28 namespace ash { | 31 namespace ash { |
29 namespace internal { | 32 namespace internal { |
30 | 33 |
31 namespace { | 34 namespace { |
32 const int kVolumeImageWidth = 25; | 35 const int kVolumeImageWidth = 25; |
33 const int kVolumeImageHeight = 25; | 36 const int kVolumeImageHeight = 25; |
34 const int kVolumeLevel = 4; | 37 const int kVolumeLevel = 4; |
Daniel Erat
2012/07/24 00:24:33
nit: Add a comment describing what this represents
oshima
2012/07/24 00:44:21
Done.
| |
35 } | 38 } |
36 | 39 |
37 namespace tray { | 40 namespace tray { |
38 | 41 |
39 class VolumeButton : public views::ToggleImageButton { | 42 class VolumeButton : public views::ToggleImageButton { |
40 public: | 43 public: |
41 explicit VolumeButton(views::ButtonListener* listener) | 44 explicit VolumeButton(views::ButtonListener* listener) |
42 : views::ToggleImageButton(listener), | 45 : views::ToggleImageButton(listener), |
43 image_index_(-1) { | 46 image_index_(-1) { |
44 SetImageAlignment(ALIGN_CENTER, ALIGN_MIDDLE); | 47 SetImageAlignment(ALIGN_CENTER, ALIGN_MIDDLE); |
45 image_ = ui::ResourceBundle::GetSharedInstance().GetImageNamed( | 48 image_ = ui::ResourceBundle::GetSharedInstance().GetImageNamed( |
46 IDR_AURA_UBER_TRAY_VOLUME_LEVELS); | 49 IDR_AURA_UBER_TRAY_VOLUME_LEVELS); |
47 SetPreferredSize(gfx::Size(kTrayPopupItemHeight, kTrayPopupItemHeight)); | 50 SetPreferredSize(gfx::Size(kTrayPopupItemHeight, kTrayPopupItemHeight)); |
48 Update(); | 51 Update(); |
49 } | 52 } |
50 | 53 |
51 virtual ~VolumeButton() {} | 54 virtual ~VolumeButton() {} |
52 | 55 |
53 void Update() { | 56 void Update() { |
54 ash::SystemTrayDelegate* delegate = | 57 ash::SystemTrayDelegate* delegate = |
55 ash::Shell::GetInstance()->tray_delegate(); | 58 ash::Shell::GetInstance()->tray_delegate(); |
56 int level = static_cast<int>(delegate->GetVolumeLevel() * 100); | 59 int image_index = delegate->IsAudioMuted() ? |
57 int image_index = level / (100 / kVolumeLevel); | 60 0 : std::ceil(delegate->GetVolumeLevel() * kVolumeLevel); |
Daniel Erat
2012/07/24 00:24:33
Not your fault, but do you mind updating ash/syste
Daniel Erat
2012/07/24 00:24:33
The old code looks like it used kVolumeLevel - 1 f
oshima
2012/07/24 00:44:21
Done.
oshima
2012/07/24 00:44:21
overlooked original behavior. Fixed.
| |
58 if (level > 0 && image_index == 0) | 61 |
59 ++image_index; | |
60 if (level == 100) | |
61 image_index = kVolumeLevel - 1; | |
62 else if (image_index == kVolumeLevel - 1) | |
63 --image_index; | |
64 // Index 0 is reserved for mute. | |
65 if (delegate->IsAudioMuted()) | |
66 image_index = 0; | |
67 else | |
68 ++image_index; | |
69 if (image_index != image_index_) { | 62 if (image_index != image_index_) { |
70 SkIRect region = SkIRect::MakeXYWH(0, image_index * kVolumeImageHeight, | 63 gfx::Rect region(0, image_index * kVolumeImageHeight, |
71 kVolumeImageWidth, kVolumeImageHeight); | 64 kVolumeImageWidth, kVolumeImageHeight); |
72 gfx::ImageSkia image_skia; | 65 gfx::ImageSkia image_skia = gfx::ImageSkiaOperations::ExtractSubset( |
73 image_.ToImageSkia()->extractSubset(&image_skia, region); | 66 *(image_.ToImageSkia()), region); |
74 SetImage(views::CustomButton::BS_NORMAL, &image_skia); | 67 SetImage(views::CustomButton::BS_NORMAL, &image_skia); |
75 image_index_ = image_index; | 68 image_index_ = image_index; |
76 } | 69 } |
77 SchedulePaint(); | 70 SchedulePaint(); |
78 } | 71 } |
79 | 72 |
80 private: | 73 private: |
81 // Overridden from views::View. | 74 // Overridden from views::View. |
82 virtual gfx::Size GetPreferredSize() OVERRIDE { | 75 virtual gfx::Size GetPreferredSize() OVERRIDE { |
83 gfx::Size size = views::ToggleImageButton::GetPreferredSize(); | 76 gfx::Size size = views::ToggleImageButton::GetPreferredSize(); |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
211 percent = 0.0; | 204 percent = 0.0; |
212 volume_view_->SetVolumeLevel(percent); | 205 volume_view_->SetVolumeLevel(percent); |
213 SetDetailedViewCloseDelay(kTrayPopupAutoCloseDelayInSeconds); | 206 SetDetailedViewCloseDelay(kTrayPopupAutoCloseDelayInSeconds); |
214 return; | 207 return; |
215 } | 208 } |
216 PopupDetailedView(kTrayPopupAutoCloseDelayInSeconds, false); | 209 PopupDetailedView(kTrayPopupAutoCloseDelayInSeconds, false); |
217 } | 210 } |
218 | 211 |
219 } // namespace internal | 212 } // namespace internal |
220 } // namespace ash | 213 } // namespace ash |
OLD | NEW |