GridResolvedPosition.h [plain text]
#ifndef GridResolvedPosition_h
#define GridResolvedPosition_h
#if ENABLE(CSS_GRID_LAYOUT)
#include "GridPosition.h"
namespace WebCore {
class GridSpan;
class RenderBox;
class RenderStyle;
enum GridTrackSizingDirection {
ForColumns,
ForRows
};
class GridUnresolvedSpan {
public:
GridUnresolvedSpan(GridPosition initialPosition, GridPositionSide initialPositionSide, GridPosition finalPosition, GridPositionSide finalPositionSide)
: m_initialPosition(initialPosition)
, m_finalPosition(finalPosition)
, m_initialPositionSide(initialPositionSide)
, m_finalPositionSide(finalPositionSide)
{
}
const GridPosition& initialPosition() const { return m_initialPosition; }
const GridPosition& finalPosition() const { return m_finalPosition; }
GridPositionSide initialPositionSide() const { return m_initialPositionSide; }
GridPositionSide finalPositionSide() const { return m_finalPositionSide; }
bool requiresAutoPlacement() const;
void adjustGridPositionsFromStyle(const RenderStyle& gridContainerStyle);
private:
GridPosition m_initialPosition;
GridPosition m_finalPosition;
GridPositionSide m_initialPositionSide;
GridPositionSide m_finalPositionSide;
};
class GridResolvedPosition {
public:
GridResolvedPosition(unsigned position)
: m_integerPosition(position)
{
}
GridResolvedPosition(const GridPosition&, GridPositionSide);
GridResolvedPosition& operator*()
{
return *this;
}
GridResolvedPosition& operator++()
{
m_integerPosition++;
return *this;
}
bool operator==(const GridResolvedPosition& other) const
{
return m_integerPosition == other.m_integerPosition;
}
bool operator!=(const GridResolvedPosition& other) const
{
return m_integerPosition != other.m_integerPosition;
}
bool operator<(const GridResolvedPosition& other) const
{
return m_integerPosition < other.m_integerPosition;
}
bool operator>(const GridResolvedPosition& other) const
{
return m_integerPosition > other.m_integerPosition;
}
bool operator<=(const GridResolvedPosition& other) const
{
return m_integerPosition <= other.m_integerPosition;
}
bool operator>=(const GridResolvedPosition& other) const
{
return m_integerPosition >= other.m_integerPosition;
}
unsigned toInt() const
{
return m_integerPosition;
}
GridResolvedPosition next() const
{
return GridResolvedPosition(m_integerPosition + 1);
}
static GridSpan resolveGridPositionsFromAutoPlacementPosition(const RenderStyle&, const RenderBox&, GridTrackSizingDirection, const GridResolvedPosition&);
static GridSpan resolveGridPositionsFromStyle(const GridUnresolvedSpan&, const RenderStyle&);
static GridUnresolvedSpan unresolvedSpanFromStyle(const RenderStyle&, const RenderBox&, GridTrackSizingDirection);
static unsigned explicitGridColumnCount(const RenderStyle&);
static unsigned explicitGridRowCount(const RenderStyle&);
private:
unsigned m_integerPosition;
};
}
#endif // ENABLE(CSS_GRID_LAYOUT)
#endif // GridResolvedPosition_h