OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 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 2037 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2048 grandchildBox->style()->hasMarginBeforeQuirk()); | 2048 grandchildBox->style()->hasMarginBeforeQuirk()); |
2049 grandchildBlock->setHasMarginAfterQuirk( | 2049 grandchildBlock->setHasMarginAfterQuirk( |
2050 grandchildBox->style()->hasMarginAfterQuirk()); | 2050 grandchildBox->style()->hasMarginAfterQuirk()); |
2051 } | 2051 } |
2052 } | 2052 } |
2053 | 2053 |
2054 // If we have a 'clear' value but also have a margin we may not actually | 2054 // If we have a 'clear' value but also have a margin we may not actually |
2055 // require clearance to move past any floats. If that's the case we want to be | 2055 // require clearance to move past any floats. If that's the case we want to be |
2056 // sure we estimate the correct position including margins after any floats | 2056 // sure we estimate the correct position including margins after any floats |
2057 // rather than use 'clearance' later which could give us the wrong position. | 2057 // rather than use 'clearance' later which could give us the wrong position. |
2058 if (grandchildBox->style()->clear() != ClearNone && | 2058 if (grandchildBox->style()->clear() != EClear::kNone && |
2059 childBlockFlow->marginBeforeForChild(*grandchildBox) == 0) | 2059 childBlockFlow->marginBeforeForChild(*grandchildBox) == 0) |
2060 return; | 2060 return; |
2061 | 2061 |
2062 // Collapse the margin of the grandchild box with our own to produce an | 2062 // Collapse the margin of the grandchild box with our own to produce an |
2063 // estimate. | 2063 // estimate. |
2064 childBlockFlow->marginBeforeEstimateForChild( | 2064 childBlockFlow->marginBeforeEstimateForChild( |
2065 *grandchildBox, positiveMarginBefore, negativeMarginBefore, | 2065 *grandchildBox, positiveMarginBefore, negativeMarginBefore, |
2066 discardMarginBefore); | 2066 discardMarginBefore); |
2067 } | 2067 } |
2068 | 2068 |
(...skipping 625 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2694 if (!containsFloats()) | 2694 if (!containsFloats()) |
2695 return LayoutUnit(); | 2695 return LayoutUnit(); |
2696 | 2696 |
2697 // At least one float is present. We need to perform the clearance | 2697 // At least one float is present. We need to perform the clearance |
2698 // computation. | 2698 // computation. |
2699 EClear clear = child->style()->clear(); | 2699 EClear clear = child->style()->clear(); |
2700 LayoutUnit logicalBottom = lowestFloatLogicalBottom(clear); | 2700 LayoutUnit logicalBottom = lowestFloatLogicalBottom(clear); |
2701 | 2701 |
2702 // We also clear floats if we are too big to sit on the same line as a float | 2702 // We also clear floats if we are too big to sit on the same line as a float |
2703 // (and wish to avoid floats by default). | 2703 // (and wish to avoid floats by default). |
2704 LayoutUnit result = clear != ClearNone | 2704 LayoutUnit result = clear != EClear::kNone |
2705 ? (logicalBottom - logicalTop).clampNegativeToZero() | 2705 ? (logicalBottom - logicalTop).clampNegativeToZero() |
2706 : LayoutUnit(); | 2706 : LayoutUnit(); |
2707 if (!result && child->avoidsFloats()) { | 2707 if (!result && child->avoidsFloats()) { |
2708 LayoutUnit newLogicalTop = logicalTop; | 2708 LayoutUnit newLogicalTop = logicalTop; |
2709 LayoutRect borderBox = child->borderBoxRect(); | 2709 LayoutRect borderBox = child->borderBoxRect(); |
2710 LayoutUnit childLogicalWidthAtOldLogicalTopOffset = | 2710 LayoutUnit childLogicalWidthAtOldLogicalTopOffset = |
2711 isHorizontalWritingMode() ? borderBox.width() : borderBox.height(); | 2711 isHorizontalWritingMode() ? borderBox.width() : borderBox.height(); |
2712 while (true) { | 2712 while (true) { |
2713 LayoutUnit availableLogicalWidthAtNewLogicalTopOffset = | 2713 LayoutUnit availableLogicalWidthAtNewLogicalTopOffset = |
2714 availableLogicalWidthForLine(newLogicalTop, DoNotIndentText, | 2714 availableLogicalWidthForLine(newLogicalTop, DoNotIndentText, |
(...skipping 1191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3906 if (floatingObject.isDescendant()) | 3906 if (floatingObject.isDescendant()) |
3907 child->addOverflowFromChild( | 3907 child->addOverflowFromChild( |
3908 floatingObject.layoutObject(), | 3908 floatingObject.layoutObject(), |
3909 LayoutSize(xPositionForFloatIncludingMargin(floatingObject), | 3909 LayoutSize(xPositionForFloatIncludingMargin(floatingObject), |
3910 yPositionForFloatIncludingMargin(floatingObject))); | 3910 yPositionForFloatIncludingMargin(floatingObject))); |
3911 } | 3911 } |
3912 } | 3912 } |
3913 } | 3913 } |
3914 | 3914 |
3915 LayoutUnit LayoutBlockFlow::lowestFloatLogicalBottom(EClear clear) const { | 3915 LayoutUnit LayoutBlockFlow::lowestFloatLogicalBottom(EClear clear) const { |
3916 if (clear == ClearNone || !m_floatingObjects) | 3916 if (clear == EClear::kNone || !m_floatingObjects) |
3917 return LayoutUnit(); | 3917 return LayoutUnit(); |
3918 | 3918 |
3919 FloatingObject::Type floatType = | 3919 FloatingObject::Type floatType = clear == EClear::kLeft |
3920 clear == ClearLeft ? FloatingObject::FloatLeft | 3920 ? FloatingObject::FloatLeft |
3921 : clear == ClearRight ? FloatingObject::FloatRight | 3921 : clear == EClear::kRight |
3922 : FloatingObject::FloatLeftRight; | 3922 ? FloatingObject::FloatRight |
| 3923 : FloatingObject::FloatLeftRight; |
3923 return m_floatingObjects->lowestFloatLogicalBottom(floatType); | 3924 return m_floatingObjects->lowestFloatLogicalBottom(floatType); |
3924 } | 3925 } |
3925 | 3926 |
3926 LayoutUnit LayoutBlockFlow::nextFloatLogicalBottomBelow( | 3927 LayoutUnit LayoutBlockFlow::nextFloatLogicalBottomBelow( |
3927 LayoutUnit logicalHeight) const { | 3928 LayoutUnit logicalHeight) const { |
3928 if (!m_floatingObjects) | 3929 if (!m_floatingObjects) |
3929 return logicalHeight; | 3930 return logicalHeight; |
3930 return m_floatingObjects->findNextFloatLogicalBottomBelow(logicalHeight); | 3931 return m_floatingObjects->findNextFloatLogicalBottomBelow(logicalHeight); |
3931 } | 3932 } |
3932 | 3933 |
(...skipping 667 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4600 return LayoutBlock::invalidatePaintIfNeeded(paintInvalidationState); | 4601 return LayoutBlock::invalidatePaintIfNeeded(paintInvalidationState); |
4601 } | 4602 } |
4602 | 4603 |
4603 void LayoutBlockFlow::invalidateDisplayItemClients( | 4604 void LayoutBlockFlow::invalidateDisplayItemClients( |
4604 PaintInvalidationReason invalidationReason) const { | 4605 PaintInvalidationReason invalidationReason) const { |
4605 BlockFlowPaintInvalidator(*this).invalidateDisplayItemClients( | 4606 BlockFlowPaintInvalidator(*this).invalidateDisplayItemClients( |
4606 invalidationReason); | 4607 invalidationReason); |
4607 } | 4608 } |
4608 | 4609 |
4609 } // namespace blink | 4610 } // namespace blink |
OLD | NEW |