WebKit Bugzilla
Attachment 356823 Details for
Bug 192504
: Rename LayoutState to RenderLayoutState
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
patch
rename-layoutstate.patch (text/plain), 80.05 KB, created by
Antti Koivisto
on 2018-12-07 11:15:10 PST
(
hide
)
Description:
patch
Filename:
MIME Type:
Creator:
Antti Koivisto
Created:
2018-12-07 11:15:10 PST
Size:
80.05 KB
patch
obsolete
>Index: Source/WebCore/ChangeLog >=================================================================== >--- Source/WebCore/ChangeLog (revision 238960) >+++ Source/WebCore/ChangeLog (working copy) >@@ -1,3 +1,83 @@ >+2018-12-07 Antti Koivisto <antti@apple.com> >+ >+ Rename LayoutState to RenderLayoutState >+ https://bugs.webkit.org/show_bug.cgi?id=192504 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ The name is better used in LFC. >+ >+ * Sources.txt: >+ * WebCore.xcodeproj/project.pbxproj: >+ * page/FrameViewLayoutContext.cpp: >+ (WebCore::FrameViewLayoutContext::layoutState const): >+ (WebCore::FrameViewLayoutContext::pushLayoutState): >+ (WebCore::FrameViewLayoutContext::pushLayoutStateForPaginationIfNeeded): >+ * page/FrameViewLayoutContext.h: >+ * rendering/LayoutState.cpp: Removed. >+ * rendering/LayoutState.h: Removed. >+ * rendering/RenderBlock.cpp: >+ * rendering/RenderBlock.h: >+ * rendering/RenderBlockFlow.cpp: >+ (WebCore::RenderBlockFlow::checkForPaginationLogicalHeightChange): >+ * rendering/RenderBlockLineLayout.cpp: >+ * rendering/RenderBox.cpp: >+ * rendering/RenderEmbeddedObject.cpp: >+ * rendering/RenderFragmentedFlow.cpp: >+ * rendering/RenderGrid.cpp: >+ * rendering/RenderImage.cpp: >+ * rendering/RenderInline.cpp: >+ * rendering/RenderLayoutState.cpp: Copied from Source/WebCore/rendering/LayoutState.cpp. >+ (WebCore::RenderLayoutState::RenderLayoutState): >+ (WebCore::RenderLayoutState::computeOffsets): >+ (WebCore::RenderLayoutState::computeClipRect): >+ (WebCore::RenderLayoutState::computePaginationInformation): >+ (WebCore::RenderLayoutState::pageLogicalOffset const): >+ (WebCore::RenderLayoutState::computeLineGridPaginationOrigin): >+ (WebCore::RenderLayoutState::propagateLineGridInfo): >+ (WebCore::RenderLayoutState::establishLineGrid): >+ (WebCore::RenderLayoutState::addLayoutDelta): >+ (WebCore::RenderLayoutState::layoutDeltaMatches const): >+ (WebCore::LayoutState::LayoutState): Deleted. >+ (WebCore::LayoutState::computeOffsets): Deleted. >+ (WebCore::LayoutState::computeClipRect): Deleted. >+ (WebCore::LayoutState::computePaginationInformation): Deleted. >+ (WebCore::LayoutState::pageLogicalOffset const): Deleted. >+ (WebCore::LayoutState::computeLineGridPaginationOrigin): Deleted. >+ (WebCore::LayoutState::propagateLineGridInfo): Deleted. >+ (WebCore::LayoutState::establishLineGrid): Deleted. >+ (WebCore::LayoutState::addLayoutDelta): Deleted. >+ (WebCore::LayoutState::layoutDeltaMatches const): Deleted. >+ * rendering/RenderLayoutState.h: Copied from Source/WebCore/rendering/LayoutState.h. >+ (WebCore::RenderLayoutState::RenderLayoutState): >+ (WebCore::LayoutState::LayoutState): Deleted. >+ (WebCore::LayoutState::isPaginated const): Deleted. >+ (WebCore::LayoutState::pageLogicalHeight const): Deleted. >+ (WebCore::LayoutState::pageLogicalHeightChanged const): Deleted. >+ (WebCore::LayoutState::lineGrid const): Deleted. >+ (WebCore::LayoutState::lineGridOffset const): Deleted. >+ (WebCore::LayoutState::lineGridPaginationOrigin const): Deleted. >+ (WebCore::LayoutState::paintOffset const): Deleted. >+ (WebCore::LayoutState::layoutOffset const): Deleted. >+ (WebCore::LayoutState::pageOffset const): Deleted. >+ (WebCore::LayoutState::needsBlockDirectionLocationSetBeforeLayout const): Deleted. >+ (WebCore::LayoutState::renderer const): Deleted. >+ (WebCore::LayoutState::clipRect const): Deleted. >+ (WebCore::LayoutState::isClipped const): Deleted. >+ (WebCore::LayoutState::layoutDelta const): Deleted. >+ * rendering/RenderListBox.cpp: >+ * rendering/RenderMediaControlElements.cpp: >+ * rendering/RenderMultiColumnFlow.cpp: >+ * rendering/RenderTable.cpp: >+ * rendering/RenderTableRow.cpp: >+ * rendering/RenderTableSection.cpp: >+ * rendering/RenderVTTCue.cpp: >+ * rendering/RenderView.cpp: >+ * rendering/RenderView.h: >+ * rendering/RootInlineBox.cpp: >+ * rendering/svg/RenderSVGRoot.cpp: >+ (WebCore::RenderSVGRoot::layout): >+ > 2018-12-07 Truitt Savell <tsavell@apple.com> > > Unreviewed, rolling out r238947. >Index: Source/WebCore/Sources.txt >=================================================================== >--- Source/WebCore/Sources.txt (revision 238859) >+++ Source/WebCore/Sources.txt (working copy) >@@ -1917,7 +1917,6 @@ rendering/InlineIterator.cpp > rendering/InlineTextBox.cpp > rendering/LayoutDisallowedScope.cpp > rendering/LayoutRepainter.cpp >-rendering/LayoutState.cpp > rendering/MarkedText.cpp > rendering/OrderIterator.cpp > rendering/PointerEventsHitRules.cpp >@@ -1956,6 +1955,7 @@ rendering/RenderLayerBacking.cpp > rendering/RenderLayerCompositor.cpp > rendering/RenderLayerFilters.cpp > rendering/RenderLayerModelObject.cpp >+rendering/RenderLayoutState.cpp > rendering/RenderLineBoxList.cpp > rendering/RenderLineBreak.cpp > rendering/RenderListBox.cpp >Index: Source/WebCore/WebCore.xcodeproj/project.pbxproj >=================================================================== >--- Source/WebCore/WebCore.xcodeproj/project.pbxproj (revision 238859) >+++ Source/WebCore/WebCore.xcodeproj/project.pbxproj (working copy) >@@ -807,7 +807,7 @@ > 2D8B92FE203D13E1009C868F /* UnifiedSource529.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DE5F85CF1FA23850006DB63B /* UnifiedSource529.cpp */; }; > 2D8B92FF203D13E1009C868F /* UnifiedSource530.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DE5F85D31FA23859006DB63B /* UnifiedSource530.cpp */; }; > 2D8FEBDD143E3EF70072502B /* CSSCrossfadeValue.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D8FEBDB143E3EF70072502B /* CSSCrossfadeValue.h */; }; >- 2D9066070BE141D400956998 /* LayoutState.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D9066050BE141D400956998 /* LayoutState.h */; settings = {ATTRIBUTES = (Private, ); }; }; >+ 2D9066070BE141D400956998 /* RenderLayoutState.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D9066050BE141D400956998 /* RenderLayoutState.h */; settings = {ATTRIBUTES = (Private, ); }; }; > 2D92A79A2134AD7900F493FD /* QuickLookSoftLink.mm in Sources */ = {isa = PBXBuildFile; fileRef = 443917FD1A91B2F8006E04F2 /* QuickLookSoftLink.mm */; }; > 2D92A79D2134AF9500F493FD /* UserAgentIOS.mm in Sources */ = {isa = PBXBuildFile; fileRef = A3AF9D8320325691006CAD06 /* UserAgentIOS.mm */; }; > 2D93AEE319DF5641002A86C3 /* ServicesOverlayController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2D93AEE119DF5641002A86C3 /* ServicesOverlayController.h */; }; >@@ -6653,8 +6653,8 @@ > 2D8287F516E4A0380086BD00 /* HitTestLocation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HitTestLocation.h; sourceTree = "<group>"; }; > 2D8FEBDA143E3EF70072502B /* CSSCrossfadeValue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CSSCrossfadeValue.cpp; sourceTree = "<group>"; }; > 2D8FEBDB143E3EF70072502B /* CSSCrossfadeValue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CSSCrossfadeValue.h; sourceTree = "<group>"; }; >- 2D9066040BE141D400956998 /* LayoutState.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = LayoutState.cpp; sourceTree = "<group>"; }; >- 2D9066050BE141D400956998 /* LayoutState.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = LayoutState.h; sourceTree = "<group>"; }; >+ 2D9066040BE141D400956998 /* RenderLayoutState.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; path = RenderLayoutState.cpp; sourceTree = "<group>"; }; >+ 2D9066050BE141D400956998 /* RenderLayoutState.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = RenderLayoutState.h; sourceTree = "<group>"; }; > 2D90660C0665D937006B6F1A /* DataTransferMac.mm */ = {isa = PBXFileReference; fileEncoding = 30; indentWidth = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DataTransferMac.mm; sourceTree = "<group>"; tabWidth = 8; usesTabs = 0; }; > 2D93AEE119DF5641002A86C3 /* ServicesOverlayController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ServicesOverlayController.h; sourceTree = "<group>"; }; > 2D93AEE219DF5641002A86C3 /* ServicesOverlayController.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ServicesOverlayController.mm; sourceTree = "<group>"; }; >@@ -26520,8 +26520,6 @@ > 9BD1F6801F0462B8001C9CDD /* LayoutDisallowedScope.h */, > A120ACA113F9984600FE4AC7 /* LayoutRepainter.cpp */, > A120ACA013F9983700FE4AC7 /* LayoutRepainter.h */, >- 2D9066040BE141D400956998 /* LayoutState.cpp */, >- 2D9066050BE141D400956998 /* LayoutState.h */, > 9BA273F3172206BB0097CE47 /* LogicalSelectionOffsetCaches.h */, > CE1866421F72E5B400A0CAB6 /* MarkedText.cpp */, > CE1866431F72E5B400A0CAB6 /* MarkedText.h */, >@@ -26608,6 +26606,8 @@ > 0F53FB89213B768400C40D34 /* RenderLayerFilters.h */, > 3C244FE5A375AC633F88BE6F /* RenderLayerModelObject.cpp */, > 3C244FE4A375AC633F88BE6F /* RenderLayerModelObject.h */, >+ 2D9066040BE141D400956998 /* RenderLayoutState.cpp */, >+ 2D9066050BE141D400956998 /* RenderLayoutState.h */, > BC33FB1A0F30EE85002CDD7C /* RenderLineBoxList.cpp */, > 0BE030A10F3112FB003C1A46 /* RenderLineBoxList.h */, > BCEA4824097D93020094C9E4 /* RenderLineBreak.cpp */, >@@ -28006,8 +28006,8 @@ > CD318623199F1E2A0030A0F7 /* CDMPrivateMediaSourceAVFObjC.h in Headers */, > CDE595971BF26E2100A1CBE8 /* CDMSessionMediaSourceAVFObjC.h in Headers */, > 5FA904CA178E61F5004C8A2D /* CertificateInfo.h in Headers */, >- 91B8F0B521953D65000C2B00 /* CertificateInfoBase.h in Headers */, >- FE36FD1516C7826500F887C1 /* ChangeVersionData.h in Headers */, >+ 91B8F0B521953D65000C2B00 /* CertificateInfoBase.h in Headers */, >+ FE36FD1516C7826500F887C1 /* ChangeVersionData.h in Headers */, > 97BC69DD1505F076001B74AC /* ChangeVersionWrapper.h in Headers */, > FD315FFF12B0267600C1A359 /* ChannelMergerNode.h in Headers */, > FD31600212B0267600C1A359 /* ChannelSplitterNode.h in Headers */, >@@ -30012,7 +30012,7 @@ > A12538D413F9B60A00024754 /* LayoutRepainter.h in Headers */, > 11310CF320BA4A370065A8D0 /* LayoutReplaced.h in Headers */, > 141DC054164834B900371E5A /* LayoutSize.h in Headers */, >- 2D9066070BE141D400956998 /* LayoutState.h in Headers */, >+ 2D9066070BE141D400956998 /* RenderLayoutState.h in Headers */, > 11310CF220BA4A320065A8D0 /* LayoutTreeBuilder.h in Headers */, > 141DC0481648348F00371E5A /* LayoutUnit.h in Headers */, > CDE8B5ED1A69777300B4B66A /* LegacyCDMPrivateClearKey.h in Headers */, >Index: Source/WebCore/page/FrameViewLayoutContext.cpp >=================================================================== >--- Source/WebCore/page/FrameViewLayoutContext.cpp (revision 238859) >+++ Source/WebCore/page/FrameViewLayoutContext.cpp (working copy) >@@ -32,9 +32,9 @@ > #include "FrameView.h" > #include "InspectorInstrumentation.h" > #include "LayoutDisallowedScope.h" >-#include "LayoutState.h" > #include "Logging.h" > #include "RenderElement.h" >+#include "RenderLayoutState.h" > #include "RenderView.h" > #include "RuntimeEnabledFeatures.h" > #include "ScriptDisallowedScope.h" >@@ -584,7 +584,7 @@ bool FrameViewLayoutContext::layoutDelta > } > #endif > >-LayoutState* FrameViewLayoutContext::layoutState() const >+RenderLayoutState* FrameViewLayoutContext::layoutState() const > { > if (m_layoutStateStack.isEmpty()) > return nullptr; >@@ -596,14 +596,14 @@ void FrameViewLayoutContext::pushLayoutS > ASSERT(!m_paintOffsetCacheDisableCount); > ASSERT(!layoutState()); > >- m_layoutStateStack.append(std::make_unique<LayoutState>(root)); >+ m_layoutStateStack.append(std::make_unique<RenderLayoutState>(root)); > } > > bool FrameViewLayoutContext::pushLayoutStateForPaginationIfNeeded(RenderBlockFlow& layoutRoot) > { > if (layoutState()) > return false; >- m_layoutStateStack.append(std::make_unique<LayoutState>(layoutRoot, LayoutState::IsPaginated::Yes)); >+ m_layoutStateStack.append(std::make_unique<RenderLayoutState>(layoutRoot, RenderLayoutState::IsPaginated::Yes)); > return true; > } > >@@ -613,7 +613,7 @@ bool FrameViewLayoutContext::pushLayoutS > auto* layoutState = this->layoutState(); > if (!layoutState || !needsFullRepaint() || layoutState->isPaginated() || renderer.enclosingFragmentedFlow() > || layoutState->lineGrid() || (renderer.style().lineGrid() != RenderStyle::initialLineGrid() && renderer.isRenderBlockFlow())) { >- m_layoutStateStack.append(std::make_unique<LayoutState>(m_layoutStateStack, renderer, offset, pageHeight, pageHeightChanged)); >+ m_layoutStateStack.append(std::make_unique<RenderLayoutState>(m_layoutStateStack, renderer, offset, pageHeight, pageHeightChanged)); > return true; > } > return false; >Index: Source/WebCore/page/FrameViewLayoutContext.h >=================================================================== >--- Source/WebCore/page/FrameViewLayoutContext.h (revision 238859) >+++ Source/WebCore/page/FrameViewLayoutContext.h (working copy) >@@ -37,11 +37,11 @@ class Frame; > class FrameView; > class LayoutScope; > class LayoutSize; >-class LayoutState; > class RenderBlockFlow; > class RenderBox; > class RenderObject; > class RenderElement; >+class RenderLayoutState; > class RenderView; > > class FrameViewLayoutContext { >@@ -93,7 +93,7 @@ public: > > void flushAsynchronousTasks(); > >- LayoutState* layoutState() const; >+ RenderLayoutState* layoutState() const; > // Returns true if layoutState should be used for its cached offset and clip. > bool isPaintOffsetCacheEnabled() const { return !m_paintOffsetCacheDisableCount && layoutState(); } > #ifndef NDEBUG >@@ -107,7 +107,7 @@ public: > #if !ASSERT_DISABLED > bool layoutDeltaMatches(const LayoutSize& delta); > #endif >- using LayoutStateStack = Vector<std::unique_ptr<LayoutState>>; >+ using LayoutStateStack = Vector<std::unique_ptr<RenderLayoutState>>; > > private: > friend class LayoutScope; >Index: Source/WebCore/rendering/LayoutState.cpp >=================================================================== >--- Source/WebCore/rendering/LayoutState.cpp (revision 238859) >+++ Source/WebCore/rendering/LayoutState.cpp (nonexistent) >@@ -1,348 +0,0 @@ >-/* >- * Copyright (C) 2007, 2013 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 "LayoutState.h" >- >-#include "RenderFragmentedFlow.h" >-#include "RenderInline.h" >-#include "RenderLayer.h" >-#include "RenderMultiColumnFlow.h" >-#include "RenderView.h" >-#include <wtf/WeakPtr.h> >- >-namespace WebCore { >- >-LayoutState::LayoutState(RenderElement& renderer, IsPaginated isPaginated) >- : m_clipped(false) >- , m_isPaginated(isPaginated == IsPaginated::Yes) >- , m_pageLogicalHeightChanged(false) >-#if !ASSERT_DISABLED >- , m_layoutDeltaXSaturated(false) >- , m_layoutDeltaYSaturated(false) >-#endif >-#ifndef NDEBUG >- , m_renderer(&renderer) >-#endif >-{ >- if (RenderElement* container = renderer.container()) { >- FloatPoint absContentPoint = container->localToAbsolute(FloatPoint(), UseTransforms); >- m_paintOffset = LayoutSize(absContentPoint.x(), absContentPoint.y()); >- >- if (container->hasOverflowClip()) { >- m_clipped = true; >- auto& containerBox = downcast<RenderBox>(*container); >- m_clipRect = LayoutRect(toLayoutPoint(m_paintOffset), containerBox.cachedSizeForOverflowClip()); >- m_paintOffset -= toLayoutSize(containerBox.scrollPosition()); >- } >- } >- if (m_isPaginated) { >- // This is just a flag for known page height (see RenderBlockFlow::checkForPaginationLogicalHeightChange). >- m_pageLogicalHeight = 1; >- } >-} >- >-LayoutState::LayoutState(const FrameViewLayoutContext::LayoutStateStack& layoutStateStack, RenderBox& renderer, const LayoutSize& offset, LayoutUnit pageLogicalHeight, bool pageLogicalHeightChanged) >- : m_clipped(false) >- , m_isPaginated(false) >- , m_pageLogicalHeightChanged(false) >-#if !ASSERT_DISABLED >- , m_layoutDeltaXSaturated(false) >- , m_layoutDeltaYSaturated(false) >-#endif >-#ifndef NDEBUG >- , m_renderer(&renderer) >-#endif >-{ >- if (!layoutStateStack.isEmpty()) { >- auto& ancestor = *layoutStateStack.last().get(); >- computeOffsets(ancestor, renderer, offset); >- computeClipRect(ancestor, renderer); >- } >- computePaginationInformation(layoutStateStack, renderer, pageLogicalHeight, pageLogicalHeightChanged); >-} >- >-void LayoutState::computeOffsets(const LayoutState& ancestor, RenderBox& renderer, LayoutSize offset) >-{ >- bool fixed = renderer.isFixedPositioned(); >- if (fixed) { >- FloatPoint fixedOffset = renderer.view().localToAbsolute(FloatPoint(), IsFixed); >- m_paintOffset = LayoutSize(fixedOffset.x(), fixedOffset.y()) + offset; >- } else >- m_paintOffset = ancestor.paintOffset() + offset; >- >- if (renderer.isOutOfFlowPositioned() && !fixed) { >- if (auto* container = renderer.container()) { >- if (container->isInFlowPositioned() && is<RenderInline>(*container)) >- m_paintOffset += downcast<RenderInline>(*container).offsetForInFlowPositionedInline(&renderer); >- } >- } >- >- m_layoutOffset = m_paintOffset; >- >- if (renderer.isInFlowPositioned() && renderer.hasLayer()) >- m_paintOffset += renderer.layer()->offsetForInFlowPosition(); >- >- if (renderer.hasOverflowClip()) >- m_paintOffset -= toLayoutSize(renderer.scrollPosition()); >- >- m_layoutDelta = ancestor.layoutDelta(); >-#if !ASSERT_DISABLED >- m_layoutDeltaXSaturated = ancestor.m_layoutDeltaXSaturated; >- m_layoutDeltaYSaturated = ancestor.m_layoutDeltaYSaturated; >-#endif >-} >- >-void LayoutState::computeClipRect(const LayoutState& ancestor, RenderBox& renderer) >-{ >- m_clipped = !renderer.isFixedPositioned() && ancestor.isClipped(); >- if (m_clipped) >- m_clipRect = ancestor.clipRect(); >- if (!renderer.hasOverflowClip()) >- return; >- >- auto paintOffsetForClipRect = toLayoutPoint(m_paintOffset + toLayoutSize(renderer.scrollPosition())); >- LayoutRect clipRect(paintOffsetForClipRect + renderer.view().frameView().layoutContext().layoutDelta(), renderer.cachedSizeForOverflowClip()); >- if (m_clipped) >- m_clipRect.intersect(clipRect); >- else >- m_clipRect = clipRect; >- m_clipped = true; >- // FIXME: <http://bugs.webkit.org/show_bug.cgi?id=13443> Apply control clip if present. >-} >- >-void LayoutState::computePaginationInformation(const FrameViewLayoutContext::LayoutStateStack& layoutStateStack, RenderBox& renderer, LayoutUnit pageLogicalHeight, bool pageLogicalHeightChanged) >-{ >- auto* ancestor = layoutStateStack.isEmpty() ? nullptr : layoutStateStack.last().get(); >- // If we establish a new page height, then cache the offset to the top of the first page. >- // We can compare this later on to figure out what part of the page we're actually on. >- if (pageLogicalHeight || renderer.isRenderFragmentedFlow()) { >- m_pageLogicalHeight = pageLogicalHeight; >- bool isFlipped = renderer.style().isFlippedBlocksWritingMode(); >- m_pageOffset = LayoutSize(m_layoutOffset.width() + (!isFlipped ? renderer.borderLeft() + renderer.paddingLeft() : renderer.borderRight() + renderer.paddingRight()), m_layoutOffset.height() + (!isFlipped ? renderer.borderTop() + renderer.paddingTop() : renderer.borderBottom() + renderer.paddingBottom())); >- m_pageLogicalHeightChanged = pageLogicalHeightChanged; >- m_isPaginated = true; >- } else if (ancestor) { >- // If we don't establish a new page height, then propagate the old page height and offset down. >- m_pageLogicalHeight = ancestor->pageLogicalHeight(); >- m_pageLogicalHeightChanged = ancestor->pageLogicalHeightChanged(); >- m_pageOffset = ancestor->pageOffset(); >- >- // Disable pagination for objects we don't support. For now this includes overflow:scroll/auto, inline blocks and writing mode roots. >- if (renderer.isUnsplittableForPagination()) { >- m_pageLogicalHeight = 0; >- m_isPaginated = false; >- } else >- m_isPaginated = m_pageLogicalHeight || renderer.enclosingFragmentedFlow(); >- } >- >- // Propagate line grid information. >- if (ancestor) >- propagateLineGridInfo(*ancestor, renderer); >- >- if (lineGrid() && (lineGrid()->style().writingMode() == renderer.style().writingMode()) && is<RenderMultiColumnFlow>(renderer)) >- computeLineGridPaginationOrigin(downcast<RenderMultiColumnFlow>(renderer)); >- >- // If we have a new grid to track, then add it to our set. >- if (renderer.style().lineGrid() != RenderStyle::initialLineGrid() && is<RenderBlockFlow>(renderer)) >- establishLineGrid(layoutStateStack, downcast<RenderBlockFlow>(renderer)); >-} >- >-LayoutUnit LayoutState::pageLogicalOffset(RenderBox* child, LayoutUnit childLogicalOffset) const >-{ >- if (child->isHorizontalWritingMode()) >- return m_layoutOffset.height() + childLogicalOffset - m_pageOffset.height(); >- return m_layoutOffset.width() + childLogicalOffset - m_pageOffset.width(); >-} >- >-void LayoutState::computeLineGridPaginationOrigin(const RenderMultiColumnFlow& multicol) >-{ >- if (!isPaginated() || !pageLogicalHeight()) >- return; >- >- if (!multicol.progressionIsInline()) >- return; >- // We need to cache a line grid pagination origin so that we understand how to reset the line grid >- // at the top of each column. >- // Get the current line grid and offset. >- ASSERT(m_lineGrid); >- // Get the hypothetical line box used to establish the grid. >- auto* lineGridBox = m_lineGrid->lineGridBox(); >- if (!lineGridBox) >- return; >- >- // Now determine our position on the grid. Our baseline needs to be adjusted to the nearest baseline multiple >- // as established by the line box. >- // FIXME: Need to handle crazy line-box-contain values that cause the root line box to not be considered. I assume >- // the grid should honor line-box-contain. >- LayoutUnit gridLineHeight = lineGridBox->lineBottomWithLeading() - lineGridBox->lineTopWithLeading(); >- if (!gridLineHeight) >- return; >- >- bool isHorizontalWritingMode = m_lineGrid->isHorizontalWritingMode(); >- LayoutUnit lineGridBlockOffset = isHorizontalWritingMode ? m_lineGridOffset.height() : m_lineGridOffset.width(); >- LayoutUnit firstLineTopWithLeading = lineGridBlockOffset + lineGridBox->lineTopWithLeading(); >- LayoutUnit pageLogicalTop = isHorizontalWritingMode ? m_pageOffset.height() : m_pageOffset.width(); >- if (pageLogicalTop <= firstLineTopWithLeading) >- return; >- >- // Shift to the next highest line grid multiple past the page logical top. Cache the delta >- // between this new value and the page logical top as the pagination origin. >- LayoutUnit remainder = roundToInt(pageLogicalTop - firstLineTopWithLeading) % roundToInt(gridLineHeight); >- LayoutUnit paginationDelta = gridLineHeight - remainder; >- if (isHorizontalWritingMode) >- m_lineGridPaginationOrigin.setHeight(paginationDelta); >- else >- m_lineGridPaginationOrigin.setWidth(paginationDelta); >-} >- >-void LayoutState::propagateLineGridInfo(const LayoutState& ancestor, RenderBox& renderer) >-{ >- // Disable line grids for objects we don't support. For now this includes overflow:scroll/auto, inline blocks and >- // writing mode roots. >- if (renderer.isUnsplittableForPagination()) >- return; >- >- m_lineGrid = makeWeakPtr(ancestor.lineGrid()); >- m_lineGridOffset = ancestor.lineGridOffset(); >- m_lineGridPaginationOrigin = ancestor.lineGridPaginationOrigin(); >-} >- >-void LayoutState::establishLineGrid(const FrameViewLayoutContext::LayoutStateStack& layoutStateStack, RenderBlockFlow& renderer) >-{ >- // First check to see if this grid has been established already. >- if (m_lineGrid) { >- if (m_lineGrid->style().lineGrid() == renderer.style().lineGrid()) >- return; >- auto* currentGrid = m_lineGrid.get(); >- for (int i = layoutStateStack.size() - 1; i <= 0; --i) { >- auto& currentState = *layoutStateStack[i].get(); >- if (currentState.m_lineGrid == currentGrid) >- continue; >- currentGrid = currentState.lineGrid(); >- if (!currentGrid) >- break; >- if (currentGrid->style().lineGrid() == renderer.style().lineGrid()) { >- m_lineGrid = makeWeakPtr(currentGrid); >- m_lineGridOffset = currentState.m_lineGridOffset; >- return; >- } >- } >- } >- >- // We didn't find an already-established grid with this identifier. Our render object establishes the grid. >- m_lineGrid = makeWeakPtr(renderer); >- m_lineGridOffset = m_layoutOffset; >-} >- >-void LayoutState::addLayoutDelta(LayoutSize delta) >-{ >- m_layoutDelta += delta; >-#if !ASSERT_DISABLED >- m_layoutDeltaXSaturated |= m_layoutDelta.width() == LayoutUnit::max() || m_layoutDelta.width() == LayoutUnit::min(); >- m_layoutDeltaYSaturated |= m_layoutDelta.height() == LayoutUnit::max() || m_layoutDelta.height() == LayoutUnit::min(); >-#endif >-} >- >-#if !ASSERT_DISABLED >-bool LayoutState::layoutDeltaMatches(LayoutSize delta) const >-{ >- return (delta.width() == m_layoutDelta.width() || m_layoutDeltaXSaturated) && (delta.height() == m_layoutDelta.height() || m_layoutDeltaYSaturated); >-} >-#endif >- >-LayoutStateMaintainer::LayoutStateMaintainer(RenderBox& root, LayoutSize offset, bool disablePaintOffsetCache, LayoutUnit pageHeight, bool pageHeightChanged) >- : m_context(root.view().frameView().layoutContext()) >- , m_paintOffsetCacheIsDisabled(disablePaintOffsetCache) >-{ >- m_didPushLayoutState = m_context.pushLayoutState(root, offset, pageHeight, pageHeightChanged); >- if (m_didPushLayoutState && m_paintOffsetCacheIsDisabled) >- m_context.disablePaintOffsetCache(); >-} >- >-LayoutStateMaintainer::~LayoutStateMaintainer() >-{ >- if (!m_didPushLayoutState) >- return; >- m_context.popLayoutState(); >- if (m_paintOffsetCacheIsDisabled) >- m_context.enablePaintOffsetCache(); >-} >- >-LayoutStateDisabler::LayoutStateDisabler(FrameViewLayoutContext& context) >- : m_context(context) >-{ >- m_context.disablePaintOffsetCache(); >-} >- >-LayoutStateDisabler::~LayoutStateDisabler() >-{ >- m_context.enablePaintOffsetCache(); >-} >- >-static bool shouldDisablePaintOffsetCacheForSubtree(RenderElement& subtreeLayoutRoot) >-{ >- for (auto* renderer = &subtreeLayoutRoot; renderer; renderer = renderer->container()) { >- if (renderer->hasTransform() || renderer->hasReflection()) >- return true; >- } >- return false; >-} >- >-SubtreeLayoutStateMaintainer::SubtreeLayoutStateMaintainer(RenderElement* subtreeLayoutRoot) >-{ >- if (subtreeLayoutRoot) { >- m_context = &subtreeLayoutRoot->view().frameView().layoutContext(); >- m_context->pushLayoutState(*subtreeLayoutRoot); >- if (shouldDisablePaintOffsetCacheForSubtree(*subtreeLayoutRoot)) { >- m_context->disablePaintOffsetCache(); >- m_didDisablePaintOffsetCache = true; >- } >- } >-} >- >-SubtreeLayoutStateMaintainer::~SubtreeLayoutStateMaintainer() >-{ >- if (m_context) { >- m_context->popLayoutState(); >- if (m_didDisablePaintOffsetCache) >- m_context->enablePaintOffsetCache(); >- } >-} >- >-PaginatedLayoutStateMaintainer::PaginatedLayoutStateMaintainer(RenderBlockFlow& flow) >- : m_context(flow.view().frameView().layoutContext()) >- , m_pushed(m_context.pushLayoutStateForPaginationIfNeeded(flow)) >-{ >-} >- >-PaginatedLayoutStateMaintainer::~PaginatedLayoutStateMaintainer() >-{ >- if (m_pushed) >- m_context.popLayoutState(); >-} >- >-} // namespace WebCore >- > >Property changes on: Source/WebCore/rendering/LayoutState.cpp >___________________________________________________________________ >Deleted: svn:eol-style >## -1 +0,0 ## >-native >\ No newline at end of property >Index: Source/WebCore/rendering/LayoutState.h >=================================================================== >--- Source/WebCore/rendering/LayoutState.h (revision 238859) >+++ Source/WebCore/rendering/LayoutState.h (nonexistent) >@@ -1,179 +0,0 @@ >-/* >- * Copyright (C) 2007, 2013 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 "FrameViewLayoutContext.h" >-#include "LayoutRect.h" >-#include <wtf/Noncopyable.h> >- >-namespace WebCore { >- >-class RenderBlockFlow; >-class RenderBox; >-class RenderElement; >-class RenderFragmentedFlow; >-class RenderMultiColumnFlow; >-class RenderObject; >- >-class LayoutState { >- WTF_MAKE_NONCOPYABLE(LayoutState); WTF_MAKE_FAST_ALLOCATED; >- >-public: >- LayoutState() >- : m_clipped(false) >- , m_isPaginated(false) >- , m_pageLogicalHeightChanged(false) >-#if !ASSERT_DISABLED >- , m_layoutDeltaXSaturated(false) >- , m_layoutDeltaYSaturated(false) >-#endif >- { >- } >- LayoutState(const FrameViewLayoutContext::LayoutStateStack&, RenderBox&, const LayoutSize& offset, LayoutUnit pageHeight, bool pageHeightChanged); >- enum class IsPaginated { No, Yes }; >- explicit LayoutState(RenderElement&, IsPaginated = IsPaginated::No); >- >- bool isPaginated() const { return m_isPaginated; } >- >- // The page logical offset is the object's offset from the top of the page in the page progression >- // direction (so an x-offset in vertical text and a y-offset for horizontal text). >- LayoutUnit pageLogicalOffset(RenderBox*, LayoutUnit childLogicalOffset) const; >- >- LayoutUnit pageLogicalHeight() const { return m_pageLogicalHeight; } >- bool pageLogicalHeightChanged() const { return m_pageLogicalHeightChanged; } >- >- RenderBlockFlow* lineGrid() const { return m_lineGrid.get(); } >- LayoutSize lineGridOffset() const { return m_lineGridOffset; } >- LayoutSize lineGridPaginationOrigin() const { return m_lineGridPaginationOrigin; } >- >- LayoutSize paintOffset() const { return m_paintOffset; } >- LayoutSize layoutOffset() const { return m_layoutOffset; } >- >- LayoutSize pageOffset() const { return m_pageOffset; } >- >- bool needsBlockDirectionLocationSetBeforeLayout() const { return m_lineGrid || (m_isPaginated && m_pageLogicalHeight); } >- >-#ifndef NDEBUG >- RenderElement* renderer() const { return m_renderer; } >-#endif >- LayoutRect clipRect() const { return m_clipRect; } >- bool isClipped() const { return m_clipped; } >- >- void addLayoutDelta(LayoutSize); >- LayoutSize layoutDelta() const { return m_layoutDelta; } >-#if !ASSERT_DISABLED >- bool layoutDeltaMatches(LayoutSize) const; >-#endif >- >-private: >- void computeOffsets(const LayoutState& ancestor, RenderBox&, LayoutSize offset); >- void computeClipRect(const LayoutState& ancestor, RenderBox&); >- // FIXME: webkit.org/b/179440 these functions should be part of the pagination code/FrameViewLayoutContext. >- void computePaginationInformation(const FrameViewLayoutContext::LayoutStateStack&, RenderBox&, LayoutUnit pageLogicalHeight, bool pageLogicalHeightChanged); >- void propagateLineGridInfo(const LayoutState& ancestor, RenderBox&); >- void establishLineGrid(const FrameViewLayoutContext::LayoutStateStack&, RenderBlockFlow&); >- void computeLineGridPaginationOrigin(const RenderMultiColumnFlow&); >- >- // Do not add anything apart from bitfields. See https://bugs.webkit.org/show_bug.cgi?id=100173 >- bool m_clipped : 1; >- bool m_isPaginated : 1; >- // If our page height has changed, this will force all blocks to relayout. >- bool m_pageLogicalHeightChanged : 1; >-#if !ASSERT_DISABLED >- bool m_layoutDeltaXSaturated : 1; >- bool m_layoutDeltaYSaturated : 1; >-#endif >- // The current line grid that we're snapping to and the offset of the start of the grid. >- WeakPtr<RenderBlockFlow> m_lineGrid; >- >- // FIXME: Distinguish between the layout clip rect and the paint clip rect which may be larger, >- // e.g., because of composited scrolling. >- LayoutRect m_clipRect; >- >- // x/y offset from layout root. Includes in-flow positioning and scroll offsets. >- LayoutSize m_paintOffset; >- // x/y offset from layout root. Does not include in-flow positioning or scroll offsets. >- LayoutSize m_layoutOffset; >- // Transient offset from the final position of the object >- // used to ensure that repaints happen in the correct place. >- // This is a total delta accumulated from the root. >- LayoutSize m_layoutDelta; >- >- // The current page height for the pagination model that encloses us. >- LayoutUnit m_pageLogicalHeight; >- // The offset of the start of the first page in the nearest enclosing pagination model. >- LayoutSize m_pageOffset; >- LayoutSize m_lineGridOffset; >- LayoutSize m_lineGridPaginationOrigin; >-#ifndef NDEBUG >- RenderElement* m_renderer { nullptr }; >-#endif >-}; >- >-// Stack-based class to assist with LayoutState push/pop >-class LayoutStateMaintainer { >- WTF_MAKE_NONCOPYABLE(LayoutStateMaintainer); >-public: >- explicit LayoutStateMaintainer(RenderBox&, LayoutSize offset, bool disableState = false, LayoutUnit pageHeight = 0_lu, bool pageHeightChanged = false); >- ~LayoutStateMaintainer(); >- >-private: >- FrameViewLayoutContext& m_context; >- bool m_paintOffsetCacheIsDisabled { false }; >- bool m_didPushLayoutState { false }; >-}; >- >-class SubtreeLayoutStateMaintainer { >-public: >- SubtreeLayoutStateMaintainer(RenderElement* subtreeLayoutRoot); >- ~SubtreeLayoutStateMaintainer(); >- >-private: >- FrameViewLayoutContext* m_context { nullptr }; >- bool m_didDisablePaintOffsetCache { false }; >-}; >- >-class LayoutStateDisabler { >- WTF_MAKE_NONCOPYABLE(LayoutStateDisabler); >-public: >- LayoutStateDisabler(FrameViewLayoutContext&); >- ~LayoutStateDisabler(); >- >-private: >- FrameViewLayoutContext& m_context; >-}; >- >-class PaginatedLayoutStateMaintainer { >-public: >- PaginatedLayoutStateMaintainer(RenderBlockFlow&); >- ~PaginatedLayoutStateMaintainer(); >- >-private: >- FrameViewLayoutContext& m_context; >- bool m_pushed { false }; >-}; >- >-} // namespace WebCore > >Property changes on: Source/WebCore/rendering/LayoutState.h >___________________________________________________________________ >Deleted: svn:eol-style >## -1 +0,0 ## >-native >\ No newline at end of property >Index: Source/WebCore/rendering/RenderBlock.cpp >=================================================================== >--- Source/WebCore/rendering/RenderBlock.cpp (revision 238859) >+++ Source/WebCore/rendering/RenderBlock.cpp (working copy) >@@ -55,6 +55,7 @@ > #include "RenderInline.h" > #include "RenderIterator.h" > #include "RenderLayer.h" >+#include "RenderLayoutState.h" > #include "RenderListMarker.h" > #include "RenderMenuList.h" > #include "RenderSVGResourceClipper.h" >Index: Source/WebCore/rendering/RenderBlock.h >=================================================================== >--- Source/WebCore/rendering/RenderBlock.h (revision 238859) >+++ Source/WebCore/rendering/RenderBlock.h (working copy) >@@ -31,7 +31,6 @@ > > namespace WebCore { > >-class LayoutState; > class LineLayoutState; > class LogicalSelectionOffsetCaches; > class RenderInline; >Index: Source/WebCore/rendering/RenderBlockFlow.cpp >=================================================================== >--- Source/WebCore/rendering/RenderBlockFlow.cpp (revision 238859) >+++ Source/WebCore/rendering/RenderBlockFlow.cpp (working copy) >@@ -35,13 +35,13 @@ > #include "HitTestLocation.h" > #include "InlineTextBox.h" > #include "LayoutRepainter.h" >-#include "LayoutState.h" > #include "Logging.h" > #include "RenderCombineText.h" > #include "RenderFlexibleBox.h" > #include "RenderInline.h" > #include "RenderIterator.h" > #include "RenderLayer.h" >+#include "RenderLayoutState.h" > #include "RenderLineBreak.h" > #include "RenderListItem.h" > #include "RenderMarquee.h" >@@ -3842,7 +3842,7 @@ void RenderBlockFlow::checkForPagination > RenderFragmentedFlow& fragmentedFlow = downcast<RenderFragmentedFlow>(*this); > > // FIXME: This is a hack to always make sure we have a page logical height, if said height >- // is known. The page logical height thing in LayoutState is meaningless for flow >+ // is known. The page logical height thing in RenderLayoutState is meaningless for flow > // thread-based pagination (page height isn't necessarily uniform throughout the flow > // thread), but as long as it is used universally as a means to determine whether page > // height is known or not, we need this. Page height is unknown when column balancing is >Index: Source/WebCore/rendering/RenderBlockLineLayout.cpp >=================================================================== >--- Source/WebCore/rendering/RenderBlockLineLayout.cpp (revision 238859) >+++ Source/WebCore/rendering/RenderBlockLineLayout.cpp (working copy) >@@ -33,12 +33,12 @@ > #include "InlineIterator.h" > #include "InlineTextBox.h" > #include "InlineTextBoxStyle.h" >-#include "LayoutState.h" > #include "LineLayoutState.h" > #include "Logging.h" > #include "RenderBlockFlow.h" > #include "RenderFragmentContainer.h" > #include "RenderFragmentedFlow.h" >+#include "RenderLayoutState.h" > #include "RenderLineBreak.h" > #include "RenderRubyBase.h" > #include "RenderRubyText.h" >Index: Source/WebCore/rendering/RenderBox.cpp >=================================================================== >--- Source/WebCore/rendering/RenderBox.cpp (revision 238859) >+++ Source/WebCore/rendering/RenderBox.cpp (working copy) >@@ -47,7 +47,6 @@ > #include "HTMLTextAreaElement.h" > #include "HitTestResult.h" > #include "InlineElementBox.h" >-#include "LayoutState.h" > #include "Page.h" > #include "PaintInfo.h" > #include "RenderBoxFragmentInfo.h" >@@ -61,6 +60,7 @@ > #include "RenderIterator.h" > #include "RenderLayer.h" > #include "RenderLayerCompositor.h" >+#include "RenderLayoutState.h" > #include "RenderMultiColumnFlow.h" > #include "RenderTableCell.h" > #include "RenderTheme.h" >Index: Source/WebCore/rendering/RenderEmbeddedObject.cpp >=================================================================== >--- Source/WebCore/rendering/RenderEmbeddedObject.cpp (revision 238859) >+++ Source/WebCore/rendering/RenderEmbeddedObject.cpp (working copy) >@@ -42,7 +42,6 @@ > #include "HTMLParamElement.h" > #include "HTMLPlugInElement.h" > #include "HitTestResult.h" >-#include "LayoutState.h" > #include "LocalizedStrings.h" > #include "MouseEvent.h" > #include "Page.h" >@@ -50,6 +49,7 @@ > #include "Path.h" > #include "PlatformMouseEvent.h" > #include "PluginViewBase.h" >+#include "RenderLayoutState.h" > #include "RenderTheme.h" > #include "RenderView.h" > #include "Settings.h" >Index: Source/WebCore/rendering/RenderFragmentedFlow.cpp >=================================================================== >--- Source/WebCore/rendering/RenderFragmentedFlow.cpp (revision 238859) >+++ Source/WebCore/rendering/RenderFragmentedFlow.cpp (working copy) >@@ -33,7 +33,6 @@ > #include "HitTestRequest.h" > #include "HitTestResult.h" > #include "InlineElementBox.h" >-#include "LayoutState.h" > #include "Node.h" > #include "PODIntervalTree.h" > #include "RenderBoxFragmentInfo.h" >@@ -41,6 +40,7 @@ > #include "RenderInline.h" > #include "RenderLayer.h" > #include "RenderLayerCompositor.h" >+#include "RenderLayoutState.h" > #include "RenderTableCell.h" > #include "RenderTableSection.h" > #include "RenderTheme.h" >Index: Source/WebCore/rendering/RenderGrid.cpp >=================================================================== >--- Source/WebCore/rendering/RenderGrid.cpp (revision 238859) >+++ Source/WebCore/rendering/RenderGrid.cpp (working copy) >@@ -32,9 +32,9 @@ > #include "GridPositionsResolver.h" > #include "GridTrackSizingAlgorithm.h" > #include "LayoutRepainter.h" >-#include "LayoutState.h" > #include "RenderChildIterator.h" > #include "RenderLayer.h" >+#include "RenderLayoutState.h" > #include "RenderTreeBuilder.h" > #include "RenderView.h" > #include <cstdlib> >Index: Source/WebCore/rendering/RenderImage.cpp >=================================================================== >--- Source/WebCore/rendering/RenderImage.cpp (revision 238859) >+++ Source/WebCore/rendering/RenderImage.cpp (working copy) >@@ -45,11 +45,11 @@ > #include "HTMLNames.h" > #include "HitTestResult.h" > #include "InlineElementBox.h" >-#include "LayoutState.h" > #include "Page.h" > #include "PaintInfo.h" > #include "RenderFragmentedFlow.h" > #include "RenderImageResourceStyleImage.h" >+#include "RenderLayoutState.h" > #include "RenderTheme.h" > #include "RenderView.h" > #include "RuntimeEnabledFeatures.h" >Index: Source/WebCore/rendering/RenderInline.cpp >=================================================================== >--- Source/WebCore/rendering/RenderInline.cpp (revision 238859) >+++ Source/WebCore/rendering/RenderInline.cpp (working copy) >@@ -30,7 +30,6 @@ > #include "HitTestResult.h" > #include "InlineElementBox.h" > #include "InlineTextBox.h" >-#include "LayoutState.h" > #include "RenderBlock.h" > #include "RenderChildIterator.h" > #include "RenderFragmentedFlow.h" >@@ -38,6 +37,7 @@ > #include "RenderGeometryMap.h" > #include "RenderIterator.h" > #include "RenderLayer.h" >+#include "RenderLayoutState.h" > #include "RenderLineBreak.h" > #include "RenderListMarker.h" > #include "RenderTable.h" >Index: Source/WebCore/rendering/RenderLayoutState.cpp >=================================================================== >--- Source/WebCore/rendering/RenderLayoutState.cpp (revision 238859) (from Source/WebCore/rendering/LayoutState.cpp:238859) >+++ Source/WebCore/rendering/RenderLayoutState.cpp (working copy) >@@ -0,0 +1,348 @@ >+/* >+ * Copyright (C) 2007, 2013 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 "LayoutState.h" >+ >+#include "RenderFragmentedFlow.h" >+#include "RenderInline.h" >+#include "RenderLayer.h" >+#include "RenderMultiColumnFlow.h" >+#include "RenderView.h" >+#include <wtf/WeakPtr.h> >+ >+namespace WebCore { >+ >+LayoutState::LayoutState(RenderElement& renderer, IsPaginated isPaginated) >+ : m_clipped(false) >+ , m_isPaginated(isPaginated == IsPaginated::Yes) >+ , m_pageLogicalHeightChanged(false) >+#if !ASSERT_DISABLED >+ , m_layoutDeltaXSaturated(false) >+ , m_layoutDeltaYSaturated(false) >+#endif >+#ifndef NDEBUG >+ , m_renderer(&renderer) >+#endif >+{ >+ if (RenderElement* container = renderer.container()) { >+ FloatPoint absContentPoint = container->localToAbsolute(FloatPoint(), UseTransforms); >+ m_paintOffset = LayoutSize(absContentPoint.x(), absContentPoint.y()); >+ >+ if (container->hasOverflowClip()) { >+ m_clipped = true; >+ auto& containerBox = downcast<RenderBox>(*container); >+ m_clipRect = LayoutRect(toLayoutPoint(m_paintOffset), containerBox.cachedSizeForOverflowClip()); >+ m_paintOffset -= toLayoutSize(containerBox.scrollPosition()); >+ } >+ } >+ if (m_isPaginated) { >+ // This is just a flag for known page height (see RenderBlockFlow::checkForPaginationLogicalHeightChange). >+ m_pageLogicalHeight = 1; >+ } >+} >+ >+LayoutState::LayoutState(const FrameViewLayoutContext::LayoutStateStack& layoutStateStack, RenderBox& renderer, const LayoutSize& offset, LayoutUnit pageLogicalHeight, bool pageLogicalHeightChanged) >+ : m_clipped(false) >+ , m_isPaginated(false) >+ , m_pageLogicalHeightChanged(false) >+#if !ASSERT_DISABLED >+ , m_layoutDeltaXSaturated(false) >+ , m_layoutDeltaYSaturated(false) >+#endif >+#ifndef NDEBUG >+ , m_renderer(&renderer) >+#endif >+{ >+ if (!layoutStateStack.isEmpty()) { >+ auto& ancestor = *layoutStateStack.last().get(); >+ computeOffsets(ancestor, renderer, offset); >+ computeClipRect(ancestor, renderer); >+ } >+ computePaginationInformation(layoutStateStack, renderer, pageLogicalHeight, pageLogicalHeightChanged); >+} >+ >+void LayoutState::computeOffsets(const LayoutState& ancestor, RenderBox& renderer, LayoutSize offset) >+{ >+ bool fixed = renderer.isFixedPositioned(); >+ if (fixed) { >+ FloatPoint fixedOffset = renderer.view().localToAbsolute(FloatPoint(), IsFixed); >+ m_paintOffset = LayoutSize(fixedOffset.x(), fixedOffset.y()) + offset; >+ } else >+ m_paintOffset = ancestor.paintOffset() + offset; >+ >+ if (renderer.isOutOfFlowPositioned() && !fixed) { >+ if (auto* container = renderer.container()) { >+ if (container->isInFlowPositioned() && is<RenderInline>(*container)) >+ m_paintOffset += downcast<RenderInline>(*container).offsetForInFlowPositionedInline(&renderer); >+ } >+ } >+ >+ m_layoutOffset = m_paintOffset; >+ >+ if (renderer.isInFlowPositioned() && renderer.hasLayer()) >+ m_paintOffset += renderer.layer()->offsetForInFlowPosition(); >+ >+ if (renderer.hasOverflowClip()) >+ m_paintOffset -= toLayoutSize(renderer.scrollPosition()); >+ >+ m_layoutDelta = ancestor.layoutDelta(); >+#if !ASSERT_DISABLED >+ m_layoutDeltaXSaturated = ancestor.m_layoutDeltaXSaturated; >+ m_layoutDeltaYSaturated = ancestor.m_layoutDeltaYSaturated; >+#endif >+} >+ >+void LayoutState::computeClipRect(const LayoutState& ancestor, RenderBox& renderer) >+{ >+ m_clipped = !renderer.isFixedPositioned() && ancestor.isClipped(); >+ if (m_clipped) >+ m_clipRect = ancestor.clipRect(); >+ if (!renderer.hasOverflowClip()) >+ return; >+ >+ auto paintOffsetForClipRect = toLayoutPoint(m_paintOffset + toLayoutSize(renderer.scrollPosition())); >+ LayoutRect clipRect(paintOffsetForClipRect + renderer.view().frameView().layoutContext().layoutDelta(), renderer.cachedSizeForOverflowClip()); >+ if (m_clipped) >+ m_clipRect.intersect(clipRect); >+ else >+ m_clipRect = clipRect; >+ m_clipped = true; >+ // FIXME: <http://bugs.webkit.org/show_bug.cgi?id=13443> Apply control clip if present. >+} >+ >+void LayoutState::computePaginationInformation(const FrameViewLayoutContext::LayoutStateStack& layoutStateStack, RenderBox& renderer, LayoutUnit pageLogicalHeight, bool pageLogicalHeightChanged) >+{ >+ auto* ancestor = layoutStateStack.isEmpty() ? nullptr : layoutStateStack.last().get(); >+ // If we establish a new page height, then cache the offset to the top of the first page. >+ // We can compare this later on to figure out what part of the page we're actually on. >+ if (pageLogicalHeight || renderer.isRenderFragmentedFlow()) { >+ m_pageLogicalHeight = pageLogicalHeight; >+ bool isFlipped = renderer.style().isFlippedBlocksWritingMode(); >+ m_pageOffset = LayoutSize(m_layoutOffset.width() + (!isFlipped ? renderer.borderLeft() + renderer.paddingLeft() : renderer.borderRight() + renderer.paddingRight()), m_layoutOffset.height() + (!isFlipped ? renderer.borderTop() + renderer.paddingTop() : renderer.borderBottom() + renderer.paddingBottom())); >+ m_pageLogicalHeightChanged = pageLogicalHeightChanged; >+ m_isPaginated = true; >+ } else if (ancestor) { >+ // If we don't establish a new page height, then propagate the old page height and offset down. >+ m_pageLogicalHeight = ancestor->pageLogicalHeight(); >+ m_pageLogicalHeightChanged = ancestor->pageLogicalHeightChanged(); >+ m_pageOffset = ancestor->pageOffset(); >+ >+ // Disable pagination for objects we don't support. For now this includes overflow:scroll/auto, inline blocks and writing mode roots. >+ if (renderer.isUnsplittableForPagination()) { >+ m_pageLogicalHeight = 0; >+ m_isPaginated = false; >+ } else >+ m_isPaginated = m_pageLogicalHeight || renderer.enclosingFragmentedFlow(); >+ } >+ >+ // Propagate line grid information. >+ if (ancestor) >+ propagateLineGridInfo(*ancestor, renderer); >+ >+ if (lineGrid() && (lineGrid()->style().writingMode() == renderer.style().writingMode()) && is<RenderMultiColumnFlow>(renderer)) >+ computeLineGridPaginationOrigin(downcast<RenderMultiColumnFlow>(renderer)); >+ >+ // If we have a new grid to track, then add it to our set. >+ if (renderer.style().lineGrid() != RenderStyle::initialLineGrid() && is<RenderBlockFlow>(renderer)) >+ establishLineGrid(layoutStateStack, downcast<RenderBlockFlow>(renderer)); >+} >+ >+LayoutUnit LayoutState::pageLogicalOffset(RenderBox* child, LayoutUnit childLogicalOffset) const >+{ >+ if (child->isHorizontalWritingMode()) >+ return m_layoutOffset.height() + childLogicalOffset - m_pageOffset.height(); >+ return m_layoutOffset.width() + childLogicalOffset - m_pageOffset.width(); >+} >+ >+void LayoutState::computeLineGridPaginationOrigin(const RenderMultiColumnFlow& multicol) >+{ >+ if (!isPaginated() || !pageLogicalHeight()) >+ return; >+ >+ if (!multicol.progressionIsInline()) >+ return; >+ // We need to cache a line grid pagination origin so that we understand how to reset the line grid >+ // at the top of each column. >+ // Get the current line grid and offset. >+ ASSERT(m_lineGrid); >+ // Get the hypothetical line box used to establish the grid. >+ auto* lineGridBox = m_lineGrid->lineGridBox(); >+ if (!lineGridBox) >+ return; >+ >+ // Now determine our position on the grid. Our baseline needs to be adjusted to the nearest baseline multiple >+ // as established by the line box. >+ // FIXME: Need to handle crazy line-box-contain values that cause the root line box to not be considered. I assume >+ // the grid should honor line-box-contain. >+ LayoutUnit gridLineHeight = lineGridBox->lineBottomWithLeading() - lineGridBox->lineTopWithLeading(); >+ if (!gridLineHeight) >+ return; >+ >+ bool isHorizontalWritingMode = m_lineGrid->isHorizontalWritingMode(); >+ LayoutUnit lineGridBlockOffset = isHorizontalWritingMode ? m_lineGridOffset.height() : m_lineGridOffset.width(); >+ LayoutUnit firstLineTopWithLeading = lineGridBlockOffset + lineGridBox->lineTopWithLeading(); >+ LayoutUnit pageLogicalTop = isHorizontalWritingMode ? m_pageOffset.height() : m_pageOffset.width(); >+ if (pageLogicalTop <= firstLineTopWithLeading) >+ return; >+ >+ // Shift to the next highest line grid multiple past the page logical top. Cache the delta >+ // between this new value and the page logical top as the pagination origin. >+ LayoutUnit remainder = roundToInt(pageLogicalTop - firstLineTopWithLeading) % roundToInt(gridLineHeight); >+ LayoutUnit paginationDelta = gridLineHeight - remainder; >+ if (isHorizontalWritingMode) >+ m_lineGridPaginationOrigin.setHeight(paginationDelta); >+ else >+ m_lineGridPaginationOrigin.setWidth(paginationDelta); >+} >+ >+void LayoutState::propagateLineGridInfo(const LayoutState& ancestor, RenderBox& renderer) >+{ >+ // Disable line grids for objects we don't support. For now this includes overflow:scroll/auto, inline blocks and >+ // writing mode roots. >+ if (renderer.isUnsplittableForPagination()) >+ return; >+ >+ m_lineGrid = makeWeakPtr(ancestor.lineGrid()); >+ m_lineGridOffset = ancestor.lineGridOffset(); >+ m_lineGridPaginationOrigin = ancestor.lineGridPaginationOrigin(); >+} >+ >+void LayoutState::establishLineGrid(const FrameViewLayoutContext::LayoutStateStack& layoutStateStack, RenderBlockFlow& renderer) >+{ >+ // First check to see if this grid has been established already. >+ if (m_lineGrid) { >+ if (m_lineGrid->style().lineGrid() == renderer.style().lineGrid()) >+ return; >+ auto* currentGrid = m_lineGrid.get(); >+ for (int i = layoutStateStack.size() - 1; i <= 0; --i) { >+ auto& currentState = *layoutStateStack[i].get(); >+ if (currentState.m_lineGrid == currentGrid) >+ continue; >+ currentGrid = currentState.lineGrid(); >+ if (!currentGrid) >+ break; >+ if (currentGrid->style().lineGrid() == renderer.style().lineGrid()) { >+ m_lineGrid = makeWeakPtr(currentGrid); >+ m_lineGridOffset = currentState.m_lineGridOffset; >+ return; >+ } >+ } >+ } >+ >+ // We didn't find an already-established grid with this identifier. Our render object establishes the grid. >+ m_lineGrid = makeWeakPtr(renderer); >+ m_lineGridOffset = m_layoutOffset; >+} >+ >+void LayoutState::addLayoutDelta(LayoutSize delta) >+{ >+ m_layoutDelta += delta; >+#if !ASSERT_DISABLED >+ m_layoutDeltaXSaturated |= m_layoutDelta.width() == LayoutUnit::max() || m_layoutDelta.width() == LayoutUnit::min(); >+ m_layoutDeltaYSaturated |= m_layoutDelta.height() == LayoutUnit::max() || m_layoutDelta.height() == LayoutUnit::min(); >+#endif >+} >+ >+#if !ASSERT_DISABLED >+bool LayoutState::layoutDeltaMatches(LayoutSize delta) const >+{ >+ return (delta.width() == m_layoutDelta.width() || m_layoutDeltaXSaturated) && (delta.height() == m_layoutDelta.height() || m_layoutDeltaYSaturated); >+} >+#endif >+ >+LayoutStateMaintainer::LayoutStateMaintainer(RenderBox& root, LayoutSize offset, bool disablePaintOffsetCache, LayoutUnit pageHeight, bool pageHeightChanged) >+ : m_context(root.view().frameView().layoutContext()) >+ , m_paintOffsetCacheIsDisabled(disablePaintOffsetCache) >+{ >+ m_didPushLayoutState = m_context.pushLayoutState(root, offset, pageHeight, pageHeightChanged); >+ if (m_didPushLayoutState && m_paintOffsetCacheIsDisabled) >+ m_context.disablePaintOffsetCache(); >+} >+ >+LayoutStateMaintainer::~LayoutStateMaintainer() >+{ >+ if (!m_didPushLayoutState) >+ return; >+ m_context.popLayoutState(); >+ if (m_paintOffsetCacheIsDisabled) >+ m_context.enablePaintOffsetCache(); >+} >+ >+LayoutStateDisabler::LayoutStateDisabler(FrameViewLayoutContext& context) >+ : m_context(context) >+{ >+ m_context.disablePaintOffsetCache(); >+} >+ >+LayoutStateDisabler::~LayoutStateDisabler() >+{ >+ m_context.enablePaintOffsetCache(); >+} >+ >+static bool shouldDisablePaintOffsetCacheForSubtree(RenderElement& subtreeLayoutRoot) >+{ >+ for (auto* renderer = &subtreeLayoutRoot; renderer; renderer = renderer->container()) { >+ if (renderer->hasTransform() || renderer->hasReflection()) >+ return true; >+ } >+ return false; >+} >+ >+SubtreeLayoutStateMaintainer::SubtreeLayoutStateMaintainer(RenderElement* subtreeLayoutRoot) >+{ >+ if (subtreeLayoutRoot) { >+ m_context = &subtreeLayoutRoot->view().frameView().layoutContext(); >+ m_context->pushLayoutState(*subtreeLayoutRoot); >+ if (shouldDisablePaintOffsetCacheForSubtree(*subtreeLayoutRoot)) { >+ m_context->disablePaintOffsetCache(); >+ m_didDisablePaintOffsetCache = true; >+ } >+ } >+} >+ >+SubtreeLayoutStateMaintainer::~SubtreeLayoutStateMaintainer() >+{ >+ if (m_context) { >+ m_context->popLayoutState(); >+ if (m_didDisablePaintOffsetCache) >+ m_context->enablePaintOffsetCache(); >+ } >+} >+ >+PaginatedLayoutStateMaintainer::PaginatedLayoutStateMaintainer(RenderBlockFlow& flow) >+ : m_context(flow.view().frameView().layoutContext()) >+ , m_pushed(m_context.pushLayoutStateForPaginationIfNeeded(flow)) >+{ >+} >+ >+PaginatedLayoutStateMaintainer::~PaginatedLayoutStateMaintainer() >+{ >+ if (m_pushed) >+ m_context.popLayoutState(); >+} >+ >+} // namespace WebCore >+ > >Property changes on: Source/WebCore/rendering/RenderLayoutState.cpp >___________________________________________________________________ >Added: svn:eol-style >## -0,0 +1 ## >+native >\ No newline at end of property >Index: Source/WebCore/rendering/RenderLayoutState.cpp >=================================================================== >--- Source/WebCore/rendering/RenderLayoutState.cpp (revision 238859) >+++ Source/WebCore/rendering/RenderLayoutState.cpp (working copy) >@@ -24,7 +24,7 @@ > */ > > #include "config.h" >-#include "LayoutState.h" >+#include "RenderLayoutState.h" > > #include "RenderFragmentedFlow.h" > #include "RenderInline.h" >@@ -35,7 +35,7 @@ > > namespace WebCore { > >-LayoutState::LayoutState(RenderElement& renderer, IsPaginated isPaginated) >+RenderLayoutState::RenderLayoutState(RenderElement& renderer, IsPaginated isPaginated) > : m_clipped(false) > , m_isPaginated(isPaginated == IsPaginated::Yes) > , m_pageLogicalHeightChanged(false) >@@ -64,7 +64,7 @@ LayoutState::LayoutState(RenderElement& > } > } > >-LayoutState::LayoutState(const FrameViewLayoutContext::LayoutStateStack& layoutStateStack, RenderBox& renderer, const LayoutSize& offset, LayoutUnit pageLogicalHeight, bool pageLogicalHeightChanged) >+RenderLayoutState::RenderLayoutState(const FrameViewLayoutContext::LayoutStateStack& layoutStateStack, RenderBox& renderer, const LayoutSize& offset, LayoutUnit pageLogicalHeight, bool pageLogicalHeightChanged) > : m_clipped(false) > , m_isPaginated(false) > , m_pageLogicalHeightChanged(false) >@@ -84,7 +84,7 @@ LayoutState::LayoutState(const FrameView > computePaginationInformation(layoutStateStack, renderer, pageLogicalHeight, pageLogicalHeightChanged); > } > >-void LayoutState::computeOffsets(const LayoutState& ancestor, RenderBox& renderer, LayoutSize offset) >+void RenderLayoutState::computeOffsets(const RenderLayoutState& ancestor, RenderBox& renderer, LayoutSize offset) > { > bool fixed = renderer.isFixedPositioned(); > if (fixed) { >@@ -115,7 +115,7 @@ void LayoutState::computeOffsets(const L > #endif > } > >-void LayoutState::computeClipRect(const LayoutState& ancestor, RenderBox& renderer) >+void RenderLayoutState::computeClipRect(const RenderLayoutState& ancestor, RenderBox& renderer) > { > m_clipped = !renderer.isFixedPositioned() && ancestor.isClipped(); > if (m_clipped) >@@ -133,7 +133,7 @@ void LayoutState::computeClipRect(const > // FIXME: <http://bugs.webkit.org/show_bug.cgi?id=13443> Apply control clip if present. > } > >-void LayoutState::computePaginationInformation(const FrameViewLayoutContext::LayoutStateStack& layoutStateStack, RenderBox& renderer, LayoutUnit pageLogicalHeight, bool pageLogicalHeightChanged) >+void RenderLayoutState::computePaginationInformation(const FrameViewLayoutContext::LayoutStateStack& layoutStateStack, RenderBox& renderer, LayoutUnit pageLogicalHeight, bool pageLogicalHeightChanged) > { > auto* ancestor = layoutStateStack.isEmpty() ? nullptr : layoutStateStack.last().get(); > // If we establish a new page height, then cache the offset to the top of the first page. >@@ -170,14 +170,14 @@ void LayoutState::computePaginationInfor > establishLineGrid(layoutStateStack, downcast<RenderBlockFlow>(renderer)); > } > >-LayoutUnit LayoutState::pageLogicalOffset(RenderBox* child, LayoutUnit childLogicalOffset) const >+LayoutUnit RenderLayoutState::pageLogicalOffset(RenderBox* child, LayoutUnit childLogicalOffset) const > { > if (child->isHorizontalWritingMode()) > return m_layoutOffset.height() + childLogicalOffset - m_pageOffset.height(); > return m_layoutOffset.width() + childLogicalOffset - m_pageOffset.width(); > } > >-void LayoutState::computeLineGridPaginationOrigin(const RenderMultiColumnFlow& multicol) >+void RenderLayoutState::computeLineGridPaginationOrigin(const RenderMultiColumnFlow& multicol) > { > if (!isPaginated() || !pageLogicalHeight()) > return; >@@ -218,7 +218,7 @@ void LayoutState::computeLineGridPaginat > m_lineGridPaginationOrigin.setWidth(paginationDelta); > } > >-void LayoutState::propagateLineGridInfo(const LayoutState& ancestor, RenderBox& renderer) >+void RenderLayoutState::propagateLineGridInfo(const RenderLayoutState& ancestor, RenderBox& renderer) > { > // Disable line grids for objects we don't support. For now this includes overflow:scroll/auto, inline blocks and > // writing mode roots. >@@ -230,7 +230,7 @@ void LayoutState::propagateLineGridInfo( > m_lineGridPaginationOrigin = ancestor.lineGridPaginationOrigin(); > } > >-void LayoutState::establishLineGrid(const FrameViewLayoutContext::LayoutStateStack& layoutStateStack, RenderBlockFlow& renderer) >+void RenderLayoutState::establishLineGrid(const FrameViewLayoutContext::LayoutStateStack& layoutStateStack, RenderBlockFlow& renderer) > { > // First check to see if this grid has been established already. > if (m_lineGrid) { >@@ -257,7 +257,7 @@ void LayoutState::establishLineGrid(cons > m_lineGridOffset = m_layoutOffset; > } > >-void LayoutState::addLayoutDelta(LayoutSize delta) >+void RenderLayoutState::addLayoutDelta(LayoutSize delta) > { > m_layoutDelta += delta; > #if !ASSERT_DISABLED >@@ -267,7 +267,7 @@ void LayoutState::addLayoutDelta(LayoutS > } > > #if !ASSERT_DISABLED >-bool LayoutState::layoutDeltaMatches(LayoutSize delta) const >+bool RenderLayoutState::layoutDeltaMatches(LayoutSize delta) const > { > return (delta.width() == m_layoutDelta.width() || m_layoutDeltaXSaturated) && (delta.height() == m_layoutDelta.height() || m_layoutDeltaYSaturated); > } >Index: Source/WebCore/rendering/RenderLayoutState.h >=================================================================== >--- Source/WebCore/rendering/RenderLayoutState.h (revision 238859) (from Source/WebCore/rendering/LayoutState.h:238859) >+++ Source/WebCore/rendering/RenderLayoutState.h (working copy) >@@ -0,0 +1,179 @@ >+/* >+ * Copyright (C) 2007, 2013 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 "FrameViewLayoutContext.h" >+#include "LayoutRect.h" >+#include <wtf/Noncopyable.h> >+ >+namespace WebCore { >+ >+class RenderBlockFlow; >+class RenderBox; >+class RenderElement; >+class RenderFragmentedFlow; >+class RenderMultiColumnFlow; >+class RenderObject; >+ >+class LayoutState { >+ WTF_MAKE_NONCOPYABLE(LayoutState); WTF_MAKE_FAST_ALLOCATED; >+ >+public: >+ LayoutState() >+ : m_clipped(false) >+ , m_isPaginated(false) >+ , m_pageLogicalHeightChanged(false) >+#if !ASSERT_DISABLED >+ , m_layoutDeltaXSaturated(false) >+ , m_layoutDeltaYSaturated(false) >+#endif >+ { >+ } >+ LayoutState(const FrameViewLayoutContext::LayoutStateStack&, RenderBox&, const LayoutSize& offset, LayoutUnit pageHeight, bool pageHeightChanged); >+ enum class IsPaginated { No, Yes }; >+ explicit LayoutState(RenderElement&, IsPaginated = IsPaginated::No); >+ >+ bool isPaginated() const { return m_isPaginated; } >+ >+ // The page logical offset is the object's offset from the top of the page in the page progression >+ // direction (so an x-offset in vertical text and a y-offset for horizontal text). >+ LayoutUnit pageLogicalOffset(RenderBox*, LayoutUnit childLogicalOffset) const; >+ >+ LayoutUnit pageLogicalHeight() const { return m_pageLogicalHeight; } >+ bool pageLogicalHeightChanged() const { return m_pageLogicalHeightChanged; } >+ >+ RenderBlockFlow* lineGrid() const { return m_lineGrid.get(); } >+ LayoutSize lineGridOffset() const { return m_lineGridOffset; } >+ LayoutSize lineGridPaginationOrigin() const { return m_lineGridPaginationOrigin; } >+ >+ LayoutSize paintOffset() const { return m_paintOffset; } >+ LayoutSize layoutOffset() const { return m_layoutOffset; } >+ >+ LayoutSize pageOffset() const { return m_pageOffset; } >+ >+ bool needsBlockDirectionLocationSetBeforeLayout() const { return m_lineGrid || (m_isPaginated && m_pageLogicalHeight); } >+ >+#ifndef NDEBUG >+ RenderElement* renderer() const { return m_renderer; } >+#endif >+ LayoutRect clipRect() const { return m_clipRect; } >+ bool isClipped() const { return m_clipped; } >+ >+ void addLayoutDelta(LayoutSize); >+ LayoutSize layoutDelta() const { return m_layoutDelta; } >+#if !ASSERT_DISABLED >+ bool layoutDeltaMatches(LayoutSize) const; >+#endif >+ >+private: >+ void computeOffsets(const LayoutState& ancestor, RenderBox&, LayoutSize offset); >+ void computeClipRect(const LayoutState& ancestor, RenderBox&); >+ // FIXME: webkit.org/b/179440 these functions should be part of the pagination code/FrameViewLayoutContext. >+ void computePaginationInformation(const FrameViewLayoutContext::LayoutStateStack&, RenderBox&, LayoutUnit pageLogicalHeight, bool pageLogicalHeightChanged); >+ void propagateLineGridInfo(const LayoutState& ancestor, RenderBox&); >+ void establishLineGrid(const FrameViewLayoutContext::LayoutStateStack&, RenderBlockFlow&); >+ void computeLineGridPaginationOrigin(const RenderMultiColumnFlow&); >+ >+ // Do not add anything apart from bitfields. See https://bugs.webkit.org/show_bug.cgi?id=100173 >+ bool m_clipped : 1; >+ bool m_isPaginated : 1; >+ // If our page height has changed, this will force all blocks to relayout. >+ bool m_pageLogicalHeightChanged : 1; >+#if !ASSERT_DISABLED >+ bool m_layoutDeltaXSaturated : 1; >+ bool m_layoutDeltaYSaturated : 1; >+#endif >+ // The current line grid that we're snapping to and the offset of the start of the grid. >+ WeakPtr<RenderBlockFlow> m_lineGrid; >+ >+ // FIXME: Distinguish between the layout clip rect and the paint clip rect which may be larger, >+ // e.g., because of composited scrolling. >+ LayoutRect m_clipRect; >+ >+ // x/y offset from layout root. Includes in-flow positioning and scroll offsets. >+ LayoutSize m_paintOffset; >+ // x/y offset from layout root. Does not include in-flow positioning or scroll offsets. >+ LayoutSize m_layoutOffset; >+ // Transient offset from the final position of the object >+ // used to ensure that repaints happen in the correct place. >+ // This is a total delta accumulated from the root. >+ LayoutSize m_layoutDelta; >+ >+ // The current page height for the pagination model that encloses us. >+ LayoutUnit m_pageLogicalHeight; >+ // The offset of the start of the first page in the nearest enclosing pagination model. >+ LayoutSize m_pageOffset; >+ LayoutSize m_lineGridOffset; >+ LayoutSize m_lineGridPaginationOrigin; >+#ifndef NDEBUG >+ RenderElement* m_renderer { nullptr }; >+#endif >+}; >+ >+// Stack-based class to assist with LayoutState push/pop >+class LayoutStateMaintainer { >+ WTF_MAKE_NONCOPYABLE(LayoutStateMaintainer); >+public: >+ explicit LayoutStateMaintainer(RenderBox&, LayoutSize offset, bool disableState = false, LayoutUnit pageHeight = 0_lu, bool pageHeightChanged = false); >+ ~LayoutStateMaintainer(); >+ >+private: >+ FrameViewLayoutContext& m_context; >+ bool m_paintOffsetCacheIsDisabled { false }; >+ bool m_didPushLayoutState { false }; >+}; >+ >+class SubtreeLayoutStateMaintainer { >+public: >+ SubtreeLayoutStateMaintainer(RenderElement* subtreeLayoutRoot); >+ ~SubtreeLayoutStateMaintainer(); >+ >+private: >+ FrameViewLayoutContext* m_context { nullptr }; >+ bool m_didDisablePaintOffsetCache { false }; >+}; >+ >+class LayoutStateDisabler { >+ WTF_MAKE_NONCOPYABLE(LayoutStateDisabler); >+public: >+ LayoutStateDisabler(FrameViewLayoutContext&); >+ ~LayoutStateDisabler(); >+ >+private: >+ FrameViewLayoutContext& m_context; >+}; >+ >+class PaginatedLayoutStateMaintainer { >+public: >+ PaginatedLayoutStateMaintainer(RenderBlockFlow&); >+ ~PaginatedLayoutStateMaintainer(); >+ >+private: >+ FrameViewLayoutContext& m_context; >+ bool m_pushed { false }; >+}; >+ >+} // namespace WebCore > >Property changes on: Source/WebCore/rendering/RenderLayoutState.h >___________________________________________________________________ >Added: svn:eol-style >## -0,0 +1 ## >+native >\ No newline at end of property >Index: Source/WebCore/rendering/RenderLayoutState.h >=================================================================== >--- Source/WebCore/rendering/RenderLayoutState.h (revision 238859) >+++ Source/WebCore/rendering/RenderLayoutState.h (working copy) >@@ -38,11 +38,11 @@ class RenderFragmentedFlow; > class RenderMultiColumnFlow; > class RenderObject; > >-class LayoutState { >- WTF_MAKE_NONCOPYABLE(LayoutState); WTF_MAKE_FAST_ALLOCATED; >+class RenderLayoutState { >+ WTF_MAKE_NONCOPYABLE(RenderLayoutState); WTF_MAKE_FAST_ALLOCATED; > > public: >- LayoutState() >+ RenderLayoutState() > : m_clipped(false) > , m_isPaginated(false) > , m_pageLogicalHeightChanged(false) >@@ -52,9 +52,9 @@ public: > #endif > { > } >- LayoutState(const FrameViewLayoutContext::LayoutStateStack&, RenderBox&, const LayoutSize& offset, LayoutUnit pageHeight, bool pageHeightChanged); >+ RenderLayoutState(const FrameViewLayoutContext::LayoutStateStack&, RenderBox&, const LayoutSize& offset, LayoutUnit pageHeight, bool pageHeightChanged); > enum class IsPaginated { No, Yes }; >- explicit LayoutState(RenderElement&, IsPaginated = IsPaginated::No); >+ explicit RenderLayoutState(RenderElement&, IsPaginated = IsPaginated::No); > > bool isPaginated() const { return m_isPaginated; } > >@@ -89,11 +89,11 @@ public: > #endif > > private: >- void computeOffsets(const LayoutState& ancestor, RenderBox&, LayoutSize offset); >- void computeClipRect(const LayoutState& ancestor, RenderBox&); >+ void computeOffsets(const RenderLayoutState& ancestor, RenderBox&, LayoutSize offset); >+ void computeClipRect(const RenderLayoutState& ancestor, RenderBox&); > // FIXME: webkit.org/b/179440 these functions should be part of the pagination code/FrameViewLayoutContext. > void computePaginationInformation(const FrameViewLayoutContext::LayoutStateStack&, RenderBox&, LayoutUnit pageLogicalHeight, bool pageLogicalHeightChanged); >- void propagateLineGridInfo(const LayoutState& ancestor, RenderBox&); >+ void propagateLineGridInfo(const RenderLayoutState& ancestor, RenderBox&); > void establishLineGrid(const FrameViewLayoutContext::LayoutStateStack&, RenderBlockFlow&); > void computeLineGridPaginationOrigin(const RenderMultiColumnFlow&); > >Index: Source/WebCore/rendering/RenderListBox.cpp >=================================================================== >--- Source/WebCore/rendering/RenderListBox.cpp (revision 238859) >+++ Source/WebCore/rendering/RenderListBox.cpp (working copy) >@@ -46,11 +46,11 @@ > #include "HTMLOptGroupElement.h" > #include "HTMLSelectElement.h" > #include "HitTestResult.h" >-#include "LayoutState.h" > #include "NodeRenderStyle.h" > #include "Page.h" > #include "PaintInfo.h" > #include "RenderLayer.h" >+#include "RenderLayoutState.h" > #include "RenderScrollbar.h" > #include "RenderText.h" > #include "RenderTheme.h" >Index: Source/WebCore/rendering/RenderMediaControlElements.cpp >=================================================================== >--- Source/WebCore/rendering/RenderMediaControlElements.cpp (revision 238859) >+++ Source/WebCore/rendering/RenderMediaControlElements.cpp (working copy) >@@ -30,8 +30,8 @@ > #if ENABLE(VIDEO) > #include "RenderMediaControlElements.h" > >-#include "LayoutState.h" > #include "MediaControlElements.h" >+#include "RenderLayoutState.h" > #include "RenderTheme.h" > #include "RenderView.h" > #include <wtf/IsoMallocInlines.h> >Index: Source/WebCore/rendering/RenderMultiColumnFlow.cpp >=================================================================== >--- Source/WebCore/rendering/RenderMultiColumnFlow.cpp (revision 238859) >+++ Source/WebCore/rendering/RenderMultiColumnFlow.cpp (working copy) >@@ -27,8 +27,8 @@ > #include "RenderMultiColumnFlow.h" > > #include "HitTestResult.h" >-#include "LayoutState.h" > #include "RenderIterator.h" >+#include "RenderLayoutState.h" > #include "RenderMultiColumnSet.h" > #include "RenderMultiColumnSpannerPlaceholder.h" > #include "RenderTreeBuilder.h" >Index: Source/WebCore/rendering/RenderTable.cpp >=================================================================== >--- Source/WebCore/rendering/RenderTable.cpp (revision 238859) >+++ Source/WebCore/rendering/RenderTable.cpp (working copy) >@@ -35,12 +35,12 @@ > #include "HTMLNames.h" > #include "HTMLTableElement.h" > #include "LayoutRepainter.h" >-#include "LayoutState.h" > #include "RenderBlockFlow.h" > #include "RenderChildIterator.h" > #include "RenderDescendantIterator.h" > #include "RenderIterator.h" > #include "RenderLayer.h" >+#include "RenderLayoutState.h" > #include "RenderTableCaption.h" > #include "RenderTableCell.h" > #include "RenderTableCol.h" >Index: Source/WebCore/rendering/RenderTableRow.cpp >=================================================================== >--- Source/WebCore/rendering/RenderTableRow.cpp (revision 238859) >+++ Source/WebCore/rendering/RenderTableRow.cpp (working copy) >@@ -28,8 +28,8 @@ > #include "Document.h" > #include "HTMLNames.h" > #include "HitTestResult.h" >-#include "LayoutState.h" > #include "PaintInfo.h" >+#include "RenderLayoutState.h" > #include "RenderTableCell.h" > #include "RenderTreeBuilder.h" > #include "RenderView.h" >Index: Source/WebCore/rendering/RenderTableSection.cpp >=================================================================== >--- Source/WebCore/rendering/RenderTableSection.cpp (revision 238859) >+++ Source/WebCore/rendering/RenderTableSection.cpp (working copy) >@@ -28,9 +28,9 @@ > #include "Document.h" > #include "HitTestResult.h" > #include "HTMLNames.h" >-#include "LayoutState.h" > #include "PaintInfo.h" > #include "RenderChildIterator.h" >+#include "RenderLayoutState.h" > #include "RenderTableCell.h" > #include "RenderTableCol.h" > #include "RenderTableRow.h" >Index: Source/WebCore/rendering/RenderVTTCue.cpp >=================================================================== >--- Source/WebCore/rendering/RenderVTTCue.cpp (revision 238859) >+++ Source/WebCore/rendering/RenderVTTCue.cpp (working copy) >@@ -29,8 +29,8 @@ > #if ENABLE(VIDEO_TRACK) > #include "RenderVTTCue.h" > >-#include "LayoutState.h" > #include "RenderInline.h" >+#include "RenderLayoutState.h" > #include "RenderView.h" > #include "TextTrackCueGeneric.h" > #include "VTTCue.h" >Index: Source/WebCore/rendering/RenderView.cpp >=================================================================== >--- Source/WebCore/rendering/RenderView.cpp (revision 238859) >+++ Source/WebCore/rendering/RenderView.cpp (working copy) >@@ -34,7 +34,6 @@ > #include "HTMLIFrameElement.h" > #include "HitTestResult.h" > #include "ImageQualityController.h" >-#include "LayoutState.h" > #include "NodeTraversal.h" > #include "Page.h" > #include "RenderDescendantIterator.h" >@@ -43,6 +42,7 @@ > #include "RenderLayer.h" > #include "RenderLayerBacking.h" > #include "RenderLayerCompositor.h" >+#include "RenderLayoutState.h" > #include "RenderMultiColumnFlow.h" > #include "RenderMultiColumnSet.h" > #include "RenderMultiColumnSpannerPlaceholder.h" >Index: Source/WebCore/rendering/RenderView.h >=================================================================== >--- Source/WebCore/rendering/RenderView.h (revision 238859) >+++ Source/WebCore/rendering/RenderView.h (working copy) >@@ -33,8 +33,8 @@ > namespace WebCore { > > class ImageQualityController; >-class LayoutState; > class RenderLayerCompositor; >+class RenderLayoutState; > class RenderQuote; > > class RenderView final : public RenderBlockFlow { >@@ -210,7 +210,7 @@ private: > bool shouldRepaint(const LayoutRect&) const; > void flushAccumulatedRepaintRegion() const; > >- void layoutContent(const LayoutState&); >+ void layoutContent(const RenderLayoutState&); > > bool isScrollableOrRubberbandableBox() const override; > >Index: Source/WebCore/rendering/RootInlineBox.cpp >=================================================================== >--- Source/WebCore/rendering/RootInlineBox.cpp (revision 238859) >+++ Source/WebCore/rendering/RootInlineBox.cpp (working copy) >@@ -29,11 +29,11 @@ > #include "GraphicsContext.h" > #include "HitTestResult.h" > #include "InlineTextBox.h" >-#include "LayoutState.h" > #include "LogicalSelectionOffsetCaches.h" > #include "PaintInfo.h" > #include "RenderFragmentedFlow.h" > #include "RenderInline.h" >+#include "RenderLayoutState.h" > #include "RenderRubyBase.h" > #include "RenderRubyRun.h" > #include "RenderRubyText.h" >Index: Source/WebCore/rendering/svg/RenderSVGRoot.cpp >=================================================================== >--- Source/WebCore/rendering/svg/RenderSVGRoot.cpp (revision 238859) >+++ Source/WebCore/rendering/svg/RenderSVGRoot.cpp (working copy) >@@ -28,10 +28,10 @@ > #include "GraphicsContext.h" > #include "HitTestResult.h" > #include "LayoutRepainter.h" >-#include "LayoutState.h" > #include "Page.h" > #include "RenderIterator.h" > #include "RenderLayer.h" >+#include "RenderLayoutState.h" > #include "RenderSVGResource.h" > #include "RenderSVGResourceContainer.h" > #include "RenderSVGResourceFilter.h" >@@ -145,7 +145,7 @@ void RenderSVGRoot::layout() > > m_resourcesNeedingToInvalidateClients.clear(); > >- // Arbitrary affine transforms are incompatible with LayoutState. >+ // Arbitrary affine transforms are incompatible with RenderLayoutState. > LayoutStateDisabler layoutStateDisabler(view().frameView().layoutContext()); > > bool needsLayout = selfNeedsLayout();
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 192504
: 356823