blob: db99a02e347e7faa3fa6a088da482376b3ea419c [file] [log] [blame]
// Copyright 2019 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/tabs/tab_group_header.h"
#include <memory>
#include <utility>
#include "base/strings/utf_string_conversions.h"
#include "chrome/browser/ui/layout_constants.h"
#include "chrome/browser/ui/tabs/tab_group_data.h"
#include "chrome/browser/ui/tabs/tab_style.h"
#include "chrome/browser/ui/views/chrome_layout_provider.h"
#include "chrome/browser/ui/views/tabs/tab_controller.h"
#include "third_party/skia/include/core/SkColor.h"
#include "third_party/skia/include/core/SkPath.h"
#include "ui/gfx/canvas.h"
#include "ui/gfx/color_utils.h"
#include "ui/gfx/geometry/insets.h"
#include "ui/views/background.h"
#include "ui/views/border.h"
#include "ui/views/controls/label.h"
#include "ui/views/layout/fill_layout.h"
#include "ui/views/layout/flex_layout.h"
#include "ui/views/layout/flex_layout_types.h"
#include "ui/views/layout/layout_provider.h"
TabGroupHeader::TabGroupHeader(TabController* controller, TabGroupId group)
: controller_(controller), group_(group) {
DCHECK(controller);
views::FlexLayout* layout =
SetLayoutManager(std::make_unique<views::FlexLayout>());
layout->SetOrientation(views::LayoutOrientation::kHorizontal)
.SetCollapseMargins(true)
.SetMainAxisAlignment(views::LayoutAlignment::kCenter)
.SetCrossAxisAlignment(views::LayoutAlignment::kCenter);
const TabGroupData* data = GetGroupData();
const SkColor color = GetGroupData()->color();
const ChromeLayoutProvider* provider = ChromeLayoutProvider::Get();
auto title_chip = std::make_unique<views::View>();
title_chip->SetBackground(views::CreateRoundedRectBackground(
color, provider->GetCornerRadiusMetric(views::EMPHASIS_LOW)));
title_chip->SetBorder(views::CreateEmptyBorder(
provider->GetInsetsMetric(INSETS_TAB_GROUP_TITLE_CHIP)));
title_chip->SetLayoutManager(std::make_unique<views::FillLayout>());
auto* title_chip_ptr = AddChildView(std::move(title_chip));
layout->SetFlexForView(title_chip_ptr,
views::FlexSpecification::ForSizeRule(
views::MinimumFlexSizeRule::kScaleToZero,
views::MaximumFlexSizeRule::kPreferred));
auto title = std::make_unique<views::Label>(data->title());
title->SetAutoColorReadabilityEnabled(false);
title->SetHorizontalAlignment(gfx::ALIGN_CENTER);
title->SetElideBehavior(gfx::FADE_TAIL);
title->SetEnabledColor(color_utils::GetColorWithMaxContrast(color));
title_chip_ptr->AddChildView(std::move(title));
}
const TabGroupData* TabGroupHeader::GetGroupData() {
return controller_->GetDataForGroup(group_);
}