OLD | NEW |
| (Empty) |
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 GridResolvedPosition_h | |
6 #define GridResolvedPosition_h | |
7 | |
8 #include "core/layout/style/GridPosition.h" | |
9 | |
10 namespace blink { | |
11 | |
12 struct GridSpan; | |
13 class LayoutBox; | |
14 class ComputedStyle; | |
15 | |
16 enum GridPositionSide { | |
17 ColumnStartSide, | |
18 ColumnEndSide, | |
19 RowStartSide, | |
20 RowEndSide | |
21 }; | |
22 | |
23 enum GridTrackSizingDirection { | |
24 ForColumns, | |
25 ForRows | |
26 }; | |
27 | |
28 // This class represents an index into one of the dimensions of the grid array. | |
29 // Wraps a size_t integer just for the purpose of knowing what we manipulate in
the grid code. | |
30 class GridResolvedPosition { | |
31 public: | |
32 static GridResolvedPosition adjustGridPositionForAfterEndSide(size_t resolve
dPosition) | |
33 { | |
34 return resolvedPosition ? GridResolvedPosition(resolvedPosition - 1) : G
ridResolvedPosition(0); | |
35 } | |
36 | |
37 static GridResolvedPosition adjustGridPositionForSide(size_t resolvedPositio
n, GridPositionSide side) | |
38 { | |
39 // An item finishing on the N-th line belongs to the N-1-th cell. | |
40 if (side == ColumnEndSide || side == RowEndSide) | |
41 return adjustGridPositionForAfterEndSide(resolvedPosition); | |
42 | |
43 return GridResolvedPosition(resolvedPosition); | |
44 } | |
45 | |
46 static void initialAndFinalPositionsFromStyle(const ComputedStyle&, const La
youtBox&, GridTrackSizingDirection, GridPosition &initialPosition, GridPosition
&finalPosition); | |
47 static GridSpan resolveGridPositionsFromAutoPlacementPosition(const Computed
Style&, const LayoutBox&, GridTrackSizingDirection, const GridResolvedPosition&)
; | |
48 static PassOwnPtr<GridSpan> resolveGridPositionsFromStyle(const ComputedStyl
e&, const LayoutBox&, GridTrackSizingDirection); | |
49 static GridResolvedPosition resolveNamedGridLinePositionFromStyle(const Comp
utedStyle&, const GridPosition&, GridPositionSide); | |
50 static GridResolvedPosition resolveGridPositionFromStyle(const ComputedStyle
&, const GridPosition&, GridPositionSide); | |
51 static PassOwnPtr<GridSpan> resolveGridPositionAgainstOppositePosition(const
ComputedStyle&, const GridResolvedPosition& resolvedOppositePosition, const Gri
dPosition&, GridPositionSide); | |
52 static PassOwnPtr<GridSpan> resolveNamedGridLinePositionAgainstOppositePosit
ion(const ComputedStyle&, const GridResolvedPosition& resolvedOppositePosition,
const GridPosition&, GridPositionSide); | |
53 | |
54 GridResolvedPosition(size_t position) | |
55 : m_integerPosition(position) | |
56 { | |
57 } | |
58 | |
59 GridResolvedPosition(const GridPosition& position, GridPositionSide side) | |
60 { | |
61 ASSERT(position.integerPosition()); | |
62 size_t integerPosition = position.integerPosition() - 1; | |
63 | |
64 m_integerPosition = adjustGridPositionForSide(integerPosition, side).toI
nt(); | |
65 } | |
66 | |
67 GridResolvedPosition& operator*() | |
68 { | |
69 return *this; | |
70 } | |
71 | |
72 GridResolvedPosition& operator++() | |
73 { | |
74 m_integerPosition++; | |
75 return *this; | |
76 } | |
77 | |
78 bool operator==(const GridResolvedPosition& other) const | |
79 { | |
80 return m_integerPosition == other.m_integerPosition; | |
81 } | |
82 | |
83 bool operator!=(const GridResolvedPosition& other) const | |
84 { | |
85 return m_integerPosition != other.m_integerPosition; | |
86 } | |
87 | |
88 bool operator<(const GridResolvedPosition& other) const | |
89 { | |
90 return m_integerPosition < other.m_integerPosition; | |
91 } | |
92 | |
93 bool operator>(const GridResolvedPosition& other) const | |
94 { | |
95 return m_integerPosition > other.m_integerPosition; | |
96 } | |
97 | |
98 bool operator<=(const GridResolvedPosition& other) const | |
99 { | |
100 return m_integerPosition <= other.m_integerPosition; | |
101 } | |
102 | |
103 bool operator>=(const GridResolvedPosition& other) const | |
104 { | |
105 return m_integerPosition >= other.m_integerPosition; | |
106 } | |
107 | |
108 size_t toInt() const | |
109 { | |
110 return m_integerPosition; | |
111 } | |
112 | |
113 GridResolvedPosition next() const | |
114 { | |
115 return GridResolvedPosition(m_integerPosition + 1); | |
116 } | |
117 | |
118 static size_t explicitGridColumnCount(const ComputedStyle&); | |
119 static size_t explicitGridRowCount(const ComputedStyle&); | |
120 | |
121 private: | |
122 | |
123 static size_t explicitGridSizeForSide(const ComputedStyle&, GridPositionSide
); | |
124 | |
125 size_t m_integerPosition; | |
126 }; | |
127 | |
128 } // namespace blink | |
129 | |
130 #endif // GridResolvedPosition_h | |
OLD | NEW |