blob: 45efcd0369a9d7927d3cb279fe7d356b68269bfc [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 "components/fullscreen_control/fullscreen_control_view.h"
#include <memory>
#include "base/callback.h"
#include "cc/paint/paint_flags.h"
#include "components/strings/grit/components_strings.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/base/metadata/metadata_header_macros.h"
#include "ui/base/metadata/metadata_impl_macros.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:
METADATA_HEADER(CloseFullscreenButton);
explicit CloseFullscreenButton(PressedCallback callback)
: views::Button(std::move(callback)) {
std::unique_ptr<views::ImageView> close_image_view =
std::make_unique<views::ImageView>();
close_image_view->SetImage(gfx::CreateVectorIcon(
views::kIcCloseIcon, kCloseIconSize, SK_ColorWHITE));
// Not focusable by default, only for accessibility.
SetFocusBehavior(FocusBehavior::ACCESSIBLE_ONLY);
SetAccessibleName(l10n_util::GetStringUTF16(IDS_EXIT_FULLSCREEN_MODE));
AddChildView(close_image_view.release());
SetLayoutManager(std::make_unique<views::FillLayout>());
}
CloseFullscreenButton(const CloseFullscreenButton&) = delete;
CloseFullscreenButton& operator=(const CloseFullscreenButton&) = delete;
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);
}
};
BEGIN_METADATA(CloseFullscreenButton, views::Button)
END_METADATA
} // namespace
FullscreenControlView::FullscreenControlView(
views::Button::PressedCallback callback) {
exit_fullscreen_button_ = AddChildView(
std::make_unique<CloseFullscreenButton>(std::move(callback)));
SetLayoutManager(std::make_unique<views::FillLayout>());
exit_fullscreen_button_->SetPreferredSize(
gfx::Size(kCircleButtonDiameter, kCircleButtonDiameter));
}
FullscreenControlView::~FullscreenControlView() = default;
BEGIN_METADATA(FullscreenControlView, views::View)
END_METADATA