chromium/chrome/browser/ui/views/tabs/overflow_view.h

// Copyright 2021 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_UI_VIEWS_TABS_OVERFLOW_VIEW_H_
#define CHROME_BROWSER_UI_VIEWS_TABS_OVERFLOW_VIEW_H_

#include <memory>

#include "base/memory/raw_ptr.h"
#include "ui/base/metadata/metadata_header_macros.h"
#include "ui/gfx/geometry/size.h"
#include "ui/views/layout/flex_layout_types.h"
#include "ui/views/layout/layout_types.h"
#include "ui/views/view.h"

// Encloses a primary view and shows an overflow indicator (which is a second
// child view) if the overflow view is given less than the other view's minimum
// space.
//
// Provided because FlexLayout is not designed to show additional views as the
// parent view shrinks, but rather to shrink/hide them. It might still be
// possible to approximate this behavior with FlexLayout and creative use of
// FlexRules.
//
// Size of both views is by default interpolated between preferred and minimum
// size, with the indicator taking precedence if present. However you may set
// kFlexBehaviorKey on either or both views to provide different behavior.
//
// Note: currently only FlexSpecification::rule() will currently be respected as
// the other behaviors are implicit in how OverflowView functions. In the future
// we may add support for alignment() on the primary view as well as supporting
// kMarginsKey and kInternalPaddingKey. In the meantime you can simulate these
// by nesting views using the layout of your choice, or adding a border.
//
// TODO(dfried): If this turns out to be usable in multiple places, move to
// ui/views/layout.
// If there are 2 indicator views defined, then the first goes on the left and
// the the second goes on the right, else only the right gets filled.
class OverflowView : public views::View {};

#endif  // CHROME_BROWSER_UI_VIEWS_TABS_OVERFLOW_VIEW_H_