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

Unified Diff: third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp

Issue 1460203003: Add marginBeforeIfFloating() to LayoutBlockFlow. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: code review Created 5 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutBlockFlow.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp
diff --git a/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp b/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp
index bd4bf8afa84c8d33c8ee2b4608c1043f953e0a43..1286c81877554c9f6711676d849a689cf2ad6844 100644
--- a/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp
+++ b/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp
@@ -716,9 +716,7 @@ LayoutUnit LayoutBlockFlow::adjustBlockChildForPagination(LayoutUnit logicalTop,
// FIXME: Should really check if we're exceeding the page height before propagating the strut, but we don't
// have all the information to do so (the strut only has the remaining amount to push). Gecko gets this wrong too
// and pushes to the next page anyway, so not too concerned about it.
- paginationStrut += logicalTop;
- if (isFloating())
- paginationStrut += marginBefore(); // Floats' margins do not collapse with page or column boundaries.
+ paginationStrut += logicalTop + marginBeforeIfFloating();
setPaginationStrutPropagatedFromChild(paginationStrut);
if (childBlockFlow)
childBlockFlow->setPaginationStrutPropagatedFromChild(LayoutUnit());
@@ -762,14 +760,6 @@ static bool shouldSetStrutOnBlock(const LayoutBlockFlow& block, const RootInline
return wantsStrutOnBlock && block.allowsPaginationStrut();
}
-static LayoutUnit calculateStrutForPropagation(const LayoutBlockFlow& blockFlow, LayoutUnit lineLogicalOffset)
-{
- LayoutUnit paginationStrut = std::max<LayoutUnit>(LayoutUnit(), lineLogicalOffset);
- if (blockFlow.isFloating())
- paginationStrut += blockFlow.marginBefore(); // Floats' margins do not collapse with page or column boundaries.
- return paginationStrut;
-}
-
void LayoutBlockFlow::adjustLinePositionForPagination(RootInlineBox& lineBox, LayoutUnit& delta)
{
// TODO(mstensho): Pay attention to line overflow. It should be painted in the same column as
@@ -813,7 +803,8 @@ void LayoutBlockFlow::adjustLinePositionForPagination(RootInlineBox& lineBox, La
// content-less portions (struts) at the beginning of a block before a break, if it can
// be avoided. After all, that's the reason for setting struts on blocks and not lines
// in the first place.
- setPaginationStrutPropagatedFromChild(calculateStrutForPropagation(*this, remainingLogicalHeight + logicalOffset));
+ LayoutUnit strut = remainingLogicalHeight + logicalOffset + marginBeforeIfFloating();
+ setPaginationStrutPropagatedFromChild(strut);
} else {
logicalOffset += remainingLogicalHeight;
delta += remainingLogicalHeight;
@@ -828,15 +819,15 @@ void LayoutBlockFlow::adjustLinePositionForPagination(RootInlineBox& lineBox, La
// case it's a float) margin, we may want to set a strut on the block, so that everything
// ends up in the next column or page. Setting a strut on the block is also important when
// it comes to satisfying orphan requirements.
- if (shouldSetStrutOnBlock(*this, lineBox, logicalOffset, lineIndex, remainingLogicalHeight))
- setPaginationStrutPropagatedFromChild(calculateStrutForPropagation(*this, logicalOffset));
+ if (shouldSetStrutOnBlock(*this, lineBox, logicalOffset, lineIndex, remainingLogicalHeight)) {
+ LayoutUnit strut = logicalOffset + marginBeforeIfFloating();
+ setPaginationStrutPropagatedFromChild(strut);
+ }
} else if (lineBox == firstRootBox() && allowsPaginationStrut()) {
// This is the first line in the block. The block may still start in the previous column or
// page, and if that's the case, attempt to pull it over to where this line is, so that we
// don't split the top border, padding, or (in case it's a float) margin.
- LayoutUnit totalLogicalOffset = logicalOffset;
- if (isFloating())
- totalLogicalOffset += marginBefore(); // Floats' margins do not collapse with page or column boundaries.
+ LayoutUnit totalLogicalOffset = logicalOffset + marginBeforeIfFloating();
LayoutUnit strut = remainingLogicalHeight + totalLogicalOffset - pageLogicalHeight;
if (strut > 0) {
// The block starts in a previous column or page. Set a strut on the block if there's
@@ -2932,6 +2923,7 @@ bool LayoutBlockFlow::allowsPaginationStrut() const
void LayoutBlockFlow::setPaginationStrutPropagatedFromChild(LayoutUnit strut)
{
+ strut = std::max(strut, LayoutUnit());
if (!m_rareData) {
if (!strut)
return;
« no previous file with comments | « third_party/WebKit/Source/core/layout/LayoutBlockFlow.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698