/* * Copyright (c) 2023, Aliaksandr Kalenik * Copyright (c) 2022, Martin Falisse * * SPDX-License-Identifier: BSD-2-Clause */ #pragma once #include namespace Web::CSS { class GridTrackPlacement { public: static GridTrackPlacement make_auto() { return GridTrackPlacement(); } static GridTrackPlacement make_area(String name) { return GridTrackPlacement(Area { .name = name }); } static GridTrackPlacement make_line(int value, Optional name) { return GridTrackPlacement(Line { .value = value, .name = name }); } static GridTrackPlacement make_span(int value) { return GridTrackPlacement(Span { .value = value }); } bool is_auto() const { return m_value.has(); } bool is_area() const { return m_value.has(); } bool is_line() const { return m_value.has(); } bool is_span() const { return m_value.has(); } bool is_auto_positioned() const { return is_auto() || is_span(); } bool is_positioned() const { return !is_auto_positioned(); } bool has_line_name() const { return is_line() && m_value.get().name.has_value(); } String area_name() const { return m_value.get().name; } String line_name() const { return m_value.get().name.value(); } int line_number() const { return m_value.get().value; } int span() const { return m_value.get().value; } String to_string() const; bool operator==(GridTrackPlacement const& other) const = default; private: struct Auto { bool operator==(Auto const&) const = default; }; struct Area { String name; bool operator==(Area const& other) const = default; }; struct Line { int value; Optional name; bool operator==(Line const& other) const = default; }; struct Span { int value; bool operator==(Span const& other) const = default; }; GridTrackPlacement() : m_value(Auto {}) {}; GridTrackPlacement(Area value) : m_value(value) {}; GridTrackPlacement(Line value) : m_value(value) {}; GridTrackPlacement(Span value) : m_value(value) {}; Variant m_value; }; }