1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef THIRD_PARTY_BLINK_RENDERER_CORE_STYLE_GRID_POSITIONS_RESOLVER_H_
6 #define THIRD_PARTY_BLINK_RENDERER_CORE_STYLE_GRID_POSITIONS_RESOLVER_H_
7 
8 #include "third_party/blink/renderer/core/style/grid_position.h"
9 #include "third_party/blink/renderer/platform/wtf/allocator/allocator.h"
10 
11 namespace blink {
12 
13 struct GridSpan;
14 class LayoutBox;
15 class ComputedStyle;
16 
17 enum GridPositionSide {
18   kColumnStartSide,
19   kColumnEndSide,
20   kRowStartSide,
21   kRowEndSide
22 };
23 
24 enum GridTrackSizingDirection { kForColumns, kForRows };
25 
26 class NamedLineCollection {
27  public:
28   NamedLineCollection(const ComputedStyle&,
29                       const String& named_line,
30                       GridTrackSizingDirection,
31                       size_t last_line,
32                       size_t auto_repeat_tracks_count);
33 
34   bool HasNamedLines();
35   size_t FirstPosition();
36 
37   bool Contains(size_t line);
38 
39  private:
40   bool HasExplicitNamedLines();
41   size_t FirstExplicitPosition();
42   const Vector<size_t>* named_lines_indexes_ = nullptr;
43   const Vector<size_t>* auto_repeat_named_lines_indexes_ = nullptr;
44   const Vector<size_t>* implicit_named_lines_indexes_ = nullptr;
45 
46   size_t insertion_point_;
47   size_t last_line_;
48   size_t auto_repeat_total_tracks_;
49   size_t auto_repeat_track_list_length_;
50 
51   NamedLineCollection(const NamedLineCollection&) = delete;
52   NamedLineCollection& operator=(const NamedLineCollection&) = delete;
53 };
54 
55 // This is a utility class with all the code related to grid items positions
56 // resolution.
57 class GridPositionsResolver {
58   DISALLOW_NEW();
59 
60  public:
61   static size_t ExplicitGridColumnCount(const ComputedStyle&,
62                                         size_t auto_repeat_columns_count);
63   static size_t ExplicitGridRowCount(const ComputedStyle&,
64                                      size_t auto_repeat_rows_count);
65 
66   static GridPositionSide InitialPositionSide(GridTrackSizingDirection);
67   static GridPositionSide FinalPositionSide(GridTrackSizingDirection);
68 
69   static size_t SpanSizeForAutoPlacedItem(const ComputedStyle&,
70                                           GridTrackSizingDirection);
71   static GridSpan ResolveGridPositionsFromStyle(
72       const ComputedStyle&,
73       const ComputedStyle&,
74       GridTrackSizingDirection,
75       size_t auto_repeat_tracks_count);
76 };
77 
78 }  // namespace blink
79 
80 #endif  // THIRD_PARTY_BLINK_RENDERER_CORE_STYLE_GRID_POSITIONS_RESOLVER_H_
81