blob: 5fed7d2d04ddfadb764fd240ae2a10257de03024 [file] [log] [blame]
// Copyright 2018 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 "chrome/browser/vr/elements/vector_icon_button.h"
#include "chrome/browser/vr/elements/rect.h"
#include "chrome/browser/vr/elements/ui_element.h"
#include "chrome/browser/vr/elements/ui_element_name.h"
#include "chrome/browser/vr/elements/vector_icon.h"
#include "chrome/browser/vr/ui_scene_constants.h"
#include "ui/gfx/geometry/point_f.h"
namespace vr {
namespace {
constexpr float kDefaultIconScaleFactor = 0.5f;
} // namespace
VectorIconButton::VectorIconButton(
base::RepeatingCallback<void()> click_handler,
const gfx::VectorIcon& icon,
AudioDelegate* audio_delegate)
: Button(click_handler, audio_delegate),
icon_scale_factor_(kDefaultIconScaleFactor) {
auto vector_icon = std::make_unique<VectorIcon>(512);
vector_icon->SetType(kTypeButtonForeground);
vector_icon->SetIcon(icon);
vector_icon->set_hit_testable(false);
foreground_ = vector_icon.get();
background()->AddChild(std::move(vector_icon));
}
VectorIconButton::~VectorIconButton() = default;
void VectorIconButton::SetIcon(const gfx::VectorIcon& icon) {
foreground_->SetIcon(icon);
}
void VectorIconButton::SetIconScaleFactor(float factor) {
icon_scale_factor_ = factor;
OnSetSize(size());
}
void VectorIconButton::SetIconTranslation(float x, float y) {
foreground_->SetTranslate(x, y, 0);
}
void VectorIconButton::OnStateUpdated() {
Button::OnStateUpdated();
foreground_->SetColor(colors().GetForegroundColor(!enabled()));
}
void VectorIconButton::OnSetDrawPhase() {
Button::OnSetDrawPhase();
foreground_->SetDrawPhase(draw_phase());
}
void VectorIconButton::OnSetName() {
Button::OnSetName();
foreground_->set_owner_name_for_test(name());
}
void VectorIconButton::OnSetSize(const gfx::SizeF& size) {
Button::OnSetSize(size);
// Maintain aspect ratio of the icon, even if the button isn't square.
float new_size = std::min(size.width(), size.height()) * icon_scale_factor_;
foreground()->SetSize(new_size, new_size);
}
} // namespace vr