Diff
Modified: trunk/LayoutTests/ChangeLog (146273 => 146274)
--- trunk/LayoutTests/ChangeLog 2013-03-19 23:07:39 UTC (rev 146273)
+++ trunk/LayoutTests/ChangeLog 2013-03-19 23:12:28 UTC (rev 146274)
@@ -1,3 +1,13 @@
+2013-03-19 Julien Chaffraix <jchaffr...@webkit.org>
+
+ [CSS Grid Layout] Add parsing for grid-auto-{row|column}
+ https://bugs.webkit.org/show_bug.cgi?id=112724
+
+ Reviewed by Tony Chang.
+
+ * fast/css-grid-layout/grid-auto-columns-rows-get-set-expected.txt: Added.
+ * fast/css-grid-layout/grid-auto-columns-rows-get-set.html: Added.
+
2013-03-18 Ojan Vafai <o...@chromium.org>
Make intrinsic size keywords on flexboxes work
Added: trunk/LayoutTests/fast/css-grid-layout/grid-auto-columns-rows-get-set-expected.txt (0 => 146274)
--- trunk/LayoutTests/fast/css-grid-layout/grid-auto-columns-rows-get-set-expected.txt (rev 0)
+++ trunk/LayoutTests/fast/css-grid-layout/grid-auto-columns-rows-get-set-expected.txt 2013-03-19 23:12:28 UTC (rev 146274)
@@ -0,0 +1,40 @@
+Test that setting and getting grid-auto-columns and grid-auto-rows works as expected
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Test getting -webkit-grid-auto-columns and -webkit-grid-auto-rows set through CSS
+PASS getComputedStyle(gridAutoFixedFixed, '').getPropertyValue('-webkit-grid-auto-rows') is '30px'
+PASS getComputedStyle(gridAutoFixedFixed, '').getPropertyValue('-webkit-grid-auto-columns') is '50px'
+PASS getComputedStyle(gridAutoMinMax, '').getPropertyValue('-webkit-grid-auto-rows') is 'minmax(10%, 15px)'
+PASS getComputedStyle(gridAutoMinMax, '').getPropertyValue('-webkit-grid-auto-columns') is 'minmax(30%, 100px)'
+PASS getComputedStyle(gridAutoMinMaxContent, '').getPropertyValue('-webkit-grid-auto-rows') is '-webkit-min-content'
+PASS getComputedStyle(gridAutoMinMaxContent, '').getPropertyValue('-webkit-grid-auto-columns') is '-webkit-max-content'
+
+Test the initial value
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns') is 'auto'
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows') is 'auto'
+
+Test getting and setting -webkit-grid-auto-columns and -webkit-grid-auto-rows through JS
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns') is '180px'
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows') is '660px'
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns') is 'minmax(-webkit-min-content, 48px)'
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows') is 'minmax(80px, -webkit-min-content)'
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns') is 'minmax(-webkit-min-content, -webkit-max-content)'
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows') is 'minmax(-webkit-max-content, -webkit-min-content)'
+
+Test setting grid-auto-columns and grid-auto-rows to bad minmax value through JS
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns') is 'auto'
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows') is 'auto'
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns') is 'auto'
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows') is 'auto'
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns') is 'auto'
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows') is 'auto'
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns') is 'auto'
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows') is 'auto'
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns') is 'auto'
+PASS getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows') is 'auto'
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/fast/css-grid-layout/grid-auto-columns-rows-get-set.html (0 => 146274)
--- trunk/LayoutTests/fast/css-grid-layout/grid-auto-columns-rows-get-set.html (rev 0)
+++ trunk/LayoutTests/fast/css-grid-layout/grid-auto-columns-rows-get-set.html 2013-03-19 23:12:28 UTC (rev 146274)
@@ -0,0 +1,124 @@
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
+<html>
+<head>
+<script>
+if (window.testRunner)
+ testRunner.overridePreference("WebKitCSSGridLayoutEnabled", 1);
+</script>
+<link href="" rel="stylesheet">
+<style>
+.gridAutoFixedFixed {
+ -webkit-grid-auto-rows: 30px;
+ -webkit-grid-auto-columns: 50px;
+}
+
+.gridAutoMinMax {
+ -webkit-grid-auto-rows: minmax(10%, 15px);
+ -webkit-grid-auto-columns: minmax(30%, 100px);
+}
+
+.gridAutoMinMaxContent {
+ -webkit-grid-auto-rows: -webkit-min-content;
+ -webkit-grid-auto-columns: -webkit-max-content;
+}
+</style>
+<script src=""
+</head>
+<body>
+<div class="grid gridAutoFixedFixed" id="gridAutoFixedFixed"></div>
+<div class="grid gridAutoMinMax" id="gridAutoMinMax"></div>
+<div class="grid gridAutoMinMaxContent" id="gridAutoMinMaxContent"></div>
+<script>
+description('Test that setting and getting grid-auto-columns and grid-auto-rows works as expected');
+
+debug("Test getting -webkit-grid-auto-columns and -webkit-grid-auto-rows set through CSS");
+var gridAutoFixedFixed = document.getElementById("gridAutoFixedFixed");
+shouldBe("getComputedStyle(gridAutoFixedFixed, '').getPropertyValue('-webkit-grid-auto-rows')", "'30px'");
+shouldBe("getComputedStyle(gridAutoFixedFixed, '').getPropertyValue('-webkit-grid-auto-columns')", "'50px'");
+
+var gridAutoMinMax = document.getElementById("gridAutoMinMax");
+shouldBe("getComputedStyle(gridAutoMinMax, '').getPropertyValue('-webkit-grid-auto-rows')", "'minmax(10%, 15px)'");
+shouldBe("getComputedStyle(gridAutoMinMax, '').getPropertyValue('-webkit-grid-auto-columns')", "'minmax(30%, 100px)'");
+
+var gridAutoMinMaxContent = document.getElementById("gridAutoMinMaxContent");
+shouldBe("getComputedStyle(gridAutoMinMaxContent, '').getPropertyValue('-webkit-grid-auto-rows')", "'-webkit-min-content'");
+shouldBe("getComputedStyle(gridAutoMinMaxContent, '').getPropertyValue('-webkit-grid-auto-columns')", "'-webkit-max-content'");
+
+debug("");
+debug("Test the initial value");
+var element = document.createElement("div");
+document.body.appendChild(element);
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns')", "'auto'");
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows')", "'auto'");
+
+debug("");
+debug("Test getting and setting -webkit-grid-auto-columns and -webkit-grid-auto-rows through JS");
+element.style.font = "10px Ahem";
+element.style.webkitGridAutoColumns = "18em";
+element.style.webkitGridAutoRows = "66em";
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns')", "'180px'");
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows')", "'660px'");
+
+element = document.createElement("div");
+document.body.appendChild(element);
+element.style.webkitGridAutoColumns = "minmax(-webkit-min-content, 8vh)";
+element.style.webkitGridAutoRows = "minmax(10vw, -webkit-min-content)";
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns')", "'minmax(-webkit-min-content, 48px)'");
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows')", "'minmax(80px, -webkit-min-content)'");
+
+element = document.createElement("div");
+document.body.appendChild(element);
+element.style.webkitGridAutoColumns = "minmax(-webkit-min-content, -webkit-max-content)";
+element.style.webkitGridAutoRows = "minmax(-webkit-max-content, -webkit-min-content)";
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns')", "'minmax(-webkit-min-content, -webkit-max-content)'");
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows')", "'minmax(-webkit-max-content, -webkit-min-content)'");
+
+debug("");
+debug("Test setting grid-auto-columns and grid-auto-rows to bad minmax value through JS");
+element = document.createElement("div");
+document.body.appendChild(element);
+// No comma.
+element.style.webkitGridAutoColumns = "minmax(10px 20px)";
+// Only 1 argument provided.
+element.style.webkitGridAutoRows = "minmax(10px)";
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns')", "'auto'");
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows')", "'auto'");
+
+element = document.createElement("div");
+document.body.appendChild(element);
+// Nested minmax.
+element.style.webkitGridAutoColumns = "minmax(minmax(10px, 20px), 20px)";
+// Only 2 arguments are allowed.
+element.style.webkitGridAutoRows = "minmax(10px, 20px, 30px)";
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns')", "'auto'");
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows')", "'auto'");
+
+element = document.createElement("div");
+document.body.appendChild(element);
+// No breadth value.
+element.style.webkitGridAutoColumns = "minmax()";
+// No comma.
+element.style.webkitGridAutoRows = "minmax(30px 30% 30em)";
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns')", "'auto'");
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows')", "'auto'");
+
+element = document.createElement("div");
+document.body.appendChild(element);
+// Auto is not allowed inside minmax.
+element.style.webkitGridAutoColumns = "minmax(auto, 8vh)";
+element.style.webkitGridAutoRows = "minmax(10vw, auto)";
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns')", "'auto'");
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows')", "'auto'");
+
+element = document.createElement("div");
+document.body.appendChild(element);
+// None is not allowed for grid-auto-{rows|columns}.
+element.style.webkitGridAutoColumns = "none";
+element.style.webkitGridAutoRows = "none";
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-columns')", "'auto'");
+shouldBe("getComputedStyle(element, '').getPropertyValue('-webkit-grid-auto-rows')", "'auto'");
+
+</script>
+<script src=""
+</body>
+</html>
Modified: trunk/Source/WebCore/ChangeLog (146273 => 146274)
--- trunk/Source/WebCore/ChangeLog 2013-03-19 23:07:39 UTC (rev 146273)
+++ trunk/Source/WebCore/ChangeLog 2013-03-19 23:12:28 UTC (rev 146274)
@@ -1,3 +1,65 @@
+2013-03-19 Julien Chaffraix <jchaffr...@webkit.org>
+
+ [CSS Grid Layout] Add parsing for grid-auto-{row|column}
+ https://bugs.webkit.org/show_bug.cgi?id=112724
+
+ Reviewed by Tony Chang.
+
+ This change is a first step towards handling grid-auto-{row|column}.
+ For now, only the parsing, storing and getComputedStyle bits are implemented.
+ In order to do so without duplicating code, the functions handling <track-size>
+ (named <track-minmax> in the code based on a previous version of the grammar)
+ have been tweaked to be called in a standalone fashion. The code was also
+ updated to match the grammar more closely:
+ - <track-minmax> is now <track-size>.
+ - <track-group> was renmoved, folded into <track-list>.
+
+ Test: fast/css-grid-layout/grid-auto-columns-rows-get-set.html
+
+ * css/CSSComputedStyleDeclaration.cpp:
+ (WebCore::valueForGridTrackSize):
+ Renamed from valueForGridTrackMinMax.
+
+ (WebCore::valueForGridTrackList):
+ Folded valueForGridTrackGroup here.
+
+ (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
+ * css/CSSParser.cpp:
+ (WebCore::CSSParser::parseValue):
+ Added the parsing for grid-auto-{rows|columns}.
+
+ (WebCore::CSSParser::parseGridTrackSize):
+ Renamed from parseGridTrackMinMax. Changed to return the parsed value (or 0 in case of
+ error). This enables us to reuse it in parseValue. Note that this function now moves
+ the parser value list instead of the caller.
+
+ (WebCore::CSSParser::parseGridTrackList):
+ Updated after parseGridTrackSize changes and parseGridTrackGroup removal.
+
+ * css/CSSParser.h: Updated the names.
+ * css/CSSProperty.cpp:
+ (WebCore::CSSProperty::isInheritedProperty):
+ * css/CSSPropertyNames.in:
+ Added the 2 new non-inherited properties.
+
+ * css/StyleResolver.cpp:
+ (WebCore::createGridTrackSize):
+ Renamed from createGridTrackMinMax. Also simplified to ensure code reuse (applyProperty hands
+ down a CSSValue) and consistency (the state wasn't consistently the last argument).
+
+ (WebCore::createGridTrackList):
+ Folded createGridTrackGroup into this function.
+
+ (WebCore::StyleResolver::applyProperty):
+ Added the code for the new properties.
+
+ * rendering/style/RenderStyle.h:
+ * rendering/style/StyleGridData.cpp:
+ (WebCore::StyleGridData::StyleGridData):
+ * rendering/style/StyleGridData.h:
+ (WebCore::StyleGridData::operator==):
+ Added the storage and boiler-plate code for the new properties.
+
2013-03-19 Geoffrey Garen <gga...@apple.com>
Removed a using declaration to avoid name conflicts
Modified: trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp (146273 => 146274)
--- trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp 2013-03-19 23:07:39 UTC (rev 146273)
+++ trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp 2013-03-19 23:12:28 UTC (rev 146274)
@@ -286,7 +286,9 @@
CSSPropertyWebkitFontKerning,
CSSPropertyWebkitFontSmoothing,
CSSPropertyWebkitFontVariantLigatures,
+ CSSPropertyWebkitGridAutoColumns,
CSSPropertyWebkitGridAutoFlow,
+ CSSPropertyWebkitGridAutoRows,
CSSPropertyWebkitGridColumns,
CSSPropertyWebkitGridRows,
CSSPropertyWebkitGridStart,
@@ -1039,7 +1041,7 @@
return zoomAdjustedPixelValueForLength(trackBreadth, style);
}
-static PassRefPtr<CSSValue> valueForGridTrackMinMax(const GridTrackSize& trackSize, const RenderStyle* style, RenderView* renderView)
+static PassRefPtr<CSSValue> valueForGridTrackSize(const GridTrackSize& trackSize, const RenderStyle* style, RenderView* renderView)
{
switch (trackSize.type()) {
case LengthTrackSizing:
@@ -1054,21 +1056,16 @@
return 0;
}
-static PassRefPtr<CSSValue> valueForGridTrackGroup(const Vector<GridTrackSize>& trackSizes, const RenderStyle* style, RenderView* renderView)
-{
- RefPtr<CSSValueList> list = CSSValueList::createSpaceSeparated();
- for (size_t i = 0; i < trackSizes.size(); ++i)
- list->append(valueForGridTrackMinMax(trackSizes[i], style, renderView));
- return list.release();
-}
-
static PassRefPtr<CSSValue> valueForGridTrackList(const Vector<GridTrackSize>& trackSizes, const RenderStyle* style, RenderView *renderView)
{
// Handle the 'none' case here.
if (!trackSizes.size())
return cssValuePool().createIdentifierValue(CSSValueNone);
- return valueForGridTrackGroup(trackSizes, style, renderView);
+ RefPtr<CSSValueList> list = CSSValueList::createSpaceSeparated();
+ for (size_t i = 0; i < trackSizes.size(); ++i)
+ list->append(valueForGridTrackSize(trackSizes[i], style, renderView));
+ return list.release();
}
static PassRefPtr<CSSValue> valueForGridPosition(const GridPosition& position)
@@ -1932,8 +1929,12 @@
}
return list.release();
}
+ case CSSPropertyWebkitGridAutoColumns:
+ return valueForGridTrackSize(style->gridAutoColumns(), style.get(), m_node->document()->renderView());
case CSSPropertyWebkitGridAutoFlow:
return cssValuePool().createValue(style->gridAutoFlow());
+ case CSSPropertyWebkitGridAutoRows:
+ return valueForGridTrackSize(style->gridAutoRows(), style.get(), m_node->document()->renderView());
case CSSPropertyWebkitGridColumns:
return valueForGridTrackList(style->gridColumns(), style.get(), m_node->document()->renderView());
case CSSPropertyWebkitGridRows:
Modified: trunk/Source/WebCore/css/CSSParser.cpp (146273 => 146274)
--- trunk/Source/WebCore/css/CSSParser.cpp 2013-03-19 23:07:39 UTC (rev 146273)
+++ trunk/Source/WebCore/css/CSSParser.cpp 2013-03-19 23:12:28 UTC (rev 146274)
@@ -2610,6 +2610,13 @@
return false;
}
+ case CSSPropertyWebkitGridAutoColumns:
+ case CSSPropertyWebkitGridAutoRows:
+ if (!cssGridLayoutEnabled())
+ return false;
+ parsedValue = parseGridTrackSize();
+ break;
+
case CSSPropertyWebkitGridColumns:
case CSSPropertyWebkitGridRows:
if (!cssGridLayoutEnabled())
@@ -4735,52 +4742,45 @@
RefPtr<CSSValueList> values = CSSValueList::createSpaceSeparated();
while (m_valueList->current()) {
- if (!parseGridTrackGroup(values.get()))
+ RefPtr<CSSPrimitiveValue> primitiveValue = parseGridTrackSize();
+ if (!primitiveValue)
return false;
- m_valueList->next();
+ values->append(primitiveValue.release());
}
addProperty(propId, values.release(), important);
return true;
}
-bool CSSParser::parseGridTrackGroup(CSSValueList* values)
+PassRefPtr<CSSPrimitiveValue> CSSParser::parseGridTrackSize()
{
- return parseGridTrackMinMax(values);
-}
-
-bool CSSParser::parseGridTrackMinMax(CSSValueList* values)
-{
CSSParserValue* currentValue = m_valueList->current();
- if (currentValue->id == CSSValueAuto) {
- values->append(cssValuePool().createIdentifierValue(CSSValueAuto));
- return true;
- }
+ m_valueList->next();
+ if (currentValue->id == CSSValueAuto)
+ return cssValuePool().createIdentifierValue(CSSValueAuto);
+
if (currentValue->unit == CSSParserValue::Function && equalIgnoringCase(currentValue->function->name, "minmax(")) {
// The spec defines the following grammar: minmax( <track-breadth> , <track-breadth> )
CSSParserValueList* arguments = currentValue->function->args.get();
if (!arguments || arguments->size() != 3 || !isComma(arguments->valueAt(1)))
- return false;
+ return 0;
RefPtr<CSSPrimitiveValue> minTrackBreadth = parseGridBreadth(arguments->valueAt(0));
if (!minTrackBreadth)
- return false;
+ return 0;
RefPtr<CSSPrimitiveValue> maxTrackBreadth = parseGridBreadth(arguments->valueAt(2));
if (!maxTrackBreadth)
- return false;
+ return 0;
- values->append(createPrimitiveValuePair(minTrackBreadth, maxTrackBreadth));
- return true;
+ return createPrimitiveValuePair(minTrackBreadth, maxTrackBreadth);
}
- if (PassRefPtr<CSSPrimitiveValue> trackBreadth = parseGridBreadth(currentValue)) {
- values->append(trackBreadth);
- return true;
- }
+ if (PassRefPtr<CSSPrimitiveValue> trackBreadth = parseGridBreadth(currentValue))
+ return trackBreadth;
- return false;
+ return 0;
}
PassRefPtr<CSSPrimitiveValue> CSSParser::parseGridBreadth(CSSParserValue* currentValue)
Modified: trunk/Source/WebCore/css/CSSParser.h (146273 => 146274)
--- trunk/Source/WebCore/css/CSSParser.h 2013-03-19 23:07:39 UTC (rev 146273)
+++ trunk/Source/WebCore/css/CSSParser.h 2013-03-19 23:12:28 UTC (rev 146274)
@@ -158,8 +158,7 @@
bool cssGridLayoutEnabled() const;
bool parseGridItemPositionShorthand(CSSPropertyID, bool important);
bool parseGridTrackList(CSSPropertyID, bool important);
- bool parseGridTrackGroup(CSSValueList*);
- bool parseGridTrackMinMax(CSSValueList*);
+ PassRefPtr<CSSPrimitiveValue> parseGridTrackSize();
PassRefPtr<CSSPrimitiveValue> parseGridBreadth(CSSParserValue*);
bool parseDashboardRegions(CSSPropertyID, bool important);
Modified: trunk/Source/WebCore/css/CSSProperty.cpp (146273 => 146274)
--- trunk/Source/WebCore/css/CSSProperty.cpp 2013-03-19 23:07:39 UTC (rev 146273)
+++ trunk/Source/WebCore/css/CSSProperty.cpp 2013-03-19 23:12:28 UTC (rev 146274)
@@ -583,7 +583,9 @@
case CSSPropertyWebkitJustifyContent:
case CSSPropertyWebkitOrder:
case CSSPropertyWebkitFontSizeDelta:
+ case CSSPropertyWebkitGridAutoColumns:
case CSSPropertyWebkitGridAutoFlow:
+ case CSSPropertyWebkitGridAutoRows:
case CSSPropertyWebkitGridColumns:
case CSSPropertyWebkitGridRows:
case CSSPropertyWebkitGridStart:
Modified: trunk/Source/WebCore/css/CSSPropertyNames.in (146273 => 146274)
--- trunk/Source/WebCore/css/CSSPropertyNames.in 2013-03-19 23:07:39 UTC (rev 146273)
+++ trunk/Source/WebCore/css/CSSPropertyNames.in 2013-03-19 23:12:28 UTC (rev 146274)
@@ -292,6 +292,8 @@
-webkit-flex-wrap
-webkit-justify-content
-webkit-font-size-delta
+-webkit-grid-auto-columns
+-webkit-grid-auto-rows
-webkit-grid-columns
-webkit-grid-rows
-webkit-grid-start
Modified: trunk/Source/WebCore/css/StyleResolver.cpp (146273 => 146274)
--- trunk/Source/WebCore/css/StyleResolver.cpp 2013-03-19 23:07:39 UTC (rev 146273)
+++ trunk/Source/WebCore/css/StyleResolver.cpp 2013-03-19 23:12:28 UTC (rev 146274)
@@ -2092,8 +2092,12 @@
return true;
}
-static bool createGridTrackMinMax(CSSPrimitiveValue* primitiveValue, const StyleResolver::State& state, GridTrackSize& trackSize)
+static bool createGridTrackSize(CSSValue* value, GridTrackSize& trackSize, const StyleResolver::State& state)
{
+ if (!value->isPrimitiveValue())
+ return false;
+
+ CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
Pair* minMaxTrackBreadth = primitiveValue->getPairValue();
if (!minMaxTrackBreadth) {
Length workingLength;
@@ -2113,18 +2117,21 @@
return true;
}
-static bool createGridTrackGroup(CSSValue* value, const StyleResolver::State& state, Vector<GridTrackSize>& trackSizes)
+static bool createGridTrackList(CSSValue* value, Vector<GridTrackSize>& trackSizes, const StyleResolver::State& state)
{
+ // Handle 'none'.
+ if (value->isPrimitiveValue()) {
+ CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
+ return primitiveValue->getIdent() == CSSValueNone;
+ }
+
if (!value->isValueList())
return false;
for (CSSValueListIterator i = value; i.hasMore(); i.advance()) {
CSSValue* currValue = i.value();
- if (!currValue->isPrimitiveValue())
- return false;
-
GridTrackSize trackSize;
- if (!createGridTrackMinMax(static_cast<CSSPrimitiveValue*>(currValue), state, trackSize))
+ if (!createGridTrackSize(currValue, trackSize, state))
return false;
trackSizes.append(trackSize);
@@ -2132,18 +2139,7 @@
return true;
}
-static bool createGridTrackList(CSSValue* value, Vector<GridTrackSize>& trackSizes, const StyleResolver::State& state)
-{
- // Handle 'none'.
- if (value->isPrimitiveValue()) {
- CSSPrimitiveValue* primitiveValue = static_cast<CSSPrimitiveValue*>(value);
- return primitiveValue->getIdent() == CSSValueNone;
- }
- return createGridTrackGroup(value, state, trackSizes);
-}
-
-
static bool createGridPosition(CSSValue* value, GridPosition& position)
{
// For now, we only accept: <integer> | 'auto'
@@ -2888,6 +2884,20 @@
return;
}
#endif
+ case CSSPropertyWebkitGridAutoColumns: {
+ GridTrackSize trackSize;
+ if (!createGridTrackSize(value, trackSize, state))
+ return;
+ state.style()->setGridAutoColumns(trackSize);
+ return;
+ }
+ case CSSPropertyWebkitGridAutoRows: {
+ GridTrackSize trackSize;
+ if (!createGridTrackSize(value, trackSize, state))
+ return;
+ state.style()->setGridAutoRows(trackSize);
+ return;
+ }
case CSSPropertyWebkitGridColumns: {
Vector<GridTrackSize> trackSizes;
if (!createGridTrackList(value, trackSizes, state))
Modified: trunk/Source/WebCore/rendering/style/RenderStyle.h (146273 => 146274)
--- trunk/Source/WebCore/rendering/style/RenderStyle.h 2013-03-19 23:07:39 UTC (rev 146273)
+++ trunk/Source/WebCore/rendering/style/RenderStyle.h 2013-03-19 23:12:28 UTC (rev 146274)
@@ -777,6 +777,8 @@
const Vector<GridTrackSize>& gridColumns() const { return rareNonInheritedData->m_grid->m_gridColumns; }
const Vector<GridTrackSize>& gridRows() const { return rareNonInheritedData->m_grid->m_gridRows; }
GridAutoFlow gridAutoFlow() const { return rareNonInheritedData->m_grid->m_gridAutoFlow; }
+ const GridTrackSize& gridAutoColumns() const { return rareNonInheritedData->m_grid->m_gridAutoColumns; }
+ const GridTrackSize& gridAutoRows() const { return rareNonInheritedData->m_grid->m_gridAutoRows; }
const GridPosition& gridItemStart() const { return rareNonInheritedData->m_gridItem->m_gridStart; }
const GridPosition& gridItemEnd() const { return rareNonInheritedData->m_gridItem->m_gridEnd; }
@@ -1287,6 +1289,8 @@
void setFlexDirection(EFlexDirection direction) { SET_VAR(rareNonInheritedData.access()->m_flexibleBox, m_flexDirection, direction); }
void setFlexWrap(EFlexWrap w) { SET_VAR(rareNonInheritedData.access()->m_flexibleBox, m_flexWrap, w); }
void setJustifyContent(EJustifyContent p) { SET_VAR(rareNonInheritedData, m_justifyContent, p); }
+ void setGridAutoColumns(const GridTrackSize& length) { SET_VAR(rareNonInheritedData.access()->m_grid, m_gridAutoColumns, length); }
+ void setGridAutoRows(const GridTrackSize& length) { SET_VAR(rareNonInheritedData.access()->m_grid, m_gridAutoRows, length); }
void setGridColumns(const Vector<GridTrackSize>& lengths) { SET_VAR(rareNonInheritedData.access()->m_grid, m_gridColumns, lengths); }
void setGridRows(const Vector<GridTrackSize>& lengths) { SET_VAR(rareNonInheritedData.access()->m_grid, m_gridRows, lengths); }
void setGridAutoFlow(GridAutoFlow flow) { SET_VAR(rareNonInheritedData.access()->m_grid, m_gridAutoFlow, flow); }
@@ -1708,6 +1712,9 @@
static GridAutoFlow initialGridAutoFlow() { return AutoFlowNone; }
+ static GridTrackSize initialGridAutoColumns() { return GridTrackSize(Auto); }
+ static GridTrackSize initialGridAutoRows() { return GridTrackSize(Auto); }
+
// 'auto' is the default.
static GridPosition initialGridPosition() { return GridPosition(); }
Modified: trunk/Source/WebCore/rendering/style/StyleGridData.cpp (146273 => 146274)
--- trunk/Source/WebCore/rendering/style/StyleGridData.cpp 2013-03-19 23:07:39 UTC (rev 146273)
+++ trunk/Source/WebCore/rendering/style/StyleGridData.cpp 2013-03-19 23:12:28 UTC (rev 146274)
@@ -34,6 +34,8 @@
: m_gridColumns(RenderStyle::initialGridColumns())
, m_gridRows(RenderStyle::initialGridRows())
, m_gridAutoFlow(RenderStyle::initialGridAutoFlow())
+ , m_gridAutoRows(RenderStyle::initialGridAutoRows())
+ , m_gridAutoColumns(RenderStyle::initialGridAutoColumns())
{
}
@@ -42,6 +44,8 @@
, m_gridColumns(o.m_gridColumns)
, m_gridRows(o.m_gridRows)
, m_gridAutoFlow(o.m_gridAutoFlow)
+ , m_gridAutoRows(o.m_gridAutoRows)
+ , m_gridAutoColumns(o.m_gridAutoColumns)
{
}
Modified: trunk/Source/WebCore/rendering/style/StyleGridData.h (146273 => 146274)
--- trunk/Source/WebCore/rendering/style/StyleGridData.h 2013-03-19 23:07:39 UTC (rev 146273)
+++ trunk/Source/WebCore/rendering/style/StyleGridData.h 2013-03-19 23:12:28 UTC (rev 146274)
@@ -41,7 +41,7 @@
bool operator==(const StyleGridData& o) const
{
- return m_gridColumns == o.m_gridColumns && m_gridRows == o.m_gridRows && m_gridAutoFlow == o.m_gridAutoFlow;
+ return m_gridColumns == o.m_gridColumns && m_gridRows == o.m_gridRows && m_gridAutoFlow == o.m_gridAutoFlow && m_gridAutoRows == o.m_gridAutoRows && m_gridAutoColumns == o.m_gridAutoColumns;
}
bool operator!=(const StyleGridData& o) const
@@ -55,6 +55,9 @@
GridAutoFlow m_gridAutoFlow;
+ GridTrackSize m_gridAutoRows;
+ GridTrackSize m_gridAutoColumns;
+
private:
StyleGridData();
StyleGridData(const StyleGridData&);