| 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 206 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 217 RenderBlock::addChild(newChild, beforeChild); | 217 RenderBlock::addChild(newChild, beforeChild); |
| 218 | 218 |
| 219 if (gridIsDirty()) | 219 if (gridIsDirty()) |
| 220 return; | 220 return; |
| 221 | 221 |
| 222 if (!newChild->isBox()) { | 222 if (!newChild->isBox()) { |
| 223 dirtyGrid(); | 223 dirtyGrid(); |
| 224 return; | 224 return; |
| 225 } | 225 } |
| 226 | 226 |
| 227 // Positioned items shouldn't take up space or otherwise participate in the
layout of the grid. |
| 228 if (newChild->isOutOfFlowPositioned()) |
| 229 return; |
| 230 |
| 227 // If the new child has been inserted inside an existent anonymous block, we
can simply ignore it as the anonymous | 231 // If the new child has been inserted inside an existent anonymous block, we
can simply ignore it as the anonymous |
| 228 // block is an already known grid item. | 232 // block is an already known grid item. |
| 229 if (newChild->parent() != this) | 233 if (newChild->parent() != this) |
| 230 return; | 234 return; |
| 231 | 235 |
| 232 // FIXME: Implement properly "stack" value in auto-placement algorithm. | 236 // FIXME: Implement properly "stack" value in auto-placement algorithm. |
| 233 if (!style()->isGridAutoFlowAlgorithmStack()) { | 237 if (!style()->isGridAutoFlowAlgorithmStack()) { |
| 234 // The grid needs to be recomputed as it might contain auto-placed items
that will change their position. | 238 // The grid needs to be recomputed as it might contain auto-placed items
that will change their position. |
| 235 dirtyGrid(); | 239 dirtyGrid(); |
| 236 return; | 240 return; |
| 237 } | 241 } |
| 238 | 242 |
| 239 RenderBox* newChildBox = toRenderBox(newChild); | 243 RenderBox* newChildBox = toRenderBox(newChild); |
| 240 OwnPtr<GridSpan> rowPositions = GridResolvedPosition::resolveGridPositionsFr
omStyle(*style(), *newChildBox, ForRows); | 244 OwnPtr<GridSpan> rowPositions = GridResolvedPosition::resolveGridPositionsFr
omStyle(*style(), *newChildBox, ForRows); |
| 241 OwnPtr<GridSpan> columnPositions = GridResolvedPosition::resolveGridPosition
sFromStyle(*style(), *newChildBox, ForColumns); | 245 OwnPtr<GridSpan> columnPositions = GridResolvedPosition::resolveGridPosition
sFromStyle(*style(), *newChildBox, ForColumns); |
| 242 if (!rowPositions || !columnPositions) { | 246 if (!rowPositions || !columnPositions) { |
| 243 // The new child requires the auto-placement algorithm to run so we need
to recompute the grid fully. | 247 // The new child requires the auto-placement algorithm to run so we need
to recompute the grid fully. |
| 244 dirtyGrid(); | 248 dirtyGrid(); |
| 245 return; | 249 return; |
| 246 } else { | 250 } else { |
| 247 insertItemIntoGrid(*newChildBox, GridCoordinate(*rowPositions, *columnPo
sitions)); | 251 insertItemIntoGrid(*newChildBox, GridCoordinate(*rowPositions, *columnPo
sitions)); |
| 248 addChildToIndexesMap(*newChildBox); | 252 addChildToIndexesMap(*newChildBox); |
| 249 } | 253 } |
| 250 } | 254 } |
| 251 | 255 |
| 252 void RenderGrid::addChildToIndexesMap(RenderBox& child) | 256 void RenderGrid::addChildToIndexesMap(RenderBox& child) |
| 253 { | 257 { |
| 254 ASSERT(!m_gridItemsIndexesMap.contains(&child)); | 258 ASSERT(!m_gridItemsIndexesMap.contains(&child)); |
| 255 RenderBox* sibling = child.nextSiblingBox(); | 259 RenderBox* sibling = child.nextInFlowSiblingBox(); |
| 256 bool lastSibling = !sibling; | 260 bool lastSibling = !sibling; |
| 257 | 261 |
| 258 if (lastSibling) | 262 if (lastSibling) |
| 259 sibling = child.previousSiblingBox(); | 263 sibling = child.previousInFlowSiblingBox(); |
| 260 | 264 |
| 261 size_t index = 0; | 265 size_t index = 0; |
| 262 if (sibling) | 266 if (sibling) |
| 263 index = lastSibling ? m_gridItemsIndexesMap.get(sibling) + 1 : m_gridIte
msIndexesMap.get(sibling); | 267 index = lastSibling ? m_gridItemsIndexesMap.get(sibling) + 1 : m_gridIte
msIndexesMap.get(sibling); |
| 264 | 268 |
| 265 if (sibling && !lastSibling) { | 269 if (sibling && !lastSibling) { |
| 266 for (; sibling; sibling = sibling->nextSiblingBox()) | 270 for (; sibling; sibling = sibling->nextInFlowSiblingBox()) |
| 267 m_gridItemsIndexesMap.set(sibling, m_gridItemsIndexesMap.get(sibling
) + 1); | 271 m_gridItemsIndexesMap.set(sibling, m_gridItemsIndexesMap.get(sibling
) + 1); |
| 268 } | 272 } |
| 269 | 273 |
| 270 m_gridItemsIndexesMap.set(&child, index); | 274 m_gridItemsIndexesMap.set(&child, index); |
| 271 } | 275 } |
| 272 | 276 |
| 273 void RenderGrid::removeChild(RenderObject* child) | 277 void RenderGrid::removeChild(RenderObject* child) |
| 274 { | 278 { |
| 275 RenderBlock::removeChild(child); | 279 RenderBlock::removeChild(child); |
| 276 | 280 |
| 277 if (gridIsDirty()) | 281 if (gridIsDirty()) |
| 278 return; | 282 return; |
| 279 | 283 |
| 280 ASSERT(child->isBox()); | 284 ASSERT(child->isBox()); |
| 281 | 285 |
| 282 // FIXME: Implement properly "stack" value in auto-placement algorithm. | 286 // FIXME: Implement properly "stack" value in auto-placement algorithm. |
| 283 if (!style()->isGridAutoFlowAlgorithmStack()) { | 287 if (!style()->isGridAutoFlowAlgorithmStack()) { |
| 284 // The grid needs to be recomputed as it might contain auto-placed items
that will change their position. | 288 // The grid needs to be recomputed as it might contain auto-placed items
that will change their position. |
| 285 dirtyGrid(); | 289 dirtyGrid(); |
| 286 return; | 290 return; |
| 287 } | 291 } |
| 288 | 292 |
| 293 if (child->isOutOfFlowPositioned()) |
| 294 return; |
| 295 |
| 289 const RenderBox* childBox = toRenderBox(child); | 296 const RenderBox* childBox = toRenderBox(child); |
| 290 GridCoordinate coordinate = m_gridItemCoordinate.take(childBox); | 297 GridCoordinate coordinate = m_gridItemCoordinate.take(childBox); |
| 291 | 298 |
| 292 for (GridSpan::iterator row = coordinate.rows.begin(); row != coordinate.row
s.end(); ++row) { | 299 for (GridSpan::iterator row = coordinate.rows.begin(); row != coordinate.row
s.end(); ++row) { |
| 293 for (GridSpan::iterator column = coordinate.columns.begin(); column != c
oordinate.columns.end(); ++column) { | 300 for (GridSpan::iterator column = coordinate.columns.begin(); column != c
oordinate.columns.end(); ++column) { |
| 294 GridCell& cell = m_grid[row.toInt()][column.toInt()]; | 301 GridCell& cell = m_grid[row.toInt()][column.toInt()]; |
| 295 cell.remove(cell.find(childBox)); | 302 cell.remove(cell.find(childBox)); |
| 296 } | 303 } |
| 297 } | 304 } |
| 298 | 305 |
| (...skipping 601 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 900 | 907 |
| 901 populateExplicitGridAndOrderIterator(); | 908 populateExplicitGridAndOrderIterator(); |
| 902 | 909 |
| 903 // We clear the dirty bit here as the grid sizes have been updated, this mea
ns | 910 // We clear the dirty bit here as the grid sizes have been updated, this mea
ns |
| 904 // that we can safely call gridRowCount() / gridColumnCount(). | 911 // that we can safely call gridRowCount() / gridColumnCount(). |
| 905 m_gridIsDirty = false; | 912 m_gridIsDirty = false; |
| 906 | 913 |
| 907 Vector<RenderBox*> autoMajorAxisAutoGridItems; | 914 Vector<RenderBox*> autoMajorAxisAutoGridItems; |
| 908 Vector<RenderBox*> specifiedMajorAxisAutoGridItems; | 915 Vector<RenderBox*> specifiedMajorAxisAutoGridItems; |
| 909 for (RenderBox* child = m_orderIterator.first(); child; child = m_orderItera
tor.next()) { | 916 for (RenderBox* child = m_orderIterator.first(); child; child = m_orderItera
tor.next()) { |
| 917 if (child->isOutOfFlowPositioned()) |
| 918 continue; |
| 919 |
| 910 // FIXME: We never re-resolve positions if the grid is grown during auto
-placement which may lead auto / <integer> | 920 // FIXME: We never re-resolve positions if the grid is grown during auto
-placement which may lead auto / <integer> |
| 911 // positions to not match the author's intent. The specification is uncl
ear on what should be done in this case. | 921 // positions to not match the author's intent. The specification is uncl
ear on what should be done in this case. |
| 912 OwnPtr<GridSpan> rowPositions = GridResolvedPosition::resolveGridPositio
nsFromStyle(*style(), *child, ForRows); | 922 OwnPtr<GridSpan> rowPositions = GridResolvedPosition::resolveGridPositio
nsFromStyle(*style(), *child, ForRows); |
| 913 OwnPtr<GridSpan> columnPositions = GridResolvedPosition::resolveGridPosi
tionsFromStyle(*style(), *child, ForColumns); | 923 OwnPtr<GridSpan> columnPositions = GridResolvedPosition::resolveGridPosi
tionsFromStyle(*style(), *child, ForColumns); |
| 914 if (!rowPositions || !columnPositions) { | 924 if (!rowPositions || !columnPositions) { |
| 915 GridSpan* majorAxisPositions = (autoPlacementMajorAxisDirection() ==
ForColumns) ? columnPositions.get() : rowPositions.get(); | 925 GridSpan* majorAxisPositions = (autoPlacementMajorAxisDirection() ==
ForColumns) ? columnPositions.get() : rowPositions.get(); |
| 916 if (!majorAxisPositions) | 926 if (!majorAxisPositions) |
| 917 autoMajorAxisAutoGridItems.append(child); | 927 autoMajorAxisAutoGridItems.append(child); |
| 918 else | 928 else |
| 919 specifiedMajorAxisAutoGridItems.append(child); | 929 specifiedMajorAxisAutoGridItems.append(child); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 941 | 951 |
| 942 void RenderGrid::populateExplicitGridAndOrderIterator() | 952 void RenderGrid::populateExplicitGridAndOrderIterator() |
| 943 { | 953 { |
| 944 OrderIteratorPopulator populator(m_orderIterator); | 954 OrderIteratorPopulator populator(m_orderIterator); |
| 945 | 955 |
| 946 size_t maximumRowIndex = std::max<size_t>(1, GridResolvedPosition::explicitG
ridRowCount(*style())); | 956 size_t maximumRowIndex = std::max<size_t>(1, GridResolvedPosition::explicitG
ridRowCount(*style())); |
| 947 size_t maximumColumnIndex = std::max<size_t>(1, GridResolvedPosition::explic
itGridColumnCount(*style())); | 957 size_t maximumColumnIndex = std::max<size_t>(1, GridResolvedPosition::explic
itGridColumnCount(*style())); |
| 948 | 958 |
| 949 ASSERT(m_gridItemsIndexesMap.isEmpty()); | 959 ASSERT(m_gridItemsIndexesMap.isEmpty()); |
| 950 size_t childIndex = 0; | 960 size_t childIndex = 0; |
| 951 for (RenderBox* child = firstChildBox(); child; child = child->nextSiblingBo
x()) { | 961 for (RenderBox* child = firstChildBox(); child; child = child->nextInFlowSib
lingBox()) { |
| 952 populator.collectChild(child); | 962 populator.collectChild(child); |
| 953 m_gridItemsIndexesMap.set(child, childIndex++); | 963 m_gridItemsIndexesMap.set(child, childIndex++); |
| 954 | 964 |
| 955 // This function bypasses the cache (cachedGridCoordinate()) as it is us
ed to build it. | 965 // This function bypasses the cache (cachedGridCoordinate()) as it is us
ed to build it. |
| 956 OwnPtr<GridSpan> rowPositions = GridResolvedPosition::resolveGridPositio
nsFromStyle(*style(), *child, ForRows); | 966 OwnPtr<GridSpan> rowPositions = GridResolvedPosition::resolveGridPositio
nsFromStyle(*style(), *child, ForRows); |
| 957 OwnPtr<GridSpan> columnPositions = GridResolvedPosition::resolveGridPosi
tionsFromStyle(*style(), *child, ForColumns); | 967 OwnPtr<GridSpan> columnPositions = GridResolvedPosition::resolveGridPosi
tionsFromStyle(*style(), *child, ForColumns); |
| 958 | 968 |
| 959 // |positions| is 0 if we need to run the auto-placement algorithm. | 969 // |positions| is 0 if we need to run the auto-placement algorithm. |
| 960 if (rowPositions) { | 970 if (rowPositions) { |
| 961 maximumRowIndex = std::max<size_t>(maximumRowIndex, rowPositions->re
solvedFinalPosition.next().toInt()); | 971 maximumRowIndex = std::max<size_t>(maximumRowIndex, rowPositions->re
solvedFinalPosition.next().toInt()); |
| (...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1102 computeUsedBreadthOfGridTracks(ForColumns, sizingData, availableSpaceForColu
mns); | 1112 computeUsedBreadthOfGridTracks(ForColumns, sizingData, availableSpaceForColu
mns); |
| 1103 ASSERT(tracksAreWiderThanMinTrackBreadth(ForColumns, sizingData.columnTracks
)); | 1113 ASSERT(tracksAreWiderThanMinTrackBreadth(ForColumns, sizingData.columnTracks
)); |
| 1104 computeUsedBreadthOfGridTracks(ForRows, sizingData, availableSpaceForRows); | 1114 computeUsedBreadthOfGridTracks(ForRows, sizingData, availableSpaceForRows); |
| 1105 ASSERT(tracksAreWiderThanMinTrackBreadth(ForRows, sizingData.rowTracks)); | 1115 ASSERT(tracksAreWiderThanMinTrackBreadth(ForRows, sizingData.rowTracks)); |
| 1106 | 1116 |
| 1107 populateGridPositions(sizingData, availableSpaceForColumns, availableSpaceFo
rRows); | 1117 populateGridPositions(sizingData, availableSpaceForColumns, availableSpaceFo
rRows); |
| 1108 m_gridItemsOverflowingGridArea.resize(0); | 1118 m_gridItemsOverflowingGridArea.resize(0); |
| 1109 | 1119 |
| 1110 for (RenderBox* child = firstChildBox(); child; child = child->nextSiblingBo
x()) { | 1120 for (RenderBox* child = firstChildBox(); child; child = child->nextSiblingBo
x()) { |
| 1111 if (child->isOutOfFlowPositioned()) { | 1121 if (child->isOutOfFlowPositioned()) { |
| 1112 // FIXME: Absolute positioned grid items should have a special | |
| 1113 // behavior as described in the spec (crbug.com/273898): | |
| 1114 // http://www.w3.org/TR/css-grid-1/#abspos-items | |
| 1115 child->containingBlock()->insertPositionedObject(child); | 1122 child->containingBlock()->insertPositionedObject(child); |
| 1123 continue; |
| 1116 } | 1124 } |
| 1117 | 1125 |
| 1118 // Because the grid area cannot be styled, we don't need to adjust | 1126 // Because the grid area cannot be styled, we don't need to adjust |
| 1119 // the grid breadth to account for 'box-sizing'. | 1127 // the grid breadth to account for 'box-sizing'. |
| 1120 LayoutUnit oldOverrideContainingBlockContentLogicalWidth = child->hasOve
rrideContainingBlockLogicalWidth() ? child->overrideContainingBlockContentLogica
lWidth() : LayoutUnit(); | 1128 LayoutUnit oldOverrideContainingBlockContentLogicalWidth = child->hasOve
rrideContainingBlockLogicalWidth() ? child->overrideContainingBlockContentLogica
lWidth() : LayoutUnit(); |
| 1121 LayoutUnit oldOverrideContainingBlockContentLogicalHeight = child->hasOv
errideContainingBlockLogicalHeight() ? child->overrideContainingBlockContentLogi
calHeight() : LayoutUnit(); | 1129 LayoutUnit oldOverrideContainingBlockContentLogicalHeight = child->hasOv
errideContainingBlockLogicalHeight() ? child->overrideContainingBlockContentLogi
calHeight() : LayoutUnit(); |
| 1122 | 1130 |
| 1123 LayoutUnit overrideContainingBlockContentLogicalWidth = gridAreaBreadthF
orChild(*child, ForColumns, sizingData.columnTracks); | 1131 LayoutUnit overrideContainingBlockContentLogicalWidth = gridAreaBreadthF
orChild(*child, ForColumns, sizingData.columnTracks); |
| 1124 LayoutUnit overrideContainingBlockContentLogicalHeight = gridAreaBreadth
ForChild(*child, ForRows, sizingData.rowTracks); | 1132 LayoutUnit overrideContainingBlockContentLogicalHeight = gridAreaBreadth
ForChild(*child, ForRows, sizingData.rowTracks); |
| 1125 | 1133 |
| (...skipping 23 matching lines...) Expand all Loading... |
| 1149 } | 1157 } |
| 1150 | 1158 |
| 1151 for (size_t i = 0; i < sizingData.rowTracks.size(); ++i) | 1159 for (size_t i = 0; i < sizingData.rowTracks.size(); ++i) |
| 1152 setLogicalHeight(logicalHeight() + sizingData.rowTracks[i].m_usedBreadth
); | 1160 setLogicalHeight(logicalHeight() + sizingData.rowTracks[i].m_usedBreadth
); |
| 1153 | 1161 |
| 1154 // Min / max logical height is handled by the call to updateLogicalHeight in
layoutBlock. | 1162 // Min / max logical height is handled by the call to updateLogicalHeight in
layoutBlock. |
| 1155 | 1163 |
| 1156 setLogicalHeight(logicalHeight() + borderAndPaddingLogicalHeight()); | 1164 setLogicalHeight(logicalHeight() + borderAndPaddingLogicalHeight()); |
| 1157 } | 1165 } |
| 1158 | 1166 |
| 1167 void RenderGrid::layoutPositionedObjects(bool relayoutChildren, PositionedLayout
Behavior info) |
| 1168 { |
| 1169 TrackedRendererListHashSet* positionedDescendants = positionedObjects(); |
| 1170 if (!positionedDescendants) |
| 1171 return; |
| 1172 |
| 1173 bool containerHasHorizontalWritingMode = isHorizontalWritingMode(); |
| 1174 TrackedRendererListHashSet::iterator end = positionedDescendants->end(); |
| 1175 for (TrackedRendererListHashSet::iterator it = positionedDescendants->begin(
); it != end; ++it) { |
| 1176 RenderBox* child = *it; |
| 1177 |
| 1178 bool hasOrthogonalWritingMode = child->isHorizontalWritingMode() != cont
ainerHasHorizontalWritingMode; |
| 1179 if (hasOrthogonalWritingMode) { |
| 1180 // FIXME: Properly support orthogonal writing mode. |
| 1181 continue; |
| 1182 } |
| 1183 |
| 1184 // FIXME: Detect properly if start/end is auto for inexistent named grid
lines. |
| 1185 bool columnStartIsAuto = child->style()->gridColumnStart().isAuto(); |
| 1186 LayoutUnit columnOffset = LayoutUnit(0); |
| 1187 LayoutUnit columnBreadth = LayoutUnit(0); |
| 1188 offsetAndBreadthForPositionedChild(*child, ForColumns, columnStartIsAuto
, child->style()->gridColumnEnd().isAuto(), columnOffset, columnBreadth); |
| 1189 bool rowStartIsAuto = child->style()->gridRowStart().isAuto(); |
| 1190 LayoutUnit rowOffset = LayoutUnit(0); |
| 1191 LayoutUnit rowBreadth = LayoutUnit(0); |
| 1192 offsetAndBreadthForPositionedChild(*child, ForRows, rowStartIsAuto, chil
d->style()->gridRowEnd().isAuto(), rowOffset, rowBreadth); |
| 1193 |
| 1194 child->setOverrideContainingBlockContentLogicalWidth(columnBreadth); |
| 1195 child->setOverrideContainingBlockContentLogicalHeight(rowBreadth); |
| 1196 child->setExtraInlineOffset(columnOffset); |
| 1197 child->setExtraBlockOffset(rowOffset); |
| 1198 |
| 1199 if (child->parent() == this) { |
| 1200 // If column/row start is not auto the padding has been already comp
uted in offsetAndBreadthForPositionedChild(). |
| 1201 RenderLayer* childLayer = child->layer(); |
| 1202 if (columnStartIsAuto) |
| 1203 childLayer->setStaticInlinePosition(borderAndPaddingStart()); |
| 1204 else |
| 1205 childLayer->setStaticInlinePosition(borderStart() + columnOffset
); |
| 1206 if (rowStartIsAuto) |
| 1207 childLayer->setStaticBlockPosition(borderAndPaddingBefore()); |
| 1208 else |
| 1209 childLayer->setStaticBlockPosition(borderBefore() + rowOffset); |
| 1210 } |
| 1211 } |
| 1212 |
| 1213 RenderBlock::layoutPositionedObjects(relayoutChildren, info); |
| 1214 } |
| 1215 |
| 1216 void RenderGrid::offsetAndBreadthForPositionedChild(const RenderBox& child, Grid
TrackSizingDirection direction, bool startIsAuto, bool endIsAuto, LayoutUnit& of
fset, LayoutUnit& breadth) |
| 1217 { |
| 1218 ASSERT(child.isHorizontalWritingMode() == isHorizontalWritingMode()); |
| 1219 |
| 1220 OwnPtr<GridSpan> positions = GridResolvedPosition::resolveGridPositionsFromS
tyle(*style(), child, direction); |
| 1221 if (!positions) { |
| 1222 offset = LayoutUnit(0); |
| 1223 breadth = (direction == ForColumns) ? clientLogicalWidth() : clientLogic
alHeight(); |
| 1224 return; |
| 1225 } |
| 1226 |
| 1227 GridResolvedPosition firstPosition = GridResolvedPosition(0); |
| 1228 GridResolvedPosition initialPosition = startIsAuto ? firstPosition : positio
ns->resolvedInitialPosition; |
| 1229 GridResolvedPosition lastPosition = GridResolvedPosition((direction == ForCo
lumns ? gridColumnCount() : gridRowCount()) - 1); |
| 1230 GridResolvedPosition finalPosition = endIsAuto ? lastPosition : positions->r
esolvedFinalPosition; |
| 1231 |
| 1232 LayoutUnit start = startIsAuto ? LayoutUnit(0) : (direction == ForColumns) ?
m_columnPositions[initialPosition.toInt()] : m_rowPositions[initialPosition.to
Int()]; |
| 1233 LayoutUnit end = endIsAuto ? (direction == ForColumns) ? logicalWidth() : lo
gicalHeight() : (direction == ForColumns) ? m_columnPositions[finalPosition.nex
t().toInt()] : m_rowPositions[finalPosition.next().toInt()]; |
| 1234 |
| 1235 breadth = end - start; |
| 1236 |
| 1237 if (startIsAuto) |
| 1238 breadth -= (direction == ForColumns) ? borderStart() : borderBefore(); |
| 1239 else |
| 1240 start -= ((direction == ForColumns) ? borderStart() : borderBefore()); |
| 1241 |
| 1242 if (endIsAuto) { |
| 1243 breadth -= (direction == ForColumns) ? borderEnd() : borderAfter(); |
| 1244 breadth -= scrollbarLogicalWidth(); |
| 1245 } |
| 1246 |
| 1247 offset = start; |
| 1248 } |
| 1249 |
| 1159 GridCoordinate RenderGrid::cachedGridCoordinate(const RenderBox& gridItem) const | 1250 GridCoordinate RenderGrid::cachedGridCoordinate(const RenderBox& gridItem) const |
| 1160 { | 1251 { |
| 1161 ASSERT(m_gridItemCoordinate.contains(&gridItem)); | 1252 ASSERT(m_gridItemCoordinate.contains(&gridItem)); |
| 1162 return m_gridItemCoordinate.get(&gridItem); | 1253 return m_gridItemCoordinate.get(&gridItem); |
| 1163 } | 1254 } |
| 1164 | 1255 |
| 1165 LayoutUnit RenderGrid::gridAreaBreadthForChild(const RenderBox& child, GridTrack
SizingDirection direction, const Vector<GridTrack>& tracks) const | 1256 LayoutUnit RenderGrid::gridAreaBreadthForChild(const RenderBox& child, GridTrack
SizingDirection direction, const Vector<GridTrack>& tracks) const |
| 1166 { | 1257 { |
| 1167 const GridCoordinate& coordinate = cachedGridCoordinate(child); | 1258 const GridCoordinate& coordinate = cachedGridCoordinate(child); |
| 1168 const GridSpan& span = (direction == ForColumns) ? coordinate.columns : coor
dinate.rows; | 1259 const GridSpan& span = (direction == ForColumns) ? coordinate.columns : coor
dinate.rows; |
| (...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1602 if (isOutOfFlowPositioned()) | 1693 if (isOutOfFlowPositioned()) |
| 1603 return "RenderGrid (positioned)"; | 1694 return "RenderGrid (positioned)"; |
| 1604 if (isAnonymous()) | 1695 if (isAnonymous()) |
| 1605 return "RenderGrid (generated)"; | 1696 return "RenderGrid (generated)"; |
| 1606 if (isRelPositioned()) | 1697 if (isRelPositioned()) |
| 1607 return "RenderGrid (relative positioned)"; | 1698 return "RenderGrid (relative positioned)"; |
| 1608 return "RenderGrid"; | 1699 return "RenderGrid"; |
| 1609 } | 1700 } |
| 1610 | 1701 |
| 1611 } // namespace blink | 1702 } // namespace blink |
| OLD | NEW |