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

Side by Side Diff: third_party/WebKit/Source/core/css/ComputedStyleCSSValueMapping.cpp

Issue 2161003003: [css-grid] repeat() syntax should take a <track-list> argument (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Patch for landing Created 4 years, 5 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) 2004 Zack Rusin <zack@kde.org> 2 * Copyright (C) 2004 Zack Rusin <zack@kde.org>
3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved. 3 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights reserved.
4 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org> 4 * Copyright (C) 2007 Alexey Proskuryakov <ap@webkit.org>
5 * Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com> 5 * Copyright (C) 2007 Nicholas Shanks <webkit@nickshanks.com>
6 * Copyright (C) 2011 Sencha, Inc. All rights reserved. 6 * Copyright (C) 2011 Sencha, Inc. All rights reserved.
7 * Copyright (C) 2015 Google Inc. All rights reserved. 7 * Copyright (C) 2015 Google Inc. All rights reserved.
8 * 8 *
9 * This library is free software; you can redistribute it and/or 9 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Lesser General Public 10 * modify it under the terms of the GNU Lesser General Public
(...skipping 726 matching lines...) Expand 10 before | Expand all | Expand 10 after
737 return minMaxTrackBreadths; 737 return minMaxTrackBreadths;
738 } 738 }
739 ASSERT_NOT_REACHED(); 739 ASSERT_NOT_REACHED();
740 return nullptr; 740 return nullptr;
741 } 741 }
742 742
743 class OrderedNamedLinesCollector { 743 class OrderedNamedLinesCollector {
744 STACK_ALLOCATED(); 744 STACK_ALLOCATED();
745 WTF_MAKE_NONCOPYABLE(OrderedNamedLinesCollector); 745 WTF_MAKE_NONCOPYABLE(OrderedNamedLinesCollector);
746 public: 746 public:
747 OrderedNamedLinesCollector(const ComputedStyle& style, bool isRowAxis, size_ t repetitions) 747 OrderedNamedLinesCollector(const ComputedStyle& style, bool isRowAxis, size_ t autoRepeatTracksCount)
748 : m_orderedNamedGridLines(isRowAxis ? style.orderedNamedGridColumnLines( ) : style.orderedNamedGridRowLines()) 748 : m_orderedNamedGridLines(isRowAxis ? style.orderedNamedGridColumnLines( ) : style.orderedNamedGridRowLines())
749 , m_orderedNamedAutoRepeatGridLines(isRowAxis ? style.autoRepeatOrderedN amedGridColumnLines() : style.autoRepeatOrderedNamedGridRowLines()) 749 , m_orderedNamedAutoRepeatGridLines(isRowAxis ? style.autoRepeatOrderedN amedGridColumnLines() : style.autoRepeatOrderedNamedGridRowLines())
750 , m_insertionPoint(isRowAxis ? style.gridAutoRepeatColumnsInsertionPoint () : style.gridAutoRepeatRowsInsertionPoint()) 750 , m_insertionPoint(isRowAxis ? style.gridAutoRepeatColumnsInsertionPoint () : style.gridAutoRepeatRowsInsertionPoint())
751 , m_repetitions(repetitions) 751 , m_autoRepeatTotalTracks(autoRepeatTracksCount)
752 , m_autoRepeatTrackListLength(isRowAxis ? style.gridAutoRepeatColumns(). size() : style.gridAutoRepeatRows().size())
752 { 753 {
753 } 754 }
754 755
755 bool isEmpty() const { return m_orderedNamedGridLines.isEmpty() && m_ordered NamedAutoRepeatGridLines.isEmpty(); } 756 bool isEmpty() const { return m_orderedNamedGridLines.isEmpty() && m_ordered NamedAutoRepeatGridLines.isEmpty(); }
756 void collectLineNamesForIndex(CSSGridLineNamesValue&, size_t index) const; 757 void collectLineNamesForIndex(CSSGridLineNamesValue&, size_t index) const;
757 758
758 private: 759 private:
759 760
760 enum NamedLinesType { NamedLines, AutoRepeatNamedLines }; 761 enum NamedLinesType { NamedLines, AutoRepeatNamedLines };
761 void appendLines(CSSGridLineNamesValue&, size_t index, NamedLinesType) const ; 762 void appendLines(CSSGridLineNamesValue&, size_t index, NamedLinesType) const ;
762 763
763 const OrderedNamedGridLines& m_orderedNamedGridLines; 764 const OrderedNamedGridLines& m_orderedNamedGridLines;
764 const OrderedNamedGridLines& m_orderedNamedAutoRepeatGridLines; 765 const OrderedNamedGridLines& m_orderedNamedAutoRepeatGridLines;
765 size_t m_insertionPoint; 766 size_t m_insertionPoint;
766 size_t m_repetitions; 767 size_t m_autoRepeatTotalTracks;
768 size_t m_autoRepeatTrackListLength;
767 }; 769 };
768 770
769 void OrderedNamedLinesCollector::appendLines(CSSGridLineNamesValue& lineNamesVal ue, size_t index, NamedLinesType type) const 771 void OrderedNamedLinesCollector::appendLines(CSSGridLineNamesValue& lineNamesVal ue, size_t index, NamedLinesType type) const
770 { 772 {
771 auto iter = type == NamedLines ? m_orderedNamedGridLines.find(index) : m_ord eredNamedAutoRepeatGridLines.find(index); 773 auto iter = type == NamedLines ? m_orderedNamedGridLines.find(index) : m_ord eredNamedAutoRepeatGridLines.find(index);
772 auto endIter = type == NamedLines ? m_orderedNamedGridLines.end() : m_ordere dNamedAutoRepeatGridLines.end(); 774 auto endIter = type == NamedLines ? m_orderedNamedGridLines.end() : m_ordere dNamedAutoRepeatGridLines.end();
773 if (iter == endIter) 775 if (iter == endIter)
774 return; 776 return;
775 777
776 for (auto lineName : iter->value) 778 for (auto lineName : iter->value)
777 lineNamesValue.append(*CSSCustomIdentValue::create(lineName)); 779 lineNamesValue.append(*CSSCustomIdentValue::create(lineName));
778 } 780 }
779 781
780 void OrderedNamedLinesCollector::collectLineNamesForIndex(CSSGridLineNamesValue& lineNamesValue, size_t i) const 782 void OrderedNamedLinesCollector::collectLineNamesForIndex(CSSGridLineNamesValue& lineNamesValue, size_t i) const
781 { 783 {
782 DCHECK(!isEmpty()); 784 DCHECK(!isEmpty());
783 if (m_orderedNamedAutoRepeatGridLines.isEmpty() || i < m_insertionPoint) { 785 if (m_orderedNamedAutoRepeatGridLines.isEmpty() || i < m_insertionPoint) {
784 appendLines(lineNamesValue, i, NamedLines); 786 appendLines(lineNamesValue, i, NamedLines);
785 return; 787 return;
786 } 788 }
787 789
788 DCHECK(m_repetitions); 790 DCHECK(m_autoRepeatTotalTracks);
789 if (i > m_insertionPoint + m_repetitions) { 791
790 appendLines(lineNamesValue, i - (m_repetitions - 1), NamedLines); 792 if (i > m_insertionPoint + m_autoRepeatTotalTracks) {
793 appendLines(lineNamesValue, i - (m_autoRepeatTotalTracks - 1), NamedLine s);
791 return; 794 return;
792 } 795 }
793 796
794 if (i == m_insertionPoint) { 797 if (i == m_insertionPoint) {
795 appendLines(lineNamesValue, i, NamedLines); 798 appendLines(lineNamesValue, i, NamedLines);
796 appendLines(lineNamesValue, 0, AutoRepeatNamedLines); 799 appendLines(lineNamesValue, 0, AutoRepeatNamedLines);
797 return; 800 return;
798 } 801 }
799 802
800 if (i == m_insertionPoint + m_repetitions) { 803 if (i == m_insertionPoint + m_autoRepeatTotalTracks) {
801 appendLines(lineNamesValue, 1, AutoRepeatNamedLines); 804 appendLines(lineNamesValue, m_autoRepeatTrackListLength, AutoRepeatNamed Lines);
802 appendLines(lineNamesValue, m_insertionPoint + 1, NamedLines); 805 appendLines(lineNamesValue, m_insertionPoint + 1, NamedLines);
803 return; 806 return;
804 } 807 }
805 808
806 appendLines(lineNamesValue, 1, AutoRepeatNamedLines); 809 size_t autoRepeatIndexInFirstRepetition = (i - m_insertionPoint) % m_autoRep eatTrackListLength;
807 appendLines(lineNamesValue, 0, AutoRepeatNamedLines); 810 if (!autoRepeatIndexInFirstRepetition && i > m_insertionPoint)
811 appendLines(lineNamesValue, m_autoRepeatTrackListLength, AutoRepeatNamed Lines);
812 appendLines(lineNamesValue, autoRepeatIndexInFirstRepetition, AutoRepeatName dLines);
808 } 813 }
809 814
810 static void addValuesForNamedGridLinesAtIndex(OrderedNamedLinesCollector& collec tor, size_t i, CSSValueList& list) 815 static void addValuesForNamedGridLinesAtIndex(OrderedNamedLinesCollector& collec tor, size_t i, CSSValueList& list)
811 { 816 {
812 if (collector.isEmpty()) 817 if (collector.isEmpty())
813 return; 818 return;
814 819
815 CSSGridLineNamesValue* lineNames = CSSGridLineNamesValue::create(); 820 CSSGridLineNamesValue* lineNames = CSSGridLineNamesValue::create();
816 collector.collectLineNamesForIndex(*lineNames, i); 821 collector.collectLineNamesForIndex(*lineNames, i);
817 if (lineNames->length()) 822 if (lineNames->length())
(...skipping 12 matching lines...) Expand all
830 if (isLayoutGrid && trackListIsEmpty) { 835 if (isLayoutGrid && trackListIsEmpty) {
831 // For grids we should consider every listed track, whether implicitly o r explicitly 836 // For grids we should consider every listed track, whether implicitly o r explicitly
832 // created. Empty grids have a sole grid line per axis. 837 // created. Empty grids have a sole grid line per axis.
833 auto& positions = isRowAxis ? toLayoutGrid(layoutObject)->columnPosition s() : toLayoutGrid(layoutObject)->rowPositions(); 838 auto& positions = isRowAxis ? toLayoutGrid(layoutObject)->columnPosition s() : toLayoutGrid(layoutObject)->rowPositions();
834 trackListIsEmpty = positions.size() == 1; 839 trackListIsEmpty = positions.size() == 1;
835 } 840 }
836 841
837 if (trackListIsEmpty) 842 if (trackListIsEmpty)
838 return CSSPrimitiveValue::createIdentifier(CSSValueNone); 843 return CSSPrimitiveValue::createIdentifier(CSSValueNone);
839 844
840 size_t repetitions = isLayoutGrid ? toLayoutGrid(layoutObject)->autoRepeatCo untForDirection(direction) : 0; 845 size_t autoRepeatTotalTracks = isLayoutGrid ? toLayoutGrid(layoutObject)->au toRepeatCountForDirection(direction) : 0;
841 OrderedNamedLinesCollector collector(style, isRowAxis, repetitions); 846 OrderedNamedLinesCollector collector(style, isRowAxis, autoRepeatTotalTracks );
842 CSSValueList* list = CSSValueList::createSpaceSeparated(); 847 CSSValueList* list = CSSValueList::createSpaceSeparated();
843 size_t insertionIndex; 848 size_t insertionIndex;
844 if (isLayoutGrid) { 849 if (isLayoutGrid) {
845 const auto* grid = toLayoutGrid(layoutObject); 850 const auto* grid = toLayoutGrid(layoutObject);
846 Vector<LayoutUnit> computedTrackSizes = grid->trackSizesForComputedStyle (direction); 851 Vector<LayoutUnit> computedTrackSizes = grid->trackSizesForComputedStyle (direction);
847 size_t numTracks = computedTrackSizes.size(); 852 size_t numTracks = computedTrackSizes.size();
848 853
849 for (size_t i = 0; i < numTracks; ++i) { 854 for (size_t i = 0; i < numTracks; ++i) {
850 addValuesForNamedGridLinesAtIndex(collector, i, *list); 855 addValuesForNamedGridLinesAtIndex(collector, i, *list);
851 list->append(*zoomAdjustedPixelValue(computedTrackSizes[i], style)); 856 list->append(*zoomAdjustedPixelValue(computedTrackSizes[i], style));
(...skipping 2154 matching lines...) Expand 10 before | Expand all | Expand 10 after
3006 case CSSPropertyAll: 3011 case CSSPropertyAll:
3007 return nullptr; 3012 return nullptr;
3008 default: 3013 default:
3009 break; 3014 break;
3010 } 3015 }
3011 ASSERT_NOT_REACHED(); 3016 ASSERT_NOT_REACHED();
3012 return nullptr; 3017 return nullptr;
3013 } 3018 }
3014 3019
3015 } // namespace blink 3020 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698