// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef ASH_STYLE_ROUNDED_CONTAINER_H_
#define ASH_STYLE_ROUNDED_CONTAINER_H_
#include "ash/ash_export.h"
#include "ui/gfx/geometry/insets.h"
#include "ui/views/view.h"
namespace gfx {
class RoundedCornersF;
} // namespace gfx
namespace ash {
// A rounded countainer which can be used in any list views to carry the items.
// It provides 4 `Behavior` styles.
class ASH_EXPORT RoundedContainer : public views::View {
METADATA_HEADER(RoundedContainer, views::View)
public:
// The default empty border insets.
static constexpr gfx::Insets kBorderInsets = gfx::Insets::VH(8, 0);
// The default corner radius for rounded corner and non-rounded corner.
static constexpr int kNonRoundedSideRadius = 4;
static constexpr int kRoundedSideRadius = 16;
enum class Behavior { kNotRounded, kTopRounded, kBottomRounded, kAllRounded };
explicit RoundedContainer(Behavior corner_behavior = Behavior::kAllRounded,
int non_rounded_radius = kNonRoundedSideRadius,
int rounded_radius = kRoundedSideRadius);
RoundedContainer(const RoundedContainer& other) = delete;
RoundedContainer& operator=(const RoundedContainer& other) = delete;
~RoundedContainer() override;
// Sets the corner behavior.
void SetBehavior(Behavior behavior);
// Sets the empty border insets.
void SetBorderInsets(const gfx::Insets& insets);
private:
// Returns the corners based on the `corner_behavior_`;
gfx::RoundedCornersF GetRoundedCorners();
// The shape of this container. Defaults to `kAllRounded`.
Behavior corner_behavior_;
const float non_rounded_radius_;
const float rounded_radius_;
};
} // namespace ash
#endif // ASH_STYLE_ROUNDED_CONTAINER_H_