Diff
Modified: trunk/LayoutTests/ChangeLog (287741 => 287742)
--- trunk/LayoutTests/ChangeLog 2022-01-07 08:28:59 UTC (rev 287741)
+++ trunk/LayoutTests/ChangeLog 2022-01-07 08:45:30 UTC (rev 287742)
@@ -1,3 +1,16 @@
+2022-01-07 Martin Robinson <[email protected]>
+
+ When transform-style: preserve-3d is used with a grouping property it should still create a containing block
+ https://bugs.webkit.org/show_bug.cgi?id=234145
+ <rdar://problem/86630387>
+
+ Reviewed by Simon Fraser.
+
+ * compositing/overflow-trumps-transform-style-expected.txt:
+ * compositing/overflow-trumps-transform-style.html: Update to test used value and reflect that computed value doesn't change.
+ * css3/blending/blend-mode-transform-style-expected.txt:
+ * css3/blending/blend-mode-transform-style.html: Ditto.
+
2022-01-06 Diego Pino Garcia <[email protected]>
[GLIB] Unreviewed test gardening, emit baseline for accessibility/accessibility-node-memory-management.html
Modified: trunk/LayoutTests/compositing/overflow-trumps-transform-style-expected.txt (287741 => 287742)
--- trunk/LayoutTests/compositing/overflow-trumps-transform-style-expected.txt 2022-01-07 08:28:59 UTC (rev 287741)
+++ trunk/LayoutTests/compositing/overflow-trumps-transform-style-expected.txt 2022-01-07 08:45:30 UTC (rev 287742)
@@ -1,29 +1,13 @@
-preserve-3d
-flat
-(GraphicsLayer
- (anchor 0.00 0.00)
- (bounds 800.00 600.00)
- (children 1
- (GraphicsLayer
- (bounds 800.00 600.00)
- (contentsOpaque 1)
- (children 2
- (GraphicsLayer
- (position 18.00 10.00)
- (bounds 100.00 100.00)
- (contentsOpaque 1)
- (preserves3D 1)
- (drawsContent 1)
- (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 1.00 1.00])
- )
- (GraphicsLayer
- (position 18.00 120.00)
- (bounds 100.00 100.00)
- (contentsOpaque 1)
- (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [0.00 0.00 1.00 1.00])
- )
- )
- )
- )
-)
+PASS parentNodeTransformStyle('transform-style-preserve-3d') is "preserve-3d"
+PASS parentNodeTransformStyle('transform-style-flat') is "flat"
+PASS parentNodeTransformStyle('overflow-hidden-with-transform-style-preserve-3d') is "preserve-3d"
+PASS parentNodeTransformStyle('overflow-hidden-with-transform-style-flat') is "flat"
+PASS getBoundingClientWidth('transform-style-preserve-3d') is not getBoundingClientWidth('transform-style-flat')
+PASS getBoundingClientWidth('overflow-hidden-with-transform-style-flat') is getBoundingClientWidth('transform-style-flat')
+PASS getBoundingClientWidth('overflow-hidden-with-transform-style-preserve-3d') is getBoundingClientWidth('transform-style-flat')
+PASS successfullyParsed is true
+TEST COMPLETE
+Test that an element with mix-blend-mode other than normal forces the used value of transform-style to flat, but not the computed value..
+
+
Modified: trunk/LayoutTests/compositing/overflow-trumps-transform-style.html (287741 => 287742)
--- trunk/LayoutTests/compositing/overflow-trumps-transform-style.html 2022-01-07 08:28:59 UTC (rev 287741)
+++ trunk/LayoutTests/compositing/overflow-trumps-transform-style.html 2022-01-07 08:45:30 UTC (rev 287742)
@@ -1,36 +1,53 @@
-<!DOCTYPE html>
-
-<html>
-<head>
- <style>
+<!DOCTYPE HTML>
+<style>
.box {
- height: 100px;
- width: 100px;
- margin: 10px;
- background-color: blue;
+ width: 100px;
+ height: 100px;
}
- </style>
- <script>
- if (window.testRunner)
- testRunner.dumpAsText();
+ .parent {
+ transform-style: preserve-3d;
+ transform: rotateY(45deg)
+ }
+ .child {
+ transform: rotateY(45deg);
+ background: lightblue
+ }
+</style>
- function dumpResults()
- {
- var results = document.getElementById('layers');
-
- // Check the computed value.
- results.innerText = window.getComputedStyle(document.getElementById('box1')).webkitTransformStyle + '\n';
- results.innerText += window.getComputedStyle(document.getElementById('box2')).webkitTransformStyle + '\n';
-
- if (window.testRunner)
- results.innerText += window.internals.layerTreeAsText(document);
+<p>Test that an element with mix-blend-mode other than normal forces the used value of transform-style to flat, but not the computed value..</p>
+
+<div class="parent box">
+ <div id="transform-style-preserve-3d" class="box child"></div>
+</div>
+
+<div class="parent box" style="transform-style: flat">
+ <div id="transform-style-flat" class="box child"></div>
+</div>
+
+<div class="parent box" style="overflow: hidden; transform-style: flat">
+ <div id="overflow-hidden-with-transform-style-flat" class="box child"></div>
+</div>
+
+<div class="parent box" style="overflow: hidden;">
+ <div id="overflow-hidden-with-transform-style-preserve-3d" class="box child"></div>
+</div>
+
+<script src=""
+<script>
+ function parentNodeTransformStyle(id) {
+ return getComputedStyle(document.getElementById(id).parentNode).transformStyle;
}
- window.addEventListener('load', dumpResults, false);
- </script>
-</head>
-<body>
-<div class="box" id="box1" style="-webkit-transform: translateZ(1px); -webkit-transform-style: preserve-3d"></div>
-<div class="box" id="box2" style="-webkit-transform: translateZ(1px); -webkit-transform-style: preserve-3d; overflow: hidden"></div>
-<pre id="layers">Layer tree goes here in DRT</pre>
-</body>
-</html>
+
+ function getBoundingClientWidth(id) {
+ return document.getElementById(id).getBoundingClientRect().width;
+ }
+
+ shouldBeEqualToString("parentNodeTransformStyle('transform-style-preserve-3d')", "preserve-3d");
+ shouldBeEqualToString("parentNodeTransformStyle('transform-style-flat')", "flat");
+ shouldBeEqualToString("parentNodeTransformStyle('overflow-hidden-with-transform-style-preserve-3d')", "preserve-3d");
+ shouldBeEqualToString("parentNodeTransformStyle('overflow-hidden-with-transform-style-flat')", "flat");
+
+ shouldNotBe("getBoundingClientWidth('transform-style-preserve-3d')", "getBoundingClientWidth('transform-style-flat')");
+ shouldBe("getBoundingClientWidth('overflow-hidden-with-transform-style-flat')", "getBoundingClientWidth('transform-style-flat')");
+ shouldBe("getBoundingClientWidth('overflow-hidden-with-transform-style-preserve-3d')", "getBoundingClientWidth('transform-style-flat')");
+</script>
Modified: trunk/LayoutTests/css3/blending/blend-mode-transform-style-expected.txt (287741 => 287742)
--- trunk/LayoutTests/css3/blending/blend-mode-transform-style-expected.txt 2022-01-07 08:28:59 UTC (rev 287741)
+++ trunk/LayoutTests/css3/blending/blend-mode-transform-style-expected.txt 2022-01-07 08:45:30 UTC (rev 287742)
@@ -1,9 +1,13 @@
-PASS getTransformStyle("blend-mode-normal-with-transform-style-preserve-3d") is "preserve-3d"
-PASS getTransformStyle("blending-with-transform-style-preserve-3d") is "flat"
-PASS getTransformStyle("blending-with-transform-style-flat") is "flat"
+PASS parentNodeTransformStyle('transform-style-preserve-3d') is "preserve-3d"
+PASS parentNodeTransformStyle('transform-style-flat') is "flat"
+PASS parentNodeTransformStyle('blending-with-transform-style-preserve-3d') is "preserve-3d"
+PASS parentNodeTransformStyle('blending-with-transform-style-flat') is "flat"
+PASS getBoundingClientWidth('transform-style-preserve-3d') is not getBoundingClientWidth('transform-style-flat')
+PASS getBoundingClientWidth('transform-style-flat') is getBoundingClientWidth('blending-with-transform-style-flat')
+PASS getBoundingClientWidth('transform-style-flat') is getBoundingClientWidth('blending-with-transform-style-preserve-3d')
PASS successfullyParsed is true
TEST COMPLETE
-Test that an element with mix-blend-mode other than normal forces the computed value of transform-style to flat.
+Test that an element with mix-blend-mode other than normal forces the used value of transform-style to flat, but not the computed value..
Modified: trunk/LayoutTests/css3/blending/blend-mode-transform-style.html (287741 => 287742)
--- trunk/LayoutTests/css3/blending/blend-mode-transform-style.html 2022-01-07 08:28:59 UTC (rev 287741)
+++ trunk/LayoutTests/css3/blending/blend-mode-transform-style.html 2022-01-07 08:45:30 UTC (rev 287742)
@@ -1,21 +1,51 @@
<!DOCTYPE HTML>
<link rel="stylesheet" href=""
-<p>Test that an element with mix-blend-mode other than normal forces the computed value of transform-style to flat.</p>
-<div id="blend-mode-normal-with-transform-style-preserve-3d" class="box" style="-webkit-transform-style: preserve-3d;"></div>
-<div id="blending-with-transform-style-preserve-3d" class="box difference" style="-webkit-transform-style: preserve-3d;"></div>
-<div id="blending-with-transform-style-flat" class="box difference" style="-webkit-transform-style: flat;"></div>
+<style>
+ .parent {
+ transform: rotateY(45deg)
+ }
+
+ .child {
+ transform: rotateY(45deg);
+ background: lightblue
+ }
+</style>
+
+<p>Test that an element with mix-blend-mode other than normal forces the used value of transform-style to flat, but not the computed value..</p>
+
+<div class="parent box" style="transform-style: preserve-3d">
+ <div id="transform-style-preserve-3d" class="box child"></div>
+</div>
+
+<div class="parent box" style="transform-style: flat">
+ <div id="transform-style-flat" class="box child"></div>
+</div>
+
+<div class="parent box difference" style="transform-style: preserve-3d">
+ <div id="blending-with-transform-style-preserve-3d" class="box child"></div>
+</div>
+
+<div class="parent box difference" style="transform-style: flat">
+ <div id="blending-with-transform-style-flat" class="box child"></div>
+</div>
+
<script src=""
<script>
- function getTransformStyle(elementID) {
- return getComputedStyle(document.getElementById(elementID)).webkitTransformStyle;
+ function parentNodeTransformStyle(id) {
+ return getComputedStyle(document.getElementById(id).parentNode).transformStyle;
}
- function test(id, expected) {
- shouldBeEqualToString('getTransformStyle("' + id + '")', expected);
+ function getBoundingClientWidth(id) {
+ return document.getElementById(id).getBoundingClientRect().width;
}
- test("blend-mode-normal-with-transform-style-preserve-3d", "preserve-3d");
- test("blending-with-transform-style-preserve-3d", "flat");
- test("blending-with-transform-style-flat", "flat");
+ shouldBeEqualToString("parentNodeTransformStyle('transform-style-preserve-3d')", "preserve-3d");
+ shouldBeEqualToString("parentNodeTransformStyle('transform-style-flat')", "flat");
+ shouldBeEqualToString("parentNodeTransformStyle('blending-with-transform-style-preserve-3d')", "preserve-3d");
+ shouldBeEqualToString("parentNodeTransformStyle('blending-with-transform-style-flat')", "flat");
+
+ shouldNotBe("getBoundingClientWidth('transform-style-preserve-3d')", "getBoundingClientWidth('transform-style-flat')");
+ shouldBe("getBoundingClientWidth('transform-style-flat')", "getBoundingClientWidth('blending-with-transform-style-flat')");
+ shouldBe("getBoundingClientWidth('transform-style-flat')", "getBoundingClientWidth('blending-with-transform-style-preserve-3d')");
</script>
Modified: trunk/LayoutTests/imported/w3c/ChangeLog (287741 => 287742)
--- trunk/LayoutTests/imported/w3c/ChangeLog 2022-01-07 08:28:59 UTC (rev 287741)
+++ trunk/LayoutTests/imported/w3c/ChangeLog 2022-01-07 08:45:30 UTC (rev 287742)
@@ -1,3 +1,13 @@
+2022-01-07 Martin Robinson <[email protected]>
+
+ When transform-style: preserve-3d is used with a grouping property it should still create a containing block
+ https://bugs.webkit.org/show_bug.cgi?id=234145
+ <rdar://problem/86630387>
+
+ Reviewed by Simon Fraser.
+
+ * web-platform-tests/css/css-transforms/preserve-3d-flat-grouping-properties-containing-block-expected.txt:
+
2022-01-06 Tim Nguyen <[email protected]>
Unprefix -webkit-print-color-adjust CSS property
Modified: trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-transforms/preserve-3d-flat-grouping-properties-containing-block-expected.txt (287741 => 287742)
--- trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-transforms/preserve-3d-flat-grouping-properties-containing-block-expected.txt 2022-01-07 08:28:59 UTC (rev 287741)
+++ trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-transforms/preserve-3d-flat-grouping-properties-containing-block-expected.txt 2022-01-07 08:45:30 UTC (rev 287742)
@@ -1,4 +1,4 @@
-FAIL Preserve-3d element with a grouping property still a containing block assert_equals: expected Element node <div id="parentWithGrouping" style="transform-style: pres... but got Element node <body><div id="parentWithGrouping" style="transform-style...
+PASS Preserve-3d element with a grouping property still a containing block
PASS Preserve-3d element without a grouping property still a containing block
Modified: trunk/Source/WebCore/ChangeLog (287741 => 287742)
--- trunk/Source/WebCore/ChangeLog 2022-01-07 08:28:59 UTC (rev 287741)
+++ trunk/Source/WebCore/ChangeLog 2022-01-07 08:45:30 UTC (rev 287742)
@@ -1,3 +1,56 @@
+2022-01-07 Martin Robinson <[email protected]>
+
+ When transform-style: preserve-3d is used with a grouping property it should still create a containing block
+ https://bugs.webkit.org/show_bug.cgi?id=234145
+ <rdar://problem/86630387>
+
+ Reviewed by Simon Fraser.
+
+ No new tests. This is covered by an existing WPT test.
+
+ Previously, when a grouping property (and the few extra properties specific to WebKit) forced
+ transform-style: flat, this change was made in the StyleAdjuster and affected computed style.
+ The specification says that these properties should actually adjust the used value of
+ the property.
+
+ The specification also says:
+ > The use of this property with any value other than none establishes a
+ > stacking context. It also establishes a containing block for all
+ > descendants, just like the transform property does.
+
+ Together, this means that no matter what the used value is of transform-style, it should
+ establish a containing block and create a stacking context.
+
+ This change adds a usedTransformStyle RenderStyle method and a StyleRareNonInheritedData member
+ to adjust the return value appropriately. RenderStyle::preserves3D reads the used value
+ and hasTransformRelatedProperty, which is used for establishing containing blocks
+ and stacking contexts, uses the calculated value.
+
+ * rendering/RenderLayer.h:
+ (WebCore::RenderLayer::preserves3D const): Use usedTransformStyle.
+ * rendering/RenderLayerBacking.cpp:
+ (WebCore::RenderLayerBacking::updateGeometry): This now calls preserve3D() and usedTransformStyle3D().
+ * rendering/RenderLayerCompositor.cpp:
+ (WebCore::recompositeChangeRequiresGeometryUpdate): Ditto.
+ (WebCore::RenderLayerCompositor::requiresCompositingForBackfaceVisibility const): Ditto.
+ (WebCore::RenderLayerCompositor::computeIndirectCompositingReason const): Ditto.
+ (WebCore::RenderLayerCompositor::styleChangeMayAffectIndirectCompositingReasons): Ditto.
+ (WebCore::RenderLayerCompositor::layerHas3DContent const): Ditto.
+ * rendering/style/RenderStyle.cpp:
+ (WebCore::RenderStyle::changeRequiresRecompositeLayer const): Ditto.
+ * rendering/style/RenderStyle.h:
+ (WebCore::RenderStyle::hasTransformRelatedProperty const): Modified to look at the calculated value explicitly.
+ (WebCore::RenderStyle::usedTransformStyle3D const): Return 'flat' when the property is forced to flat.
+ (WebCore::RenderStyle::preserves3D const): Look at the used value.
+ (WebCore::RenderStyle::setTransformStyleForcedToFlat): Added.
+ * rendering/style/StyleRareNonInheritedData.cpp: Added a new transformStyleForcedToFlat member.
+ (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData): Ditto.
+ (WebCore::StyleRareNonInheritedData::operator== const): Ditto.
+ * rendering/style/StyleRareNonInheritedData.h:
+ * style/StyleAdjuster.cpp:
+ (WebCore::Style::Adjuster::adjust const): Call setTransformStyleForcedToFlat with the
+ appropriate value when an element has 'preserve-3d' set.
+
2022-01-06 Antoine Quint <[email protected]>
Unreviewed, removing duplicated code added in https://commits.webkit.org/245793@trunk.
Modified: trunk/Source/WebCore/rendering/RenderLayer.h (287741 => 287742)
--- trunk/Source/WebCore/rendering/RenderLayer.h 2022-01-07 08:28:59 UTC (rev 287741)
+++ trunk/Source/WebCore/rendering/RenderLayer.h 2022-01-07 08:45:30 UTC (rev 287742)
@@ -736,7 +736,7 @@
// Note that this transform has the perspective-origin baked in.
TransformationMatrix perspectiveTransform(const LayoutRect& layerRect) const;
FloatPoint perspectiveOrigin() const;
- bool preserves3D() const { return renderer().style().transformStyle3D() == TransformStyle3D::Preserve3D; }
+ bool preserves3D() const { return renderer().style().preserves3D(); }
bool has3DTransform() const { return m_transform && !m_transform->isAffine(); }
bool hasTransformedAncestor() const { return m_hasTransformedAncestor; }
Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.cpp (287741 => 287742)
--- trunk/Source/WebCore/rendering/RenderLayerBacking.cpp 2022-01-07 08:28:59 UTC (rev 287741)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.cpp 2022-01-07 08:45:30 UTC (rev 287742)
@@ -1323,7 +1323,7 @@
auto primaryLayerPosition = primaryGraphicsLayerRect.location();
// FIXME: reflections should force transform-style to be flat in the style: https://bugs.webkit.org/show_bug.cgi?id=106959
- bool preserves3D = style.transformStyle3D() == TransformStyle3D::Preserve3D && !renderer().hasReflection();
+ bool preserves3D = style.preserves3D() && !renderer().hasReflection();
if (m_contentsContainmentLayer) {
m_contentsContainmentLayer->setPreserves3D(preserves3D);
m_contentsContainmentLayer->setPosition(primaryLayerPosition);
@@ -1347,7 +1347,7 @@
#if ENABLE(CSS_TRANSFORM_STYLE_OPTIMIZED_3D)
// FIXME: Take ancestry into account and remove unnecessary structural layers.
- m_graphicsLayer->setIsSeparated(style.transformStyle3D() == TransformStyle3D::Optimized3D);
+ m_graphicsLayer->setIsSeparated(style.usedTransformStyle3D() == TransformStyle3D::Optimized3D);
#endif
// Compute renderer offset from primary graphics layer. Note that primaryGraphicsLayerRect is in parentGraphicsLayer's coordinate system which is not necessarily
Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (287741 => 287742)
--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp 2022-01-07 08:28:59 UTC (rev 287741)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp 2022-01-07 08:45:30 UTC (rev 287742)
@@ -1642,7 +1642,7 @@
|| oldStyle.transformOriginX() != newStyle.transformOriginX()
|| oldStyle.transformOriginY() != newStyle.transformOriginY()
|| oldStyle.transformOriginZ() != newStyle.transformOriginZ()
- || oldStyle.transformStyle3D() != newStyle.transformStyle3D()
+ || oldStyle.usedTransformStyle3D() != newStyle.usedTransformStyle3D()
|| oldStyle.perspective() != newStyle.perspective()
|| oldStyle.perspectiveOriginX() != newStyle.perspectiveOriginX()
|| oldStyle.perspectiveOriginY() != newStyle.perspectiveOriginY()
@@ -3044,7 +3044,7 @@
// FIXME: workaround for webkit.org/b/132801
auto* stackingContext = renderer.layer()->stackingContext();
- if (stackingContext && stackingContext->renderer().style().transformStyle3D() == TransformStyle3D::Preserve3D)
+ if (stackingContext && stackingContext->renderer().style().preserves3D())
return true;
return false;
@@ -3291,7 +3291,7 @@
// A layer with preserve-3d or perspective only needs to be composited if there are descendant layers that
// will be affected by the preserve-3d or perspective.
if (has3DTransformedDescendants) {
- if (renderer.style().transformStyle3D() == TransformStyle3D::Preserve3D)
+ if (renderer.style().preserves3D())
return IndirectCompositingReason::Preserve3D;
if (renderer.style().hasPerspective())
@@ -3322,7 +3322,7 @@
return true;
if (newStyle.boxReflect() != oldStyle.boxReflect())
return true;
- if (newStyle.transformStyle3D() != oldStyle.transformStyle3D())
+ if (newStyle.usedTransformStyle3D() != oldStyle.usedTransformStyle3D())
return true;
if (newStyle.hasPerspective() != oldStyle.hasPerspective())
return true;
@@ -4329,7 +4329,7 @@
{
const RenderStyle& style = layer.renderer().style();
- if (style.transformStyle3D() == TransformStyle3D::Preserve3D || style.hasPerspective() || styleHas3DTransformOperation(style))
+ if (style.preserves3D() || style.hasPerspective() || styleHas3DTransformOperation(style))
return true;
const_cast<RenderLayer&>(layer).updateLayerListsIfNeeded();
Modified: trunk/Source/WebCore/rendering/style/RenderStyle.cpp (287741 => 287742)
--- trunk/Source/WebCore/rendering/style/RenderStyle.cpp 2022-01-07 08:28:59 UTC (rev 287741)
+++ trunk/Source/WebCore/rendering/style/RenderStyle.cpp 2022-01-07 08:45:30 UTC (rev 287742)
@@ -1185,7 +1185,7 @@
return true;
if (m_rareNonInheritedData.ptr() != other.m_rareNonInheritedData.ptr()) {
- if (m_rareNonInheritedData->transformStyle3D != other.m_rareNonInheritedData->transformStyle3D
+ if (usedTransformStyle3D() != other.usedTransformStyle3D()
|| m_rareNonInheritedData->backfaceVisibility != other.m_rareNonInheritedData->backfaceVisibility
|| m_rareNonInheritedData->perspective != other.m_rareNonInheritedData->perspective
|| m_rareNonInheritedData->perspectiveOriginX != other.m_rareNonInheritedData->perspectiveOriginX
Modified: trunk/Source/WebCore/rendering/style/RenderStyle.h (287741 => 287742)
--- trunk/Source/WebCore/rendering/style/RenderStyle.h 2022-01-07 08:28:59 UTC (rev 287741)
+++ trunk/Source/WebCore/rendering/style/RenderStyle.h 2022-01-07 08:45:30 UTC (rev 287742)
@@ -674,8 +674,9 @@
LengthPoint objectPosition() const { return m_rareNonInheritedData->objectPosition; }
// Return true if any transform related property (currently transform, translate, scale, rotate, transformStyle3D or perspective)
- // indicates that we are transforming.
- bool hasTransformRelatedProperty() const { return hasTransform() || translate() || scale() || rotate() || preserves3D() || hasPerspective(); }
+ // indicates that we are transforming. The usedTransformStyle3D is not used here because in many cases (such as for deciding
+ // whether or not to establish a containing block), the computed value is what matters.
+ bool hasTransformRelatedProperty() const { return hasTransform() || translate() || scale() || rotate() || transformStyle3D() == TransformStyle3D::Preserve3D || hasPerspective(); }
enum class TransformOperationOption : uint8_t {
TransformOrigin = 1 << 0,
@@ -721,7 +722,8 @@
bool hasTransitions() const { return m_rareNonInheritedData->transitions && m_rareNonInheritedData->transitions->size() > 0; }
TransformStyle3D transformStyle3D() const { return static_cast<TransformStyle3D>(m_rareNonInheritedData->transformStyle3D); }
- bool preserves3D() const { return transformStyle3D() == TransformStyle3D::Preserve3D; }
+ TransformStyle3D usedTransformStyle3D() const { return static_cast<bool>(m_rareNonInheritedData->transformStyleForcedToFlat) ? TransformStyle3D::Flat : transformStyle3D(); }
+ bool preserves3D() const { return usedTransformStyle3D() == TransformStyle3D::Preserve3D; }
BackfaceVisibility backfaceVisibility() const { return static_cast<BackfaceVisibility>(m_rareNonInheritedData->backfaceVisibility); }
float perspective() const { return m_rareNonInheritedData->perspective; }
@@ -1294,6 +1296,7 @@
void adjustTransitions();
void setTransformStyle3D(TransformStyle3D b) { SET_VAR(m_rareNonInheritedData, transformStyle3D, static_cast<unsigned>(b)); }
+ void setTransformStyleForcedToFlat(bool b) { SET_VAR(m_rareNonInheritedData, transformStyleForcedToFlat, static_cast<unsigned>(b)); }
void setBackfaceVisibility(BackfaceVisibility b) { SET_VAR(m_rareNonInheritedData, backfaceVisibility, static_cast<unsigned>(b)); }
void setPerspective(float p) { SET_VAR(m_rareNonInheritedData, perspective, p); }
void setPerspectiveOriginX(Length&& length) { SET_VAR(m_rareNonInheritedData, perspectiveOriginX, WTFMove(length)); }
Modified: trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.cpp (287741 => 287742)
--- trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.cpp 2022-01-07 08:28:59 UTC (rev 287741)
+++ trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.cpp 2022-01-07 08:45:30 UTC (rev 287742)
@@ -86,6 +86,7 @@
, touchActions(RenderStyle::initialTouchActions())
, pageSizeType(PAGE_SIZE_AUTO)
, transformStyle3D(static_cast<unsigned>(RenderStyle::initialTransformStyle3D()))
+ , transformStyleForcedToFlat(false)
, backfaceVisibility(static_cast<unsigned>(RenderStyle::initialBackfaceVisibility()))
, userDrag(static_cast<unsigned>(RenderStyle::initialUserDrag()))
, textOverflow(static_cast<unsigned>(RenderStyle::initialTextOverflow()))
@@ -188,6 +189,7 @@
, touchActions(o.touchActions)
, pageSizeType(o.pageSizeType)
, transformStyle3D(o.transformStyle3D)
+ , transformStyleForcedToFlat(o.transformStyleForcedToFlat)
, backfaceVisibility(o.backfaceVisibility)
, userDrag(o.userDrag)
, textOverflow(o.textOverflow)
@@ -293,6 +295,7 @@
|| (!customPaintWatchedProperties && !o.customPaintWatchedProperties))
&& pageSizeType == o.pageSizeType
&& transformStyle3D == o.transformStyle3D
+ && transformStyleForcedToFlat == o.transformStyleForcedToFlat
&& backfaceVisibility == o.backfaceVisibility
&& userDrag == o.userDrag
&& textOverflow == o.textOverflow
Modified: trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.h (287741 => 287742)
--- trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.h 2022-01-07 08:28:59 UTC (rev 287741)
+++ trunk/Source/WebCore/rendering/style/StyleRareNonInheritedData.h 2022-01-07 08:45:30 UTC (rev 287742)
@@ -197,6 +197,7 @@
unsigned pageSizeType : 2; // PageSizeType
unsigned transformStyle3D : 2; // TransformStyle3D
+ unsigned transformStyleForcedToFlat : 1; // The used value for transform-style is forced to flat by a grouping property.
unsigned backfaceVisibility : 1; // BackfaceVisibility
unsigned userDrag : 2; // UserDrag
Modified: trunk/Source/WebCore/style/StyleAdjuster.cpp (287741 => 287742)
--- trunk/Source/WebCore/style/StyleAdjuster.cpp 2022-01-07 08:28:59 UTC (rev 287741)
+++ trunk/Source/WebCore/style/StyleAdjuster.cpp 2022-01-07 08:45:30 UTC (rev 287742)
@@ -500,19 +500,21 @@
if (style.hasPseudoStyle(PseudoId::FirstLetter))
style.setUnique();
- if (style.preserves3D() && (style.overflowX() != Overflow::Visible
- || style.hasOpacity()
- || style.overflowY() != Overflow::Visible
- || style.hasClip()
- || style.clipPath()
- || style.hasFilter()
- || style.hasIsolation()
- || style.hasMask()
+ if (style.preserves3D()) {
+ bool forceToFlat = style.overflowX() != Overflow::Visible
+ || style.hasOpacity()
+ || style.overflowY() != Overflow::Visible
+ || style.hasClip()
+ || style.clipPath()
+ || style.hasFilter()
+ || style.hasIsolation()
+ || style.hasMask()
#if ENABLE(FILTERS_LEVEL_2)
- || style.hasBackdropFilter()
+ || style.hasBackdropFilter()
#endif
- || style.hasBlendMode()))
- style.setTransformStyle3D(TransformStyle3D::Flat);
+ || style.hasBlendMode();
+ style.setTransformStyleForcedToFlat(forceToFlat);
+ }
if (is<SVGElement>(m_element))
adjustSVGElementStyle(style, downcast<SVGElement>(*m_element));