| Index: ash/system/fractional_view/scale_view.cc
|
| diff --git a/ash/system/fractional_view/scale_view.cc b/ash/system/fractional_view/scale_view.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..230a8eb3819e1227aebadb1f93773b85290465f2
|
| --- /dev/null
|
| +++ b/ash/system/fractional_view/scale_view.cc
|
| @@ -0,0 +1,126 @@
|
| +// Copyright 2017 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/fractional_view/scale_view.h"
|
| +
|
| +#include <algorithm>
|
| +
|
| +#include "ash/resources/vector_icons/vector_icons.h"
|
| +#include "ash/shell.h"
|
| +#include "ash/shell_port.h"
|
| +#include "ash/strings/grit/ash_strings.h"
|
| +#include "ash/system/tray/actionable_view.h"
|
| +#include "ash/system/tray/system_tray_item.h"
|
| +#include "ash/system/tray/tray_constants.h"
|
| +#include "ash/system/tray/tray_popup_utils.h"
|
| +#include "ash/system/tray/tri_view.h"
|
| +#include "base/command_line.h"
|
| +#include "base/strings/string_number_conversions.h"
|
| +#include "base/strings/utf_string_conversions.h"
|
| +#include "chromeos/audio/cras_audio_handler.h"
|
| +#include "ui/accessibility/ax_node_data.h"
|
| +#include "ui/base/l10n/l10n_util.h"
|
| +#include "ui/display/display.h"
|
| +#include "ui/display/display_switches.h"
|
| +#include "ui/display/manager/display_manager.h"
|
| +#include "ui/gfx/paint_vector_icon.h"
|
| +#include "ui/views/background.h"
|
| +#include "ui/views/border.h"
|
| +#include "ui/views/controls/button/custom_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/fill_layout.h"
|
| +
|
| +using chromeos::CrasAudioHandler;
|
| +
|
| +namespace ash {
|
| +namespace tray {
|
| +namespace {
|
| +
|
| +std::string GetStringValue(double value) {
|
| + std::string str_value = base::DoubleToString(value);
|
| + if (str_value.length() > 4)
|
| + str_value.erase(str_value.begin() + 4, str_value.end());
|
| + return str_value;
|
| +}
|
| +
|
| +} // namespace
|
| +
|
| +ScaleView::ScaleView(SystemTrayItem* owner, bool is_default_view)
|
| + : owner_(owner),
|
| + tri_view_(TrayPopupUtils::CreateMultiTargetRowView()),
|
| + more_button_(nullptr),
|
| + label_(nullptr),
|
| + slider_(nullptr),
|
| + is_default_view_(is_default_view) {
|
| + SetLayoutManager(new views::FillLayout);
|
| + AddChildView(tri_view_);
|
| +
|
| + label_ = new views::Label(base::UTF8ToUTF16(
|
| + GetStringValue(display::Display::GetForcedDeviceScaleFactor())));
|
| + tri_view_->AddView(TriView::Container::START, label_);
|
| +
|
| + slider_ = TrayPopupUtils::CreateSlider(this);
|
| + slider_->SetValue((display::Display::GetForcedDeviceScaleFactor() - 1.f) / 2);
|
| + slider_->SetAccessibleName(
|
| + l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_VOLUME));
|
| + tri_view_->AddView(TriView::Container::CENTER, slider_);
|
| +
|
| + // set_background(views::Background::CreateSolidBackground(kBackgroundColor));
|
| +
|
| + if (!is_default_view_) {
|
| + tri_view_->SetContainerVisible(TriView::Container::END, false);
|
| + Update();
|
| + return;
|
| + }
|
| +
|
| + more_button_ = new ButtonListenerActionableView(
|
| + owner_, TrayPopupInkDropStyle::INSET_BOUNDS, this);
|
| + TrayPopupUtils::ConfigureContainer(TriView::Container::END, more_button_);
|
| +
|
| + more_button_->SetInkDropMode(views::InkDropHostView::InkDropMode::ON);
|
| + more_button_->SetBorder(
|
| + views::CreateEmptyBorder(gfx::Insets(0, kTrayPopupButtonEndMargin)));
|
| + tri_view_->AddView(TriView::Container::END, more_button_);
|
| +
|
| + more_button_->AddChildView(TrayPopupUtils::CreateMoreImageView());
|
| + more_button_->SetAccessibleName(
|
| + l10n_util::GetStringUTF16(IDS_ASH_STATUS_TRAY_AUDIO));
|
| + Update();
|
| +}
|
| +
|
| +ScaleView::~ScaleView() {}
|
| +
|
| +void ScaleView::Update() {
|
| + slider_->UpdateState(!CrasAudioHandler::Get()->IsOutputMuted());
|
| + Layout();
|
| +}
|
| +
|
| +void ScaleView::ButtonPressed(views::Button* sender, const ui::Event& event) {
|
| + if (sender == more_button_)
|
| + owner_->TransitionDetailedView();
|
| +}
|
| +
|
| +void ScaleView::SliderValueChanged(views::Slider* sender,
|
| + float value,
|
| + float old_value,
|
| + views::SliderChangeReason reason) {
|
| + if (reason == views::VALUE_CHANGED_BY_USER) {
|
| + float new_scale = 1.f + value * 2.0f;
|
| + std::string str_value = GetStringValue(new_scale);
|
| + label_->SetText(base::UTF8ToUTF16(str_value));
|
| + }
|
| +}
|
| +
|
| +void ScaleView::SliderDragEnded(views::Slider* sender) {
|
| + display::Display::ResetForceDeviceScaleFactorForTesting();
|
| + base::CommandLine::ForCurrentProcess()->AppendSwitchASCII(
|
| + switches::kForceDeviceScaleFactor,
|
| + GetStringValue(1.f + slider_->value() * 2.0f));
|
| + ash::Shell::Get()->display_manager()->UpdateDisplays();
|
| +}
|
| +
|
| +} // namespace tray
|
| +} // namespace ash
|
|
|