https://bugs.webkit.org/show_bug.cgi?id=39516, back end support for column-span property.
authorhyatt@apple.com <hyatt@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 21 May 2010 22:45:58 +0000 (22:45 +0000)
committerhyatt@apple.com <hyatt@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 21 May 2010 22:45:58 +0000 (22:45 +0000)
Reviewed by Dan Bernstein.

* css/CSSComputedStyleDeclaration.cpp:
(WebCore::):
(WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
* css/CSSParser.cpp:
(WebCore::CSSParser::parseValue):
* css/CSSPropertyNames.in:
* css/CSSStyleSelector.cpp:
(WebCore::CSSStyleSelector::applyProperty):
* rendering/style/RenderStyle.h:
(WebCore::InheritedFlags::columnSpan):
(WebCore::InheritedFlags::setColumnSpan):
(WebCore::InheritedFlags::initialColumnSpan):
* rendering/style/StyleMultiColData.cpp:
(WebCore::StyleMultiColData::StyleMultiColData):
(WebCore::StyleMultiColData::operator==):
* rendering/style/StyleMultiColData.h:

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

LayoutTests/platform/mac/fast/css/getComputedStyle/computed-style-expected.txt
LayoutTests/platform/mac/fast/css/getComputedStyle/computed-style-without-renderer-expected.txt
LayoutTests/svg/css/getComputedStyle-basic-expected.txt
WebCore/ChangeLog
WebCore/css/CSSComputedStyleDeclaration.cpp
WebCore/css/CSSParser.cpp
WebCore/css/CSSPropertyNames.in
WebCore/css/CSSStyleSelector.cpp
WebCore/rendering/style/RenderStyle.h
WebCore/rendering/style/StyleMultiColData.cpp
WebCore/rendering/style/StyleMultiColData.h

index f87c4aa9e122ccb2349c0bf7d001a7a5f7391d6b..47fe5e8382dc618ca1108379ebeb1e6beedbae1b 100644 (file)
@@ -131,6 +131,7 @@ zoom: 1;
 -webkit-column-rule-color: rgb(0, 0, 0);
 -webkit-column-rule-style: none;
 -webkit-column-rule-width: 0px;
+-webkit-column-span: 1;
 -webkit-column-width: auto;
 -webkit-dashboard-region: null;
 -webkit-font-smoothing: auto;
index 23774cca98d71bf8783f6c0b55b26ed0eaff27c4..30be78a3467f96cc886b4b548c4044a934695f7e 100644 (file)
@@ -130,6 +130,7 @@ Computed style of an element whose parent's 'display' value is 'none':
     -webkit-column-rule-color: rgb(0, 0, 0)
     -webkit-column-rule-style: none
     -webkit-column-rule-width: 0px
+    -webkit-column-span: 1
     -webkit-column-width: auto
     -webkit-dashboard-region: null
     -webkit-font-smoothing: auto
index a1c53dd5ce160fc2c3829b874634e45b42ceefca..db2e394dd2cad2fea3fd3fe9c8b9b9c8bda16d74 100644 (file)
@@ -260,6 +260,8 @@ rect: style.getPropertyValue(-webkit-column-rule-style) : none
 rect: style.getPropertyCSSValue(-webkit-column-rule-style) : [object CSSPrimitiveValue]
 rect: style.getPropertyValue(-webkit-column-rule-width) : 0px
 rect: style.getPropertyCSSValue(-webkit-column-rule-width) : [object CSSPrimitiveValue]
+rect: style.getPropertyValue(-webkit-column-span) : 1
+rect: style.getPropertyCSSValue(-webkit-column-span) : [object CSSPrimitiveValue]
 rect: style.getPropertyValue(-webkit-column-width) : auto
 rect: style.getPropertyCSSValue(-webkit-column-width) : [object CSSPrimitiveValue]
 rect: style.getPropertyValue(-webkit-dashboard-region) : null
@@ -676,6 +678,8 @@ g: style.getPropertyValue(-webkit-column-rule-style) : none
 g: style.getPropertyCSSValue(-webkit-column-rule-style) : [object CSSPrimitiveValue]
 g: style.getPropertyValue(-webkit-column-rule-width) : 0px
 g: style.getPropertyCSSValue(-webkit-column-rule-width) : [object CSSPrimitiveValue]
+g: style.getPropertyValue(-webkit-column-span) : 1
+g: style.getPropertyCSSValue(-webkit-column-span) : [object CSSPrimitiveValue]
 g: style.getPropertyValue(-webkit-column-width) : auto
 g: style.getPropertyCSSValue(-webkit-column-width) : [object CSSPrimitiveValue]
 g: style.getPropertyValue(-webkit-dashboard-region) : null
index 42cf4af230adda253eab580d4c7e10f51c30ed93..c8d3121c9a84714829c2519a4a86ae5bd4acebc3 100644 (file)
@@ -1,3 +1,26 @@
+2010-05-21  David Hyatt  <hyatt@apple.com>
+
+        Reviewed by Dan Bernstein.
+
+        https://bugs.webkit.org/show_bug.cgi?id=39516, back end support for column-span property.
+
+        * css/CSSComputedStyleDeclaration.cpp:
+        (WebCore::):
+        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
+        * css/CSSParser.cpp:
+        (WebCore::CSSParser::parseValue):
+        * css/CSSPropertyNames.in:
+        * css/CSSStyleSelector.cpp:
+        (WebCore::CSSStyleSelector::applyProperty):
+        * rendering/style/RenderStyle.h:
+        (WebCore::InheritedFlags::columnSpan):
+        (WebCore::InheritedFlags::setColumnSpan):
+        (WebCore::InheritedFlags::initialColumnSpan):
+        * rendering/style/StyleMultiColData.cpp:
+        (WebCore::StyleMultiColData::StyleMultiColData):
+        (WebCore::StyleMultiColData::operator==):
+        * rendering/style/StyleMultiColData.h:
+
 2010-05-21  Jer Noble  <jer.noble@apple.com>
 
         Reviewed by Anders Carlsson.
index b61a6b228740f08ed09960354835c3357362a9b6..5b7d9db62fa556887591e1d4a2e3124c6d8ee120 100644 (file)
@@ -182,6 +182,7 @@ static const int computedProperties[] = {
     CSSPropertyWebkitColumnRuleColor,
     CSSPropertyWebkitColumnRuleStyle,
     CSSPropertyWebkitColumnRuleWidth,
+    CSSPropertyWebkitColumnSpan,
     CSSPropertyWebkitColumnWidth,
 #if ENABLE(DASHBOARD_SUPPORT)
     CSSPropertyWebkitDashboardRegion,
@@ -814,6 +815,10 @@ PassRefPtr<CSSValue> CSSComputedStyleDeclaration::getPropertyCSSValue(int proper
             return CSSPrimitiveValue::create(style->columnRuleStyle());
         case CSSPropertyWebkitColumnRuleWidth:
             return CSSPrimitiveValue::create(style->columnRuleWidth(), CSSPrimitiveValue::CSS_PX);
+        case CSSPropertyWebkitColumnSpan:
+            if (style->columnSpan())
+                return CSSPrimitiveValue::createIdentifier(CSSValueAll);
+            return CSSPrimitiveValue::create(1, CSSPrimitiveValue::CSS_NUMBER);
         case CSSPropertyWebkitColumnBreakAfter:
             return CSSPrimitiveValue::create(style->columnBreakAfter());
         case CSSPropertyWebkitColumnBreakBefore:
index 1826d42c86ec6a8b7f2835aef4bca95bb3e8364f..c93d83d8c19d0fedac6e7a1828862591045e688c 100644 (file)
@@ -1486,6 +1486,12 @@ bool CSSParser::parseValue(int propId, bool important)
         else
             validPrimitive = validUnit(value, FLength | FNonNeg, m_strict);
         break;
+    case CSSPropertyWebkitColumnSpan:        // all | 1
+        if (id == CSSValueAll)
+            validPrimitive = true;
+        else
+            validPrimitive = validUnit(value, FNumber | FNonNeg, m_strict) && value->fValue == 1;
+        break;
     case CSSPropertyWebkitColumnWidth:         // auto | <length>
         if (id == CSSValueAuto)
             validPrimitive = true;
index 8049f748c7b06d689f214b719524aa30d0bc5ee7..b2174c72b8cd4b43191ca5cf6515bb2bb5c72b47 100644 (file)
@@ -203,6 +203,7 @@ z-index
 -webkit-column-rule-color
 -webkit-column-rule-style
 -webkit-column-rule-width
+-webkit-column-span
 -webkit-column-width
 -webkit-columns
 -webkit-font-size-delta
index 452ed1d1c141739824605c7ae7ef70dfb13fd125..6f46d7d3de4f6c7f2bfa07e7ae2922adfa80a47d 100644 (file)
@@ -4864,6 +4864,11 @@ void CSSStyleSelector::applyProperty(int id, CSSValue *value)
         m_style->setColumnGap(primitiveValue->computeLengthFloat(style(), m_rootElementStyle, zoomFactor));
         return;
     }
+    case CSSPropertyWebkitColumnSpan: {
+        HANDLE_INHERIT_AND_INITIAL(columnSpan, ColumnSpan)
+        m_style->setColumnSpan(primitiveValue->getIdent() == CSSValueAll);
+        return;
+    }
     case CSSPropertyWebkitColumnWidth: {
         if (isInherit) {
             if (m_parentStyle->hasAutoColumnWidth())
index e99e7ff5a4037ddb29e25717144361a881b08253..fbc4f9ce7e58dc425f533a5fe7ecdb270bfd3e6f 100644 (file)
@@ -659,6 +659,7 @@ public:
     EBorderStyle columnRuleStyle() const { return rareNonInheritedData->m_multiCol->m_rule.style(); }
     unsigned short columnRuleWidth() const { return rareNonInheritedData->m_multiCol->ruleWidth(); }
     bool columnRuleIsTransparent() const { return rareNonInheritedData->m_multiCol->m_rule.isTransparent(); }
+    bool columnSpan() const { return rareNonInheritedData->m_multiCol->m_columnSpan; }
     EPageBreak columnBreakBefore() const { return static_cast<EPageBreak>(rareNonInheritedData->m_multiCol->m_breakBefore); }
     EPageBreak columnBreakInside() const { return static_cast<EPageBreak>(rareNonInheritedData->m_multiCol->m_breakInside); }
     EPageBreak columnBreakAfter() const { return static_cast<EPageBreak>(rareNonInheritedData->m_multiCol->m_breakAfter); }
@@ -989,6 +990,7 @@ public:
     void setColumnRuleStyle(EBorderStyle b) { SET_VAR(rareNonInheritedData.access()->m_multiCol, m_rule.m_style, b); }
     void setColumnRuleWidth(unsigned short w) { SET_VAR(rareNonInheritedData.access()->m_multiCol, m_rule.m_width, w); }
     void resetColumnRule() { SET_VAR(rareNonInheritedData.access()->m_multiCol, m_rule, BorderValue()) }
+    void setColumnSpan(bool b) { SET_VAR(rareNonInheritedData.access()->m_multiCol, m_columnSpan, b); }
     void setColumnBreakBefore(EPageBreak p) { SET_VAR(rareNonInheritedData.access()->m_multiCol, m_breakBefore, p); }
     void setColumnBreakInside(EPageBreak p) { SET_VAR(rareNonInheritedData.access()->m_multiCol, m_breakInside, p); }
     void setColumnBreakAfter(EPageBreak p) { SET_VAR(rareNonInheritedData.access()->m_multiCol, m_breakAfter, p); }
@@ -1183,6 +1185,7 @@ public:
     static bool initialVisuallyOrdered() { return false; }
     static float initialTextStrokeWidth() { return 0; }
     static unsigned short initialColumnCount() { return 1; }
+    static bool initialColumnSpan() { return false; }
     static const TransformOperations& initialTransform() { DEFINE_STATIC_LOCAL(TransformOperations, ops, ()); return ops; }
     static Length initialTransformOriginX() { return Length(50.0, Percent); }
     static Length initialTransformOriginY() { return Length(50.0, Percent); }
index bff4fb3f7593f74d21aa895950cfda50d7292d61..3366e9f7ff6d7dea8bddf2831091e7a84d30b432 100644 (file)
@@ -33,6 +33,7 @@ StyleMultiColData::StyleMultiColData()
     , m_autoWidth(true)
     , m_autoCount(true)
     , m_normalGap(true)
+    , m_columnSpan(false)
     , m_breakBefore(RenderStyle::initialPageBreak())
     , m_breakAfter(RenderStyle::initialPageBreak())
     , m_breakInside(RenderStyle::initialPageBreak())
@@ -48,6 +49,7 @@ StyleMultiColData::StyleMultiColData(const StyleMultiColData& o)
     , m_autoWidth(o.m_autoWidth)
     , m_autoCount(o.m_autoCount)
     , m_normalGap(o.m_normalGap)
+    , m_columnSpan(o.m_columnSpan)
     , m_breakBefore(o.m_breakBefore)
     , m_breakAfter(o.m_breakAfter)
     , m_breakInside(o.m_breakInside)
@@ -56,10 +58,10 @@ StyleMultiColData::StyleMultiColData(const StyleMultiColData& o)
 
 bool StyleMultiColData::operator==(const StyleMultiColData& o) const
 {
-    return m_width == o.m_width && m_count == o.m_count && m_gap == o.m_gap &&
-           m_rule == o.m_rule && m_breakBefore == o.m_breakBefore && 
-           m_autoWidth == o.m_autoWidth && m_autoCount == o.m_autoCount && m_normalGap == o.m_normalGap &&
-           m_breakAfter == o.m_breakAfter && m_breakInside == o.m_breakInside;
+    return m_width == o.m_width && m_count == o.m_count && m_gap == o.m_gap
+           && m_rule == o.m_rule && m_breakBefore == o.m_breakBefore
+           && m_autoWidth == o.m_autoWidth && m_autoCount == o.m_autoCount && m_normalGap == o.m_normalGap
+           && m_columnSpan == o.m_columnSpan && m_breakAfter == o.m_breakAfter && m_breakInside == o.m_breakInside;
 }
 
 } // namespace WebCore
index d3fe72035a5454da5e84c10a7bd5c2368bf56f0d..99488462337ba09905f3874d35dd28df5e7818e5 100644 (file)
@@ -57,10 +57,11 @@ public:
     unsigned short m_count;
     float m_gap;
     BorderValue m_rule;
-    
+
     bool m_autoWidth : 1;
     bool m_autoCount : 1;
     bool m_normalGap : 1;
+    bool m_columnSpan : 1;
     unsigned m_breakBefore : 2; // EPageBreak
     unsigned m_breakAfter : 2; // EPageBreak
     unsigned m_breakInside : 2; // EPageBreak