GridTrackPlacement.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. /*
  2. * Copyright (c) 2023, Aliaksandr Kalenik <kalenik.aliaksandr@gmail.com>
  3. * Copyright (c) 2022, Martin Falisse <mfalisse@outlook.com>
  4. *
  5. * SPDX-License-Identifier: BSD-2-Clause
  6. */
  7. #pragma once
  8. #include <AK/String.h>
  9. namespace Web::CSS {
  10. class GridTrackPlacement {
  11. public:
  12. static GridTrackPlacement make_auto()
  13. {
  14. return GridTrackPlacement();
  15. }
  16. static GridTrackPlacement make_line(Optional<int> line_number, Optional<String> name)
  17. {
  18. return GridTrackPlacement(AreaOrLine { .line_number = line_number, .name = name });
  19. }
  20. static GridTrackPlacement make_span(int value)
  21. {
  22. return GridTrackPlacement(Span { .value = value });
  23. }
  24. bool is_auto() const { return m_value.has<Auto>(); }
  25. bool is_span() const { return m_value.has<Span>(); }
  26. bool is_area_or_line() const { return m_value.has<AreaOrLine>(); }
  27. bool is_auto_positioned() const { return is_auto() || is_span(); }
  28. bool is_positioned() const { return !is_auto_positioned(); }
  29. bool has_identifier() const
  30. {
  31. return is_area_or_line() && m_value.get<AreaOrLine>().name.has_value();
  32. }
  33. bool has_line_number() const
  34. {
  35. return is_area_or_line() && m_value.get<AreaOrLine>().line_number.has_value();
  36. }
  37. String identifier() const { return *m_value.get<AreaOrLine>().name; }
  38. int line_number() const { return *m_value.get<AreaOrLine>().line_number; }
  39. int span() const { return m_value.get<Span>().value; }
  40. String to_string() const;
  41. bool operator==(GridTrackPlacement const& other) const = default;
  42. private:
  43. struct Auto {
  44. bool operator==(Auto const&) const = default;
  45. };
  46. struct AreaOrLine {
  47. Optional<int> line_number;
  48. Optional<String> name;
  49. bool operator==(AreaOrLine const& other) const = default;
  50. };
  51. struct Span {
  52. int value;
  53. bool operator==(Span const& other) const = default;
  54. };
  55. GridTrackPlacement()
  56. : m_value(Auto {}) {};
  57. GridTrackPlacement(AreaOrLine value)
  58. : m_value(value) {};
  59. GridTrackPlacement(Span value)
  60. : m_value(value) {};
  61. Variant<Auto, AreaOrLine, Span> m_value;
  62. };
  63. }