REGRESSION(r227577) Text on TV & Movies page doesn't wrap properly in iTunes
https://bugs.webkit.org/show_bug.cgi?id=188018
<rdar://problem/42517520>
Reviewed by Dean Jackson.
Source/WebCore:
Manual rollout of r227577.
Test: fast/overflow/line-clamp-with-text-shadow.html
* Sources.txt:
* WebCore.xcodeproj/project.pbxproj:
* css/CSSComputedStyleDeclaration.cpp:
(WebCore::ComputedStyleExtractor::valueForPropertyinStyle):
* css/CSSProperties.json:
* css/StyleBuilderCustom.h:
(WebCore::StyleBuilderCustom::applyValueWebkitLinesClamp): Deleted.
* css/parser/CSSParserContext.cpp:
(WebCore::CSSParserContext::CSSParserContext):
* css/parser/CSSParserContext.h:
(WebCore::CSSParserContextHash::hash):
* css/parser/CSSPropertyParser.cpp:
(WebCore::CSSPropertyParser::parseSingleValue):
(WebCore::consumeLinesClamp): Deleted.
* page/Settings.yaml:
* rendering/RenderBlockFlow.cpp:
(WebCore::RenderBlockFlow::willCreateColumns const):
(WebCore::getHeightForLineCount):
(WebCore::RenderBlockFlow::heightForLineCount):
(WebCore::RenderBlockFlow::layoutExcludedChildren):
(WebCore::RenderBlockFlow::logicalHeightForLineCount): Deleted.
(WebCore::RenderBlockFlow::logicalHeightExcludingLineCount): Deleted.
* rendering/RenderBlockFlow.h:
* rendering/RenderDeprecatedFlexibleBox.cpp:
(WebCore::RenderDeprecatedFlexibleBox::applyLineClamp):
* rendering/RenderFragmentContainer.cpp:
(WebCore::RenderFragmentContainer::pageLogicalHeightForOffset const): Deleted.
* rendering/RenderFragmentContainer.h:
* rendering/RenderFragmentedFlow.cpp:
(WebCore::RenderFragmentedFlow::validateFragments):
(WebCore::RenderFragmentedFlow::pageLogicalHeightForOffset const):
(WebCore::RenderFragmentedFlow::pageRemainingLogicalHeightForOffset const):
* rendering/RenderFragmentedFlow.h:
* rendering/RenderLinesClampFlow.cpp: Removed.
* rendering/RenderLinesClampFlow.h: Removed.
* rendering/RenderLinesClampSet.cpp: Removed.
* rendering/RenderLinesClampSet.h: Removed.
* rendering/RenderMultiColumnFlow.cpp:
(WebCore::RenderMultiColumnFlow::isColumnSpanningDescendant const): Deleted.
(WebCore::RenderMultiColumnFlow::createMultiColumnSet): Deleted.
* rendering/RenderMultiColumnFlow.h:
(WebCore::RenderMultiColumnFlow::multiColumnBlockFlow const): Deleted.
(WebCore::RenderMultiColumnFlow::hasColumnSpanner const): Deleted.
(WebCore::RenderMultiColumnFlow::findColumnSpannerPlaceholder const): Deleted.
(WebCore::RenderMultiColumnFlow::columnCount const): Deleted.
(WebCore::RenderMultiColumnFlow::columnWidth const): Deleted.
(WebCore::RenderMultiColumnFlow::columnHeightAvailable const): Deleted.
(WebCore::RenderMultiColumnFlow::setColumnHeightAvailable): Deleted.
(WebCore::RenderMultiColumnFlow::inBalancingPass const): Deleted.
(WebCore::RenderMultiColumnFlow::setInBalancingPass): Deleted.
(WebCore::RenderMultiColumnFlow::needsHeightsRecalculation const): Deleted.
(WebCore::RenderMultiColumnFlow::setNeedsHeightsRecalculation): Deleted.
(WebCore::RenderMultiColumnFlow::shouldRelayoutForPagination const): Deleted.
(WebCore::RenderMultiColumnFlow::setColumnCountAndWidth): Deleted.
(WebCore::RenderMultiColumnFlow::progressionIsInline const): Deleted.
(WebCore::RenderMultiColumnFlow::setProgressionIsInline): Deleted.
(WebCore::RenderMultiColumnFlow::progressionIsReversed const): Deleted.
(WebCore::RenderMultiColumnFlow::setProgressionIsReversed): Deleted.
(WebCore::RenderMultiColumnFlow::spannerMap): Deleted.
* rendering/RenderMultiColumnSet.cpp:
(WebCore::RenderMultiColumnSet::collectLayerFragments):
(WebCore::RenderMultiColumnSet::columnTranslationForOffset const):
* rendering/RenderMultiColumnSet.h:
(WebCore::RenderMultiColumnSet::multiColumnBlockFlow const): Deleted.
(WebCore::RenderMultiColumnSet::multiColumnFlow const): Deleted.
(WebCore::RenderMultiColumnSet::logicalTopInFragmentedFlow const): Deleted.
(WebCore::RenderMultiColumnSet::logicalBottomInFragmentedFlow const): Deleted.
(WebCore::RenderMultiColumnSet::logicalHeightInFragmentedFlow const): Deleted.
(WebCore::RenderMultiColumnSet::computedColumnCount const): Deleted.
(WebCore::RenderMultiColumnSet::computedColumnWidth const): Deleted.
(WebCore::RenderMultiColumnSet::computedColumnHeight const): Deleted.
(WebCore::RenderMultiColumnSet::columnHeightComputed const): Deleted.
(WebCore::RenderMultiColumnSet::setComputedColumnWidthAndCount): Deleted.
(WebCore::RenderMultiColumnSet::updateMinimumColumnHeight): Deleted.
(WebCore::RenderMultiColumnSet::minimumColumnHeight const): Deleted.
(WebCore::RenderMultiColumnSet::forcedBreaksCount const): Deleted.
(WebCore::RenderMultiColumnSet::hasBeenFlowed const): Deleted.
(WebCore::RenderMultiColumnSet::skipLayerFragmentCollectionForColumn const): Deleted.
(WebCore::RenderMultiColumnSet::customBlockProgressionAdjustmentForColumn const): Deleted.
(WebCore::RenderMultiColumnSet::ContentRun::ContentRun): Deleted.
(WebCore::RenderMultiColumnSet::ContentRun::assumedImplicitBreaks const): Deleted.
(WebCore::RenderMultiColumnSet::ContentRun::assumeAnotherImplicitBreak): Deleted.
(WebCore::RenderMultiColumnSet::ContentRun::breakOffset const): Deleted.
(WebCore::RenderMultiColumnSet::ContentRun::columnLogicalHeight const): Deleted.
* rendering/RenderObject.h:
(WebCore::RenderObject::isRenderLinesClampFlow const): Deleted.
(WebCore::RenderObject::isRenderLinesClampSet const): Deleted.
* rendering/style/LineClampValue.h:
(WebCore::LinesClampValue::LinesClampValue): Deleted.
(WebCore::LinesClampValue::isNone const): Deleted.
(WebCore::LinesClampValue::operator== const): Deleted.
(WebCore::LinesClampValue::operator!= const): Deleted.
(WebCore::LinesClampValue::start const): Deleted.
(WebCore::LinesClampValue::end const): Deleted.
(WebCore::LinesClampValue::center const): Deleted.
* rendering/style/RenderStyle.h:
(WebCore::RenderStyle::lineClamp const):
(WebCore::RenderStyle::setLineClamp):
(WebCore::RenderStyle::initialLineClamp):
(WebCore::RenderStyle::hasInlineColumnAxis const):
(WebCore::RenderStyle::linesClamp const): Deleted.
(WebCore::RenderStyle::hasLinesClamp const): Deleted.
(WebCore::RenderStyle::setLinesClamp): Deleted.
(WebCore::RenderStyle::initialLinesClamp): Deleted.
* rendering/style/StyleRareNonInheritedData.cpp:
(WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
(WebCore::StyleRareNonInheritedData::operator== const):
* rendering/style/StyleRareNonInheritedData.h:
* rendering/updating/RenderTreeBuilderMultiColumn.cpp:
(WebCore::isValidColumnSpanner):
(WebCore::RenderTreeBuilder::MultiColumn::createFragmentedFlow):
(WebCore::RenderTreeBuilder::MultiColumn::processPossibleSpannerDescendant):
Source/WebKit:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::m_credentialsMessenger):
LayoutTests:
* fast/block/lines-clamp-advanced-expected.html: Removed.
* fast/block/lines-clamp-advanced-rl-expected.html: Removed.
* fast/block/lines-clamp-advanced-rl.html: Removed.
* fast/block/lines-clamp-advanced.html: Removed.
* fast/block/lines-clamp-basic-expected.html: Removed.
* fast/block/lines-clamp-basic-rl-expected.html: Removed.
* fast/block/lines-clamp-basic-rl.html: Removed.
* fast/block/lines-clamp-basic.html: Removed.
* fast/css/lines-clamp-parsing-expected.txt: Removed.
* fast/css/lines-clamp-parsing.html: Removed.
* fast/overflow/line-clamp-with-text-shadow-expected.html: Added.
* fast/overflow/line-clamp-with-text-shadow.html: Added.
* platform/ios-simulator-wk2/fast/overflow/line-clamp-expected.txt: Removed.
git-svn-id: http://svn.webkit.org/repository/webkit/trunk@234215 268f45cc-cd09-0410-ab3c-d52691b4dbfc
diff --git a/Source/WebCore/rendering/RenderBlockFlow.cpp b/Source/WebCore/rendering/RenderBlockFlow.cpp
index e81d0a2..132dc8f 100644
--- a/Source/WebCore/rendering/RenderBlockFlow.cpp
+++ b/Source/WebCore/rendering/RenderBlockFlow.cpp
@@ -424,11 +424,7 @@
// If overflow-y is set to paged-x or paged-y on the body or html element, we'll handle the paginating in the RenderView instead.
if ((style().overflowY() == Overflow::PagedX || style().overflowY() == Overflow::PagedY) && !(isDocumentElementRenderer() || isBody()))
return true;
-
- // Lines clamping creates columns.
- if (style().hasLinesClamp())
- return true;
-
+
if (!style().specifiesColumns())
return false;
@@ -3212,54 +3208,37 @@
return count;
}
-static int getHeightForLineCount(const RenderBlockFlow& block, int lineCount, bool includeEdgeBorderPadding, bool forward, int& count)
+static int getHeightForLineCount(const RenderBlockFlow& block, int lineCount, bool includeBottom, int& count)
{
if (block.style().visibility() != Visibility::Visible)
return -1;
- // FIXME: Orthogonal writing modes don't work here, but it's not even clear how they should behave anyway.
if (block.childrenInline()) {
- for (auto* box = forward ? block.firstRootBox() : block.lastRootBox(); box; box = forward ? box->nextRootBox() : box->prevRootBox()) {
- if (++count == lineCount) {
- // Matches the pagination rules in adjustLinePositionsForPagination.
- LayoutRect logicalVisualOverflow = box->logicalVisualOverflowRect(box->lineTop(), box->lineBottom());
- LayoutUnit logicalTop = std::min(box->lineTopWithLeading(), logicalVisualOverflow.y());
- LayoutUnit logicalBottom = std::max(box->lineBottomWithLeading(), logicalVisualOverflow.maxY());
- if (forward)
- return logicalBottom + (includeEdgeBorderPadding ? (block.borderAndPaddingAfter()) : LayoutUnit());
- return logicalTop + (includeEdgeBorderPadding ? (block.borderAndPaddingBefore()) : LayoutUnit());
- }
+ for (auto* box = block.firstRootBox(); box; box = box->nextRootBox()) {
+ if (++count == lineCount)
+ return box->lineBottom() + (includeBottom ? (block.borderBottom() + block.paddingBottom()) : LayoutUnit());
}
} else {
RenderBox* normalFlowChildWithoutLines = nullptr;
- for (auto* obj = forward ? block.firstChildBox() : block.lastChildBox(); obj; obj = forward ? obj->nextSiblingBox() : obj->previousSiblingBox()) {
+ for (auto* obj = block.firstChildBox(); obj; obj = obj->nextSiblingBox()) {
if (is<RenderBlockFlow>(*obj) && shouldCheckLines(downcast<RenderBlockFlow>(*obj))) {
- int result = getHeightForLineCount(downcast<RenderBlockFlow>(*obj), lineCount, false, forward, count);
- if (result != -1) {
- if (forward)
- return result + block.logicalTopForChild(*obj) + (includeEdgeBorderPadding ? (block.borderAndPaddingAfter()) : LayoutUnit());
- return result + block.logicalTopForChild(*obj) + (includeEdgeBorderPadding ? (block.borderAndPaddingBefore()) : LayoutUnit());
- }
+ int result = getHeightForLineCount(downcast<RenderBlockFlow>(*obj), lineCount, false, count);
+ if (result != -1)
+ return result + obj->y() + (includeBottom ? (block.borderBottom() + block.paddingBottom()) : LayoutUnit());
} else if (!obj->isFloatingOrOutOfFlowPositioned())
normalFlowChildWithoutLines = obj;
}
if (normalFlowChildWithoutLines && !lineCount)
- return block.logicalTopForChild(*normalFlowChildWithoutLines) + block.logicalHeightForChild(*normalFlowChildWithoutLines);
+ return normalFlowChildWithoutLines->y() + normalFlowChildWithoutLines->height();
}
return -1;
}
-int RenderBlockFlow::logicalHeightForLineCount(int lineCount)
+int RenderBlockFlow::heightForLineCount(int lineCount)
{
int count = 0;
- return getHeightForLineCount(*this, lineCount, true, true, count);
-}
-
-int RenderBlockFlow::logicalHeightExcludingLineCount(int lineCount)
-{
- int count = 0;
- return getHeightForLineCount(*this, lineCount, true, false, count);
+ return getHeightForLineCount(*this, lineCount, true, count);
}
void RenderBlockFlow::clearTruncation()
@@ -3838,8 +3817,6 @@
fragmentedFlow->setNeedsHeightsRecalculation(false);
}
determineLogicalLeftPositionForChild(*fragmentedFlow);
-
- fragmentedFlow->layoutFlowExcludedObjects(relayoutChildren);
}
void RenderBlockFlow::checkForPaginationLogicalHeightChange(bool& relayoutChildren, LayoutUnit& pageLogicalHeight, bool& pageLogicalHeightChanged)
diff --git a/Source/WebCore/rendering/RenderBlockFlow.h b/Source/WebCore/rendering/RenderBlockFlow.h
index a5d24cf..af68ba0 100644
--- a/Source/WebCore/rendering/RenderBlockFlow.h
+++ b/Source/WebCore/rendering/RenderBlockFlow.h
@@ -347,9 +347,7 @@
// Helper methods for computing line counts and heights for line counts.
RootInlineBox* lineAtIndex(int) const;
int lineCount(const RootInlineBox* = nullptr, bool* = nullptr) const;
- int logicalHeightForLineCount(int);
- int logicalHeightExcludingLineCount(int);
-
+ int heightForLineCount(int);
void clearTruncation();
void setHasMarkupTruncation(bool b) { setRenderBlockFlowHasMarkupTruncation(b); }
@@ -391,8 +389,6 @@
// unbreakable content, between orphans and widows, etc.). This will be used as a hint to the
// column balancer to help set a good minimum column height.
void updateMinimumPageHeight(LayoutUnit offset, LayoutUnit minHeight);
-
- void determineLogicalLeftPositionForChild(RenderBox& child, ApplyLayoutDeltaMode = DoNotApplyLayoutDelta);
void addFloatsToNewParent(RenderBlockFlow& toBlockFlow) const;
@@ -458,7 +454,8 @@
virtual void computeColumnCountAndWidth();
virtual void cachePriorCharactersIfNeeded(const LazyLineBreakIterator&) {};
-
+
+protected:
// Called to lay out the legend for a fieldset or the ruby text of a ruby run. Also used by multi-column layout to handle
// the flow thread child.
void layoutExcludedChildren(bool relayoutChildren) override;
@@ -506,6 +503,8 @@
bool hasOverhangingFloats() { return parent() && containsFloats() && lowestFloatLogicalBottom() > logicalHeight(); }
LayoutUnit getClearDelta(RenderBox& child, LayoutUnit yPos);
+ void determineLogicalLeftPositionForChild(RenderBox& child, ApplyLayoutDeltaMode = DoNotApplyLayoutDelta);
+
bool hitTestFloats(const HitTestRequest&, HitTestResult&, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset) override;
bool hitTestInlineChildren(const HitTestRequest&, HitTestResult&, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset, HitTestAction) override;
diff --git a/Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp b/Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp
index 4e8fc92..875ff3b 100644
--- a/Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp
+++ b/Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp
@@ -967,7 +967,7 @@
if (lineCount <= numVisibleLines)
continue;
- LayoutUnit newHeight = blockChild.logicalHeightForLineCount(numVisibleLines);
+ LayoutUnit newHeight = blockChild.heightForLineCount(numVisibleLines);
if (newHeight == child->height())
continue;
diff --git a/Source/WebCore/rendering/RenderFragmentContainer.cpp b/Source/WebCore/rendering/RenderFragmentContainer.cpp
index 4a82c7e..0d446d4 100644
--- a/Source/WebCore/rendering/RenderFragmentContainer.cpp
+++ b/Source/WebCore/rendering/RenderFragmentContainer.cpp
@@ -178,11 +178,6 @@
return fragmentedFlow()->isHorizontalWritingMode() ? fragmentedFlowPortionRect().y() : fragmentedFlowPortionRect().x();
}
-LayoutUnit RenderFragmentContainer::pageLogicalHeightForOffset(LayoutUnit /* offset */) const
-{
- return pageLogicalHeight();
-}
-
bool RenderFragmentContainer::isFirstFragment() const
{
ASSERT(isValid());
diff --git a/Source/WebCore/rendering/RenderFragmentContainer.h b/Source/WebCore/rendering/RenderFragmentContainer.h
index a072e10..b05bada 100644
--- a/Source/WebCore/rendering/RenderFragmentContainer.h
+++ b/Source/WebCore/rendering/RenderFragmentContainer.h
@@ -93,7 +93,6 @@
// flow thread portion we contain. For sets, we have to figure out the top of the nearest column or
// page.
virtual LayoutUnit pageLogicalTopForOffset(LayoutUnit offset) const;
- virtual LayoutUnit pageLogicalHeightForOffset(LayoutUnit offset) const;
// Whether or not this fragment is a set.
virtual bool isRenderFragmentContainerSet() const { return false; }
diff --git a/Source/WebCore/rendering/RenderFragmentedFlow.cpp b/Source/WebCore/rendering/RenderFragmentedFlow.cpp
index 7bb5bfc..3db6be9 100644
--- a/Source/WebCore/rendering/RenderFragmentedFlow.cpp
+++ b/Source/WebCore/rendering/RenderFragmentedFlow.cpp
@@ -108,7 +108,7 @@
if (m_fragmentsInvalidated) {
m_fragmentsInvalidated = false;
m_fragmentsHaveUniformLogicalWidth = true;
- m_fragmentsHaveUniformLogicalHeight = singleFragmentHasUniformLogicalHeight();
+ m_fragmentsHaveUniformLogicalHeight = true;
if (hasFragments()) {
LayoutUnit previousFragmentLogicalWidth = 0;
@@ -345,7 +345,7 @@
if (!fragment)
return 0;
- return fragment->pageLogicalHeightForOffset(offset);
+ return fragment->pageLogicalHeight();
}
LayoutUnit RenderFragmentedFlow::pageRemainingLogicalHeightForOffset(LayoutUnit offset, PageBoundaryRule pageBoundaryRule) const
@@ -355,7 +355,7 @@
return 0;
LayoutUnit pageLogicalTop = fragment->pageLogicalTopForOffset(offset);
- LayoutUnit pageLogicalHeight = fragment->pageLogicalHeightForOffset(offset);
+ LayoutUnit pageLogicalHeight = fragment->pageLogicalHeight();
LayoutUnit pageLogicalBottom = pageLogicalTop + pageLogicalHeight;
LayoutUnit remainingHeight = pageLogicalBottom - offset;
if (pageBoundaryRule == IncludePageBoundary) {
diff --git a/Source/WebCore/rendering/RenderFragmentedFlow.h b/Source/WebCore/rendering/RenderFragmentedFlow.h
index f73ca0d..f14d085 100644
--- a/Source/WebCore/rendering/RenderFragmentedFlow.h
+++ b/Source/WebCore/rendering/RenderFragmentedFlow.h
@@ -83,14 +83,10 @@
void validateFragments();
void invalidateFragments(MarkingBehavior = MarkContainingBlockChain);
bool hasValidFragmentInfo() const { return !m_fragmentsInvalidated && !m_fragmentList.isEmpty(); }
-
- virtual bool singleFragmentHasUniformLogicalHeight() const { return true; }
// Called when a descendant box's layout is finished and it has been positioned within its container.
virtual void fragmentedFlowDescendantBoxLaidOut(RenderBox*) { }
- virtual void layoutFlowExcludedObjects(bool) { }
-
void styleDidChange(StyleDifference, const RenderStyle* oldStyle) override;
void repaintRectangleInFragments(const LayoutRect&) const;
diff --git a/Source/WebCore/rendering/RenderLinesClampFlow.cpp b/Source/WebCore/rendering/RenderLinesClampFlow.cpp
deleted file mode 100644
index 33ccd1e..0000000
--- a/Source/WebCore/rendering/RenderLinesClampFlow.cpp
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2017,2018 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS IN..0TERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "RenderLinesClampFlow.h"
-
-#include "RenderChildIterator.h"
-#include "RenderLinesClampSet.h"
-#include <wtf/IsoMallocInlines.h>
-
-namespace WebCore {
-
-WTF_MAKE_ISO_ALLOCATED_IMPL(RenderLinesClampFlow);
-
-RenderLinesClampFlow::RenderLinesClampFlow(Document& document, RenderStyle&& style)
- : RenderMultiColumnFlow(document, WTFMove(style))
-{
-}
-
-RenderLinesClampFlow::~RenderLinesClampFlow() = default;
-
-const char* RenderLinesClampFlow::renderName() const
-{
- return "RenderLinesClampFlow";
-}
-
-RenderPtr<RenderMultiColumnSet> RenderLinesClampFlow::createMultiColumnSet(RenderStyle&& style)
-{
- return createRenderer<RenderLinesClampSet>(*this, WTFMove(style));
-}
-
-bool RenderLinesClampFlow::isChildAllowedInFragmentedFlow(const RenderBlockFlow& parent, const RenderElement& renderElement) const
-{
- const auto& idAttr = renderElement.element() ? renderElement.element()->getIdAttribute() : nullAtom();
- const auto& clampAttr = parent.style().linesClamp().center();
- return clampAttr == nullAtom() || clampAttr != idAttr;
-}
-
-void RenderLinesClampFlow::layoutFlowExcludedObjects(bool relayoutChildren)
-{
- auto* clampContainer = multiColumnBlockFlow();
- if (!clampContainer)
- return;
- auto* clampSet = firstMultiColumnSet();
- if (!clampSet || !is<RenderLinesClampSet>(clampSet))
- return;
- auto& linesClampSet = downcast<RenderLinesClampSet>(*clampSet);
-
- for (auto& sibling : childrenOfType<RenderElement>(*clampContainer)) {
- if (isChildAllowedInFragmentedFlow(*clampContainer, sibling) || !is<RenderBox>(sibling))
- continue;
-
- auto& siblingBox = downcast<RenderBox>(sibling);
-
- siblingBox.setIsExcludedFromNormalLayout(true);
-
- auto marginBefore = clampContainer->marginBeforeForChild(siblingBox);
- auto marginAfter = clampContainer->marginAfterForChild(siblingBox);
-
- setLogicalTopForChild(siblingBox, clampContainer->borderAndPaddingBefore() + linesClampSet.startPageHeight() + marginBefore);
-
- if (relayoutChildren)
- siblingBox.setChildNeedsLayout(MarkOnlyThis);
-
- if (siblingBox.needsLayout())
- siblingBox.layout();
- clampContainer->determineLogicalLeftPositionForChild(siblingBox);
-
- linesClampSet.setMiddleObjectHeight(marginBefore + marginAfter + clampContainer->logicalHeightForChild(siblingBox));
- }
-}
-
-}
diff --git a/Source/WebCore/rendering/RenderLinesClampFlow.h b/Source/WebCore/rendering/RenderLinesClampFlow.h
deleted file mode 100644
index e41b9b8..0000000
--- a/Source/WebCore/rendering/RenderLinesClampFlow.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (C) 2017,2018 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#pragma once
-
-#include "RenderMultiColumnFlow.h"
-#include <wtf/HashMap.h>
-
-namespace WebCore {
-
-class RenderLinesClampFlow final : public RenderMultiColumnFlow {
- WTF_MAKE_ISO_ALLOCATED(RenderLinesClampFlow);
-public:
- RenderLinesClampFlow(Document&, RenderStyle&&);
- ~RenderLinesClampFlow();
-
- bool isChildAllowedInFragmentedFlow(const RenderBlockFlow&, const RenderElement&) const;
-
- bool isRenderLinesClampFlow() const override { return true; }
-
- void layoutFlowExcludedObjects(bool relayoutChildren) override;
-
- bool singleFragmentHasUniformLogicalHeight() const override { return false; }
-
-private:
- RenderPtr<RenderMultiColumnSet> createMultiColumnSet(RenderStyle&&) override;
-
- // Disable spans and breaks.
- bool isColumnSpanningDescendant(const RenderBox&) const override { return false; }
- bool addForcedFragmentBreak(const RenderBlock*, LayoutUnit, RenderBox*, bool, LayoutUnit* = 0) override { return false; }
-
-private:
- const char* renderName() const override;
-};
-
-} // namespace WebCore
-
-SPECIALIZE_TYPE_TRAITS_RENDER_OBJECT(RenderLinesClampFlow, isRenderLinesClampFlow())
diff --git a/Source/WebCore/rendering/RenderLinesClampSet.cpp b/Source/WebCore/rendering/RenderLinesClampSet.cpp
deleted file mode 100644
index 4ad248a..0000000
--- a/Source/WebCore/rendering/RenderLinesClampSet.cpp
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * Copyright (C) 2017,2018 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include "config.h"
-#include "RenderLinesClampSet.h"
-
-#include "RenderBoxFragmentInfo.h"
-#include "RenderLinesClampFlow.h"
-#include <wtf/IsoMallocInlines.h>
-
-namespace WebCore {
-
-WTF_MAKE_ISO_ALLOCATED_IMPL(RenderLinesClampSet);
-
-RenderLinesClampSet::RenderLinesClampSet(RenderFragmentedFlow& fragmentedFlow, RenderStyle&& style)
- : RenderMultiColumnSet(fragmentedFlow, WTFMove(style))
-{
-}
-
-bool RenderLinesClampSet::recalculateColumnHeight(bool initial)
-{
- if (!initial && m_endPageHeight)
- return false;
-
- auto* fragmentedFlow = multiColumnFlow();
- if (!fragmentedFlow)
- return false;
-
- auto* blockFlow = multiColumnBlockFlow();
- auto endClamp = blockFlow->style().linesClamp().end();
-
- int maxLineCount = fragmentedFlow->lineCount();
- auto startClamp = blockFlow->style().linesClamp().start();
- int startLines = startClamp.isPercentage() ? std::max(1, maxLineCount * startClamp.value() / 100) : startClamp.value();
-
- auto bottom = logicalBottomInFragmentedFlow();
-
- if (initial) {
- if (startLines >= maxLineCount)
- m_startPageHeight = bottom;
- else
- m_startPageHeight = fragmentedFlow->logicalHeightForLineCount(startLines);
- m_endPageHeight = 0;
- m_middlePageHeight = bottom - m_startPageHeight;
- if (m_startPageHeight < bottom) {
- m_computedColumnHeight = m_startPageHeight;
- m_columnHeightComputed = true;
- updateLogicalWidth();
- return true;
- }
- return false;
- }
-
- if (!m_endPageHeight) {
- int endLines = endClamp.isPercentage() ? std::max(1, maxLineCount * endClamp.value() / 100) : endClamp.value();
- maxLineCount -= startLines;
- if (endClamp.isNone() || endLines >= maxLineCount)
- m_endPageHeight = bottom - m_startPageHeight;
- else
- m_endPageHeight = bottom - fragmentedFlow->logicalHeightExcludingLineCount(endLines);
- m_middlePageHeight = bottom - (m_endPageHeight + m_startPageHeight);
- if (m_endPageHeight > 0) {
- m_computedColumnHeight = m_startPageHeight;
- m_columnHeightComputed = true;
- updateLogicalWidth();
- return true;
- }
- }
-
- return false;
-}
-
-RenderBox::LogicalExtentComputedValues RenderLinesClampSet::computeLogicalHeight(LayoutUnit, LayoutUnit logicalTop) const
-{
- return { m_startPageHeight + m_middleObjectHeight + m_endPageHeight, logicalTop, ComputedMarginValues() };
-}
-
-unsigned RenderLinesClampSet::columnCount() const
-{
- if (m_endPageHeight)
- return 3;
- if (m_startPageHeight)
- return 2;
- return 1;
-}
-
-LayoutRect RenderLinesClampSet::columnRectAt(unsigned index) const
-{
- LayoutUnit colLogicalWidth = computedColumnWidth();
- if (!index)
- return LayoutRect(columnLogicalLeft(0), columnLogicalTop(0), colLogicalWidth, m_startPageHeight);
- if (index == 1)
- return LayoutRect(columnLogicalLeft(0), columnLogicalTop(0), colLogicalWidth, 0);
- return LayoutRect(columnLogicalLeft(0), columnLogicalTop(0) + m_startPageHeight + m_middleObjectHeight, colLogicalWidth, m_endPageHeight);
-}
-
-unsigned RenderLinesClampSet::columnIndexAtOffset(LayoutUnit offset, ColumnIndexCalculationMode) const
-{
- if (offset < m_startPageHeight)
- return 0;
- if (offset < m_startPageHeight + m_middlePageHeight)
- return 1;
- return 2;
-}
-
-LayoutUnit RenderLinesClampSet::pageLogicalTopForOffset(LayoutUnit offset) const
-{
- unsigned colIndex = columnIndexAtOffset(offset);
- if (!colIndex)
- return 0;
- if (colIndex == 1)
- return m_startPageHeight;
- return m_startPageHeight + m_middlePageHeight;
-}
-
-LayoutUnit RenderLinesClampSet::pageLogicalHeightForOffset(LayoutUnit offset) const
-{
- unsigned colIndex = columnIndexAtOffset(offset);
- if (!colIndex)
- return m_startPageHeight;
- if (colIndex == 1)
- return m_middlePageHeight;
- return m_endPageHeight;
-}
-
-LayoutRect RenderLinesClampSet::fragmentedFlowPortionRectAt(unsigned index) const
-{
- LayoutUnit logicalTop;
- LayoutUnit logicalHeight;
- if (!index) {
- logicalTop = 0;
- logicalHeight = m_startPageHeight;
- } else if (index == 1) {
- logicalTop = m_startPageHeight;
- logicalHeight = m_middlePageHeight;
- } else {
- logicalTop = m_startPageHeight + m_middlePageHeight;
- logicalHeight = m_endPageHeight;
- }
-
- LayoutRect portionRect = fragmentedFlowPortionRect();
- if (isHorizontalWritingMode())
- portionRect = LayoutRect(portionRect.x(), portionRect.y() + logicalTop, portionRect.width(), logicalHeight);
- else
- portionRect = LayoutRect(portionRect.x() + logicalTop, portionRect.y(), logicalHeight, portionRect.height());
- return portionRect;
-}
-
-LayoutRect RenderLinesClampSet::fragmentedFlowPortionOverflowRect(const LayoutRect& portionRect, unsigned index, unsigned colCount, LayoutUnit /* colGap */)
-{
- bool isFirstColumn = !index;
- bool isLastColumn = index == colCount - 1;
-
- LayoutRect overflowRect = overflowRectForFragmentedFlowPortion(portionRect, isFirstColumn, isLastColumn, VisualOverflow);
-
- if (isHorizontalWritingMode()) {
- if (!isFirstColumn)
- overflowRect.shiftYEdgeTo(portionRect.y());
- if (!isLastColumn)
- overflowRect.shiftMaxYEdgeTo(portionRect.maxY());
- } else {
- if (!isFirstColumn)
- overflowRect.shiftXEdgeTo(portionRect.x());
- if (!isLastColumn)
- overflowRect.shiftMaxXEdgeTo(portionRect.maxX());
- }
- return overflowRect;
-}
-
-LayoutUnit RenderLinesClampSet::customBlockProgressionAdjustmentForColumn(unsigned index) const
-{
- if (index == 2)
- return m_middleObjectHeight - m_middlePageHeight;
- return 0;
-}
-
-const char* RenderLinesClampSet::renderName() const
-{
- return "RenderLinesClampSet";
-}
-
-}
diff --git a/Source/WebCore/rendering/RenderLinesClampSet.h b/Source/WebCore/rendering/RenderLinesClampSet.h
deleted file mode 100644
index 56dda69..0000000
--- a/Source/WebCore/rendering/RenderLinesClampSet.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (C) 2017,2018 Apple Inc. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
- * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
- * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
- * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
- * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#pragma once
-
-#include "LayerFragment.h"
-#include "RenderLinesClampFlow.h"
-#include "RenderMultiColumnSet.h"
-
-namespace WebCore {
-
-class RenderLinesClampSet final : public RenderMultiColumnSet {
- WTF_MAKE_ISO_ALLOCATED(RenderLinesClampSet);
-public:
- RenderLinesClampSet(RenderFragmentedFlow&, RenderStyle&&);
-
- bool requiresBalancing() const override { return true; }
-
- LayoutUnit startPageHeight() const { return m_startPageHeight; }
- LayoutUnit middlePageHeight() const { return m_middlePageHeight; }
- LayoutUnit endPageHeight() const { return m_endPageHeight; }
-
- LayoutUnit middleObjectHeight() const { return m_middleObjectHeight; }
- void setMiddleObjectHeight(LayoutUnit height) { m_middleObjectHeight = height; }
-
-private:
- bool isRenderLinesClampSet() const override { return true; }
-
- // Overridden to figure out how to break up the flow into the start/middle/end
- // areas.
- bool recalculateColumnHeight(bool initial) override;
-
- const char* renderName() const override;
-
- LogicalExtentComputedValues computeLogicalHeight(LayoutUnit logicalHeight, LayoutUnit logicalTop) const override;
-
- // Lines clamp doesn't support gaps or rules.
- LayoutUnit columnGap() const override { return 0; }
- void paintColumnRules(PaintInfo&, const LayoutPoint&) override { }
-
- LayoutRect columnRectAt(unsigned index) const override;
- unsigned columnCount() const override;
- unsigned columnIndexAtOffset(LayoutUnit, ColumnIndexCalculationMode = ClampToExistingColumns) const override;
-
- LayoutRect fragmentedFlowPortionRectAt(unsigned index) const override;
- LayoutRect fragmentedFlowPortionOverflowRect(const LayoutRect& fragmentedFlowPortion, unsigned index, unsigned colCount, LayoutUnit colGap) override;
-
- bool skipLayerFragmentCollectionForColumn(unsigned index) const override { return index == 1; }
-
- LayoutUnit customBlockProgressionAdjustmentForColumn(unsigned) const override;
-
- LayoutUnit pageLogicalTopForOffset(LayoutUnit) const override;
- LayoutUnit pageLogicalHeightForOffset(LayoutUnit) const override;
-
-private:
- LayoutUnit m_startPageHeight; // Where to clamp the first N lines inside the fragmented flow
- LayoutUnit m_middlePageHeight; // The middle portion of the fragmented flow (does not render).
- LayoutUnit m_endPageHeight; // Where to clamp the last N lines inside the fragmented flow
-
- LayoutUnit m_middleObjectHeight; // The middle object's height plus margins.
-};
-
-} // namespace WebCore
-
-SPECIALIZE_TYPE_TRAITS_RENDER_OBJECT(RenderLinesClampSet, isRenderLinesClampSet())
diff --git a/Source/WebCore/rendering/RenderMultiColumnFlow.cpp b/Source/WebCore/rendering/RenderMultiColumnFlow.cpp
index 776d508..6afa0dd 100644
--- a/Source/WebCore/rendering/RenderMultiColumnFlow.cpp
+++ b/Source/WebCore/rendering/RenderMultiColumnFlow.cpp
@@ -133,11 +133,6 @@
m_lastSetWorkedOn = nullptr;
}
-bool RenderMultiColumnFlow::isColumnSpanningDescendant(const RenderBox& descendantBox) const
-{
- return descendantBox.style().columnSpan() == ColumnSpan::All;
-}
-
void RenderMultiColumnFlow::addFragmentToThread(RenderFragmentContainer* RenderFragmentContainer)
{
auto* columnSet = downcast<RenderMultiColumnSet>(RenderFragmentContainer);
@@ -160,11 +155,6 @@
RenderFragmentedFlow::willBeRemovedFromTree();
}
-RenderPtr<RenderMultiColumnSet> RenderMultiColumnFlow::createMultiColumnSet(RenderStyle&& style)
-{
- return createRenderer<RenderMultiColumnSet>(*this, WTFMove(style));
-}
-
void RenderMultiColumnFlow::fragmentedFlowDescendantBoxLaidOut(RenderBox* descendant)
{
if (!is<RenderMultiColumnSpannerPlaceholder>(*descendant))
diff --git a/Source/WebCore/rendering/RenderMultiColumnFlow.h b/Source/WebCore/rendering/RenderMultiColumnFlow.h
index a00b559..a48a789 100644
--- a/Source/WebCore/rendering/RenderMultiColumnFlow.h
+++ b/Source/WebCore/rendering/RenderMultiColumnFlow.h
@@ -33,7 +33,7 @@
class RenderMultiColumnSet;
class RenderMultiColumnSpannerPlaceholder;
-class RenderMultiColumnFlow : public RenderFragmentedFlow {
+class RenderMultiColumnFlow final : public RenderFragmentedFlow {
WTF_MAKE_ISO_ALLOCATED(RenderMultiColumnFlow);
public:
RenderMultiColumnFlow(Document&, RenderStyle&&);
@@ -98,10 +98,6 @@
typedef HashMap<RenderBox*, WeakPtr<RenderMultiColumnSpannerPlaceholder>> SpannerMap;
SpannerMap& spannerMap() { return *m_spannerMap; }
- virtual bool isColumnSpanningDescendant(const RenderBox&) const;
-
- virtual RenderPtr<RenderMultiColumnSet> createMultiColumnSet(RenderStyle&&);
-
private:
bool isRenderMultiColumnFlow() const override { return true; }
const char* renderName() const override;
diff --git a/Source/WebCore/rendering/RenderMultiColumnSet.cpp b/Source/WebCore/rendering/RenderMultiColumnSet.cpp
index f0b881a..751e810 100644
--- a/Source/WebCore/rendering/RenderMultiColumnSet.cpp
+++ b/Source/WebCore/rendering/RenderMultiColumnSet.cpp
@@ -770,9 +770,6 @@
LayoutUnit initialBlockOffset = initialBlockOffsetForPainting();
for (unsigned i = startColumn; i <= endColumn; i++) {
- if (skipLayerFragmentCollectionForColumn(i))
- continue;
-
// Get the portion of the flow thread that corresponds to this column.
LayoutRect fragmentedFlowPortion = fragmentedFlowPortionRectAt(i);
@@ -801,7 +798,7 @@
LayoutUnit blockOffset = initialBlockOffset + logicalTop() - fragmentedFlow()->logicalTop() + (isHorizontalWritingMode() ? -fragmentedFlowPortion.y() : -fragmentedFlowPortion.x());
if (!progressionIsInline) {
if (!progressionReversed)
- blockOffset = i * colGap + customBlockProgressionAdjustmentForColumn(i);
+ blockOffset = i * colGap;
else
blockOffset -= i * (computedColumnHeight() + colGap);
}
@@ -853,7 +850,7 @@
LayoutUnit blockOffset = initialBlockOffset - (isHorizontalWritingMode() ? fragmentedFlowPortion.y() : fragmentedFlowPortion.x());
if (!progressionIsInline) {
if (!progressionReversed)
- blockOffset = startColumn * colGap + customBlockProgressionAdjustmentForColumn(startColumn);
+ blockOffset = startColumn * colGap;
else
blockOffset -= startColumn * (computedColumnHeight() + colGap);
}
diff --git a/Source/WebCore/rendering/RenderMultiColumnSet.h b/Source/WebCore/rendering/RenderMultiColumnSet.h
index f7ad473..375081b 100644
--- a/Source/WebCore/rendering/RenderMultiColumnSet.h
+++ b/Source/WebCore/rendering/RenderMultiColumnSet.h
@@ -42,7 +42,7 @@
//
// Column spans result in the creation of new column sets as well, since a spanning fragment has to be placed in between the column sets that
// come before and after the span.
-class RenderMultiColumnSet : public RenderFragmentContainerSet {
+class RenderMultiColumnSet final : public RenderFragmentContainerSet {
WTF_MAKE_ISO_ALLOCATED(RenderMultiColumnSet);
public:
RenderMultiColumnSet(RenderFragmentedFlow&, RenderStyle&&);
@@ -92,7 +92,7 @@
// multicol container's height is constrained. If |initial| is set, and we are to balance, guess
// an initial column height; otherwise, stretch the column height a tad. Return true if column
// height changed and another layout pass is required.
- virtual bool recalculateColumnHeight(bool initial);
+ bool recalculateColumnHeight(bool initial);
// Record space shortage (the amount of space that would have been enough to prevent some
// element from being moved to the next column) at a column break. The smallest amount of space
@@ -112,7 +112,7 @@
// Has this set been flowed in this layout pass?
bool hasBeenFlowed() const { return logicalBottomInFragmentedFlow() != RenderFragmentedFlow::maxLogicalHeight(); }
- virtual bool requiresBalancing() const;
+ bool requiresBalancing() const;
LayoutPoint columnTranslationForOffset(const LayoutUnit&) const;
@@ -126,23 +126,24 @@
void updateHitTestResult(HitTestResult&, const LayoutPoint&) override;
- virtual LayoutRect columnRectAt(unsigned index) const;
- virtual unsigned columnCount() const;
+ LayoutRect columnRectAt(unsigned index) const;
+ unsigned columnCount() const;
protected:
void addOverflowFromChildren() override;
- LogicalExtentComputedValues computeLogicalHeight(LayoutUnit logicalHeight, LayoutUnit logicalTop) const override;
-
+
+private:
bool isRenderMultiColumnSet() const override { return true; }
void layout() override;
+ LogicalExtentComputedValues computeLogicalHeight(LayoutUnit logicalHeight, LayoutUnit logicalTop) const override;
+
void paintObject(PaintInfo&, const LayoutPoint&) override { }
LayoutUnit pageLogicalWidth() const override { return m_computedColumnWidth; }
LayoutUnit pageLogicalHeight() const override { return m_computedColumnHeight; }
LayoutUnit pageLogicalTopForOffset(LayoutUnit offset) const override;
- LayoutUnit pageLogicalHeightForOffset(LayoutUnit) const override { return m_computedColumnHeight; }
LayoutUnit logicalHeightOfAllFragmentedFlowContent() const override { return logicalHeightInFragmentedFlow(); }
@@ -157,24 +158,21 @@
const char* renderName() const override;
LayoutUnit calculateMaxColumnHeight() const;
- virtual LayoutUnit columnGap() const;
+ LayoutUnit columnGap() const;
LayoutUnit columnLogicalLeft(unsigned) const;
LayoutUnit columnLogicalTop(unsigned) const;
- virtual LayoutRect fragmentedFlowPortionRectAt(unsigned index) const;
- virtual LayoutRect fragmentedFlowPortionOverflowRect(const LayoutRect& fragmentedFlowPortion, unsigned index, unsigned colCount, LayoutUnit colGap);
+ LayoutRect fragmentedFlowPortionRectAt(unsigned index) const;
+ LayoutRect fragmentedFlowPortionOverflowRect(const LayoutRect& fragmentedFlowPortion, unsigned index, unsigned colCount, LayoutUnit colGap);
LayoutUnit initialBlockOffsetForPainting() const;
- virtual bool skipLayerFragmentCollectionForColumn(unsigned) const { return false; }
- virtual LayoutUnit customBlockProgressionAdjustmentForColumn(unsigned) const { return 0; }
-
enum ColumnIndexCalculationMode {
ClampToExistingColumns, // Stay within the range of already existing columns.
AssumeNewColumns // Allow column indices outside the range of already existing columns.
};
- virtual unsigned columnIndexAtOffset(LayoutUnit, ColumnIndexCalculationMode = ClampToExistingColumns) const;
+ unsigned columnIndexAtOffset(LayoutUnit, ColumnIndexCalculationMode = ClampToExistingColumns) const;
void setAndConstrainColumnHeight(LayoutUnit);
diff --git a/Source/WebCore/rendering/RenderObject.h b/Source/WebCore/rendering/RenderObject.h
index bb3f35e..2516258 100644
--- a/Source/WebCore/rendering/RenderObject.h
+++ b/Source/WebCore/rendering/RenderObject.h
@@ -285,9 +285,6 @@
virtual bool isRenderMultiColumnFlow() const { return false; }
virtual bool isRenderMultiColumnSpannerPlaceholder() const { return false; }
- virtual bool isRenderLinesClampFlow() const { return false; }
- virtual bool isRenderLinesClampSet() const { return false; }
-
virtual bool isRenderScrollbarPart() const { return false; }
bool isDocumentElementRenderer() const { return document().documentElement() == &m_node; }
diff --git a/Source/WebCore/rendering/style/LineClampValue.h b/Source/WebCore/rendering/style/LineClampValue.h
index e540d81..25db4e3 100644
--- a/Source/WebCore/rendering/style/LineClampValue.h
+++ b/Source/WebCore/rendering/style/LineClampValue.h
@@ -25,7 +25,6 @@
#pragma once
#include "RenderStyleConstants.h"
-#include <wtf/text/AtomicString.h>
namespace WebCore {
@@ -63,38 +62,5 @@
LineClamp m_type;
int m_value;
};
-
-class LinesClampValue {
-public:
- LinesClampValue()
- { }
-
- LinesClampValue(const LineClampValue& start, const LineClampValue& end, const AtomicString& center)
- : m_start(start)
- , m_end(end)
- , m_center(center)
- { }
- bool isNone() const { return m_start.isNone(); }
-
- bool operator==(const LinesClampValue& o) const
- {
- return m_start == o.start() && m_end == o.end() && m_center == o.center();
- }
-
- bool operator!=(const LinesClampValue& o) const
- {
- return !(*this == o);
- }
-
- LineClampValue start() const { return m_start; }
- LineClampValue end() const { return m_end; }
- AtomicString center() const { return m_center; }
-
-private:
- LineClampValue m_start;
- LineClampValue m_end;
- AtomicString m_center;
-};
-
} // namespace WebCore
diff --git a/Source/WebCore/rendering/style/RenderStyle.h b/Source/WebCore/rendering/style/RenderStyle.h
index 0ce33cd..327dd2b3 100644
--- a/Source/WebCore/rendering/style/RenderStyle.h
+++ b/Source/WebCore/rendering/style/RenderStyle.h
@@ -683,8 +683,6 @@
LineBoxContain lineBoxContain() const { return m_rareInheritedData->lineBoxContain; }
const LineClampValue& lineClamp() const { return m_rareNonInheritedData->lineClamp; }
- const LinesClampValue& linesClamp() const { return m_rareNonInheritedData->linesClamp; }
- bool hasLinesClamp() const { return !linesClamp().start().isNone(); }
const IntSize& initialLetter() const { return m_rareNonInheritedData->initialLetter; }
int initialLetterDrop() const { return initialLetter().width(); }
int initialLetterHeight() const { return initialLetter().height(); }
@@ -1201,7 +1199,6 @@
void setLineBoxContain(LineBoxContain c) { SET_VAR(m_rareInheritedData, lineBoxContain, c); }
void setLineClamp(LineClampValue c) { SET_VAR(m_rareNonInheritedData, lineClamp, c); }
- void setLinesClamp(const LinesClampValue& c) { SET_VAR(m_rareNonInheritedData, linesClamp, c); }
void setInitialLetter(const IntSize& size) { SET_VAR(m_rareNonInheritedData, initialLetter, size); }
@@ -1647,7 +1644,6 @@
static IntSize initialInitialLetter() { return IntSize(); }
static LineClampValue initialLineClamp() { return LineClampValue(); }
- static LinesClampValue initialLinesClamp() { return LinesClampValue(); }
static TextSecurity initialTextSecurity() { return TextSecurity::None; }
#if PLATFORM(IOS)
@@ -2050,7 +2046,7 @@
inline bool RenderStyle::hasInlineColumnAxis() const
{
auto axis = columnAxis();
- return (axis == ColumnAxis::Auto || isHorizontalWritingMode() == (axis == ColumnAxis::Horizontal)) && !hasLinesClamp();
+ return axis == ColumnAxis::Auto || isHorizontalWritingMode() == (axis == ColumnAxis::Horizontal);
}
inline ImageOrientationEnum RenderStyle::imageOrientation() const
diff --git a/Source/WebCore/rendering/style/StyleRareNonInheritedData.cpp b/Source/WebCore/rendering/style/StyleRareNonInheritedData.cpp
index aa37b66..d925fc6 100644
--- a/Source/WebCore/rendering/style/StyleRareNonInheritedData.cpp
+++ b/Source/WebCore/rendering/style/StyleRareNonInheritedData.cpp
@@ -44,7 +44,6 @@
, perspectiveOriginX(RenderStyle::initialPerspectiveOriginX())
, perspectiveOriginY(RenderStyle::initialPerspectiveOriginY())
, lineClamp(RenderStyle::initialLineClamp())
- , linesClamp(RenderStyle::initialLinesClamp())
, initialLetter(RenderStyle::initialInitialLetter())
, deprecatedFlexibleBox(StyleDeprecatedFlexibleBoxData::create())
, flexibleBox(StyleFlexibleBoxData::create())
@@ -121,7 +120,6 @@
, perspectiveOriginX(o.perspectiveOriginX)
, perspectiveOriginY(o.perspectiveOriginY)
, lineClamp(o.lineClamp)
- , linesClamp(o.linesClamp)
, initialLetter(o.initialLetter)
, deprecatedFlexibleBox(o.deprecatedFlexibleBox)
, flexibleBox(o.flexibleBox)
@@ -220,7 +218,6 @@
&& perspectiveOriginX == o.perspectiveOriginX
&& perspectiveOriginY == o.perspectiveOriginY
&& lineClamp == o.lineClamp
- && linesClamp == o.linesClamp
&& initialLetter == o.initialLetter
#if ENABLE(DASHBOARD_SUPPORT)
&& dashboardRegions == o.dashboardRegions
diff --git a/Source/WebCore/rendering/style/StyleRareNonInheritedData.h b/Source/WebCore/rendering/style/StyleRareNonInheritedData.h
index 12363af..089ccfa 100644
--- a/Source/WebCore/rendering/style/StyleRareNonInheritedData.h
+++ b/Source/WebCore/rendering/style/StyleRareNonInheritedData.h
@@ -102,7 +102,6 @@
Length perspectiveOriginY;
LineClampValue lineClamp; // An Apple extension.
- LinesClampValue linesClamp; // An Apple extension.
IntSize initialLetter;
diff --git a/Source/WebCore/rendering/updating/RenderTreeBuilderMultiColumn.cpp b/Source/WebCore/rendering/updating/RenderTreeBuilderMultiColumn.cpp
index 57216eb..c9d289a9 100644
--- a/Source/WebCore/rendering/updating/RenderTreeBuilderMultiColumn.cpp
+++ b/Source/WebCore/rendering/updating/RenderTreeBuilderMultiColumn.cpp
@@ -26,7 +26,6 @@
#include "RenderBlockFlow.h"
#include "RenderChildIterator.h"
-#include "RenderLinesClampFlow.h"
#include "RenderMultiColumnFlow.h"
#include "RenderMultiColumnSet.h"
#include "RenderMultiColumnSpannerPlaceholder.h"
@@ -81,7 +80,7 @@
if (descendantBox.isFloatingOrOutOfFlowPositioned())
return false;
- if (!fragmentedFlow.isColumnSpanningDescendant(descendantBox))
+ if (descendantBox.style().columnSpan() != ColumnSpan::All)
return false;
auto* parent = descendantBox.parent();
@@ -166,7 +165,7 @@
}
}
- auto newFragmentedFlow = !flow.style().hasLinesClamp() ? WebCore::createRenderer<RenderMultiColumnFlow>(flow.document(), RenderStyle::createAnonymousStyleWithDisplay(flow.style(), DisplayType::Block)) : WebCore::createRenderer<RenderLinesClampFlow>(flow.document(), RenderStyle::createAnonymousStyleWithDisplay(flow.style(), DisplayType::Block));
+ auto newFragmentedFlow = WebCore::createRenderer<RenderMultiColumnFlow>(flow.document(), RenderStyle::createAnonymousStyleWithDisplay(flow.style(), DisplayType::Block));
newFragmentedFlow->initializeStyle();
auto& fragmentedFlow = *newFragmentedFlow;
m_builder.blockBuilder().attach(flow, WTFMove(newFragmentedFlow), nullptr);
@@ -181,14 +180,6 @@
}
}
- if (flow.style().hasLinesClamp()) {
- // Keep the middle block out of the flow thread.
- for (auto& element : childrenOfType<RenderElement>(fragmentedFlow)) {
- if (!downcast<RenderLinesClampFlow>(fragmentedFlow).isChildAllowedInFragmentedFlow(flow, element))
- m_builder.move(fragmentedFlow, flow, element, RenderTreeBuilder::NormalizeAfterInsertion::Yes);
- }
- }
-
flow.setMultiColumnFlow(fragmentedFlow);
}
@@ -352,7 +343,7 @@
// Need to create a new column set when there's no set already created. We also always insert
// another column set after a spanner. Even if it turns out that there are no renderers
// following the spanner, there may be bottom margins there, which take up space.
- auto newSet = flow.createMultiColumnSet(RenderStyle::createAnonymousStyleWithDisplay(multicolContainer->style(), DisplayType::Block));
+ auto newSet = createRenderer<RenderMultiColumnSet>(flow, RenderStyle::createAnonymousStyleWithDisplay(multicolContainer->style(), DisplayType::Block));
newSet->initializeStyle();
auto& set = *newSet;
m_builder.blockBuilder().attach(*multicolContainer, WTFMove(newSet), insertBeforeMulticolChild);