| 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 3644 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3655 } | 3655 } |
| 3656 | 3656 |
| 3657 LayoutUnit LayoutBlockFlow::positionAndLayoutFloat( | 3657 LayoutUnit LayoutBlockFlow::positionAndLayoutFloat( |
| 3658 FloatingObject& floatingObject, | 3658 FloatingObject& floatingObject, |
| 3659 LayoutUnit logicalTopMarginEdge) { | 3659 LayoutUnit logicalTopMarginEdge) { |
| 3660 LayoutBox& child = *floatingObject.layoutObject(); | 3660 LayoutBox& child = *floatingObject.layoutObject(); |
| 3661 | 3661 |
| 3662 // FIXME Investigate if this can be removed. crbug.com/370006 | 3662 // FIXME Investigate if this can be removed. crbug.com/370006 |
| 3663 child.setMayNeedPaintInvalidation(); | 3663 child.setMayNeedPaintInvalidation(); |
| 3664 | 3664 |
| 3665 LayoutUnit childLogicalLeftMargin = style()->isLeftToRightDirection() | |
| 3666 ? marginStartForChild(child) | |
| 3667 : marginEndForChild(child); | |
| 3668 logicalTopMarginEdge = std::max( | 3665 logicalTopMarginEdge = std::max( |
| 3669 logicalTopMarginEdge, lowestFloatLogicalBottom(child.style()->clear())); | 3666 logicalTopMarginEdge, lowestFloatLogicalBottom(child.style()->clear())); |
| 3670 | 3667 |
| 3671 bool isPaginated = view()->layoutState()->isPaginated(); | 3668 bool isPaginated = view()->layoutState()->isPaginated(); |
| 3672 if (isPaginated && !childrenInline()) { | 3669 if (isPaginated && !childrenInline()) { |
| 3673 // Forced breaks are inserted at class A break points. Floats may be | 3670 // Forced breaks are inserted at class A break points. Floats may be |
| 3674 // affected by a break-after value on the previous in-flow sibling. | 3671 // affected by a break-after value on the previous in-flow sibling. |
| 3675 if (LayoutBox* previousInFlowBox = child.previousInFlowSiblingBox()) { | 3672 if (LayoutBox* previousInFlowBox = child.previousInFlowSiblingBox()) { |
| 3676 logicalTopMarginEdge = applyForcedBreak(logicalTopMarginEdge, | 3673 logicalTopMarginEdge = applyForcedBreak(logicalTopMarginEdge, |
| 3677 previousInFlowBox->breakAfter()); | 3674 previousInFlowBox->breakAfter()); |
| 3678 } | 3675 } |
| 3679 } | 3676 } |
| 3680 | 3677 |
| 3678 LayoutUnit marginBefore = marginBeforeForChild(child); |
| 3679 LayoutUnit marginAfter = marginAfterForChild(child); |
| 3681 LayoutPoint floatLogicalLocation = | 3680 LayoutPoint floatLogicalLocation = |
| 3682 computeLogicalLocationForFloat(floatingObject, logicalTopMarginEdge); | 3681 computeLogicalLocationForFloat(floatingObject, logicalTopMarginEdge); |
| 3683 logicalTopMarginEdge = floatLogicalLocation.y(); | 3682 logicalTopMarginEdge = floatLogicalLocation.y(); |
| 3684 | 3683 |
| 3685 setLogicalLeftForFloat(floatingObject, floatLogicalLocation.x()); | 3684 setLogicalTopForChild(child, logicalTopMarginEdge + marginBefore); |
| 3686 | |
| 3687 setLogicalLeftForChild(child, | |
| 3688 floatLogicalLocation.x() + childLogicalLeftMargin); | |
| 3689 setLogicalTopForChild(child, | |
| 3690 logicalTopMarginEdge + marginBeforeForChild(child)); | |
| 3691 | 3685 |
| 3692 SubtreeLayoutScope layoutScope(child); | 3686 SubtreeLayoutScope layoutScope(child); |
| 3693 if (!child.needsLayout()) | 3687 if (!child.needsLayout()) |
| 3694 markChildForPaginationRelayoutIfNeeded(child, layoutScope); | 3688 markChildForPaginationRelayoutIfNeeded(child, layoutScope); |
| 3695 | 3689 |
| 3696 child.layoutIfNeeded(); | 3690 child.layoutIfNeeded(); |
| 3697 | 3691 |
| 3698 if (isPaginated) { | 3692 if (isPaginated) { |
| 3699 LayoutUnit newLogicalTopMarginEdge = | 3693 LayoutUnit newLogicalTopMarginEdge = |
| 3700 adjustFloatLogicalTopForPagination(child, logicalTopMarginEdge); | 3694 adjustFloatLogicalTopForPagination(child, logicalTopMarginEdge); |
| 3701 if (logicalTopMarginEdge != newLogicalTopMarginEdge) { | 3695 if (logicalTopMarginEdge != newLogicalTopMarginEdge) { |
| 3702 floatLogicalLocation = computeLogicalLocationForFloat( | 3696 floatLogicalLocation = computeLogicalLocationForFloat( |
| 3703 floatingObject, newLogicalTopMarginEdge); | 3697 floatingObject, newLogicalTopMarginEdge); |
| 3704 logicalTopMarginEdge = floatLogicalLocation.y(); | 3698 logicalTopMarginEdge = floatLogicalLocation.y(); |
| 3705 setLogicalLeftForFloat(floatingObject, floatLogicalLocation.x()); | 3699 setLogicalTopForChild(child, logicalTopMarginEdge + marginBefore); |
| 3706 | |
| 3707 setLogicalLeftForChild(child, | |
| 3708 floatLogicalLocation.x() + childLogicalLeftMargin); | |
| 3709 setLogicalTopForChild(child, | |
| 3710 logicalTopMarginEdge + marginBeforeForChild(child)); | |
| 3711 | 3700 |
| 3712 if (child.isLayoutBlock()) | 3701 if (child.isLayoutBlock()) |
| 3713 child.setChildNeedsLayout(MarkOnlyThis); | 3702 child.setChildNeedsLayout(MarkOnlyThis); |
| 3714 child.layoutIfNeeded(); | 3703 child.layoutIfNeeded(); |
| 3715 } | 3704 } |
| 3716 } | 3705 } |
| 3717 | 3706 |
| 3707 LayoutUnit childLogicalLeftMargin = style()->isLeftToRightDirection() |
| 3708 ? marginStartForChild(child) |
| 3709 : marginEndForChild(child); |
| 3710 setLogicalLeftForChild(child, |
| 3711 floatLogicalLocation.x() + childLogicalLeftMargin); |
| 3712 setLogicalLeftForFloat(floatingObject, floatLogicalLocation.x()); |
| 3718 setLogicalTopForFloat(floatingObject, logicalTopMarginEdge); | 3713 setLogicalTopForFloat(floatingObject, logicalTopMarginEdge); |
| 3719 | |
| 3720 setLogicalHeightForFloat(floatingObject, logicalHeightForChild(child) + | 3714 setLogicalHeightForFloat(floatingObject, logicalHeightForChild(child) + |
| 3721 marginBeforeForChild(child) + | 3715 marginBefore + marginAfter); |
| 3722 marginAfterForChild(child)); | |
| 3723 | 3716 |
| 3724 if (ShapeOutsideInfo* shapeOutside = child.shapeOutsideInfo()) | 3717 if (ShapeOutsideInfo* shapeOutside = child.shapeOutsideInfo()) |
| 3725 shapeOutside->setReferenceBoxLogicalSize(logicalSizeForChild(child)); | 3718 shapeOutside->setReferenceBoxLogicalSize(logicalSizeForChild(child)); |
| 3726 | 3719 |
| 3727 return logicalTopMarginEdge; | 3720 return logicalTopMarginEdge; |
| 3728 } | 3721 } |
| 3729 | 3722 |
| 3730 bool LayoutBlockFlow::hasOverhangingFloat(LayoutBox* layoutBox) { | 3723 bool LayoutBlockFlow::hasOverhangingFloat(LayoutBox* layoutBox) { |
| 3731 if (!m_floatingObjects || !parent()) | 3724 if (!m_floatingObjects || !parent()) |
| 3732 return false; | 3725 return false; |
| (...skipping 812 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4545 return LayoutBlock::invalidatePaintIfNeeded(paintInvalidationState); | 4538 return LayoutBlock::invalidatePaintIfNeeded(paintInvalidationState); |
| 4546 } | 4539 } |
| 4547 | 4540 |
| 4548 void LayoutBlockFlow::invalidateDisplayItemClients( | 4541 void LayoutBlockFlow::invalidateDisplayItemClients( |
| 4549 PaintInvalidationReason invalidationReason) const { | 4542 PaintInvalidationReason invalidationReason) const { |
| 4550 BlockFlowPaintInvalidator(*this).invalidateDisplayItemClients( | 4543 BlockFlowPaintInvalidator(*this).invalidateDisplayItemClients( |
| 4551 invalidationReason); | 4544 invalidationReason); |
| 4552 } | 4545 } |
| 4553 | 4546 |
| 4554 } // namespace blink | 4547 } // namespace blink |
| OLD | NEW |