Use #pragma once in WebCore
[WebKit-https.git] / Source / WebCore / rendering / style / GridPosition.h
index 376a096..ba0f12f 100644 (file)
@@ -1,5 +1,6 @@
 /*
  * Copyright (C) 2012 Google Inc. All rights reserved.
+ * Copyright (C) 2013, 2014 Igalia S.L.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#ifndef GridPosition_h
-#define GridPosition_h
+#pragma once
+
+#if ENABLE(CSS_GRID_LAYOUT)
+
+#include <wtf/text/WTFString.h>
 
 namespace WebCore {
 
 enum GridPositionType {
     AutoPosition,
-    IntegerPosition,
-    SpanPosition
+    ExplicitPosition, // [ <integer> || <string> ]
+    SpanPosition, // span && [ <integer> || <string> ]
+    NamedGridAreaPosition // <ident>
+};
+
+enum GridPositionSide {
+    ColumnStartSide,
+    ColumnEndSide,
+    RowStartSide,
+    RowEndSide
 };
 
 class GridPosition {
@@ -51,30 +63,50 @@ public:
 
     GridPositionType type() const { return m_type; }
     bool isAuto() const { return m_type == AutoPosition; }
-    bool isInteger() const { return m_type == IntegerPosition; }
     bool isSpan() const { return m_type == SpanPosition; }
+    bool isNamedGridArea() const { return m_type == NamedGridAreaPosition; }
 
-    void setIntegerPosition(int position)
+    void setExplicitPosition(int position, const String& namedGridLine)
     {
-        m_type = IntegerPosition;
+        m_type = ExplicitPosition;
         m_integerPosition = position;
+        m_namedGridLine = namedGridLine;
+    }
+
+    void setAutoPosition()
+    {
+        m_type = AutoPosition;
+        m_integerPosition = 0;
     }
 
     // 'span' values cannot be negative, yet we reuse the <integer> position which can
     // be. This means that we have to convert the span position to an integer, losing
     // some precision here. It shouldn't be an issue in practice though.
-    void setSpanPosition(int position)
+    void setSpanPosition(int position, const String& namedGridLine)
     {
         m_type = SpanPosition;
         m_integerPosition = position;
+        m_namedGridLine = namedGridLine;
+    }
+
+    void setNamedGridArea(const String& namedGridArea)
+    {
+        m_type = NamedGridAreaPosition;
+        m_namedGridLine = namedGridArea;
     }
 
     int integerPosition() const
     {
-        ASSERT(type() == IntegerPosition);
+        ASSERT(type() == ExplicitPosition);
         return m_integerPosition;
     }
 
+    String namedGridLine() const
+    {
+        ASSERT(type() == ExplicitPosition || type() == SpanPosition || type() == NamedGridAreaPosition);
+        return m_namedGridLine;
+    }
+
     int spanPosition() const
     {
         ASSERT(type() == SpanPosition);
@@ -83,14 +115,19 @@ public:
 
     bool operator==(const GridPosition& other) const
     {
-        return m_type == other.m_type && m_integerPosition == other.m_integerPosition;
+        return m_type == other.m_type && m_integerPosition == other.m_integerPosition && m_namedGridLine == other.m_namedGridLine;
     }
 
+    bool shouldBeResolvedAgainstOppositePosition() const
+    {
+        return isAuto() || isSpan();
+    }
 private:
     GridPositionType m_type;
     int m_integerPosition;
+    String m_namedGridLine;
 };
 
 } // namespace WebCore
 
-#endif // GridPosition_h
+#endif // ENABLE(CSS_GRID_LAYOUT)