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 1772 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1783 // arbitrary number of empty tracks between two non empty ones. | 1783 // arbitrary number of empty tracks between two non empty ones. |
1784 bool allRemainingTracksAreEmpty = remainingEmptyTracks == (lastLine
- i); | 1784 bool allRemainingTracksAreEmpty = remainingEmptyTracks == (lastLine
- i); |
1785 if (!allRemainingTracksAreEmpty || !isEmptyAutoRepeatTrack(direction
, i)) | 1785 if (!allRemainingTracksAreEmpty || !isEmptyAutoRepeatTrack(direction
, i)) |
1786 tracks[i - 1] -= gap; | 1786 tracks[i - 1] -= gap; |
1787 } | 1787 } |
1788 } | 1788 } |
1789 | 1789 |
1790 return tracks; | 1790 return tracks; |
1791 } | 1791 } |
1792 | 1792 |
1793 static const StyleContentAlignmentData& normalValueBehavior() | 1793 static const StyleContentAlignmentData& contentAlignmentNormalBehavior() |
1794 { | 1794 { |
1795 static const StyleContentAlignmentData normalBehavior = {ContentPositionNorm
al, ContentDistributionStretch}; | 1795 static const StyleContentAlignmentData normalBehavior = {ContentPositionNorm
al, ContentDistributionStretch}; |
1796 return normalBehavior; | 1796 return normalBehavior; |
1797 } | 1797 } |
1798 | 1798 |
1799 void LayoutGrid::applyStretchAlignmentToTracksIfNeeded(GridTrackSizingDirection
direction, GridSizingData& sizingData) | 1799 void LayoutGrid::applyStretchAlignmentToTracksIfNeeded(GridTrackSizingDirection
direction, GridSizingData& sizingData) |
1800 { | 1800 { |
1801 LayoutUnit& availableSpace = sizingData.freeSpaceForDirection(direction); | 1801 LayoutUnit& availableSpace = sizingData.freeSpaceForDirection(direction); |
1802 if (availableSpace <= 0 | 1802 if (availableSpace <= 0 |
1803 || (direction == ForColumns && styleRef().resolvedJustifyContentDistribu
tion(normalValueBehavior()) != ContentDistributionStretch) | 1803 || (direction == ForColumns && styleRef().resolvedJustifyContentDistribu
tion(contentAlignmentNormalBehavior()) != ContentDistributionStretch) |
1804 || (direction == ForRows && styleRef().resolvedAlignContentDistribution(
normalValueBehavior()) != ContentDistributionStretch)) | 1804 || (direction == ForRows && styleRef().resolvedAlignContentDistribution(
contentAlignmentNormalBehavior()) != ContentDistributionStretch)) |
1805 return; | 1805 return; |
1806 | 1806 |
1807 // Spec defines auto-sized tracks as the ones with an 'auto' max-sizing func
tion. | 1807 // Spec defines auto-sized tracks as the ones with an 'auto' max-sizing func
tion. |
1808 Vector<GridTrack>& tracks = (direction == ForColumns) ? sizingData.columnTra
cks : sizingData.rowTracks; | 1808 Vector<GridTrack>& tracks = (direction == ForColumns) ? sizingData.columnTra
cks : sizingData.rowTracks; |
1809 Vector<unsigned> autoSizedTracksIndex; | 1809 Vector<unsigned> autoSizedTracksIndex; |
1810 for (unsigned i = 0; i < tracks.size(); ++i) { | 1810 for (unsigned i = 0; i < tracks.size(); ++i) { |
1811 const GridTrackSize& trackSize = gridTrackSize(direction, i); | 1811 const GridTrackSize& trackSize = gridTrackSize(direction, i); |
1812 if (trackSize.hasAutoMaxTrackBreadth()) | 1812 if (trackSize.hasAutoMaxTrackBreadth()) |
1813 autoSizedTracksIndex.append(i); | 1813 autoSizedTracksIndex.append(i); |
1814 } | 1814 } |
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2167 } | 2167 } |
2168 | 2168 |
2169 LayoutUnit LayoutGrid::availableAlignmentSpaceForChildBeforeStretching(LayoutUni
t gridAreaBreadthForChild, const LayoutBox& child) const | 2169 LayoutUnit LayoutGrid::availableAlignmentSpaceForChildBeforeStretching(LayoutUni
t gridAreaBreadthForChild, const LayoutBox& child) const |
2170 { | 2170 { |
2171 // Because we want to avoid multiple layouts, stretching logic might be perf
ormed before | 2171 // Because we want to avoid multiple layouts, stretching logic might be perf
ormed before |
2172 // children are laid out, so we can't use the child cached values. Hence, we
need to | 2172 // children are laid out, so we can't use the child cached values. Hence, we
need to |
2173 // compute margins in order to determine the available height before stretch
ing. | 2173 // compute margins in order to determine the available height before stretch
ing. |
2174 return gridAreaBreadthForChild - (child.needsLayout() ? computeMarginLogical
SizeForChild(BlockDirection, child) : marginLogicalHeightForChild(child)); | 2174 return gridAreaBreadthForChild - (child.needsLayout() ? computeMarginLogical
SizeForChild(BlockDirection, child) : marginLogicalHeightForChild(child)); |
2175 } | 2175 } |
2176 | 2176 |
| 2177 StyleSelfAlignmentData LayoutGrid::alignSelfForChild(const LayoutBox& child) con
st |
| 2178 { |
| 2179 if (!child.isAnonymous()) |
| 2180 return child.styleRef().resolvedAlignSelf(selfAlignmentNormalBehavior())
; |
| 2181 // All the 'auto' values has been solved by the StyleAdjuster, but it's poss
ible that |
| 2182 // some grid items generate Anonymous boxes, which need to be solved during
layout. |
| 2183 return child.styleRef().resolvedAlignSelf(selfAlignmentNormalBehavior(), sty
le()); |
| 2184 } |
| 2185 |
| 2186 StyleSelfAlignmentData LayoutGrid::justifySelfForChild(const LayoutBox& child) c
onst |
| 2187 { |
| 2188 if (!child.isAnonymous()) |
| 2189 return child.styleRef().resolvedJustifySelf(ItemPositionStretch); |
| 2190 // All the 'auto' values has been solved by the StyleAdjuster, but it's poss
ible that |
| 2191 // some grid items generate Anonymous boxes, which need to be solved during
layout. |
| 2192 return child.styleRef().resolvedJustifySelf(selfAlignmentNormalBehavior(), s
tyle()); |
| 2193 } |
| 2194 |
2177 // FIXME: This logic is shared by LayoutFlexibleBox, so it should be moved to La
youtBox. | 2195 // FIXME: This logic is shared by LayoutFlexibleBox, so it should be moved to La
youtBox. |
2178 void LayoutGrid::applyStretchAlignmentToChildIfNeeded(LayoutBox& child) | 2196 void LayoutGrid::applyStretchAlignmentToChildIfNeeded(LayoutBox& child) |
2179 { | 2197 { |
2180 // We clear height override values because we will decide now whether it's a
llowed or | 2198 // We clear height override values because we will decide now whether it's a
llowed or |
2181 // not, evaluating the conditions which might have changed since the old val
ues were set. | 2199 // not, evaluating the conditions which might have changed since the old val
ues were set. |
2182 child.clearOverrideLogicalContentHeight(); | 2200 child.clearOverrideLogicalContentHeight(); |
2183 | 2201 |
2184 auto& childStyle = child.styleRef(); | 2202 auto& childStyle = child.styleRef(); |
2185 bool isHorizontalMode = isHorizontalWritingMode(); | 2203 bool isHorizontalMode = isHorizontalWritingMode(); |
2186 bool childHasAutoSizeInColumnAxis = isHorizontalMode ? childStyle.height().i
sAuto() : childStyle.width().isAuto(); | 2204 bool childHasAutoSizeInColumnAxis = isHorizontalMode ? childStyle.height().i
sAuto() : childStyle.width().isAuto(); |
2187 bool childHasAutoSizeInRowAxis = isHorizontalMode ? childStyle.width().isAut
o() : childStyle.height().isAuto(); | 2205 bool childHasAutoSizeInRowAxis = isHorizontalMode ? childStyle.width().isAut
o() : childStyle.height().isAuto(); |
2188 bool allowedToStretchChildAlongColumnAxis = childHasAutoSizeInColumnAxis &&
!hasAutoMarginsInColumnAxis(child); | 2206 bool allowedToStretchChildAlongColumnAxis = childHasAutoSizeInColumnAxis &&
!hasAutoMarginsInColumnAxis(child); |
2189 bool allowedToStretchChildAlongRowAxis = childHasAutoSizeInRowAxis && !hasAu
toMarginsInRowAxis(child); | 2207 bool allowedToStretchChildAlongRowAxis = childHasAutoSizeInRowAxis && !hasAu
toMarginsInRowAxis(child); |
2190 bool stretchingAlongRowAxis = ComputedStyle::resolveJustification(styleRef()
, childStyle, ItemPositionStretch) == ItemPositionStretch; | 2208 bool stretchingAlongRowAxis = justifySelfForChild(child).position() == ItemP
ositionStretch; |
2191 bool stretchingAlongColumnAxis = ComputedStyle::resolveAlignment(styleRef(),
childStyle, ItemPositionStretch) == ItemPositionStretch; | 2209 bool stretchingAlongColumnAxis = alignSelfForChild(child).position() == Item
PositionStretch; |
2192 | 2210 |
2193 GridTrackSizingDirection childBlockDirection = flowAwareDirectionForChild(ch
ild, ForRows); | 2211 GridTrackSizingDirection childBlockDirection = flowAwareDirectionForChild(ch
ild, ForRows); |
2194 bool allowedToStretchChildBlockSize = childBlockDirection == ForRows ? allow
edToStretchChildAlongColumnAxis && stretchingAlongColumnAxis : allowedToStretchC
hildAlongRowAxis && stretchingAlongRowAxis; | 2212 bool allowedToStretchChildBlockSize = childBlockDirection == ForRows ? allow
edToStretchChildAlongColumnAxis && stretchingAlongColumnAxis : allowedToStretchC
hildAlongRowAxis && stretchingAlongRowAxis; |
2195 if (allowedToStretchChildBlockSize) { | 2213 if (allowedToStretchChildBlockSize) { |
2196 LayoutUnit stretchedLogicalHeight = availableAlignmentSpaceForChildBefor
eStretching(overrideContainingBlockContentSizeForChild(child, childBlockDirectio
n), child); | 2214 LayoutUnit stretchedLogicalHeight = availableAlignmentSpaceForChildBefor
eStretching(overrideContainingBlockContentSizeForChild(child, childBlockDirectio
n), child); |
2197 LayoutUnit desiredLogicalHeight = child.constrainLogicalHeightByMinMax(s
tretchedLogicalHeight, LayoutUnit(-1)); | 2215 LayoutUnit desiredLogicalHeight = child.constrainLogicalHeightByMinMax(s
tretchedLogicalHeight, LayoutUnit(-1)); |
2198 child.setOverrideLogicalContentHeight(desiredLogicalHeight - child.borde
rAndPaddingLogicalHeight()); | 2216 child.setOverrideLogicalContentHeight(desiredLogicalHeight - child.borde
rAndPaddingLogicalHeight()); |
2199 if (desiredLogicalHeight != child.logicalHeight()) { | 2217 if (desiredLogicalHeight != child.logicalHeight()) { |
2200 // TODO (lajava): Can avoid laying out here in some cases. See https
://webkit.org/b/87905. | 2218 // TODO (lajava): Can avoid laying out here in some cases. See https
://webkit.org/b/87905. |
2201 child.setLogicalHeight(LayoutUnit()); | 2219 child.setLogicalHeight(LayoutUnit()); |
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2260 } else if (marginAfter.isAuto()) { | 2278 } else if (marginAfter.isAuto()) { |
2261 child.setMarginAfter(availableAlignmentSpace, style()); | 2279 child.setMarginAfter(availableAlignmentSpace, style()); |
2262 } | 2280 } |
2263 } | 2281 } |
2264 | 2282 |
2265 GridAxisPosition LayoutGrid::columnAxisPositionForChild(const LayoutBox& child)
const | 2283 GridAxisPosition LayoutGrid::columnAxisPositionForChild(const LayoutBox& child)
const |
2266 { | 2284 { |
2267 bool hasSameWritingMode = child.styleRef().getWritingMode() == styleRef().ge
tWritingMode(); | 2285 bool hasSameWritingMode = child.styleRef().getWritingMode() == styleRef().ge
tWritingMode(); |
2268 bool childIsLTR = child.styleRef().isLeftToRightDirection(); | 2286 bool childIsLTR = child.styleRef().isLeftToRightDirection(); |
2269 | 2287 |
2270 switch (ComputedStyle::resolveAlignment(styleRef(), child.styleRef(), ItemPo
sitionStretch)) { | 2288 switch (alignSelfForChild(child).position()) { |
2271 case ItemPositionSelfStart: | 2289 case ItemPositionSelfStart: |
2272 // TODO (lajava): Should we implement this logic in a generic utility fu
nction ? | 2290 // TODO (lajava): Should we implement this logic in a generic utility fu
nction ? |
2273 // Aligns the alignment subject to be flush with the edge of the alignme
nt container | 2291 // Aligns the alignment subject to be flush with the edge of the alignme
nt container |
2274 // corresponding to the alignment subject's 'start' side in the column a
xis. | 2292 // corresponding to the alignment subject's 'start' side in the column a
xis. |
2275 if (isOrthogonalChild(child)) { | 2293 if (isOrthogonalChild(child)) { |
2276 // If orthogonal writing-modes, self-start will be based on the chil
d's inline-axis | 2294 // If orthogonal writing-modes, self-start will be based on the chil
d's inline-axis |
2277 // direction (inline-start), because it's the one parallel to the co
lumn axis. | 2295 // direction (inline-start), because it's the one parallel to the co
lumn axis. |
2278 if (styleRef().isFlippedBlocksWritingMode()) | 2296 if (styleRef().isFlippedBlocksWritingMode()) |
2279 return childIsLTR ? GridAxisEnd : GridAxisStart; | 2297 return childIsLTR ? GridAxisEnd : GridAxisStart; |
2280 return childIsLTR ? GridAxisStart : GridAxisEnd; | 2298 return childIsLTR ? GridAxisStart : GridAxisEnd; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2313 case ItemPositionEnd: | 2331 case ItemPositionEnd: |
2314 return GridAxisEnd; | 2332 return GridAxisEnd; |
2315 case ItemPositionStretch: | 2333 case ItemPositionStretch: |
2316 return GridAxisStart; | 2334 return GridAxisStart; |
2317 case ItemPositionBaseline: | 2335 case ItemPositionBaseline: |
2318 case ItemPositionLastBaseline: | 2336 case ItemPositionLastBaseline: |
2319 // FIXME: These two require implementing Baseline Alignment. For now, we
always 'start' align the child. | 2337 // FIXME: These two require implementing Baseline Alignment. For now, we
always 'start' align the child. |
2320 // crbug.com/234191 | 2338 // crbug.com/234191 |
2321 return GridAxisStart; | 2339 return GridAxisStart; |
2322 case ItemPositionAuto: | 2340 case ItemPositionAuto: |
| 2341 case ItemPositionNormal: |
2323 break; | 2342 break; |
2324 } | 2343 } |
2325 | 2344 |
2326 ASSERT_NOT_REACHED(); | 2345 ASSERT_NOT_REACHED(); |
2327 return GridAxisStart; | 2346 return GridAxisStart; |
2328 } | 2347 } |
2329 | 2348 |
2330 GridAxisPosition LayoutGrid::rowAxisPositionForChild(const LayoutBox& child) con
st | 2349 GridAxisPosition LayoutGrid::rowAxisPositionForChild(const LayoutBox& child) con
st |
2331 { | 2350 { |
2332 bool hasSameDirection = child.styleRef().direction() == styleRef().direction
(); | 2351 bool hasSameDirection = child.styleRef().direction() == styleRef().direction
(); |
2333 bool gridIsLTR = styleRef().isLeftToRightDirection(); | 2352 bool gridIsLTR = styleRef().isLeftToRightDirection(); |
2334 | 2353 |
2335 switch (ComputedStyle::resolveJustification(styleRef(), child.styleRef(), It
emPositionStretch)) { | 2354 switch (justifySelfForChild(child).position()) { |
2336 case ItemPositionSelfStart: | 2355 case ItemPositionSelfStart: |
2337 // TODO (lajava): Should we implement this logic in a generic utility fu
nction ? | 2356 // TODO (lajava): Should we implement this logic in a generic utility fu
nction ? |
2338 // Aligns the alignment subject to be flush with the edge of the alignme
nt container | 2357 // Aligns the alignment subject to be flush with the edge of the alignme
nt container |
2339 // corresponding to the alignment subject's 'start' side in the row axis
. | 2358 // corresponding to the alignment subject's 'start' side in the row axis
. |
2340 if (isOrthogonalChild(child)) { | 2359 if (isOrthogonalChild(child)) { |
2341 // If orthogonal writing-modes, self-start will be based on the chil
d's block-axis | 2360 // If orthogonal writing-modes, self-start will be based on the chil
d's block-axis |
2342 // direction, because it's the one parallel to the row axis. | 2361 // direction, because it's the one parallel to the row axis. |
2343 if (child.styleRef().isFlippedBlocksWritingMode()) | 2362 if (child.styleRef().isFlippedBlocksWritingMode()) |
2344 return gridIsLTR ? GridAxisEnd : GridAxisStart; | 2363 return gridIsLTR ? GridAxisEnd : GridAxisStart; |
2345 return gridIsLTR ? GridAxisStart : GridAxisEnd; | 2364 return gridIsLTR ? GridAxisStart : GridAxisEnd; |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2378 case ItemPositionEnd: | 2397 case ItemPositionEnd: |
2379 return GridAxisEnd; | 2398 return GridAxisEnd; |
2380 case ItemPositionStretch: | 2399 case ItemPositionStretch: |
2381 return GridAxisStart; | 2400 return GridAxisStart; |
2382 case ItemPositionBaseline: | 2401 case ItemPositionBaseline: |
2383 case ItemPositionLastBaseline: | 2402 case ItemPositionLastBaseline: |
2384 // FIXME: These two require implementing Baseline Alignment. For now, we
always 'start' align the child. | 2403 // FIXME: These two require implementing Baseline Alignment. For now, we
always 'start' align the child. |
2385 // crbug.com/234191 | 2404 // crbug.com/234191 |
2386 return GridAxisStart; | 2405 return GridAxisStart; |
2387 case ItemPositionAuto: | 2406 case ItemPositionAuto: |
| 2407 case ItemPositionNormal: |
2388 break; | 2408 break; |
2389 } | 2409 } |
2390 | 2410 |
2391 ASSERT_NOT_REACHED(); | 2411 ASSERT_NOT_REACHED(); |
2392 return GridAxisStart; | 2412 return GridAxisStart; |
2393 } | 2413 } |
2394 | 2414 |
2395 LayoutUnit LayoutGrid::columnAxisOffsetForChild(const LayoutBox& child, GridSizi
ngData& sizingData) const | 2415 LayoutUnit LayoutGrid::columnAxisOffsetForChild(const LayoutBox& child, GridSizi
ngData& sizingData) const |
2396 { | 2416 { |
2397 const GridSpan& rowsSpan = cachedGridSpan(child, ForRows); | 2417 const GridSpan& rowsSpan = cachedGridSpan(child, ForRows); |
(...skipping 12 matching lines...) Expand all Loading... |
2410 LayoutUnit endOfRow = m_rowPositions[childEndLine]; | 2430 LayoutUnit endOfRow = m_rowPositions[childEndLine]; |
2411 // m_rowPositions include distribution offset (because of content alignm
ent) and gutters | 2431 // m_rowPositions include distribution offset (because of content alignm
ent) and gutters |
2412 // so we need to subtract them to get the actual end position for a give
n row | 2432 // so we need to subtract them to get the actual end position for a give
n row |
2413 // (this does not have to be done for the last track as there are no mor
e m_columnPositions after it). | 2433 // (this does not have to be done for the last track as there are no mor
e m_columnPositions after it). |
2414 LayoutUnit trackGap = gridGapForDirection(ForRows); | 2434 LayoutUnit trackGap = gridGapForDirection(ForRows); |
2415 if (childEndLine < m_rowPositions.size() - 1) { | 2435 if (childEndLine < m_rowPositions.size() - 1) { |
2416 endOfRow -= trackGap; | 2436 endOfRow -= trackGap; |
2417 endOfRow -= m_offsetBetweenRows; | 2437 endOfRow -= m_offsetBetweenRows; |
2418 } | 2438 } |
2419 LayoutUnit columnAxisChildSize = isOrthogonalChild(child) ? child.logica
lWidth() + child.marginLogicalWidth() : child.logicalHeight() + child.marginLogi
calHeight(); | 2439 LayoutUnit columnAxisChildSize = isOrthogonalChild(child) ? child.logica
lWidth() + child.marginLogicalWidth() : child.logicalHeight() + child.marginLogi
calHeight(); |
2420 OverflowAlignment overflow = child.styleRef().resolvedAlignment(styleRef
(), ItemPositionStretch).overflow(); | 2440 OverflowAlignment overflow = alignSelfForChild(child).overflow(); |
2421 LayoutUnit offsetFromStartPosition = computeOverflowAlignmentOffset(over
flow, endOfRow - startOfRow, columnAxisChildSize); | 2441 LayoutUnit offsetFromStartPosition = computeOverflowAlignmentOffset(over
flow, endOfRow - startOfRow, columnAxisChildSize); |
2422 return startPosition + (axisPosition == GridAxisEnd ? offsetFromStartPos
ition : offsetFromStartPosition / 2); | 2442 return startPosition + (axisPosition == GridAxisEnd ? offsetFromStartPos
ition : offsetFromStartPosition / 2); |
2423 } | 2443 } |
2424 } | 2444 } |
2425 | 2445 |
2426 ASSERT_NOT_REACHED(); | 2446 ASSERT_NOT_REACHED(); |
2427 return LayoutUnit(); | 2447 return LayoutUnit(); |
2428 } | 2448 } |
2429 | 2449 |
2430 LayoutUnit LayoutGrid::rowAxisOffsetForChild(const LayoutBox& child, GridSizingD
ata& sizingData) const | 2450 LayoutUnit LayoutGrid::rowAxisOffsetForChild(const LayoutBox& child, GridSizingD
ata& sizingData) const |
(...skipping 14 matching lines...) Expand all Loading... |
2445 LayoutUnit endOfColumn = m_columnPositions[childEndLine]; | 2465 LayoutUnit endOfColumn = m_columnPositions[childEndLine]; |
2446 // m_columnPositions include distribution offset (because of content ali
gnment) and gutters | 2466 // m_columnPositions include distribution offset (because of content ali
gnment) and gutters |
2447 // so we need to subtract them to get the actual end position for a give
n column | 2467 // so we need to subtract them to get the actual end position for a give
n column |
2448 // (this does not have to be done for the last track as there are no mor
e m_columnPositions after it). | 2468 // (this does not have to be done for the last track as there are no mor
e m_columnPositions after it). |
2449 LayoutUnit trackGap = gridGapForDirection(ForColumns); | 2469 LayoutUnit trackGap = gridGapForDirection(ForColumns); |
2450 if (childEndLine < m_columnPositions.size() - 1) { | 2470 if (childEndLine < m_columnPositions.size() - 1) { |
2451 endOfColumn -= trackGap; | 2471 endOfColumn -= trackGap; |
2452 endOfColumn -= m_offsetBetweenColumns; | 2472 endOfColumn -= m_offsetBetweenColumns; |
2453 } | 2473 } |
2454 LayoutUnit rowAxisChildSize = isOrthogonalChild(child) ? child.logicalHe
ight() + child.marginLogicalHeight() : child.logicalWidth() + child.marginLogica
lWidth(); | 2474 LayoutUnit rowAxisChildSize = isOrthogonalChild(child) ? child.logicalHe
ight() + child.marginLogicalHeight() : child.logicalWidth() + child.marginLogica
lWidth(); |
2455 LayoutUnit offsetFromStartPosition = computeOverflowAlignmentOffset(chil
d.styleRef().justifySelfOverflowAlignment(), endOfColumn - startOfColumn, rowAxi
sChildSize); | 2475 OverflowAlignment overflow = justifySelfForChild(child).overflow(); |
| 2476 LayoutUnit offsetFromStartPosition = computeOverflowAlignmentOffset(over
flow, endOfColumn - startOfColumn, rowAxisChildSize); |
2456 return startPosition + (axisPosition == GridAxisEnd ? offsetFromStartPos
ition : offsetFromStartPosition / 2); | 2477 return startPosition + (axisPosition == GridAxisEnd ? offsetFromStartPos
ition : offsetFromStartPosition / 2); |
2457 } | 2478 } |
2458 } | 2479 } |
2459 | 2480 |
2460 ASSERT_NOT_REACHED(); | 2481 ASSERT_NOT_REACHED(); |
2461 return LayoutUnit(); | 2482 return LayoutUnit(); |
2462 } | 2483 } |
2463 | 2484 |
2464 ContentPosition static resolveContentDistributionFallback(ContentDistributionTyp
e distribution) | 2485 ContentPosition static resolveContentDistributionFallback(ContentDistributionTyp
e distribution) |
2465 { | 2486 { |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2507 return {}; | 2528 return {}; |
2508 } | 2529 } |
2509 | 2530 |
2510 ASSERT_NOT_REACHED(); | 2531 ASSERT_NOT_REACHED(); |
2511 return {}; | 2532 return {}; |
2512 } | 2533 } |
2513 | 2534 |
2514 ContentAlignmentData LayoutGrid::computeContentPositionAndDistributionOffset(Gri
dTrackSizingDirection direction, const LayoutUnit& availableFreeSpace, unsigned
numberOfGridTracks) const | 2535 ContentAlignmentData LayoutGrid::computeContentPositionAndDistributionOffset(Gri
dTrackSizingDirection direction, const LayoutUnit& availableFreeSpace, unsigned
numberOfGridTracks) const |
2515 { | 2536 { |
2516 bool isRowAxis = direction == ForColumns; | 2537 bool isRowAxis = direction == ForColumns; |
2517 ContentPosition position = isRowAxis ? styleRef().resolvedJustifyContentPosi
tion(normalValueBehavior()) : styleRef().resolvedAlignContentPosition(normalValu
eBehavior()); | 2538 ContentPosition position = isRowAxis ? styleRef().resolvedJustifyContentPosi
tion(contentAlignmentNormalBehavior()) : styleRef().resolvedAlignContentPosition
(contentAlignmentNormalBehavior()); |
2518 ContentDistributionType distribution = isRowAxis ? styleRef().resolvedJustif
yContentDistribution(normalValueBehavior()) : styleRef().resolvedAlignContentDis
tribution(normalValueBehavior()); | 2539 ContentDistributionType distribution = isRowAxis ? styleRef().resolvedJustif
yContentDistribution(contentAlignmentNormalBehavior()) : styleRef().resolvedAlig
nContentDistribution(contentAlignmentNormalBehavior()); |
2519 // If <content-distribution> value can't be applied, 'position' will become
the associated | 2540 // If <content-distribution> value can't be applied, 'position' will become
the associated |
2520 // <content-position> fallback value. | 2541 // <content-position> fallback value. |
2521 ContentAlignmentData contentAlignment = contentDistributionOffset(availableF
reeSpace, position, distribution, numberOfGridTracks); | 2542 ContentAlignmentData contentAlignment = contentDistributionOffset(availableF
reeSpace, position, distribution, numberOfGridTracks); |
2522 if (contentAlignment.isValid()) | 2543 if (contentAlignment.isValid()) |
2523 return contentAlignment; | 2544 return contentAlignment; |
2524 | 2545 |
2525 OverflowAlignment overflow = isRowAxis ? styleRef().justifyContentOverflowAl
ignment() : styleRef().alignContentOverflowAlignment(); | 2546 OverflowAlignment overflow = isRowAxis ? styleRef().justifyContentOverflowAl
ignment() : styleRef().alignContentOverflowAlignment(); |
2526 if (availableFreeSpace <= 0 && overflow == OverflowAlignmentSafe) | 2547 if (availableFreeSpace <= 0 && overflow == OverflowAlignmentSafe) |
2527 return {LayoutUnit(), LayoutUnit()}; | 2548 return {LayoutUnit(), LayoutUnit()}; |
2528 | 2549 |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2588 return isOrthogonalChild(child) ? childLocation.transposedPoint() : childLoc
ation; | 2609 return isOrthogonalChild(child) ? childLocation.transposedPoint() : childLoc
ation; |
2589 } | 2610 } |
2590 | 2611 |
2591 void LayoutGrid::paintChildren(const PaintInfo& paintInfo, const LayoutPoint& pa
intOffset) const | 2612 void LayoutGrid::paintChildren(const PaintInfo& paintInfo, const LayoutPoint& pa
intOffset) const |
2592 { | 2613 { |
2593 if (!m_gridItemArea.isEmpty()) | 2614 if (!m_gridItemArea.isEmpty()) |
2594 GridPainter(*this).paintChildren(paintInfo, paintOffset); | 2615 GridPainter(*this).paintChildren(paintInfo, paintOffset); |
2595 } | 2616 } |
2596 | 2617 |
2597 } // namespace blink | 2618 } // namespace blink |
OLD | NEW |