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.
5 #ifndef GridResolvedPosition_h
6 #define GridResolvedPosition_h
8 #include "core/rendering/style/GridPosition.h"
16 enum GridPositionSide {
23 enum GridTrackSizingDirection {
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 {
32 static GridResolvedPosition adjustGridPositionForAfterEndSide(size_t resolvedPosition)
34 return resolvedPosition ? GridResolvedPosition(resolvedPosition - 1) : GridResolvedPosition(0);
37 static GridResolvedPosition adjustGridPositionForSide(size_t resolvedPosition, GridPositionSide side)
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);
43 return GridResolvedPosition(resolvedPosition);
46 static GridSpan resolveGridPositionsFromAutoPlacementPosition(const RenderBox&, GridTrackSizingDirection, const GridResolvedPosition&);
47 static PassOwnPtr<GridSpan> resolveGridPositionsFromStyle(const RenderStyle&, const RenderBox&, GridTrackSizingDirection);
48 static GridResolvedPosition resolveNamedGridLinePositionFromStyle(const RenderStyle&, const GridPosition&, GridPositionSide);
49 static GridResolvedPosition resolveGridPositionFromStyle(const RenderStyle&, const GridPosition&, GridPositionSide);
50 static PassOwnPtr<GridSpan> resolveGridPositionAgainstOppositePosition(const RenderStyle&, const GridResolvedPosition& resolvedOppositePosition, const GridPosition&, GridPositionSide);
51 static PassOwnPtr<GridSpan> resolveNamedGridLinePositionAgainstOppositePosition(const RenderStyle&, const GridResolvedPosition& resolvedOppositePosition, const GridPosition&, GridPositionSide);
53 GridResolvedPosition(size_t position)
54 : m_integerPosition(position)
58 GridResolvedPosition(const GridPosition& position, GridPositionSide side)
60 ASSERT(position.integerPosition());
61 size_t integerPosition = position.integerPosition() - 1;
63 m_integerPosition = adjustGridPositionForSide(integerPosition, side).toInt();
66 GridResolvedPosition& operator++()
72 bool operator==(const GridResolvedPosition& other) const
74 return m_integerPosition == other.m_integerPosition;
77 bool operator!=(const GridResolvedPosition& other) const
79 return m_integerPosition != other.m_integerPosition;
82 bool operator<(const GridResolvedPosition& other) const
84 return m_integerPosition < other.m_integerPosition;
87 bool operator>(const GridResolvedPosition& other) const
89 return m_integerPosition > other.m_integerPosition;
92 bool operator<=(const GridResolvedPosition& other) const
94 return m_integerPosition <= other.m_integerPosition;
97 bool operator>=(const GridResolvedPosition& other) const
99 return m_integerPosition >= other.m_integerPosition;
104 return m_integerPosition;
107 GridResolvedPosition next() const
109 return GridResolvedPosition(m_integerPosition + 1);
112 static size_t explicitGridColumnCount(const RenderStyle&);
113 static size_t explicitGridRowCount(const RenderStyle&);
117 static size_t explicitGridSizeForSide(const RenderStyle&, GridPositionSide);
119 size_t m_integerPosition;
122 } // namespace WebCore
124 #endif // GridResolvedPosition_h