WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
WIP
bug-221964-20210906112201.patch (text/plain), 8.00 KB, created by
Simon Fraser (smfr)
on 2021-09-06 11:22:01 PDT
(
hide
)
Description:
WIP
Filename:
MIME Type:
Creator:
Simon Fraser (smfr)
Created:
2021-09-06 11:22:01 PDT
Size:
8.00 KB
patch
obsolete
>Subversion Revision: 282058 >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 7eeaee550a39cf2bf3803987103c872165f47f50..3db09e677b84779602c492bd20d82d26ffc0aa0a 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,24 @@ >+2021-09-06 Simon Fraser <simon.fraser@apple.com> >+ >+ https://maya.land/monologues page renders incorrectly (filter should create containing block for fixed) >+ https://bugs.webkit.org/show_bug.cgi?id=221964 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ No new tests (OOPS!). >+ >+ * rendering/RenderElement.h: >+ (WebCore::RenderElement::canContainFixedPositionObjects const): >+ * rendering/RenderLayer.cpp: >+ (WebCore::RenderLayer::RenderLayer): >+ (WebCore::RenderLayer::flagsForUpdateLayerPositions): >+ (WebCore::RenderLayer::updateLayerPositions): >+ (WebCore::RenderLayer::clippingRootForPainting const): >+ (WebCore::accumulateOffsetTowardsAncestor): >+ (WebCore::RenderLayer::calculateClipRects const): >+ * rendering/RenderLayer.h: >+ (WebCore::RenderLayer::hasFilteredAncestor const): >+ > 2021-09-06 Simon Fraser <simon.fraser@apple.com> > > Add a temporarily prefixed property for mask-mode, aliased to -webkit-mask-source-type >diff --git a/Source/WebCore/rendering/RenderElement.h b/Source/WebCore/rendering/RenderElement.h >index 6c4c508f89257b8e6f37ffaf1a30af3de4a6010f..1f1ea14bc2d54761e4c6dd6ebc8a9e396dd35658 100644 >--- a/Source/WebCore/rendering/RenderElement.h >+++ b/Source/WebCore/rendering/RenderElement.h >@@ -454,6 +454,7 @@ inline bool RenderElement::canContainFixedPositionObjects() const > { > return isRenderView() > || (isRenderBlock() && hasTransform()) >+ || hasFilter() > // FIXME: will-change should create containing blocks on inline boxes (bug 225035) > || (isRenderBlock() && style().willChange() && style().willChange()->createsContainingBlockForOutOfFlowPositioned()) > || isSVGForeignObject() >diff --git a/Source/WebCore/rendering/RenderLayer.cpp b/Source/WebCore/rendering/RenderLayer.cpp >index d1d77014d1c8cf015863688ac7524c7a47c47915..01e25573b64ddef99a874fe2b1c5fb46b1c2a66b 100644 >--- a/Source/WebCore/rendering/RenderLayer.cpp >+++ b/Source/WebCore/rendering/RenderLayer.cpp >@@ -324,6 +324,7 @@ RenderLayer::RenderLayer(RenderLayerModelObject& rendererLayerModelObject) > , m_hasCompositedScrollingAncestor(false) > , m_hasTransformedAncestor(false) > , m_has3DTransformedAncestor(false) >+ , m_hasFilteredAncestor(false) > , m_insideSVGForeignObject(false) > , m_indirectCompositingReason(static_cast<unsigned>(IndirectCompositingReason::None)) > , m_viewportConstrainedNotCompositedReason(NoNotCompositedReason) >@@ -895,6 +896,9 @@ OptionSet<RenderLayer::UpdateLayerPositionsFlag> RenderLayer::flagsForUpdateLaye > if (parent->has3DTransformedAncestor() || (parent->transform() && !parent->transform()->isAffine())) > flags.add(Seen3DTransformedLayer); > >+ if (parent->hasFilteredAncestor() || parent->hasFilter()) >+ flags.add(SeenFilteredLayer); >+ > if (parent->behavesAsFixed() || (parent->renderer().isFixedPositioned() && !parent->hasTransformedAncestor())) > flags.add(SeenFixedLayer); > >@@ -1001,6 +1005,7 @@ void RenderLayer::updateLayerPositions(RenderGeometryMap* geometryMap, OptionSet > m_repaintStatus = NeedsNormalRepaint; > m_hasTransformedAncestor = flags.contains(SeenTransformedLayer); > m_has3DTransformedAncestor = flags.contains(Seen3DTransformedLayer); >+ m_hasFilteredAncestor = flags.contains(SeenFilteredLayer); > m_behavesAsFixed = flags.contains(SeenFixedLayer); > setHasCompositedScrollingAncestor(flags.contains(SeenCompositedScrollingLayer)); > >@@ -1018,9 +1023,12 @@ void RenderLayer::updateLayerPositions(RenderGeometryMap* geometryMap, OptionSet > if (!transform()->isAffine()) > flags.add(Seen3DTransformedLayer); > } >+ >+ if (hasFilter()) >+ flags.add(SeenFilteredLayer); > > // Fixed inside transform behaves like absolute (per spec). >- if (renderer().isFixedPositioned() && !m_hasTransformedAncestor) { >+ if (renderer().isFixedPositioned() && !m_hasTransformedAncestor && !m_hasFilteredAncestor) { > m_behavesAsFixed = true; > flags.add(SeenFixedLayer); > } >@@ -1034,6 +1042,7 @@ void RenderLayer::updateLayerPositions(RenderGeometryMap* geometryMap, OptionSet > if (m_scrollableArea) > m_scrollableArea->updateMarqueePosition(); > >+ // FIXME: check behavesAsFixed. > if (renderer().isFixedPositioned() && renderer().settings().acceleratedCompositingForFixedPositionEnabled()) { > bool intersectsViewport = compositor().fixedLayerIntersectsViewport(*this); > if (intersectsViewport != m_isFixedIntersectingViewport) { >@@ -2034,6 +2043,7 @@ RenderLayer* RenderLayer::clippingRootForPainting() const > > current = current->paintOrderParent(); > ASSERT(current); >+ // FIXME: Maybe include filters. > if (current->transform() || compositedWithOwnBackingStore(*current)) > return const_cast<RenderLayer*>(current); > >@@ -2262,7 +2272,7 @@ static inline const RenderLayer* accumulateOffsetTowardsAncestor(const RenderLay > // If the fixed renderer is inside a RenderFragmentedFlow, we should not compute location using localToAbsolute, > // since localToAbsolute maps the coordinates from named flow to regions coordinates and regions can be > // positioned in a completely different place in the viewport (RenderView). >- if (position == PositionType::Fixed && !fixedFragmentedFlowContainer && (!ancestorLayer || ancestorLayer == renderer.view().layer())) { >+ if (position == PositionType::Fixed && layer->behavesAsFixed() && !fixedFragmentedFlowContainer && (!ancestorLayer || ancestorLayer == renderer.view().layer())) { > // If the fixed layer's container is the root, just add in the offset of the view. We can obtain this by calling > // localToAbsolute() on the RenderView. > FloatPoint absPos = renderer.localToAbsolute(FloatPoint(), IsFixed); >@@ -4494,6 +4504,7 @@ void RenderLayer::calculateClipRects(const ClipRectsContext& clipRectsContext, C > > // A fixed object is essentially the root of its containing block hierarchy, so when > // we encounter such an object, we reset our clip rects to the fixedClipRect. >+ // FIXME: Check behavesAsFixed. > if (renderer().isFixedPositioned()) { > clipRects.setPosClipRect(clipRects.fixedClipRect()); > clipRects.setOverflowClipRect(clipRects.fixedClipRect()); >diff --git a/Source/WebCore/rendering/RenderLayer.h b/Source/WebCore/rendering/RenderLayer.h >index 14b01d6052fa27cb2c35661c02edd7b839dab26d..9d07f2f46bad0b026fa938ca4d96a06d7801621f 100644 >--- a/Source/WebCore/rendering/RenderLayer.h >+++ b/Source/WebCore/rendering/RenderLayer.h >@@ -739,6 +739,8 @@ public: > bool hasTransformedAncestor() const { return m_hasTransformedAncestor; } > > bool hasFilter() const { return renderer().hasFilter(); } >+ bool hasFilteredAncestor() const { return m_hasFilteredAncestor; } >+ > bool hasFilterOutsets() const { return !filterOutsets().isZero(); } > IntOutsets filterOutsets() const; > bool hasBackdropFilter() const >@@ -941,8 +943,9 @@ private: > UpdatePagination = 1 << 3, > SeenFixedLayer = 1 << 4, > SeenTransformedLayer = 1 << 5, >- Seen3DTransformedLayer = 1 << 6, >- SeenCompositedScrollingLayer = 1 << 7, >+ SeenFilteredLayer = 1 << 6, >+ Seen3DTransformedLayer = 1 << 7, >+ SeenCompositedScrollingLayer = 1 << 8, > }; > static OptionSet<UpdateLayerPositionsFlag> flagsForUpdateLayerPositions(RenderLayer& startingLayer); > >@@ -1134,6 +1137,8 @@ private: > bool m_hasTransformedAncestor : 1; > bool m_has3DTransformedAncestor : 1; > >+ bool m_hasFilteredAncestor : 1; >+ > bool m_insideSVGForeignObject : 1; > > unsigned m_indirectCompositingReason : 4; // IndirectCompositingReason
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 221964
: 437428