blob: 549682bd1376f05967e579ac1593afd1c5e51485 [file] [log] [blame]
// 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 "chrome/browser/ui/views/fullscreen_control/fullscreen_control_view.h"
#include <memory>
#include "base/callback.h"
#include "cc/paint/paint_flags.h"
#include "chrome/grit/generated_resources.h"
#include "components/vector_icons/vector_icons.h"
#include "third_party/skia/include/core/SkColor.h"
#include "ui/base/l10n/l10n_util.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/geometry/insets.h"
#include "ui/gfx/geometry/point_f.h"
#include "ui/gfx/geometry/size.h"
#include "ui/gfx/paint_vector_icon.h"
#include "ui/views/background.h"
#include "ui/views/controls/button/button.h"
#include "ui/views/controls/image_view.h"
#include "ui/views/layout/fill_layout.h"
#include "ui/views/vector_icons.h"
namespace {
// Partially-transparent background color.
const SkColor kButtonBackgroundColor = SkColorSetARGB(0xcc, 0x28, 0x2c, 0x32);
constexpr int kCloseIconSize = 24;
class CloseFullscreenButton : public views::Button {
public:
explicit CloseFullscreenButton(views::ButtonListener* listener)
: views::Button(listener) {
std::unique_ptr<views::ImageView> close_image_view =
std::make_unique<views::ImageView>();
close_image_view->SetImage(gfx::CreateVectorIcon(
views::kIcCloseIcon, kCloseIconSize, SK_ColorWHITE));
SetAccessibleName(l10n_util::GetStringUTF16(IDS_EXIT_FULLSCREEN_MODE));
AddChildView(close_image_view.release());
SetLayoutManager(std::make_unique<views::FillLayout>());
}
private:
void PaintButtonContents(gfx::Canvas* canvas) override {
// TODO(robliao): If we decide to move forward with this, use themes.
cc::PaintFlags flags;
flags.setAntiAlias(true);
flags.setColor(kButtonBackgroundColor);
flags.setStyle(cc::PaintFlags::kFill_Style);
float radius = FullscreenControlView::kCircleButtonDiameter / 2.0f;
canvas->DrawCircle(gfx::PointF(radius, radius), radius, flags);
}
DISALLOW_COPY_AND_ASSIGN(CloseFullscreenButton);
};
} // namespace
FullscreenControlView::FullscreenControlView(
const base::RepeatingClosure& on_button_pressed)
: on_button_pressed_(on_button_pressed),
exit_fullscreen_button_(new CloseFullscreenButton(this)) {
AddChildView(exit_fullscreen_button_);
SetLayoutManager(std::make_unique<views::FillLayout>());
exit_fullscreen_button_->SetPreferredSize(
gfx::Size(kCircleButtonDiameter, kCircleButtonDiameter));
}
FullscreenControlView::~FullscreenControlView() = default;
void FullscreenControlView::ButtonPressed(views::Button* sender,
const ui::Event& event) {
if (sender == exit_fullscreen_button_ && on_button_pressed_)
on_button_pressed_.Run();
}