| OLD | NEW | 
|---|
| 1 /* | 1 /* | 
| 2  * Copyright (C) 2011 Apple Inc. All rights reserved. | 2  * Copyright (C) 2011 Apple Inc. All rights reserved. | 
| 3  * | 3  * | 
| 4  * Redistribution and use in source and binary forms, with or without | 4  * Redistribution and use in source and binary forms, with or without | 
| 5  * modification, are permitted provided that the following conditions | 5  * modification, are permitted provided that the following conditions | 
| 6  * are met: | 6  * are met: | 
| 7  * 1. Redistributions of source code must retain the above copyright | 7  * 1. Redistributions of source code must retain the above copyright | 
| 8  *    notice, this list of conditions and the following disclaimer. | 8  *    notice, this list of conditions and the following disclaimer. | 
| 9  * 2. Redistributions in binary form must reproduce the above copyright | 9  * 2. Redistributions in binary form must reproduce the above copyright | 
| 10  *    notice, this list of conditions and the following disclaimer in the | 10  *    notice, this list of conditions and the following disclaimer in the | 
| (...skipping 19 matching lines...) Expand all  Loading... | 
| 30 #include "core/paint/GridPainter.h" | 30 #include "core/paint/GridPainter.h" | 
| 31 #include "core/paint/PaintLayer.h" | 31 #include "core/paint/PaintLayer.h" | 
| 32 #include "core/style/ComputedStyle.h" | 32 #include "core/style/ComputedStyle.h" | 
| 33 #include "core/style/GridArea.h" | 33 #include "core/style/GridArea.h" | 
| 34 #include "platform/LengthFunctions.h" | 34 #include "platform/LengthFunctions.h" | 
| 35 #include <algorithm> | 35 #include <algorithm> | 
| 36 | 36 | 
| 37 namespace blink { | 37 namespace blink { | 
| 38 | 38 | 
| 39 static const int infinity = -1; | 39 static const int infinity = -1; | 
|  | 40 static const ItemPosition selfAlignmentNormalBehavior = ItemPositionStretch; | 
| 40 | 41 | 
| 41 class GridItemWithSpan; | 42 class GridItemWithSpan; | 
| 42 | 43 | 
| 43 class GridTrack { | 44 class GridTrack { | 
| 44 public: | 45 public: | 
| 45     GridTrack() | 46     GridTrack() | 
| 46         : m_baseSize(0) | 47         : m_baseSize(0) | 
| 47         , m_growthLimit(0) | 48         , m_growthLimit(0) | 
| 48         , m_plannedSize(0) | 49         , m_plannedSize(0) | 
| 49         , m_sizeDuringDistribution(0) | 50         , m_sizeDuringDistribution(0) | 
| (...skipping 1480 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1530     // the grid and its children are correctly laid out according to the new sty
      le rules. | 1531     // the grid and its children are correctly laid out according to the new sty
      le rules. | 
| 1531     setNeedsLayout(LayoutInvalidationReason::GridChanged); | 1532     setNeedsLayout(LayoutInvalidationReason::GridChanged); | 
| 1532 | 1533 | 
| 1533     m_grid.resize(0); | 1534     m_grid.resize(0); | 
| 1534     m_gridItemArea.clear(); | 1535     m_gridItemArea.clear(); | 
| 1535     m_gridItemsOverflowingGridArea.resize(0); | 1536     m_gridItemsOverflowingGridArea.resize(0); | 
| 1536     m_gridItemsIndexesMap.clear(); | 1537     m_gridItemsIndexesMap.clear(); | 
| 1537     m_gridIsDirty = true; | 1538     m_gridIsDirty = true; | 
| 1538 } | 1539 } | 
| 1539 | 1540 | 
| 1540 static const StyleContentAlignmentData& normalValueBehavior() | 1541 static const StyleContentAlignmentData& contentAlignmentNormalBehavior() | 
| 1541 { | 1542 { | 
| 1542     static const StyleContentAlignmentData normalBehavior = {ContentPositionNorm
      al, ContentDistributionStretch}; | 1543     static const StyleContentAlignmentData normalBehavior = {ContentPositionNorm
      al, ContentDistributionStretch}; | 
| 1543     return normalBehavior; | 1544     return normalBehavior; | 
| 1544 } | 1545 } | 
| 1545 | 1546 | 
| 1546 void LayoutGrid::applyStretchAlignmentToTracksIfNeeded(GridTrackSizingDirection 
      direction, GridSizingData& sizingData) | 1547 void LayoutGrid::applyStretchAlignmentToTracksIfNeeded(GridTrackSizingDirection 
      direction, GridSizingData& sizingData) | 
| 1547 { | 1548 { | 
| 1548     LayoutUnit& availableSpace = sizingData.freeSpaceForDirection(direction); | 1549     LayoutUnit& availableSpace = sizingData.freeSpaceForDirection(direction); | 
| 1549     if (availableSpace <= 0 | 1550     if (availableSpace <= 0 | 
| 1550         || (direction == ForColumns && styleRef().resolvedJustifyContentDistribu
      tion(normalValueBehavior()) != ContentDistributionStretch) | 1551         || (direction == ForColumns && styleRef().resolvedJustifyContentDistribu
      tion(contentAlignmentNormalBehavior()) != ContentDistributionStretch) | 
| 1551         || (direction == ForRows && styleRef().resolvedAlignContentDistribution(
      normalValueBehavior()) != ContentDistributionStretch)) | 1552         || (direction == ForRows && styleRef().resolvedAlignContentDistribution(
      contentAlignmentNormalBehavior()) != ContentDistributionStretch)) | 
| 1552         return; | 1553         return; | 
| 1553 | 1554 | 
| 1554     // Spec defines auto-sized tracks as the ones with an 'auto' max-sizing func
      tion. | 1555     // Spec defines auto-sized tracks as the ones with an 'auto' max-sizing func
      tion. | 
| 1555     Vector<GridTrack>& tracks = (direction == ForColumns) ? sizingData.columnTra
      cks : sizingData.rowTracks; | 1556     Vector<GridTrack>& tracks = (direction == ForColumns) ? sizingData.columnTra
      cks : sizingData.rowTracks; | 
| 1556     Vector<unsigned> autoSizedTracksIndex; | 1557     Vector<unsigned> autoSizedTracksIndex; | 
| 1557     for (unsigned i = 0; i < tracks.size(); ++i) { | 1558     for (unsigned i = 0; i < tracks.size(); ++i) { | 
| 1558         const GridTrackSize& trackSize = gridTrackSize(direction, i); | 1559         const GridTrackSize& trackSize = gridTrackSize(direction, i); | 
| 1559         if (trackSize.hasAutoMaxTrackBreadth()) | 1560         if (trackSize.hasAutoMaxTrackBreadth()) | 
| 1560             autoSizedTracksIndex.append(i); | 1561             autoSizedTracksIndex.append(i); | 
| 1561     } | 1562     } | 
| (...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1880 void LayoutGrid::applyStretchAlignmentToChildIfNeeded(LayoutBox& child) | 1881 void LayoutGrid::applyStretchAlignmentToChildIfNeeded(LayoutBox& child) | 
| 1881 { | 1882 { | 
| 1882     // We clear height override values because we will decide now whether it's a
      llowed or | 1883     // We clear height override values because we will decide now whether it's a
      llowed or | 
| 1883     // not, evaluating the conditions which might have changed since the old val
      ues were set. | 1884     // not, evaluating the conditions which might have changed since the old val
      ues were set. | 
| 1884     child.clearOverrideLogicalContentHeight(); | 1885     child.clearOverrideLogicalContentHeight(); | 
| 1885 | 1886 | 
| 1886     auto& childStyle = child.styleRef(); | 1887     auto& childStyle = child.styleRef(); | 
| 1887     bool isHorizontalMode = isHorizontalWritingMode(); | 1888     bool isHorizontalMode = isHorizontalWritingMode(); | 
| 1888     bool hasAutoSizeInColumnAxis = isHorizontalMode ? childStyle.height().isAuto
      () : childStyle.width().isAuto(); | 1889     bool hasAutoSizeInColumnAxis = isHorizontalMode ? childStyle.height().isAuto
      () : childStyle.width().isAuto(); | 
| 1889     bool allowedToStretchChildAlongColumnAxis = hasAutoSizeInColumnAxis && !chil
      dStyle.marginBeforeUsing(style()).isAuto() && !childStyle.marginAfterUsing(style
      ()).isAuto(); | 1890     bool allowedToStretchChildAlongColumnAxis = hasAutoSizeInColumnAxis && !chil
      dStyle.marginBeforeUsing(style()).isAuto() && !childStyle.marginAfterUsing(style
      ()).isAuto(); | 
| 1890     if (allowedToStretchChildAlongColumnAxis && ComputedStyle::resolveAlignment(
      styleRef(), childStyle, ItemPositionStretch) == ItemPositionStretch) { | 1891     if (allowedToStretchChildAlongColumnAxis && childStyle.resolvedAlignSelf(sel
      fAlignmentNormalBehavior).position() == ItemPositionStretch) { | 
| 1891         // TODO (lajava): If the child has orthogonal flow, then it already has 
      an override height set, so use it. | 1892         // TODO (lajava): If the child has orthogonal flow, then it already has 
      an override height set, so use it. | 
| 1892         // TODO (lajava): grid track sizing and positioning do not support ortho
      gonal modes yet. | 1893         // TODO (lajava): grid track sizing and positioning do not support ortho
      gonal modes yet. | 
| 1893         if (child.isHorizontalWritingMode() == isHorizontalMode) { | 1894         if (child.isHorizontalWritingMode() == isHorizontalMode) { | 
| 1894             LayoutUnit stretchedLogicalHeight = availableAlignmentSpaceForChildB
      eforeStretching(child.overrideContainingBlockContentLogicalHeight(), child); | 1895             LayoutUnit stretchedLogicalHeight = availableAlignmentSpaceForChildB
      eforeStretching(child.overrideContainingBlockContentLogicalHeight(), child); | 
| 1895             LayoutUnit desiredLogicalHeight = child.constrainLogicalHeightByMinM
      ax(stretchedLogicalHeight, LayoutUnit(-1)); | 1896             LayoutUnit desiredLogicalHeight = child.constrainLogicalHeightByMinM
      ax(stretchedLogicalHeight, LayoutUnit(-1)); | 
| 1896             child.setOverrideLogicalContentHeight(desiredLogicalHeight - child.b
      orderAndPaddingLogicalHeight()); | 1897             child.setOverrideLogicalContentHeight(desiredLogicalHeight - child.b
      orderAndPaddingLogicalHeight()); | 
| 1897             if (desiredLogicalHeight != child.logicalHeight()) { | 1898             if (desiredLogicalHeight != child.logicalHeight()) { | 
| 1898                 // TODO (lajava): Can avoid laying out here in some cases. See h
      ttps://webkit.org/b/87905. | 1899                 // TODO (lajava): Can avoid laying out here in some cases. See h
      ttps://webkit.org/b/87905. | 
| 1899                 child.setLogicalHeight(LayoutUnit()); | 1900                 child.setLogicalHeight(LayoutUnit()); | 
| 1900                 child.setNeedsLayout(LayoutInvalidationReason::GridChanged); | 1901                 child.setNeedsLayout(LayoutInvalidationReason::GridChanged); | 
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1958         child.setMarginBefore(availableAlignmentSpace, style()); | 1959         child.setMarginBefore(availableAlignmentSpace, style()); | 
| 1959     } else if (marginAfter.isAuto()) { | 1960     } else if (marginAfter.isAuto()) { | 
| 1960         child.setMarginAfter(availableAlignmentSpace, style()); | 1961         child.setMarginAfter(availableAlignmentSpace, style()); | 
| 1961     } | 1962     } | 
| 1962 } | 1963 } | 
| 1963 | 1964 | 
| 1964 GridAxisPosition LayoutGrid::columnAxisPositionForChild(const LayoutBox& child) 
      const | 1965 GridAxisPosition LayoutGrid::columnAxisPositionForChild(const LayoutBox& child) 
      const | 
| 1965 { | 1966 { | 
| 1966     bool hasSameWritingMode = child.styleRef().getWritingMode() == styleRef().ge
      tWritingMode(); | 1967     bool hasSameWritingMode = child.styleRef().getWritingMode() == styleRef().ge
      tWritingMode(); | 
| 1967 | 1968 | 
| 1968     switch (ComputedStyle::resolveAlignment(styleRef(), child.styleRef(), ItemPo
      sitionStretch)) { | 1969     switch (child.styleRef().resolvedAlignSelf(selfAlignmentNormalBehavior).posi
      tion()) { | 
| 1969     case ItemPositionSelfStart: | 1970     case ItemPositionSelfStart: | 
| 1970         // If orthogonal writing-modes, this computes to 'start'. | 1971         // If orthogonal writing-modes, this computes to 'start'. | 
| 1971         // FIXME: grid track sizing and positioning do not support orthogonal mo
      des yet. | 1972         // FIXME: grid track sizing and positioning do not support orthogonal mo
      des yet. | 
| 1972         // self-start is based on the child's block axis direction. That's why w
      e need to check against the grid container's block flow. | 1973         // self-start is based on the child's block axis direction. That's why w
      e need to check against the grid container's block flow. | 
| 1973         return (isOrthogonalChild(child) || hasSameWritingMode) ? GridAxisStart 
      : GridAxisEnd; | 1974         return (isOrthogonalChild(child) || hasSameWritingMode) ? GridAxisStart 
      : GridAxisEnd; | 
| 1974     case ItemPositionSelfEnd: | 1975     case ItemPositionSelfEnd: | 
| 1975         // If orthogonal writing-modes, this computes to 'end'. | 1976         // If orthogonal writing-modes, this computes to 'end'. | 
| 1976         // FIXME: grid track sizing and positioning do not support orthogonal mo
      des yet. | 1977         // FIXME: grid track sizing and positioning do not support orthogonal mo
      des yet. | 
| 1977         // self-end is based on the child's block axis direction. That's why we 
      need to check against the grid container's block flow. | 1978         // self-end is based on the child's block axis direction. That's why we 
      need to check against the grid container's block flow. | 
| 1978         return (isOrthogonalChild(child) || hasSameWritingMode) ? GridAxisEnd : 
      GridAxisStart; | 1979         return (isOrthogonalChild(child) || hasSameWritingMode) ? GridAxisEnd : 
      GridAxisStart; | 
| (...skipping 16 matching lines...) Expand all  Loading... | 
| 1995     case ItemPositionEnd: | 1996     case ItemPositionEnd: | 
| 1996         return GridAxisEnd; | 1997         return GridAxisEnd; | 
| 1997     case ItemPositionStretch: | 1998     case ItemPositionStretch: | 
| 1998         return GridAxisStart; | 1999         return GridAxisStart; | 
| 1999     case ItemPositionBaseline: | 2000     case ItemPositionBaseline: | 
| 2000     case ItemPositionLastBaseline: | 2001     case ItemPositionLastBaseline: | 
| 2001         // FIXME: These two require implementing Baseline Alignment. For now, we
       always 'start' align the child. | 2002         // FIXME: These two require implementing Baseline Alignment. For now, we
       always 'start' align the child. | 
| 2002         // crbug.com/234191 | 2003         // crbug.com/234191 | 
| 2003         return GridAxisStart; | 2004         return GridAxisStart; | 
| 2004     case ItemPositionAuto: | 2005     case ItemPositionAuto: | 
|  | 2006     case ItemPositionNormal: | 
| 2005         break; | 2007         break; | 
| 2006     } | 2008     } | 
| 2007 | 2009 | 
| 2008     ASSERT_NOT_REACHED(); | 2010     ASSERT_NOT_REACHED(); | 
| 2009     return GridAxisStart; | 2011     return GridAxisStart; | 
| 2010 } | 2012 } | 
| 2011 | 2013 | 
| 2012 GridAxisPosition LayoutGrid::rowAxisPositionForChild(const LayoutBox& child) con
      st | 2014 GridAxisPosition LayoutGrid::rowAxisPositionForChild(const LayoutBox& child) con
      st | 
| 2013 { | 2015 { | 
| 2014     bool hasSameDirection = child.styleRef().direction() == styleRef().direction
      (); | 2016     bool hasSameDirection = child.styleRef().direction() == styleRef().direction
      (); | 
| 2015     bool isLTR = styleRef().isLeftToRightDirection(); | 2017     bool isLTR = styleRef().isLeftToRightDirection(); | 
| 2016 | 2018 | 
| 2017     switch (ComputedStyle::resolveJustification(styleRef(), child.styleRef(), It
      emPositionStretch)) { | 2019     switch (child.styleRef().resolvedJustifySelf(selfAlignmentNormalBehavior).po
      sition()) { | 
| 2018     case ItemPositionSelfStart: | 2020     case ItemPositionSelfStart: | 
| 2019         // For orthogonal writing-modes, this computes to 'start' | 2021         // For orthogonal writing-modes, this computes to 'start' | 
| 2020         // FIXME: grid track sizing and positioning do not support orthogonal mo
      des yet. | 2022         // FIXME: grid track sizing and positioning do not support orthogonal mo
      des yet. | 
| 2021         // self-start is based on the child's direction. That's why we need to c
      heck against the grid container's direction. | 2023         // self-start is based on the child's direction. That's why we need to c
      heck against the grid container's direction. | 
| 2022         return (isOrthogonalChild(child) || hasSameDirection) ? GridAxisStart : 
      GridAxisEnd; | 2024         return (isOrthogonalChild(child) || hasSameDirection) ? GridAxisStart : 
      GridAxisEnd; | 
| 2023     case ItemPositionSelfEnd: | 2025     case ItemPositionSelfEnd: | 
| 2024         // For orthogonal writing-modes, this computes to 'start' | 2026         // For orthogonal writing-modes, this computes to 'start' | 
| 2025         // FIXME: grid track sizing and positioning do not support orthogonal mo
      des yet. | 2027         // FIXME: grid track sizing and positioning do not support orthogonal mo
      des yet. | 
| 2026         return (isOrthogonalChild(child) || hasSameDirection) ? GridAxisEnd : Gr
      idAxisStart; | 2028         return (isOrthogonalChild(child) || hasSameDirection) ? GridAxisEnd : Gr
      idAxisStart; | 
| 2027     case ItemPositionLeft: | 2029     case ItemPositionLeft: | 
| 2028         return isLTR ? GridAxisStart : GridAxisEnd; | 2030         return isLTR ? GridAxisStart : GridAxisEnd; | 
| 2029     case ItemPositionRight: | 2031     case ItemPositionRight: | 
| 2030         return isLTR ? GridAxisEnd : GridAxisStart; | 2032         return isLTR ? GridAxisEnd : GridAxisStart; | 
| 2031     case ItemPositionCenter: | 2033     case ItemPositionCenter: | 
| 2032         return GridAxisCenter; | 2034         return GridAxisCenter; | 
| 2033     case ItemPositionFlexStart: // Only used in flex layout, otherwise equivalen
      t to 'start'. | 2035     case ItemPositionFlexStart: // Only used in flex layout, otherwise equivalen
      t to 'start'. | 
| 2034     case ItemPositionStart: | 2036     case ItemPositionStart: | 
| 2035         return GridAxisStart; | 2037         return GridAxisStart; | 
| 2036     case ItemPositionFlexEnd: // Only used in flex layout, otherwise equivalent 
      to 'end'. | 2038     case ItemPositionFlexEnd: // Only used in flex layout, otherwise equivalent 
      to 'end'. | 
| 2037     case ItemPositionEnd: | 2039     case ItemPositionEnd: | 
| 2038         return GridAxisEnd; | 2040         return GridAxisEnd; | 
| 2039     case ItemPositionStretch: | 2041     case ItemPositionStretch: | 
| 2040         return GridAxisStart; | 2042         return GridAxisStart; | 
| 2041     case ItemPositionBaseline: | 2043     case ItemPositionBaseline: | 
| 2042     case ItemPositionLastBaseline: | 2044     case ItemPositionLastBaseline: | 
| 2043         // FIXME: These two require implementing Baseline Alignment. For now, we
       always 'start' align the child. | 2045         // FIXME: These two require implementing Baseline Alignment. For now, we
       always 'start' align the child. | 
| 2044         // crbug.com/234191 | 2046         // crbug.com/234191 | 
| 2045         return GridAxisStart; | 2047         return GridAxisStart; | 
| 2046     case ItemPositionAuto: | 2048     case ItemPositionAuto: | 
|  | 2049     case ItemPositionNormal: | 
| 2047         break; | 2050         break; | 
| 2048     } | 2051     } | 
| 2049 | 2052 | 
| 2050     ASSERT_NOT_REACHED(); | 2053     ASSERT_NOT_REACHED(); | 
| 2051     return GridAxisStart; | 2054     return GridAxisStart; | 
| 2052 } | 2055 } | 
| 2053 | 2056 | 
| 2054 LayoutUnit LayoutGrid::columnAxisOffsetForChild(const LayoutBox& child, GridSizi
      ngData& sizingData) const | 2057 LayoutUnit LayoutGrid::columnAxisOffsetForChild(const LayoutBox& child, GridSizi
      ngData& sizingData) const | 
| 2055 { | 2058 { | 
| 2056     const GridSpan& rowsSpan = cachedGridSpan(child, ForRows); | 2059     const GridSpan& rowsSpan = cachedGridSpan(child, ForRows); | 
| (...skipping 12 matching lines...) Expand all  Loading... | 
| 2069         LayoutUnit endOfRow = m_rowPositions[childEndLine]; | 2072         LayoutUnit endOfRow = m_rowPositions[childEndLine]; | 
| 2070         // m_rowPositions include distribution offset (because of content alignm
      ent) and gutters | 2073         // m_rowPositions include distribution offset (because of content alignm
      ent) and gutters | 
| 2071         // so we need to subtract them to get the actual end position for a give
      n row | 2074         // so we need to subtract them to get the actual end position for a give
      n row | 
| 2072         // (this does not have to be done for the last track as there are no mor
      e m_columnPositions after it). | 2075         // (this does not have to be done for the last track as there are no mor
      e m_columnPositions after it). | 
| 2073         LayoutUnit trackGap = guttersSize(ForRows, 2); | 2076         LayoutUnit trackGap = guttersSize(ForRows, 2); | 
| 2074         if (childEndLine < m_rowPositions.size() - 1) { | 2077         if (childEndLine < m_rowPositions.size() - 1) { | 
| 2075             endOfRow -= trackGap; | 2078             endOfRow -= trackGap; | 
| 2076             endOfRow -= m_offsetBetweenRows; | 2079             endOfRow -= m_offsetBetweenRows; | 
| 2077         } | 2080         } | 
| 2078         LayoutUnit childBreadth = child.logicalHeight() + child.marginLogicalHei
      ght(); | 2081         LayoutUnit childBreadth = child.logicalHeight() + child.marginLogicalHei
      ght(); | 
| 2079         OverflowAlignment overflow = child.styleRef().resolvedAlignment(styleRef
      (), ItemPositionStretch).overflow(); | 2082         OverflowAlignment overflow = child.styleRef().resolvedAlignSelf(selfAlig
      nmentNormalBehavior).overflow(); | 
| 2080         LayoutUnit offsetFromStartPosition = computeOverflowAlignmentOffset(over
      flow, endOfRow - startOfRow, childBreadth); | 2083         LayoutUnit offsetFromStartPosition = computeOverflowAlignmentOffset(over
      flow, endOfRow - startOfRow, childBreadth); | 
| 2081         return startPosition + (axisPosition == GridAxisEnd ? offsetFromStartPos
      ition : offsetFromStartPosition / 2); | 2084         return startPosition + (axisPosition == GridAxisEnd ? offsetFromStartPos
      ition : offsetFromStartPosition / 2); | 
| 2082     } | 2085     } | 
| 2083     } | 2086     } | 
| 2084 | 2087 | 
| 2085     ASSERT_NOT_REACHED(); | 2088     ASSERT_NOT_REACHED(); | 
| 2086     return LayoutUnit(); | 2089     return LayoutUnit(); | 
| 2087 } | 2090 } | 
| 2088 | 2091 | 
| 2089 LayoutUnit LayoutGrid::rowAxisOffsetForChild(const LayoutBox& child, GridSizingD
      ata& sizingData) const | 2092 LayoutUnit LayoutGrid::rowAxisOffsetForChild(const LayoutBox& child, GridSizingD
      ata& sizingData) const | 
| (...skipping 14 matching lines...) Expand all  Loading... | 
| 2104         LayoutUnit endOfColumn = m_columnPositions[childEndLine]; | 2107         LayoutUnit endOfColumn = m_columnPositions[childEndLine]; | 
| 2105         // m_columnPositions include distribution offset (because of content ali
      gnment) and gutters | 2108         // m_columnPositions include distribution offset (because of content ali
      gnment) and gutters | 
| 2106         // so we need to subtract them to get the actual end position for a give
      n column | 2109         // so we need to subtract them to get the actual end position for a give
      n column | 
| 2107         // (this does not have to be done for the last track as there are no mor
      e m_columnPositions after it). | 2110         // (this does not have to be done for the last track as there are no mor
      e m_columnPositions after it). | 
| 2108         LayoutUnit trackGap = guttersSize(ForColumns, 2); | 2111         LayoutUnit trackGap = guttersSize(ForColumns, 2); | 
| 2109         if (childEndLine < m_columnPositions.size() - 1) { | 2112         if (childEndLine < m_columnPositions.size() - 1) { | 
| 2110             endOfColumn -= trackGap; | 2113             endOfColumn -= trackGap; | 
| 2111             endOfColumn -= m_offsetBetweenColumns; | 2114             endOfColumn -= m_offsetBetweenColumns; | 
| 2112         } | 2115         } | 
| 2113         LayoutUnit childBreadth = child.logicalWidth() + child.marginLogicalWidt
      h(); | 2116         LayoutUnit childBreadth = child.logicalWidth() + child.marginLogicalWidt
      h(); | 
| 2114         LayoutUnit offsetFromStartPosition = computeOverflowAlignmentOffset(chil
      d.styleRef().justifySelfOverflowAlignment(), endOfColumn - startOfColumn, childB
      readth); | 2117         OverflowAlignment overflow = child.styleRef().resolvedJustifySelf(selfAl
      ignmentNormalBehavior).overflow(); | 
|  | 2118         LayoutUnit offsetFromStartPosition = computeOverflowAlignmentOffset(over
      flow, endOfColumn - startOfColumn, childBreadth); | 
| 2115         return startPosition + (axisPosition == GridAxisEnd ? offsetFromStartPos
      ition : offsetFromStartPosition / 2); | 2119         return startPosition + (axisPosition == GridAxisEnd ? offsetFromStartPos
      ition : offsetFromStartPosition / 2); | 
| 2116     } | 2120     } | 
| 2117     } | 2121     } | 
| 2118 | 2122 | 
| 2119     ASSERT_NOT_REACHED(); | 2123     ASSERT_NOT_REACHED(); | 
| 2120     return LayoutUnit(); | 2124     return LayoutUnit(); | 
| 2121 } | 2125 } | 
| 2122 | 2126 | 
| 2123 ContentPosition static resolveContentDistributionFallback(ContentDistributionTyp
      e distribution) | 2127 ContentPosition static resolveContentDistributionFallback(ContentDistributionTyp
      e distribution) | 
| 2124 { | 2128 { | 
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2166         return {}; | 2170         return {}; | 
| 2167     } | 2171     } | 
| 2168 | 2172 | 
| 2169     ASSERT_NOT_REACHED(); | 2173     ASSERT_NOT_REACHED(); | 
| 2170     return {}; | 2174     return {}; | 
| 2171 } | 2175 } | 
| 2172 | 2176 | 
| 2173 ContentAlignmentData LayoutGrid::computeContentPositionAndDistributionOffset(Gri
      dTrackSizingDirection direction, const LayoutUnit& availableFreeSpace, unsigned 
      numberOfGridTracks) const | 2177 ContentAlignmentData LayoutGrid::computeContentPositionAndDistributionOffset(Gri
      dTrackSizingDirection direction, const LayoutUnit& availableFreeSpace, unsigned 
      numberOfGridTracks) const | 
| 2174 { | 2178 { | 
| 2175     bool isRowAxis = direction == ForColumns; | 2179     bool isRowAxis = direction == ForColumns; | 
| 2176     ContentPosition position = isRowAxis ? styleRef().resolvedJustifyContentPosi
      tion(normalValueBehavior()) : styleRef().resolvedAlignContentPosition(normalValu
      eBehavior()); | 2180     ContentPosition position = isRowAxis ? styleRef().resolvedJustifyContentPosi
      tion(contentAlignmentNormalBehavior()) : styleRef().resolvedAlignContentPosition
      (contentAlignmentNormalBehavior()); | 
| 2177     ContentDistributionType distribution = isRowAxis ? styleRef().resolvedJustif
      yContentDistribution(normalValueBehavior()) : styleRef().resolvedAlignContentDis
      tribution(normalValueBehavior()); | 2181     ContentDistributionType distribution = isRowAxis ? styleRef().resolvedJustif
      yContentDistribution(contentAlignmentNormalBehavior()) : styleRef().resolvedAlig
      nContentDistribution(contentAlignmentNormalBehavior()); | 
| 2178     // If <content-distribution> value can't be applied, 'position' will become 
      the associated | 2182     // If <content-distribution> value can't be applied, 'position' will become 
      the associated | 
| 2179     // <content-position> fallback value. | 2183     // <content-position> fallback value. | 
| 2180     ContentAlignmentData contentAlignment = contentDistributionOffset(availableF
      reeSpace, position, distribution, numberOfGridTracks); | 2184     ContentAlignmentData contentAlignment = contentDistributionOffset(availableF
      reeSpace, position, distribution, numberOfGridTracks); | 
| 2181     if (contentAlignment.isValid()) | 2185     if (contentAlignment.isValid()) | 
| 2182         return contentAlignment; | 2186         return contentAlignment; | 
| 2183 | 2187 | 
| 2184     OverflowAlignment overflow = isRowAxis ? styleRef().justifyContentOverflowAl
      ignment() : styleRef().alignContentOverflowAlignment(); | 2188     OverflowAlignment overflow = isRowAxis ? styleRef().justifyContentOverflowAl
      ignment() : styleRef().alignContentOverflowAlignment(); | 
| 2185     if (availableFreeSpace <= 0 && overflow == OverflowAlignmentSafe) | 2189     if (availableFreeSpace <= 0 && overflow == OverflowAlignmentSafe) | 
| 2186         return {LayoutUnit(), LayoutUnit()}; | 2190         return {LayoutUnit(), LayoutUnit()}; | 
| 2187 | 2191 | 
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 2240 | 2244 | 
| 2241     return LayoutPoint(rowAxisOffset, columnAxisOffsetForChild(child, sizingData
      )); | 2245     return LayoutPoint(rowAxisOffset, columnAxisOffsetForChild(child, sizingData
      )); | 
| 2242 } | 2246 } | 
| 2243 | 2247 | 
| 2244 void LayoutGrid::paintChildren(const PaintInfo& paintInfo, const LayoutPoint& pa
      intOffset) const | 2248 void LayoutGrid::paintChildren(const PaintInfo& paintInfo, const LayoutPoint& pa
      intOffset) const | 
| 2245 { | 2249 { | 
| 2246     GridPainter(*this).paintChildren(paintInfo, paintOffset); | 2250     GridPainter(*this).paintChildren(paintInfo, paintOffset); | 
| 2247 } | 2251 } | 
| 2248 | 2252 | 
| 2249 } // namespace blink | 2253 } // namespace blink | 
| OLD | NEW | 
|---|