CSS parsing for -webkit-flex-flow
authorojan@chromium.org <ojan@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 30 Aug 2011 20:39:40 +0000 (20:39 +0000)
committerojan@chromium.org <ojan@chromium.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 30 Aug 2011 20:39:40 +0000 (20:39 +0000)
https://bugs.webkit.org/show_bug.cgi?id=67224

Source/WebCore:

Reviewed by Tony Chang.

Adds support for the first value of -webkit-flex-flow.
Later we'll need to add support for the second "wrap" value,
but that can wait until we are ready to implement multiline
flex and the spec has stabilized a bit.

* css/CSSComputedStyleDeclaration.cpp:
(WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
* css/CSSParser.cpp:
(WebCore::CSSParser::parseValue):
* css/CSSPrimitiveValueMappings.h:
(WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
(WebCore::CSSPrimitiveValue::operator EFlexFlow):
* css/CSSPropertyNames.in:
* css/CSSStyleApplyProperty.cpp:
(WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
* css/CSSStyleSelector.cpp:
(WebCore::CSSStyleSelector::applyProperty):
* css/CSSValueKeywords.in:
* rendering/style/RenderStyle.h:
(WebCore::InheritedFlags::flexFlow):
(WebCore::InheritedFlags::setFlexFlow):
(WebCore::InheritedFlags::initialFlexFlow):
* rendering/style/RenderStyleConstants.h:
* rendering/style/StyleFlexibleBoxData.cpp:
(WebCore::StyleFlexibleBoxData::StyleFlexibleBoxData):
(WebCore::StyleFlexibleBoxData::operator==):
* rendering/style/StyleFlexibleBoxData.h:

LayoutTests:

Reviewed by Tony Chang.

* css3/flexbox/css-properties-expected.txt:
* css3/flexbox/script-tests/css-properties.js:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@94104 268f45cc-cd09-0410-ab3c-d52691b4dbfc

15 files changed:
LayoutTests/ChangeLog
LayoutTests/css3/flexbox/css-properties-expected.txt
LayoutTests/css3/flexbox/script-tests/css-properties.js
Source/WebCore/ChangeLog
Source/WebCore/css/CSSComputedStyleDeclaration.cpp
Source/WebCore/css/CSSParser.cpp
Source/WebCore/css/CSSPrimitiveValueMappings.h
Source/WebCore/css/CSSPropertyNames.in
Source/WebCore/css/CSSStyleApplyProperty.cpp
Source/WebCore/css/CSSStyleSelector.cpp
Source/WebCore/css/CSSValueKeywords.in
Source/WebCore/rendering/style/RenderStyle.h
Source/WebCore/rendering/style/RenderStyleConstants.h
Source/WebCore/rendering/style/StyleFlexibleBoxData.cpp
Source/WebCore/rendering/style/StyleFlexibleBoxData.h

index 0f4a9be..c2d9f26 100644 (file)
@@ -1,3 +1,13 @@
+2011-08-30  Ojan Vafai  <ojan@chromium.org>
+
+        CSS parsing for -webkit-flex-flow
+        https://bugs.webkit.org/show_bug.cgi?id=67224
+
+        Reviewed by Tony Chang.
+
+        * css3/flexbox/css-properties-expected.txt:
+        * css3/flexbox/script-tests/css-properties.js:
+
 2011-08-30  Alexey Proskuryakov  <ap@apple.com>
 
         fast/loader/document-destruction-within-unload.html causes an assertion failure in the next
index acbada5..4bec558 100644 (file)
@@ -43,6 +43,33 @@ PASS flexbox.style.webkitFlexAlign is "baseline"
 PASS window.getComputedStyle(flexbox, null).webkitFlexAlign is "baseline"
 PASS flexbox.style.webkitFlexAlign is ""
 PASS window.getComputedStyle(flexbox, null).webkitFlexAlign is "stretch"
+PASS flexbox.style.webkitFlexFlow is ""
+PASS window.getComputedStyle(flexbox, null).webkitFlexFlow is "row"
+PASS flexbox.style.webkitFlexFlow is ""
+PASS flexbox.style.webkitFlexFlow is "row"
+PASS window.getComputedStyle(flexbox, null).webkitFlexFlow is "row"
+PASS flexbox.style.webkitFlexFlow is "row-reverse"
+PASS window.getComputedStyle(flexbox, null).webkitFlexFlow is "row-reverse"
+PASS flexbox.style.webkitFlexFlow is "column"
+PASS window.getComputedStyle(flexbox, null).webkitFlexFlow is "column"
+PASS flexbox.style.webkitFlexFlow is "column-reverse"
+PASS window.getComputedStyle(flexbox, null).webkitFlexFlow is "column-reverse"
+PASS flexbox.style.webkitFlexFlow is "horizontal"
+PASS window.getComputedStyle(flexbox, null).webkitFlexFlow is "horizontal"
+PASS flexbox.style.webkitFlexFlow is "horizontal-reverse"
+PASS window.getComputedStyle(flexbox, null).webkitFlexFlow is "horizontal-reverse"
+PASS flexbox.style.webkitFlexFlow is "horizontal-ltr"
+PASS window.getComputedStyle(flexbox, null).webkitFlexFlow is "horizontal-ltr"
+PASS flexbox.style.webkitFlexFlow is "horizontal-rtl"
+PASS window.getComputedStyle(flexbox, null).webkitFlexFlow is "horizontal-rtl"
+PASS flexbox.style.webkitFlexFlow is "vertical"
+PASS window.getComputedStyle(flexbox, null).webkitFlexFlow is "vertical"
+PASS flexbox.style.webkitFlexFlow is "vertical-reverse"
+PASS window.getComputedStyle(flexbox, null).webkitFlexFlow is "vertical-reverse"
+PASS flexbox.style.webkitFlexFlow is "vertical-ttb"
+PASS window.getComputedStyle(flexbox, null).webkitFlexFlow is "vertical-ttb"
+PASS flexbox.style.webkitFlexFlow is "vertical-btt"
+PASS window.getComputedStyle(flexbox, null).webkitFlexFlow is "vertical-btt"
 PASS successfullyParsed is true
 
 TEST COMPLETE
index da73c96..3fafddc 100644 (file)
@@ -100,4 +100,58 @@ flexbox.style.webkitFlexAlign = '';
 shouldBeEqualToString('flexbox.style.webkitFlexAlign', '');
 shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitFlexAlign', 'stretch');
 
+shouldBeEqualToString('flexbox.style.webkitFlexFlow', '');
+shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitFlexFlow', 'row');
+
+flexbox.style.webkitFlexFlow = 'foo';
+shouldBeEqualToString('flexbox.style.webkitFlexFlow', '');
+
+flexbox.style.webkitFlexFlow = 'row';
+shouldBeEqualToString('flexbox.style.webkitFlexFlow', 'row');
+shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitFlexFlow', 'row');
+
+flexbox.style.webkitFlexFlow = 'row-reverse';
+shouldBeEqualToString('flexbox.style.webkitFlexFlow', 'row-reverse');
+shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitFlexFlow', 'row-reverse');
+
+flexbox.style.webkitFlexFlow = 'column';
+shouldBeEqualToString('flexbox.style.webkitFlexFlow', 'column');
+shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitFlexFlow', 'column');
+
+flexbox.style.webkitFlexFlow = 'column-reverse';
+shouldBeEqualToString('flexbox.style.webkitFlexFlow', 'column-reverse');
+shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitFlexFlow', 'column-reverse');
+
+flexbox.style.webkitFlexFlow = 'horizontal';
+shouldBeEqualToString('flexbox.style.webkitFlexFlow', 'horizontal');
+shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitFlexFlow', 'horizontal');
+
+flexbox.style.webkitFlexFlow = 'horizontal-reverse';
+shouldBeEqualToString('flexbox.style.webkitFlexFlow', 'horizontal-reverse');
+shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitFlexFlow', 'horizontal-reverse');
+
+flexbox.style.webkitFlexFlow = 'horizontal-ltr';
+shouldBeEqualToString('flexbox.style.webkitFlexFlow', 'horizontal-ltr');
+shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitFlexFlow', 'horizontal-ltr');
+
+flexbox.style.webkitFlexFlow = 'horizontal-rtl';
+shouldBeEqualToString('flexbox.style.webkitFlexFlow', 'horizontal-rtl');
+shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitFlexFlow', 'horizontal-rtl');
+
+flexbox.style.webkitFlexFlow = 'vertical';
+shouldBeEqualToString('flexbox.style.webkitFlexFlow', 'vertical');
+shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitFlexFlow', 'vertical');
+
+flexbox.style.webkitFlexFlow = 'vertical-reverse';
+shouldBeEqualToString('flexbox.style.webkitFlexFlow', 'vertical-reverse');
+shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitFlexFlow', 'vertical-reverse');
+
+flexbox.style.webkitFlexFlow = 'vertical-ttb';
+shouldBeEqualToString('flexbox.style.webkitFlexFlow', 'vertical-ttb');
+shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitFlexFlow', 'vertical-ttb');
+
+flexbox.style.webkitFlexFlow = 'vertical-btt';
+shouldBeEqualToString('flexbox.style.webkitFlexFlow', 'vertical-btt');
+shouldBeEqualToString('window.getComputedStyle(flexbox, null).webkitFlexFlow', 'vertical-btt');
+
 successfullyParsed = true;
index 6cc645c..b0cfcc8 100644 (file)
@@ -1,3 +1,38 @@
+2011-08-30  Ojan Vafai  <ojan@chromium.org>
+
+        CSS parsing for -webkit-flex-flow
+        https://bugs.webkit.org/show_bug.cgi?id=67224
+
+        Reviewed by Tony Chang.
+        
+        Adds support for the first value of -webkit-flex-flow.
+        Later we'll need to add support for the second "wrap" value,
+        but that can wait until we are ready to implement multiline
+        flex and the spec has stabilized a bit.
+
+        * css/CSSComputedStyleDeclaration.cpp:
+        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
+        * css/CSSParser.cpp:
+        (WebCore::CSSParser::parseValue):
+        * css/CSSPrimitiveValueMappings.h:
+        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
+        (WebCore::CSSPrimitiveValue::operator EFlexFlow):
+        * css/CSSPropertyNames.in:
+        * css/CSSStyleApplyProperty.cpp:
+        (WebCore::CSSStyleApplyProperty::CSSStyleApplyProperty):
+        * css/CSSStyleSelector.cpp:
+        (WebCore::CSSStyleSelector::applyProperty):
+        * css/CSSValueKeywords.in:
+        * rendering/style/RenderStyle.h:
+        (WebCore::InheritedFlags::flexFlow):
+        (WebCore::InheritedFlags::setFlexFlow):
+        (WebCore::InheritedFlags::initialFlexFlow):
+        * rendering/style/RenderStyleConstants.h:
+        * rendering/style/StyleFlexibleBoxData.cpp:
+        (WebCore::StyleFlexibleBoxData::StyleFlexibleBoxData):
+        (WebCore::StyleFlexibleBoxData::operator==):
+        * rendering/style/StyleFlexibleBoxData.h:
+
 2011-08-30  Dawit Alemayehu  <adawit@kde.org>
 
         [Qt] Replace QLibrary("libgtk-x11-2.0.so.0") with QLibrary("libgtk-x11-2.0", 0)
index 4c1b6f0..23a9f30 100644 (file)
@@ -203,6 +203,7 @@ static const int computedProperties[] = {
     CSSPropertyWebkitFlexOrder,
     CSSPropertyWebkitFlexPack,
     CSSPropertyWebkitFlexAlign,
+    CSSPropertyWebkitFlexFlow,
 #endif
     CSSPropertyWebkitFontSmoothing,
     CSSPropertyWebkitHighlight,
@@ -1111,6 +1112,8 @@ PassRefPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValue(int proper
             return primitiveValueCache->createValue(style->flexPack());
         case CSSPropertyWebkitFlexAlign:
             return primitiveValueCache->createValue(style->flexAlign());
+        case CSSPropertyWebkitFlexFlow:
+            return primitiveValueCache->createValue(style->flexFlow());
 #endif
         case CSSPropertyFloat:
             return primitiveValueCache->createValue(style->floating());
index 12cc1bf..85c2369 100644 (file)
@@ -1546,6 +1546,12 @@ bool CSSParser::parseValue(int propId, bool important)
     case CSSPropertyWebkitFlexAlign:
         validPrimitive = id == CSSValueBefore || id == CSSValueAfter || id == CSSValueMiddle || id == CSSValueBaseline || id == CSSValueStretch;
         break;
+    case CSSPropertyWebkitFlexFlow:
+        // FIXME: -webkit-flex-flow takes a second "wrap" value.    
+        validPrimitive = id == CSSValueRow || id == CSSValueRowReverse || id == CSSValueColumn || id == CSSValueColumnReverse
+            || id == CSSValueHorizontal || id == CSSValueHorizontalReverse || id == CSSValueHorizontalLtr || id == CSSValueHorizontalRtl
+            || id == CSSValueVertical || id == CSSValueVerticalReverse || id == CSSValueVerticalTtb || id == CSSValueVerticalBtt;
+        break;
 #endif
     case CSSPropertyWebkitMarquee: {
         const int properties[5] = { CSSPropertyWebkitMarqueeDirection, CSSPropertyWebkitMarqueeIncrement,
index 43b4b00..208b618 100644 (file)
@@ -1142,6 +1142,83 @@ template<> inline CSSPrimitiveValue::operator EFlexPack() const
     }
 }
 
+template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EFlexFlow e)
+    : m_type(CSS_IDENT)
+    , m_hasCachedCSSText(false)
+{
+    switch (e) {
+    case FlowRow:
+        m_value.ident = CSSValueRow;
+        break;
+    case FlowRowReverse:
+        m_value.ident = CSSValueRowReverse;
+        break;
+    case FlowColumn:
+        m_value.ident = CSSValueColumn;
+        break;
+    case FlowColumnReverse:
+        m_value.ident = CSSValueColumnReverse;
+        break;
+    case FlowHorizontal:
+        m_value.ident = CSSValueHorizontal;
+        break;
+    case FlowHorizontalReverse:
+        m_value.ident = CSSValueHorizontalReverse;
+        break;
+    case FlowHorizontalLeftToRight:
+        m_value.ident = CSSValueHorizontalLtr;
+        break;
+    case FlowHorizontalRightToLeft:
+        m_value.ident = CSSValueHorizontalRtl;
+        break;
+    case FlowVertical:
+        m_value.ident = CSSValueVertical;
+        break;
+    case FlowVerticalReverse:
+        m_value.ident = CSSValueVerticalReverse;
+        break;
+    case FlowVerticalTopToBottom:
+        m_value.ident = CSSValueVerticalTtb;
+        break;
+    case FlowVerticalBottomToTop:
+        m_value.ident = CSSValueVerticalBtt;
+        break;
+    }
+}
+
+template<> inline CSSPrimitiveValue::operator EFlexFlow() const
+{
+    switch (m_value.ident) {
+    case CSSValueRow:
+        return FlowRow;
+    case CSSValueRowReverse:
+        return FlowRowReverse;
+    case CSSValueColumn:
+        return FlowColumn;
+    case CSSValueColumnReverse:
+        return FlowColumnReverse;
+    case CSSValueHorizontal:
+        return FlowHorizontal;
+    case CSSValueHorizontalReverse:
+        return FlowHorizontalReverse;
+    case CSSValueHorizontalLtr:
+        return FlowHorizontalLeftToRight;
+    case CSSValueHorizontalRtl:
+        return FlowHorizontalRightToLeft;
+    case CSSValueVertical:
+        return FlowVertical;
+    case CSSValueVerticalReverse:
+        return FlowVerticalReverse;
+    case CSSValueVerticalTtb:
+        return FlowVerticalTopToBottom;
+    case CSSValueVerticalBtt:
+        return FlowVerticalBottomToTop;
+    default:
+        ASSERT_NOT_REACHED();
+        return FlowRow;
+    }
+}
+
 template<> inline CSSPrimitiveValue::CSSPrimitiveValue(EFloat e)
     : m_type(CSS_IDENT)
     , m_hasCachedCSSText(false)
index 353a307..a8226dd 100644 (file)
@@ -244,6 +244,7 @@ z-index
 -webkit-columns
 #if defined(ENABLE_CSS3_FLEXBOX) && ENABLE_CSS3_FLEXBOX
 -webkit-flex-align
+-webkit-flex-flow
 -webkit-flex-order
 -webkit-flex-pack
 #endif
index 11317dc..69181ba 100644 (file)
@@ -988,6 +988,7 @@ CSSStyleApplyProperty::CSSStyleApplyProperty()
     setPropertyHandler(CSSPropertyWebkitFlexOrder, new ApplyPropertyDefault<int>(&RenderStyle::flexOrder, &RenderStyle::setFlexOrder, &RenderStyle::initialFlexOrder));
     setPropertyHandler(CSSPropertyWebkitFlexPack, new ApplyPropertyDefault<EFlexPack>(&RenderStyle::flexPack, &RenderStyle::setFlexPack, &RenderStyle::initialFlexPack));
     setPropertyHandler(CSSPropertyWebkitFlexAlign, new ApplyPropertyDefault<EFlexAlign>(&RenderStyle::flexAlign, &RenderStyle::setFlexAlign, &RenderStyle::initialFlexAlign));
+    setPropertyHandler(CSSPropertyWebkitFlexFlow, new ApplyPropertyDefault<EFlexFlow>(&RenderStyle::flexFlow, &RenderStyle::setFlexFlow, &RenderStyle::initialFlexFlow));
 #endif
 
     setPropertyHandler(CSSPropertyFontStyle, new ApplyPropertyFont<FontItalic>(&FontDescription::italic, &FontDescription::setItalic, FontItalicOff));
index 6320acb..81b2ce1 100644 (file)
@@ -4977,6 +4977,7 @@ void CSSStyleSelector::applyProperty(int id, CSSValue *value)
     case CSSPropertyWebkitFlexOrder:
     case CSSPropertyWebkitFlexPack:
     case CSSPropertyWebkitFlexAlign:
+    case CSSPropertyWebkitFlexFlow:
 #endif
     case CSSPropertyFontStyle:
     case CSSPropertyFontVariant:
index 0889adb..41b5143 100644 (file)
@@ -478,6 +478,21 @@ after
 // stretch
 // baseline
 
+// CSS_PROP_FLEX_FLOW
+// FIXME: Add the wrap values.
+row
+row-reverse
+column
+column-reverse
+// horizontal
+horizontal-reverse
+horizontal-ltr
+horizontal-rtl
+// vertical
+vertical-reverse
+vertical-ttb
+vertical-btt
+
 // CSS_PROP_MARQUEE_DIRECTION
 forwards
 backwards
index 4c8ab7f..bd4fada 100644 (file)
@@ -680,6 +680,7 @@ public:
     int flexOrder() const { return rareNonInheritedData->m_flexibleBox->m_flexOrder; }
     EFlexPack flexPack() const { return static_cast<EFlexPack>(rareNonInheritedData->m_flexibleBox->m_flexPack); }
     EFlexAlign flexAlign() const { return static_cast<EFlexAlign>(rareNonInheritedData->m_flexibleBox->m_flexAlign); }
+    EFlexFlow flexFlow() const { return static_cast<EFlexFlow>(rareNonInheritedData->m_flexibleBox->m_flexFlow); }
 #endif
 
     const ShadowData* boxShadow() const { return rareNonInheritedData->m_boxShadow.get(); }
@@ -1067,6 +1068,7 @@ public:
     void setFlexOrder(int o) { SET_VAR(rareNonInheritedData.access()->m_flexibleBox, m_flexOrder, o); }
     void setFlexPack(EFlexPack p) { SET_VAR(rareNonInheritedData.access()->m_flexibleBox, m_flexPack, p); }
     void setFlexAlign(EFlexAlign a) { SET_VAR(rareNonInheritedData.access()->m_flexibleBox, m_flexAlign, a); }
+    void setFlexFlow(EFlexFlow flow) { SET_VAR(rareNonInheritedData.access()->m_flexibleBox, m_flexFlow, flow); }
 #endif
     void setMarqueeIncrement(const Length& f) { SET_VAR(rareNonInheritedData.access()->m_marquee, increment, f); }
     void setMarqueeSpeed(int f) { SET_VAR(rareNonInheritedData.access()->m_marquee, speed, f); }
@@ -1348,6 +1350,7 @@ public:
     static int initialFlexOrder() { return 1; }
     static EFlexPack initialFlexPack() { return PackStart; }
     static EFlexAlign initialFlexAlign() { return AlignStretch; }
+    static EFlexFlow initialFlexFlow() { return FlowRow; }
     static int initialMarqueeLoopCount() { return -1; }
     static int initialMarqueeSpeed() { return 85; }
     static Length initialMarqueeIncrement() { return Length(6, Fixed); }
index e041944..fe4d9a6 100644 (file)
@@ -170,6 +170,9 @@ enum EBoxDirection { BNORMAL, BREVERSE };
 
 enum EFlexPack { PackStart, PackEnd, PackCenter, PackJustify };
 enum EFlexAlign { AlignBefore, AlignAfter, AlignMiddle, AlignStretch, AlignBaseline };
+enum EFlexFlow { FlowRow, FlowRowReverse, FlowColumn, FlowColumnReverse,
+    FlowHorizontal, FlowHorizontalReverse, FlowHorizontalLeftToRight, FlowHorizontalRightToLeft,
+    FlowVertical, FlowVerticalReverse, FlowVerticalTopToBottom, FlowVerticalBottomToTop};
 
 enum ETextSecurity {
     TSNONE, TSDISC, TSCIRCLE, TSSQUARE
index 416934f..c3eb506 100644 (file)
@@ -40,6 +40,7 @@ StyleFlexibleBoxData::StyleFlexibleBoxData()
     , m_flexOrder(RenderStyle::initialFlexOrder())
     , m_flexPack(RenderStyle::initialFlexPack())
     , m_flexAlign(RenderStyle::initialFlexAlign())
+    , m_flexFlow(RenderStyle::initialFlexFlow())
 {
 }
 
@@ -52,6 +53,7 @@ StyleFlexibleBoxData::StyleFlexibleBoxData(const StyleFlexibleBoxData& o)
     , m_flexOrder(o.m_flexOrder)
     , m_flexPack(o.m_flexPack)
     , m_flexAlign(o.m_flexAlign)
+    , m_flexFlow(o.m_flexFlow)
 {
 }
 
@@ -59,7 +61,8 @@ bool StyleFlexibleBoxData::operator==(const StyleFlexibleBoxData& o) const
 {
     return m_widthPositiveFlex == o.m_widthPositiveFlex && m_widthNegativeFlex == o.m_widthNegativeFlex
         && m_heightPositiveFlex == o.m_heightPositiveFlex && m_heightNegativeFlex == o.m_heightNegativeFlex
-        && m_flexOrder == o.m_flexOrder && m_flexPack == o.m_flexPack && m_flexAlign == o.m_flexAlign;
+        && m_flexOrder == o.m_flexOrder && m_flexPack == o.m_flexPack && m_flexAlign == o.m_flexAlign
+        && m_flexFlow == o.m_flexFlow;
 }
 
 }
index cf97658..aeac94b 100644 (file)
@@ -53,6 +53,7 @@ public:
 
     unsigned m_flexPack : 2; // EFlexPack
     unsigned m_flexAlign : 3; // EFlexAlign
+    unsigned m_flexFlow : 4; // EFlexFlow
 
 private:
     StyleFlexibleBoxData();