GridTrackSize.cpp 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. /*
  2. * Copyright (c) 2022, Martin Falisse <mfalisse@outlook.com>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include "GridTrackSize.h"
  7. #include <AK/String.h>
  8. #include <LibWeb/CSS/Length.h>
  9. #include <LibWeb/CSS/Percentage.h>
  10. #include <LibWeb/CSS/StyleValue.h>
  11. namespace Web::CSS {
  12. GridSize::GridSize(Length length)
  13. : m_type(Type::Length)
  14. , m_length(length)
  15. {
  16. }
  17. GridSize::GridSize(Percentage percentage)
  18. : m_type(Type::Percentage)
  19. , m_length { Length::make_px(0) }
  20. , m_percentage(percentage)
  21. {
  22. }
  23. GridSize::GridSize(float flexible_length)
  24. : m_type(Type::FlexibleLength)
  25. , m_length { Length::make_px(0) }
  26. , m_flexible_length(flexible_length)
  27. {
  28. }
  29. GridSize::GridSize()
  30. : m_length { Length::make_auto() }
  31. {
  32. }
  33. GridSize::~GridSize() = default;
  34. GridSize GridSize::make_auto()
  35. {
  36. return GridSize(CSS::Length::make_auto());
  37. }
  38. String GridSize::to_string() const
  39. {
  40. switch (m_type) {
  41. case Type::Length:
  42. return m_length.to_string();
  43. case Type::Percentage:
  44. return m_percentage.to_string();
  45. case Type::FlexibleLength:
  46. return String::formatted("{}fr", m_flexible_length);
  47. }
  48. VERIFY_NOT_REACHED();
  49. }
  50. Length GridSize::length() const
  51. {
  52. return m_length;
  53. }
  54. GridMinMax::GridMinMax(GridSize min_grid_size, GridSize max_grid_size)
  55. : m_min_grid_size(min_grid_size)
  56. , m_max_grid_size(max_grid_size)
  57. {
  58. }
  59. String GridMinMax::to_string() const
  60. {
  61. StringBuilder builder;
  62. builder.append("minmax("sv);
  63. builder.appendff("{}", m_min_grid_size.to_string());
  64. builder.append(", "sv);
  65. builder.appendff("{}", m_max_grid_size.to_string());
  66. builder.append(")"sv);
  67. return builder.to_string();
  68. }
  69. GridRepeat::GridRepeat(GridTrackSizeList grid_track_size_list, int repeat_count)
  70. : m_type(Type::Default)
  71. , m_grid_track_size_list(grid_track_size_list)
  72. , m_repeat_count(repeat_count)
  73. {
  74. }
  75. GridRepeat::GridRepeat(GridTrackSizeList grid_track_size_list, Type type)
  76. : m_type(type)
  77. , m_grid_track_size_list(grid_track_size_list)
  78. {
  79. }
  80. GridRepeat::GridRepeat()
  81. {
  82. }
  83. String GridRepeat::to_string() const
  84. {
  85. StringBuilder builder;
  86. builder.append("repeat("sv);
  87. switch (m_type) {
  88. case Type::AutoFit:
  89. builder.append("auto-fill"sv);
  90. break;
  91. case Type::AutoFill:
  92. builder.append("auto-fit"sv);
  93. break;
  94. case Type::Default:
  95. builder.appendff("{}", m_repeat_count);
  96. break;
  97. default:
  98. VERIFY_NOT_REACHED();
  99. }
  100. builder.append(", "sv);
  101. builder.appendff("{}", m_grid_track_size_list.to_string());
  102. builder.append(")"sv);
  103. return builder.to_string();
  104. }
  105. ExplicitGridTrack::ExplicitGridTrack(CSS::GridMinMax grid_minmax)
  106. : m_type(Type::MinMax)
  107. , m_grid_minmax(grid_minmax)
  108. {
  109. }
  110. ExplicitGridTrack::ExplicitGridTrack(CSS::GridRepeat grid_repeat)
  111. : m_type(Type::Repeat)
  112. , m_grid_repeat(grid_repeat)
  113. {
  114. }
  115. ExplicitGridTrack::ExplicitGridTrack(CSS::GridSize grid_size)
  116. : m_type(Type::Default)
  117. , m_grid_size(grid_size)
  118. {
  119. }
  120. String ExplicitGridTrack::to_string() const
  121. {
  122. switch (m_type) {
  123. case Type::MinMax:
  124. return m_grid_minmax.to_string();
  125. case Type::Repeat:
  126. return m_grid_repeat.to_string();
  127. case Type::Default:
  128. return m_grid_size.to_string();
  129. default:
  130. VERIFY_NOT_REACHED();
  131. }
  132. }
  133. GridTrackSizeList::GridTrackSizeList(Vector<CSS::ExplicitGridTrack> track_list)
  134. : m_track_list(track_list)
  135. {
  136. }
  137. GridTrackSizeList::GridTrackSizeList()
  138. : m_track_list({})
  139. {
  140. }
  141. GridTrackSizeList GridTrackSizeList::make_auto()
  142. {
  143. return GridTrackSizeList();
  144. }
  145. String GridTrackSizeList::to_string() const
  146. {
  147. StringBuilder builder;
  148. for (size_t i = 0; i < m_track_list.size(); ++i) {
  149. builder.append(m_track_list[i].to_string());
  150. if (i < m_track_list.size() - 1)
  151. builder.append(" "sv);
  152. }
  153. return builder.to_string();
  154. }
  155. }