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