blob: 8ece001bd55f10a03d5d3b018d467da9dbcaed65 [file] [log] [blame]
// Copyright 2011 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef UI_VIEWS_CONTROLS_SEPARATOR_H_
#define UI_VIEWS_CONTROLS_SEPARATOR_H_
#include <optional>
#include "ui/color/color_id.h"
#include "ui/views/metadata/view_factory.h"
#include "ui/views/view.h"
namespace views {
// The Separator class is a view that shows a line used to visually separate
// other views.
class VIEWS_EXPORT Separator : public View {
METADATA_HEADER(Separator, View)
public:
// The separator's thickness in dip.
static constexpr int kThickness = 1;
// The separator's orientation, set to `kVertical` by default.
enum class Orientation { kVertical, kHorizontal };
Separator();
Separator(const Separator&) = delete;
Separator& operator=(const Separator&) = delete;
~Separator() override;
ui::ColorId GetColorId() const;
void SetColorId(ui::ColorId color_id);
// Vertical or horizontal extension depending on the orientation. Set to
// `kThickness` by default.
int GetPreferredLength() const;
void SetPreferredLength(int length);
Orientation GetOrientation() const;
void SetOrientation(Orientation orientation);
int GetBorderRadius() const;
void SetBorderRadius(int radius);
// Overridden from View:
gfx::Size CalculatePreferredSize(
const SizeBounds& /*available_size*/) const override;
void OnPaint(gfx::Canvas* canvas) override;
private:
int preferred_length_ = kThickness;
ui::ColorId color_id_ = ui::kColorSeparator;
Orientation orientation_ = Orientation::kVertical;
int border_radius_ = 0;
};
BEGIN_VIEW_BUILDER(VIEWS_EXPORT, Separator, View)
VIEW_BUILDER_PROPERTY(ui::ColorId, ColorId)
VIEW_BUILDER_PROPERTY(int, PreferredLength)
VIEW_BUILDER_PROPERTY(Separator::Orientation, Orientation)
VIEW_BUILDER_PROPERTY(int, BorderRadius)
END_VIEW_BUILDER
} // namespace views
DEFINE_VIEW_BUILDER(VIEWS_EXPORT, Separator)
#endif // UI_VIEWS_CONTROLS_SEPARATOR_H_