Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(131)

Side by Side Diff: Source/core/css/resolver/StyleBuilderCustom.cpp

Issue 148293008: [CSS Grid Layout] Add support to place items using named grid lines (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Implementation following specs Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2013 Google Inc. All rights reserved. 2 * Copyright (C) 2013 Google Inc. All rights reserved.
3 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) 3 * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
4 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com) 4 * (C) 2004-2005 Allan Sandfeld Jensen (kde@carewolf.com)
5 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com) 5 * Copyright (C) 2006, 2007 Nicholas Shanks (webkit@nickshanks.com)
6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights reserved. 6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Apple Inc. All rights reserved.
7 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> 7 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org>
8 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org> 8 * Copyright (C) 2007, 2008 Eric Seidel <eric@webkit.org>
9 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/) 9 * Copyright (C) 2008, 2009 Torch Mobile Inc. All rights reserved. (http://www.t orchmobile.com/)
10 * Copyright (c) 2011, Code Aurora Forum. All rights reserved. 10 * Copyright (c) 2011, Code Aurora Forum. All rights reserved.
(...skipping 1031 matching lines...) Expand 10 before | Expand all | Expand 10 after
1042 return; \ 1042 return; \
1043 } 1043 }
1044 1044
1045 #define HANDLE_SVG_INHERIT_AND_INITIAL(prop, Prop) \ 1045 #define HANDLE_SVG_INHERIT_AND_INITIAL(prop, Prop) \
1046 HANDLE_SVG_INHERIT(prop, Prop) \ 1046 HANDLE_SVG_INHERIT(prop, Prop) \
1047 if (isInitial) { \ 1047 if (isInitial) { \
1048 state.style()->accessSVGStyle()->set##Prop(SVGRenderStyle::initial##Prop()); \ 1048 state.style()->accessSVGStyle()->set##Prop(SVGRenderStyle::initial##Prop()); \
1049 return; \ 1049 return; \
1050 } 1050 }
1051 1051
1052 static void createImplicitNamedGridLinesFromGridArea(const NamedGridAreaMap& nam edGridAreas, NamedGridLinesMap& namedGridLines, GridTrackSizingDirection directi on)
1053 {
1054 NamedGridAreaMap::const_iterator end = namedGridAreas.end();
1055 for (NamedGridAreaMap::const_iterator it = namedGridAreas.begin(); it != end ; ++it) {
1056 GridSpan areaSpan = direction == ForRows ? it->value.rows : it->value.co lumns;
1057
1058 NamedGridLinesMap::AddResult startResult = namedGridLines.add(it->key + "-start", Vector<size_t>());
1059 startResult.storedValue->value.append(areaSpan.resolvedInitialPosition.t oInt());
1060 std::sort(startResult.storedValue->value.begin(), startResult.storedValu e->value.end());
1061
1062 NamedGridLinesMap::AddResult endResult = namedGridLines.add(it->key + "- end", Vector<size_t>());
1063 endResult.storedValue->value.append(areaSpan.resolvedFinalPosition.toInt () + 1);
1064 std::sort(endResult.storedValue->value.begin(), endResult.storedValue->v alue.end());
1065 }
1066 }
1067
1052 static GridLength createGridTrackBreadth(CSSPrimitiveValue* primitiveValue, cons t StyleResolverState& state) 1068 static GridLength createGridTrackBreadth(CSSPrimitiveValue* primitiveValue, cons t StyleResolverState& state)
1053 { 1069 {
1054 if (primitiveValue->getValueID() == CSSValueMinContent) 1070 if (primitiveValue->getValueID() == CSSValueMinContent)
1055 return Length(MinContent); 1071 return Length(MinContent);
1056 1072
1057 if (primitiveValue->getValueID() == CSSValueMaxContent) 1073 if (primitiveValue->getValueID() == CSSValueMaxContent)
1058 return Length(MaxContent); 1074 return Length(MaxContent);
1059 1075
1060 // Fractional unit. 1076 // Fractional unit.
1061 if (primitiveValue->isFlex()) 1077 if (primitiveValue->isFlex())
(...skipping 669 matching lines...) Expand 10 before | Expand all | Expand 10 after
1731 state.style()->setNamedGridColumnLines(RenderStyle::initialNamedGrid ColumnLines()); 1747 state.style()->setNamedGridColumnLines(RenderStyle::initialNamedGrid ColumnLines());
1732 state.style()->setOrderedNamedGridColumnLines(RenderStyle::initialOr deredNamedGridColumnLines()); 1748 state.style()->setOrderedNamedGridColumnLines(RenderStyle::initialOr deredNamedGridColumnLines());
1733 return; 1749 return;
1734 } 1750 }
1735 1751
1736 Vector<GridTrackSize> trackSizes; 1752 Vector<GridTrackSize> trackSizes;
1737 NamedGridLinesMap namedGridLines; 1753 NamedGridLinesMap namedGridLines;
1738 OrderedNamedGridLines orderedNamedGridLines; 1754 OrderedNamedGridLines orderedNamedGridLines;
1739 if (!createGridTrackList(value, trackSizes, namedGridLines, orderedNamed GridLines, state)) 1755 if (!createGridTrackList(value, trackSizes, namedGridLines, orderedNamed GridLines, state))
1740 return; 1756 return;
1757
1758 const NamedGridAreaMap& namedGridAreas = state.style()->namedGridArea();
1759 if (!namedGridAreas.isEmpty())
1760 createImplicitNamedGridLinesFromGridArea(namedGridAreas, namedGridLi nes, ForColumns);
1761
1741 state.style()->setGridTemplateColumns(trackSizes); 1762 state.style()->setGridTemplateColumns(trackSizes);
1742 state.style()->setNamedGridColumnLines(namedGridLines); 1763 state.style()->setNamedGridColumnLines(namedGridLines);
1743 state.style()->setOrderedNamedGridColumnLines(orderedNamedGridLines); 1764 state.style()->setOrderedNamedGridColumnLines(orderedNamedGridLines);
1744 return; 1765 return;
1745 } 1766 }
1746 case CSSPropertyGridTemplateRows: { 1767 case CSSPropertyGridTemplateRows: {
1747 if (isInherit) { 1768 if (isInherit) {
1748 state.style()->setGridTemplateRows(state.parentStyle()->gridTemplate Rows()); 1769 state.style()->setGridTemplateRows(state.parentStyle()->gridTemplate Rows());
1749 state.style()->setNamedGridRowLines(state.parentStyle()->namedGridRo wLines()); 1770 state.style()->setNamedGridRowLines(state.parentStyle()->namedGridRo wLines());
1750 state.style()->setOrderedNamedGridRowLines(state.parentStyle()->orde redNamedGridRowLines()); 1771 state.style()->setOrderedNamedGridRowLines(state.parentStyle()->orde redNamedGridRowLines());
1751 return; 1772 return;
1752 } 1773 }
1753 if (isInitial) { 1774 if (isInitial) {
1754 state.style()->setGridTemplateRows(RenderStyle::initialGridTemplateR ows()); 1775 state.style()->setGridTemplateRows(RenderStyle::initialGridTemplateR ows());
1755 state.style()->setNamedGridRowLines(RenderStyle::initialNamedGridRow Lines()); 1776 state.style()->setNamedGridRowLines(RenderStyle::initialNamedGridRow Lines());
1756 state.style()->setOrderedNamedGridRowLines(RenderStyle::initialOrder edNamedGridRowLines()); 1777 state.style()->setOrderedNamedGridRowLines(RenderStyle::initialOrder edNamedGridRowLines());
1757 return; 1778 return;
1758 } 1779 }
1759 1780
1760 Vector<GridTrackSize> trackSizes; 1781 Vector<GridTrackSize> trackSizes;
1761 NamedGridLinesMap namedGridLines; 1782 NamedGridLinesMap namedGridLines;
1762 OrderedNamedGridLines orderedNamedGridLines; 1783 OrderedNamedGridLines orderedNamedGridLines;
1763 if (!createGridTrackList(value, trackSizes, namedGridLines, orderedNamed GridLines, state)) 1784 if (!createGridTrackList(value, trackSizes, namedGridLines, orderedNamed GridLines, state))
1764 return; 1785 return;
1786
1787 const NamedGridAreaMap& namedGridAreas = state.style()->namedGridArea();
1788 if (!namedGridAreas.isEmpty())
1789 createImplicitNamedGridLinesFromGridArea(namedGridAreas, namedGridLi nes, ForRows);
1790
1765 state.style()->setGridTemplateRows(trackSizes); 1791 state.style()->setGridTemplateRows(trackSizes);
1766 state.style()->setNamedGridRowLines(namedGridLines); 1792 state.style()->setNamedGridRowLines(namedGridLines);
1767 state.style()->setOrderedNamedGridRowLines(orderedNamedGridLines); 1793 state.style()->setOrderedNamedGridRowLines(orderedNamedGridLines);
1768 return; 1794 return;
1769 } 1795 }
1770 1796
1771 case CSSPropertyGridColumnStart: { 1797 case CSSPropertyGridColumnStart: {
1772 HANDLE_INHERIT_AND_INITIAL(gridColumnStart, GridColumnStart); 1798 HANDLE_INHERIT_AND_INITIAL(gridColumnStart, GridColumnStart);
1773 GridPosition startPosition; 1799 GridPosition startPosition;
1774 if (!createGridPosition(value, startPosition)) 1800 if (!createGridPosition(value, startPosition))
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
1815 state.style()->setNamedGridAreaColumnCount(RenderStyle::initialNamed GridAreaCount()); 1841 state.style()->setNamedGridAreaColumnCount(RenderStyle::initialNamed GridAreaCount());
1816 return; 1842 return;
1817 } 1843 }
1818 1844
1819 if (value->isPrimitiveValue()) { 1845 if (value->isPrimitiveValue()) {
1820 ASSERT(toCSSPrimitiveValue(value)->getValueID() == CSSValueNone); 1846 ASSERT(toCSSPrimitiveValue(value)->getValueID() == CSSValueNone);
1821 return; 1847 return;
1822 } 1848 }
1823 1849
1824 CSSGridTemplateAreasValue* gridTemplateAreasValue = toCSSGridTemplateAre asValue(value); 1850 CSSGridTemplateAreasValue* gridTemplateAreasValue = toCSSGridTemplateAre asValue(value);
1825 state.style()->setNamedGridArea(gridTemplateAreasValue->gridAreaMap()); 1851 const NamedGridAreaMap& newNamedGridAreas = gridTemplateAreasValue->grid AreaMap();
1852
1853 NamedGridLinesMap namedGridColumnLines = state.style()->namedGridColumnL ines();
1854 NamedGridLinesMap namedGridRowLines = state.style()->namedGridRowLines() ;
Julien - ping for review 2014/05/12 11:42:12 You're right about RenderStyle returning a constan
1855 createImplicitNamedGridLinesFromGridArea(newNamedGridAreas, namedGridCol umnLines, ForColumns);
1856 createImplicitNamedGridLinesFromGridArea(newNamedGridAreas, namedGridRow Lines, ForRows);
1857 state.style()->setNamedGridColumnLines(namedGridColumnLines);
1858 state.style()->setNamedGridRowLines(namedGridRowLines);
1859
1860 state.style()->setNamedGridArea(newNamedGridAreas);
1826 state.style()->setNamedGridAreaRowCount(gridTemplateAreasValue->rowCount ()); 1861 state.style()->setNamedGridAreaRowCount(gridTemplateAreasValue->rowCount ());
1827 state.style()->setNamedGridAreaColumnCount(gridTemplateAreasValue->colum nCount()); 1862 state.style()->setNamedGridAreaColumnCount(gridTemplateAreasValue->colum nCount());
1828 return; 1863 return;
1829 } 1864 }
1830 1865
1831 case CSSPropertyJustifySelf: { 1866 case CSSPropertyJustifySelf: {
1832 HANDLE_INHERIT_AND_INITIAL(justifySelf, JustifySelf); 1867 HANDLE_INHERIT_AND_INITIAL(justifySelf, JustifySelf);
1833 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value); 1868 CSSPrimitiveValue* primitiveValue = toCSSPrimitiveValue(value);
1834 if (Pair* pairValue = primitiveValue->getPairValue()) { 1869 if (Pair* pairValue = primitiveValue->getPairValue()) {
1835 state.style()->setJustifySelf(*pairValue->first()); 1870 state.style()->setJustifySelf(*pairValue->first());
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
2295 break; 2330 break;
2296 } 2331 }
2297 case CSSPropertyEnableBackground: 2332 case CSSPropertyEnableBackground:
2298 // Silently ignoring this property for now 2333 // Silently ignoring this property for now
2299 // http://bugs.webkit.org/show_bug.cgi?id=6022 2334 // http://bugs.webkit.org/show_bug.cgi?id=6022
2300 break; 2335 break;
2301 } 2336 }
2302 } 2337 }
2303 2338
2304 } // namespace WebCore 2339 } // namespace WebCore
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698