[go: nahoru, domu]

blob: 111421ab2d2b182afc974dbbaed6808f6c93f46b [file] [log] [blame]
// Copyright 2020 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/holding_space/holding_space_item_screen_capture_view.h"
#include "ash/public/cpp/holding_space/holding_space_color_provider.h"
#include "ash/public/cpp/holding_space/holding_space_constants.h"
#include "ash/public/cpp/holding_space/holding_space_image.h"
#include "ash/public/cpp/holding_space/holding_space_item.h"
#include "ash/public/cpp/rounded_image_view.h"
#include "ash/style/ash_color_provider.h"
#include "ash/system/holding_space/holding_space_util.h"
#include "ash/system/tray/tray_constants.h"
#include "components/vector_icons/vector_icons.h"
#include "ui/gfx/paint_vector_icon.h"
#include "ui/views/accessibility/view_accessibility.h"
#include "ui/views/background.h"
#include "ui/views/controls/button/image_button.h"
#include "ui/views/controls/image_view.h"
#include "ui/views/layout/box_layout.h"
#include "ui/views/layout/fill_layout.h"
#include "ui/views/metadata/metadata_impl_macros.h"
namespace ash {
// Appearance.
constexpr gfx::Insets kCheckmarkAndPinButtonContainerPadding(4);
constexpr gfx::Size kPinButtonSize(24, 24);
constexpr gfx::Size kPlayIconSize(32, 32);
HoldingSpaceItemScreenCaptureView::HoldingSpaceItemScreenCaptureView(
HoldingSpaceItemViewDelegate* delegate,
const HoldingSpaceItem* item)
: HoldingSpaceItemView(delegate, item) {
SetPreferredSize(kHoldingSpaceScreenCaptureSize);
SetLayoutManager(std::make_unique<views::FillLayout>());
image_ = AddChildView(std::make_unique<RoundedImageView>(
kHoldingSpaceCornerRadius, RoundedImageView::Alignment::kLeading));
image_->SetID(kHoldingSpaceItemImageId);
// Subscribe to be notified of changes to `item_`'s image.
image_subscription_ = item->image().AddImageSkiaChangedCallback(
base::BindRepeating(&HoldingSpaceItemScreenCaptureView::UpdateImage,
base::Unretained(this)));
UpdateImage();
if (item->type() == HoldingSpaceItem::Type::kScreenRecording)
AddPlayIcon();
views::View* checkmark_and_pin_button_container =
AddChildView(std::make_unique<views::View>());
auto* layout = checkmark_and_pin_button_container->SetLayoutManager(
std::make_unique<views::BoxLayout>(
views::BoxLayout::Orientation::kHorizontal,
kCheckmarkAndPinButtonContainerPadding));
layout->set_cross_axis_alignment(
views::BoxLayout::CrossAxisAlignment::kStart);
// Checkmark.
AddCheckmark(/*parent=*/checkmark_and_pin_button_container);
// Spacer.
views::View* spacer = checkmark_and_pin_button_container->AddChildView(
std::make_unique<views::View>());
layout->SetFlexForView(spacer, 1);
// Pin.
auto* pin = AddPin(/*parent=*/checkmark_and_pin_button_container);
pin->SetPreferredSize(kPinButtonSize);
}
HoldingSpaceItemScreenCaptureView::~HoldingSpaceItemScreenCaptureView() =
default;
views::View* HoldingSpaceItemScreenCaptureView::GetTooltipHandlerForPoint(
const gfx::Point& point) {
// Tooltip events should be handled top level, not by descendents.
return HitTestPoint(point) ? this : nullptr;
}
std::u16string HoldingSpaceItemScreenCaptureView::GetTooltipText(
const gfx::Point& point) const {
return item()->text();
}
void HoldingSpaceItemScreenCaptureView::OnHoldingSpaceItemUpdated(
const HoldingSpaceItem* item) {
HoldingSpaceItemView::OnHoldingSpaceItemUpdated(item);
if (this->item() == item)
TooltipTextChanged();
}
void HoldingSpaceItemScreenCaptureView::OnThemeChanged() {
HoldingSpaceItemView::OnThemeChanged();
pin()->SetBackground(holding_space_util::CreateCircleBackground(
HoldingSpaceColorProvider::Get()->GetBackgroundColor()));
}
void HoldingSpaceItemScreenCaptureView::UpdateImage() {
image_->SetImage(
item()->image().GetImageSkia(kHoldingSpaceScreenCaptureSize));
SchedulePaint();
}
void HoldingSpaceItemScreenCaptureView::AddPlayIcon() {
auto* play_icon_container = AddChildView(std::make_unique<views::View>());
play_icon_container->SetFocusBehavior(views::View::FocusBehavior::NEVER);
auto* layout =
play_icon_container->SetLayoutManager(std::make_unique<views::BoxLayout>(
views::BoxLayout::Orientation::kHorizontal));
layout->set_main_axis_alignment(views::BoxLayout::MainAxisAlignment::kCenter);
layout->set_cross_axis_alignment(
views::BoxLayout::CrossAxisAlignment::kCenter);
auto* play_icon =
play_icon_container->AddChildView(std::make_unique<views::ImageView>());
play_icon->SetID(kHoldingSpaceScreenCapturePlayIconId);
play_icon->SetBackground(holding_space_util::CreateCircleBackground(
HoldingSpaceColorProvider::Get()->GetBackgroundColor()));
play_icon->SetImage(gfx::CreateVectorIcon(
vector_icons::kPlayArrowIcon, kHoldingSpaceIconSize,
AshColorProvider::Get()->GetContentLayerColor(
AshColorProvider::ContentLayerType::kButtonIconColor)));
play_icon->SetPreferredSize(kPlayIconSize);
}
BEGIN_METADATA(HoldingSpaceItemScreenCaptureView, HoldingSpaceItemView)
END_METADATA
} // namespace ash