Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(71)

Side by Side Diff: third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp

Issue 2762483002: Need to notify the multicol machinery when floats have been laid out. (Closed)
Patch Set: Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 3719 matching lines...) Expand 10 before | Expand all | Expand 10 after
3730 3730
3731 SubtreeLayoutScope layoutScope(child); 3731 SubtreeLayoutScope layoutScope(child);
3732 3732
3733 // A new position may mean that we need to insert, move or remove breaks 3733 // A new position may mean that we need to insert, move or remove breaks
3734 // inside the float. We may also need to lay out if we just ceased to be 3734 // inside the float. We may also need to lay out if we just ceased to be
3735 // fragmented, in order to remove pagination struts inside the child. 3735 // fragmented, in order to remove pagination struts inside the child.
3736 markChildForPaginationRelayoutIfNeeded(child, layoutScope); 3736 markChildForPaginationRelayoutIfNeeded(child, layoutScope);
3737 child.layoutIfNeeded(); 3737 child.layoutIfNeeded();
3738 3738
3739 if (isPaginated) { 3739 if (isPaginated) {
3740 paginatedContentWasLaidOut(child.logicalBottom());
3741
3740 // We may have to insert a break before the float. 3742 // We may have to insert a break before the float.
3741 LayoutUnit newLogicalTopMarginEdge = 3743 LayoutUnit newLogicalTopMarginEdge =
3742 adjustFloatLogicalTopForPagination(child, logicalTopMarginEdge); 3744 adjustFloatLogicalTopForPagination(child, logicalTopMarginEdge);
3743 if (logicalTopMarginEdge != newLogicalTopMarginEdge) { 3745 if (logicalTopMarginEdge != newLogicalTopMarginEdge) {
3744 // We had already found a location for the float, but a soft 3746 // We had already found a location for the float, but a soft
3745 // fragmentainer break then made us push it further down. This may affect 3747 // fragmentainer break then made us push it further down. This may affect
3746 // the inline position of the float (since we may no longer be beside the 3748 // the inline position of the float (since we may no longer be beside the
3747 // same floats anymore). Block position will remain unaffected, though. 3749 // same floats anymore). Block position will remain unaffected, though.
3748 floatLogicalLocation = computeLogicalLocationForFloat( 3750 floatLogicalLocation = computeLogicalLocationForFloat(
3749 floatingObject, newLogicalTopMarginEdge); 3751 floatingObject, newLogicalTopMarginEdge);
3750 DCHECK_EQ(floatLogicalLocation.y(), newLogicalTopMarginEdge); 3752 DCHECK_EQ(floatLogicalLocation.y(), newLogicalTopMarginEdge);
3751 logicalTopMarginEdge = newLogicalTopMarginEdge; 3753 logicalTopMarginEdge = newLogicalTopMarginEdge;
3752 3754
3753 setLogicalTopForChild(child, logicalTopMarginEdge + marginBefore); 3755 setLogicalTopForChild(child, logicalTopMarginEdge + marginBefore);
3754 3756
3755 // Pushing the child to the next fragmentainer most likely means that we 3757 // Pushing the child to the next fragmentainer most likely means that we
3756 // need to recalculate pagination struts inside it. 3758 // need to recalculate pagination struts inside it.
3757 if (child.isLayoutBlock()) 3759 if (child.isLayoutBlock())
3758 child.setChildNeedsLayout(MarkOnlyThis); 3760 child.setChildNeedsLayout(MarkOnlyThis);
3759 child.layoutIfNeeded(); 3761 child.layoutIfNeeded();
3762 paginatedContentWasLaidOut(child.logicalBottom());
3760 } 3763 }
3761 } 3764 }
3762 3765
3763 LayoutUnit childLogicalLeftMargin = 3766 LayoutUnit childLogicalLeftMargin =
3764 style()->isLeftToRightDirection() ? marginStart : marginEnd; 3767 style()->isLeftToRightDirection() ? marginStart : marginEnd;
3765 setLogicalLeftForChild(child, 3768 setLogicalLeftForChild(child,
3766 floatLogicalLocation.x() + childLogicalLeftMargin); 3769 floatLogicalLocation.x() + childLogicalLeftMargin);
3767 setLogicalLeftForFloat(floatingObject, floatLogicalLocation.x()); 3770 setLogicalLeftForFloat(floatingObject, floatLogicalLocation.x());
3768 setLogicalTopForFloat(floatingObject, logicalTopMarginEdge); 3771 setLogicalTopForFloat(floatingObject, logicalTopMarginEdge);
3769 setLogicalHeightForFloat(floatingObject, logicalHeightForChild(child) + 3772 setLogicalHeightForFloat(floatingObject, logicalHeightForChild(child) +
(...skipping 835 matching lines...) Expand 10 before | Expand all | Expand 10 after
4605 return LayoutBlock::invalidatePaintIfNeeded(paintInvalidationState); 4608 return LayoutBlock::invalidatePaintIfNeeded(paintInvalidationState);
4606 } 4609 }
4607 4610
4608 void LayoutBlockFlow::invalidateDisplayItemClients( 4611 void LayoutBlockFlow::invalidateDisplayItemClients(
4609 PaintInvalidationReason invalidationReason) const { 4612 PaintInvalidationReason invalidationReason) const {
4610 BlockFlowPaintInvalidator(*this).invalidateDisplayItemClients( 4613 BlockFlowPaintInvalidator(*this).invalidateDisplayItemClients(
4611 invalidationReason); 4614 invalidationReason);
4612 } 4615 }
4613 4616
4614 } // namespace blink 4617 } // namespace blink
OLDNEW
« no previous file with comments | « third_party/WebKit/LayoutTests/fast/multicol/float-margin-at-row-boundary-fixed-multicol-height-expected.html ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698