| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2011 Google Inc. All rights reserved. | 2 * Copyright (C) 2011 Google 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 are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 234 int LayoutFlexibleBox::inlineBlockBaseline(LineDirectionMode direction) const | 234 int LayoutFlexibleBox::inlineBlockBaseline(LineDirectionMode direction) const |
| 235 { | 235 { |
| 236 int baseline = firstLineBoxBaseline(); | 236 int baseline = firstLineBoxBaseline(); |
| 237 if (baseline != -1) | 237 if (baseline != -1) |
| 238 return baseline; | 238 return baseline; |
| 239 | 239 |
| 240 int marginAscent = direction == HorizontalLine ? marginTop() : marginRight()
; | 240 int marginAscent = direction == HorizontalLine ? marginTop() : marginRight()
; |
| 241 return synthesizedBaselineFromContentBox(*this, direction) + marginAscent; | 241 return synthesizedBaselineFromContentBox(*this, direction) + marginAscent; |
| 242 } | 242 } |
| 243 | 243 |
| 244 IntSize LayoutFlexibleBox::originAdjustmentForScrollbars() const |
| 245 { |
| 246 IntSize size; |
| 247 int adjustmentWidth = verticalScrollbarWidth(); |
| 248 int adjustmentHeight = horizontalScrollbarHeight(); |
| 249 if (!adjustmentWidth && !adjustmentHeight) |
| 250 return size; |
| 251 |
| 252 EFlexDirection flexDirection = style()->flexDirection(); |
| 253 TextDirection textDirection = style()->direction(); |
| 254 WritingMode writingMode = style()->getWritingMode(); |
| 255 |
| 256 if (flexDirection == FlowRow) { |
| 257 if (textDirection == RTL) { |
| 258 if (writingMode == TopToBottomWritingMode) |
| 259 size.expand(adjustmentWidth, 0); |
| 260 else |
| 261 size.expand(0, adjustmentHeight); |
| 262 } |
| 263 if (writingMode == RightToLeftWritingMode) |
| 264 size.expand(adjustmentWidth, 0); |
| 265 } else if (flexDirection == FlowRowReverse) { |
| 266 if (textDirection == LTR) { |
| 267 if (writingMode == TopToBottomWritingMode) |
| 268 size.expand(adjustmentWidth, 0); |
| 269 else |
| 270 size.expand(0, adjustmentHeight); |
| 271 } |
| 272 if (writingMode == RightToLeftWritingMode) |
| 273 size.expand(adjustmentWidth, 0); |
| 274 } else if (flexDirection == FlowColumn) { |
| 275 if (writingMode == RightToLeftWritingMode) |
| 276 size.expand(adjustmentWidth, 0); |
| 277 } else { |
| 278 if (writingMode == TopToBottomWritingMode) |
| 279 size.expand(0, adjustmentHeight); |
| 280 else if (writingMode == LeftToRightWritingMode) |
| 281 size.expand(adjustmentWidth, 0); |
| 282 } |
| 283 return size; |
| 284 } |
| 285 |
| 286 bool LayoutFlexibleBox::hasTopOverflow() const |
| 287 { |
| 288 EFlexDirection flexDirection = style()->flexDirection(); |
| 289 if (isHorizontalWritingMode()) |
| 290 return flexDirection == FlowColumnReverse; |
| 291 return flexDirection == (style()->isLeftToRightDirection() ? FlowRowReverse
: FlowRow); |
| 292 } |
| 293 |
| 294 bool LayoutFlexibleBox::hasLeftOverflow() const |
| 295 { |
| 296 EFlexDirection flexDirection = style()->flexDirection(); |
| 297 if (isHorizontalWritingMode()) |
| 298 return flexDirection == (style()->isLeftToRightDirection() ? FlowRowReve
rse : FlowRow); |
| 299 return flexDirection == FlowColumnReverse; |
| 300 } |
| 301 |
| 244 void LayoutFlexibleBox::removeChild(LayoutObject* child) | 302 void LayoutFlexibleBox::removeChild(LayoutObject* child) |
| 245 { | 303 { |
| 246 LayoutBlock::removeChild(child); | 304 LayoutBlock::removeChild(child); |
| 247 m_intrinsicSizeAlongMainAxis.remove(child); | 305 m_intrinsicSizeAlongMainAxis.remove(child); |
| 248 } | 306 } |
| 249 | 307 |
| 250 void LayoutFlexibleBox::styleDidChange(StyleDifference diff, const ComputedStyle
* oldStyle) | 308 void LayoutFlexibleBox::styleDidChange(StyleDifference diff, const ComputedStyle
* oldStyle) |
| 251 { | 309 { |
| 252 LayoutBlock::styleDidChange(diff, oldStyle); | 310 LayoutBlock::styleDidChange(diff, oldStyle); |
| 253 | 311 |
| (...skipping 1271 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1525 { | 1583 { |
| 1526 ASSERT(childSizes.size() == children.size()); | 1584 ASSERT(childSizes.size() == children.size()); |
| 1527 | 1585 |
| 1528 ContentPosition position = styleRef().resolvedJustifyContentPosition(normalV
alueBehavior()); | 1586 ContentPosition position = styleRef().resolvedJustifyContentPosition(normalV
alueBehavior()); |
| 1529 ContentDistributionType distribution = styleRef().resolvedJustifyContentDist
ribution(normalValueBehavior()); | 1587 ContentDistributionType distribution = styleRef().resolvedJustifyContentDist
ribution(normalValueBehavior()); |
| 1530 | 1588 |
| 1531 size_t numberOfChildrenForJustifyContent = numberOfInFlowPositionedChildren(
children); | 1589 size_t numberOfChildrenForJustifyContent = numberOfInFlowPositionedChildren(
children); |
| 1532 LayoutUnit autoMarginOffset = autoMarginOffsetInMainAxis(children, available
FreeSpace); | 1590 LayoutUnit autoMarginOffset = autoMarginOffsetInMainAxis(children, available
FreeSpace); |
| 1533 LayoutUnit mainAxisOffset = flowAwareBorderStart() + flowAwarePaddingStart()
; | 1591 LayoutUnit mainAxisOffset = flowAwareBorderStart() + flowAwarePaddingStart()
; |
| 1534 mainAxisOffset += initialJustifyContentOffset(availableFreeSpace, position,
distribution, numberOfChildrenForJustifyContent); | 1592 mainAxisOffset += initialJustifyContentOffset(availableFreeSpace, position,
distribution, numberOfChildrenForJustifyContent); |
| 1535 if (style()->flexDirection() == FlowRowReverse) | 1593 if (style()->flexDirection() == FlowRowReverse && shouldPlaceBlockDirectionS
crollbarOnLogicalLeft()) |
| 1536 mainAxisOffset += isHorizontalFlow() ? verticalScrollbarWidth() : horizo
ntalScrollbarHeight(); | 1594 mainAxisOffset += isHorizontalFlow() ? verticalScrollbarWidth() : horizo
ntalScrollbarHeight(); |
| 1537 | 1595 |
| 1538 LayoutUnit totalMainExtent = mainAxisExtent(); | 1596 LayoutUnit totalMainExtent = mainAxisExtent(); |
| 1597 if (!shouldPlaceBlockDirectionScrollbarOnLogicalLeft()) |
| 1598 totalMainExtent -= isHorizontalFlow() ? verticalScrollbarWidth() : horiz
ontalScrollbarHeight(); |
| 1539 LayoutUnit maxAscent, maxDescent; // Used when align-items: baseline. | 1599 LayoutUnit maxAscent, maxDescent; // Used when align-items: baseline. |
| 1540 LayoutUnit maxChildCrossAxisExtent; | 1600 LayoutUnit maxChildCrossAxisExtent; |
| 1541 size_t seenInFlowPositionedChildren = 0; | 1601 size_t seenInFlowPositionedChildren = 0; |
| 1542 bool shouldFlipMainAxis = !isColumnFlow() && !isLeftToRightFlow(); | 1602 bool shouldFlipMainAxis = !isColumnFlow() && !isLeftToRightFlow(); |
| 1543 for (size_t i = 0; i < children.size(); ++i) { | 1603 for (size_t i = 0; i < children.size(); ++i) { |
| 1544 LayoutBox* child = children[i]; | 1604 LayoutBox* child = children[i]; |
| 1545 | 1605 |
| 1546 if (child->isOutOfFlowPositioned()) { | 1606 if (child->isOutOfFlowPositioned()) { |
| 1547 prepareChildForPositionedLayout(*child); | 1607 prepareChildForPositionedLayout(*child); |
| 1548 continue; | 1608 continue; |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1592 setLogicalHeight(std::max(logicalHeight(), crossAxisOffset + flowAwa
reBorderAfter() + flowAwarePaddingAfter() + childCrossAxisMarginBoxExtent + cros
sAxisScrollbarExtent())); | 1652 setLogicalHeight(std::max(logicalHeight(), crossAxisOffset + flowAwa
reBorderAfter() + flowAwarePaddingAfter() + childCrossAxisMarginBoxExtent + cros
sAxisScrollbarExtent())); |
| 1593 maxChildCrossAxisExtent = std::max(maxChildCrossAxisExtent, childCrossAx
isMarginBoxExtent); | 1653 maxChildCrossAxisExtent = std::max(maxChildCrossAxisExtent, childCrossAx
isMarginBoxExtent); |
| 1594 | 1654 |
| 1595 mainAxisOffset += flowAwareMarginStartForChild(*child); | 1655 mainAxisOffset += flowAwareMarginStartForChild(*child); |
| 1596 | 1656 |
| 1597 LayoutUnit childMainExtent = mainAxisExtentForChild(*child); | 1657 LayoutUnit childMainExtent = mainAxisExtentForChild(*child); |
| 1598 // In an RTL column situation, this will apply the margin-right/margin-e
nd on the left. | 1658 // In an RTL column situation, this will apply the margin-right/margin-e
nd on the left. |
| 1599 // This will be fixed later in flipForRightToLeftColumn. | 1659 // This will be fixed later in flipForRightToLeftColumn. |
| 1600 LayoutPoint childLocation(shouldFlipMainAxis ? totalMainExtent - mainAxi
sOffset - childMainExtent : mainAxisOffset, | 1660 LayoutPoint childLocation(shouldFlipMainAxis ? totalMainExtent - mainAxi
sOffset - childMainExtent : mainAxisOffset, |
| 1601 crossAxisOffset + flowAwareMarginBeforeForChild(*child)); | 1661 crossAxisOffset + flowAwareMarginBeforeForChild(*child)); |
| 1602 | |
| 1603 setFlowAwareLocationForChild(*child, childLocation); | 1662 setFlowAwareLocationForChild(*child, childLocation); |
| 1604 mainAxisOffset += childMainExtent + flowAwareMarginEndForChild(*child); | 1663 mainAxisOffset += childMainExtent + flowAwareMarginEndForChild(*child); |
| 1605 | 1664 |
| 1606 ++seenInFlowPositionedChildren; | 1665 ++seenInFlowPositionedChildren; |
| 1607 if (seenInFlowPositionedChildren < numberOfChildrenForJustifyContent) | 1666 if (seenInFlowPositionedChildren < numberOfChildrenForJustifyContent) |
| 1608 mainAxisOffset += justifyContentSpaceBetweenChildren(availableFreeSp
ace, distribution, numberOfChildrenForJustifyContent); | 1667 mainAxisOffset += justifyContentSpaceBetweenChildren(availableFreeSp
ace, distribution, numberOfChildrenForJustifyContent); |
| 1609 } | 1668 } |
| 1610 | 1669 |
| 1611 if (isColumnFlow()) | 1670 if (isColumnFlow()) |
| 1612 setLogicalHeight(std::max(logicalHeight(), mainAxisOffset + flowAwareBor
derEnd() + flowAwarePaddingEnd() + scrollbarLogicalHeight())); | 1671 setLogicalHeight(std::max(logicalHeight(), mainAxisOffset + flowAwareBor
derEnd() + flowAwarePaddingEnd() + scrollbarLogicalHeight())); |
| (...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1820 return; | 1879 return; |
| 1821 | 1880 |
| 1822 LayoutUnit crossExtent = crossAxisExtent(); | 1881 LayoutUnit crossExtent = crossAxisExtent(); |
| 1823 for (LayoutBox* child = m_orderIterator.first(); child; child = m_orderItera
tor.next()) { | 1882 for (LayoutBox* child = m_orderIterator.first(); child; child = m_orderItera
tor.next()) { |
| 1824 if (child->isOutOfFlowPositioned()) | 1883 if (child->isOutOfFlowPositioned()) |
| 1825 continue; | 1884 continue; |
| 1826 LayoutPoint location = flowAwareLocationForChild(*child); | 1885 LayoutPoint location = flowAwareLocationForChild(*child); |
| 1827 // For vertical flows, setFlowAwareLocationForChild will transpose x and
y, | 1886 // For vertical flows, setFlowAwareLocationForChild will transpose x and
y, |
| 1828 // so using the y axis for a column cross axis extent is correct. | 1887 // so using the y axis for a column cross axis extent is correct. |
| 1829 location.setY(crossExtent - crossAxisExtentForChild(*child) - location.y
()); | 1888 location.setY(crossExtent - crossAxisExtentForChild(*child) - location.y
()); |
| 1889 if (!isHorizontalWritingMode()) |
| 1890 location.move(LayoutSize(0, -horizontalScrollbarHeight())); |
| 1830 setFlowAwareLocationForChild(*child, location); | 1891 setFlowAwareLocationForChild(*child, location); |
| 1831 } | 1892 } |
| 1832 } | 1893 } |
| 1833 | 1894 |
| 1834 void LayoutFlexibleBox::flipForWrapReverse(const Vector<LineContext>& lineContex
ts, LayoutUnit crossAxisStartEdge) | 1895 void LayoutFlexibleBox::flipForWrapReverse(const Vector<LineContext>& lineContex
ts, LayoutUnit crossAxisStartEdge) |
| 1835 { | 1896 { |
| 1836 LayoutUnit contentExtent = crossAxisContentExtent(); | 1897 LayoutUnit contentExtent = crossAxisContentExtent(); |
| 1837 LayoutBox* child = m_orderIterator.first(); | 1898 LayoutBox* child = m_orderIterator.first(); |
| 1838 for (size_t lineNumber = 0; lineNumber < lineContexts.size(); ++lineNumber)
{ | 1899 for (size_t lineNumber = 0; lineNumber < lineContexts.size(); ++lineNumber)
{ |
| 1839 for (size_t childNumber = 0; childNumber < lineContexts[lineNumber].numb
erOfChildren; ++childNumber, child = m_orderIterator.next()) { | 1900 for (size_t childNumber = 0; childNumber < lineContexts[lineNumber].numb
erOfChildren; ++childNumber, child = m_orderIterator.next()) { |
| 1840 ASSERT(child); | 1901 ASSERT(child); |
| 1841 LayoutUnit lineCrossAxisExtent = lineContexts[lineNumber].crossAxisE
xtent; | 1902 LayoutUnit lineCrossAxisExtent = lineContexts[lineNumber].crossAxisE
xtent; |
| 1842 LayoutUnit originalOffset = lineContexts[lineNumber].crossAxisOffset
- crossAxisStartEdge; | 1903 LayoutUnit originalOffset = lineContexts[lineNumber].crossAxisOffset
- crossAxisStartEdge; |
| 1843 LayoutUnit newOffset = contentExtent - originalOffset - lineCrossAxi
sExtent; | 1904 LayoutUnit newOffset = contentExtent - originalOffset - lineCrossAxi
sExtent; |
| 1844 adjustAlignmentForChild(*child, newOffset - originalOffset); | 1905 adjustAlignmentForChild(*child, newOffset - originalOffset); |
| 1845 } | 1906 } |
| 1846 } | 1907 } |
| 1847 } | 1908 } |
| 1848 | 1909 |
| 1849 } // namespace blink | 1910 } // namespace blink |
| OLD | NEW |