Diff
Modified: trunk/LayoutTests/ChangeLog (177199 => 177200)
--- trunk/LayoutTests/ChangeLog 2014-12-12 01:48:45 UTC (rev 177199)
+++ trunk/LayoutTests/ChangeLog 2014-12-12 01:59:37 UTC (rev 177200)
@@ -1,3 +1,33 @@
+2014-12-11 Simon Fraser <[email protected]>
+
+ Transform-style should not kill position:fixed
+ https://bugs.webkit.org/show_bug.cgi?id=138122
+
+ Reviewed by Dean Jackson.
+
+ New tests and updated results:
+
+ * platform/mac/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt: Progression, caused
+ by RenderLayerBacking::updateCompositedBounds() now allowing shouldClipCompositedBounds on
+ preserve-3d layers, since they are no longer considered to have a transform.
+ * platform/mac/compositing/visible-rect/3d-transform-style-expected.txt: Ditto.
+ * transforms/2d/perspective-not-fixed-container-expected.html: Added.
+ * transforms/2d/perspective-not-fixed-container.html: Added. Tests that
+ perspective does not act as containing block for fixed position (not a behavior change).
+ * transforms/2d/preserve3d-not-fixed-container-expected.html: Added.
+ * transforms/2d/preserve3d-not-fixed-container.html: Added. Tests that
+ preserve3d does not act as containing block for fixed position. This is a behavior change.
+ * transforms/perspective-is-containing-block-for-absolute-expected.html: Added.
+ * transforms/perspective-is-containing-block-for-absolute.html: Added. Tests that
+ perspective is a as containing block for absolute/relative position. This is not a behavior change.
+ * transforms/preserve3d-is-containing-block-for-absolute-expected.html: Added.
+ * transforms/preserve3d-is-containing-block-for-absolute.html: Added. Tests that
+ preserve3d is a as containing block for absolute/relative position. This is not a behavior change,
+ but seems like incorrect behavior for now.
+ * transforms/transform-is-containing-block-for-absolute-expected.html: Added.
+ * transforms/transform-is-containing-block-for-absolute.html: Added. Tests that
+ transform is a as containing block for absolute/relative position. This is not a behavior change.
+
2014-12-11 Roger Fong <[email protected]>
Implement frag depth as a WebGL 1 extension.
Modified: trunk/LayoutTests/platform/ios-simulator/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt (177199 => 177200)
--- trunk/LayoutTests/platform/ios-simulator/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt 2014-12-12 01:48:45 UTC (rev 177199)
+++ trunk/LayoutTests/platform/ios-simulator/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt 2014-12-12 01:59:37 UTC (rev 177200)
@@ -27,7 +27,6 @@
(contentsScale 2.00)
(children 1
(GraphicsLayer
- (bounds 500.00 0.00)
(preserves3D 1)
(visible rect 0.00, 0.00 0.00 x 0.00)
(contentsScale 2.00)
Modified: trunk/LayoutTests/platform/ios-simulator-wk2/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt (177199 => 177200)
--- trunk/LayoutTests/platform/ios-simulator-wk2/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt 2014-12-12 01:48:45 UTC (rev 177199)
+++ trunk/LayoutTests/platform/ios-simulator-wk2/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt 2014-12-12 01:59:37 UTC (rev 177200)
@@ -27,7 +27,6 @@
(contentsScale 2.00)
(children 1
(GraphicsLayer
- (bounds 500.00 0.00)
(preserves3D 1)
(visible rect 0.00, 0.00 0.00 x 0.00)
(contentsScale 2.00)
Modified: trunk/LayoutTests/platform/mac/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt (177199 => 177200)
--- trunk/LayoutTests/platform/mac/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt 2014-12-12 01:48:45 UTC (rev 177199)
+++ trunk/LayoutTests/platform/mac/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt 2014-12-12 01:59:37 UTC (rev 177200)
@@ -24,7 +24,6 @@
(contentsScale 1.00)
(children 1
(GraphicsLayer
- (bounds 500.00 0.00)
(preserves3D 1)
(visible rect 0.00, 0.00 0.00 x 0.00)
(contentsScale 1.00)
Modified: trunk/LayoutTests/platform/mac/compositing/visible-rect/3d-transform-style-expected.txt (177199 => 177200)
--- trunk/LayoutTests/platform/mac/compositing/visible-rect/3d-transform-style-expected.txt 2014-12-12 01:48:45 UTC (rev 177199)
+++ trunk/LayoutTests/platform/mac/compositing/visible-rect/3d-transform-style-expected.txt 2014-12-12 01:59:37 UTC (rev 177200)
@@ -24,7 +24,6 @@
(contentsScale 1.00)
(children 1
(GraphicsLayer
- (bounds 200.00 0.00)
(preserves3D 1)
(visible rect 0.00, 0.00 0.00 x 0.00)
(contentsScale 1.00)
@@ -56,7 +55,6 @@
(contentsScale 1.00)
(children 1
(GraphicsLayer
- (bounds 200.00 0.00)
(preserves3D 1)
(visible rect 0.00, 0.00 0.00 x 0.00)
(contentsScale 1.00)
Modified: trunk/LayoutTests/platform/mac-wk2/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt (177199 => 177200)
--- trunk/LayoutTests/platform/mac-wk2/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt 2014-12-12 01:48:45 UTC (rev 177199)
+++ trunk/LayoutTests/platform/mac-wk2/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt 2014-12-12 01:59:37 UTC (rev 177200)
@@ -27,7 +27,6 @@
(contentsScale 1.00)
(children 1
(GraphicsLayer
- (bounds 500.00 0.00)
(preserves3D 1)
(visible rect 0.00, 0.00 0.00 x 0.00)
(contentsScale 1.00)
Modified: trunk/LayoutTests/platform/win/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt (177199 => 177200)
--- trunk/LayoutTests/platform/win/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt 2014-12-12 01:48:45 UTC (rev 177199)
+++ trunk/LayoutTests/platform/win/compositing/tiling/rotated-tiled-preserve3d-clamped-expected.txt 2014-12-12 01:59:37 UTC (rev 177200)
@@ -19,7 +19,6 @@
(visible rect 0.00, 0.00 500.00 x 300.00)
(children 1
(GraphicsLayer
- (bounds 500.00 0.00)
(preserves3D 1)
(visible rect 0.00, 0.00 0.00 x 0.00)
(children 1
Added: trunk/LayoutTests/transforms/2d/perspective-not-fixed-container-expected.html (0 => 177200)
--- trunk/LayoutTests/transforms/2d/perspective-not-fixed-container-expected.html (rev 0)
+++ trunk/LayoutTests/transforms/2d/perspective-not-fixed-container-expected.html 2014-12-12 01:59:37 UTC (rev 177200)
@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+ <style>
+ body {
+ margin: 0;
+ height: 1000px;
+ }
+
+ body > div {
+ outline: 1px solid black;
+ }
+
+ .box {
+ width: 100px;
+ height: 100px;
+ }
+
+ .fixed {
+ position: fixed;
+ top: 100px;
+ background-color: green;
+ }
+
+ .transformed {
+ -webkit-transform: translateZ(1px);
+ }
+ </style>
+ <script>
+ // Scroll on load to test fixed positioning.
+ window.addEventListener('load', function() {
+ window.scrollTo(0, 100);
+ }, false)
+ </script>
+</head>
+<body>
+
+ <div class="box" style="margin: 150px 50px;">
+ <div class="fixed box">
+ <div class="transformed box"></div> <!-- Necessary to activate preserve3d compositing -->
+ </div>
+ </div>
+
+ <div class="fixed box" style="left: 250px;">
+ <div class="transformed box"></div> <!-- Necessary to activate preserve3d compositing -->
+ </div>
+</body>
+</html>
\ No newline at end of file
Added: trunk/LayoutTests/transforms/2d/perspective-not-fixed-container.html (0 => 177200)
--- trunk/LayoutTests/transforms/2d/perspective-not-fixed-container.html (rev 0)
+++ trunk/LayoutTests/transforms/2d/perspective-not-fixed-container.html 2014-12-12 01:59:37 UTC (rev 177200)
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+ <style>
+ body {
+ margin: 0;
+ height: 1000px;
+ }
+
+ body > div {
+ outline: 1px solid black;
+ }
+
+ .box {
+ width: 100px;
+ height: 100px;
+ }
+
+ .fixed {
+ position: fixed;
+ top: 100px;
+ background-color: green;
+ }
+
+ .perspective {
+ -webkit-perspective: 500px;
+ }
+
+ .transformed {
+ -webkit-transform: translateZ(1px);
+ }
+ </style>
+ <script>
+ // Scroll on load to test fixed positioning.
+ window.addEventListener('load', function() {
+ window.scrollTo(0, 100);
+ }, false)
+ </script>
+</head>
+<body>
+
+ <div class="perspective box" style="margin: 150px 50px;">
+ <div class="fixed box">
+ <div class="transformed box"></div> <!-- Necessary to activate preserve3d compositing -->
+ </div>
+ </div>
+
+ <div class="perspective fixed box" style="left: 250px;">
+ <div class="transformed box"></div> <!-- Necessary to activate preserve3d compositing -->
+ </div>
+</body>
+</html>
\ No newline at end of file
Added: trunk/LayoutTests/transforms/2d/preserve3d-not-fixed-container-expected.html (0 => 177200)
--- trunk/LayoutTests/transforms/2d/preserve3d-not-fixed-container-expected.html (rev 0)
+++ trunk/LayoutTests/transforms/2d/preserve3d-not-fixed-container-expected.html 2014-12-12 01:59:37 UTC (rev 177200)
@@ -0,0 +1,49 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+ <style>
+ body {
+ margin: 0;
+ height: 1000px;
+ }
+
+ body > div {
+ outline: 1px solid black;
+ }
+
+ .box {
+ width: 100px;
+ height: 100px;
+ }
+
+ .fixed {
+ position: fixed;
+ top: 100px;
+ background-color: green;
+ }
+
+ .transformed {
+ -webkit-transform: translateZ(1px);
+ }
+ </style>
+ <script>
+ // Scroll on load to test fixed positioning.
+ window.addEventListener('load', function() {
+ window.scrollTo(0, 100);
+ }, false)
+ </script>
+</head>
+<body>
+
+ <div class="box" style="margin: 150px 50px;">
+ <div class="fixed box">
+ <div class="transformed box"></div> <!-- Necessary to activate preserve3d compositing -->
+ </div>
+ </div>
+
+ <div class="fixed box" style="left: 250px;">
+ <div class="transformed box"></div> <!-- Necessary to activate preserve3d compositing -->
+ </div>
+</body>
+</html>
\ No newline at end of file
Added: trunk/LayoutTests/transforms/2d/preserve3d-not-fixed-container.html (0 => 177200)
--- trunk/LayoutTests/transforms/2d/preserve3d-not-fixed-container.html (rev 0)
+++ trunk/LayoutTests/transforms/2d/preserve3d-not-fixed-container.html 2014-12-12 01:59:37 UTC (rev 177200)
@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+ <style>
+ body {
+ margin: 0;
+ height: 1000px;
+ }
+
+ body > div {
+ outline: 1px solid black;
+ }
+
+ .box {
+ width: 100px;
+ height: 100px;
+ }
+
+ .fixed {
+ position: fixed;
+ top: 100px;
+ background-color: green;
+ }
+
+ .preserve3d {
+ -webkit-transform-style: preserve-3d;
+ }
+
+ .transformed {
+ -webkit-transform: translateZ(1px);
+ }
+ </style>
+ <script>
+ // Scroll on load to test fixed positioning.
+ window.addEventListener('load', function() {
+ window.scrollTo(0, 100);
+ }, false)
+ </script>
+</head>
+<body>
+
+ <div class="preserve3d box" style="margin: 150px 50px;">
+ <div class="fixed box">
+ <div class="transformed box"></div> <!-- Necessary to activate preserve3d compositing -->
+ </div>
+ </div>
+
+ <div class="preserve3d fixed box" style="left: 250px;">
+ <div class="transformed box"></div> <!-- Necessary to activate preserve3d compositing -->
+ </div>
+</body>
+</html>
\ No newline at end of file
Added: trunk/LayoutTests/transforms/perspective-is-containing-block-for-absolute-expected.html (0 => 177200)
--- trunk/LayoutTests/transforms/perspective-is-containing-block-for-absolute-expected.html (rev 0)
+++ trunk/LayoutTests/transforms/perspective-is-containing-block-for-absolute-expected.html 2014-12-12 01:59:37 UTC (rev 177200)
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+ <style>
+ .container {
+ position: relative;
+ margin: 50px;
+ height: 100px;
+ width: 100px;
+ border: 1px solid black;
+ }
+ .box {
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+ background-color: gray;
+ }
+ </style>
+</head>
+<body>
+<div class="container">
+ <div class="box"></div>
+</div>
+</body>
+</html>
Added: trunk/LayoutTests/transforms/perspective-is-containing-block-for-absolute.html (0 => 177200)
--- trunk/LayoutTests/transforms/perspective-is-containing-block-for-absolute.html (rev 0)
+++ trunk/LayoutTests/transforms/perspective-is-containing-block-for-absolute.html 2014-12-12 01:59:37 UTC (rev 177200)
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+ <style>
+ .container {
+ margin: 50px;
+ height: 100px;
+ width: 100px;
+ border: 1px solid black;
+ -webkit-perspective: 100px;
+ }
+ .box {
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+ background-color: gray;
+ }
+ </style>
+</head>
+<body>
+<div class="container">
+ <div class="box"></div>
+</div>
+</body>
+</html>
Added: trunk/LayoutTests/transforms/preserve3d-is-containing-block-for-absolute-expected.html (0 => 177200)
--- trunk/LayoutTests/transforms/preserve3d-is-containing-block-for-absolute-expected.html (rev 0)
+++ trunk/LayoutTests/transforms/preserve3d-is-containing-block-for-absolute-expected.html 2014-12-12 01:59:37 UTC (rev 177200)
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+ <style>
+ .container {
+ position: relative;
+ margin: 50px;
+ height: 100px;
+ width: 100px;
+ border: 1px solid black;
+ }
+ .box {
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+ background-color: gray;
+ }
+ </style>
+</head>
+<body>
+<div class="container">
+ <div class="box"></div>
+</div>
+</body>
+</html>
Added: trunk/LayoutTests/transforms/preserve3d-is-containing-block-for-absolute.html (0 => 177200)
--- trunk/LayoutTests/transforms/preserve3d-is-containing-block-for-absolute.html (rev 0)
+++ trunk/LayoutTests/transforms/preserve3d-is-containing-block-for-absolute.html 2014-12-12 01:59:37 UTC (rev 177200)
@@ -0,0 +1,30 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+ <style>
+ .container {
+ margin: 50px;
+ height: 100px;
+ width: 100px;
+ border: 1px solid black;
+ -webkit-transform-style: preserve-3d;
+ -moz-transform-style: preserve-3d;
+ transform-style: preserve-3d;
+ }
+ .box {
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+ background-color: gray;
+ }
+ </style>
+</head>
+<body>
+<div class="container">
+ <div class="box"></div>
+</div>
+</body>
+</html>
Added: trunk/LayoutTests/transforms/transform-is-containing-block-for-absolute-expected.html (0 => 177200)
--- trunk/LayoutTests/transforms/transform-is-containing-block-for-absolute-expected.html (rev 0)
+++ trunk/LayoutTests/transforms/transform-is-containing-block-for-absolute-expected.html 2014-12-12 01:59:37 UTC (rev 177200)
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+ <style>
+ .container {
+ position: relative;
+ margin: 50px;
+ height: 100px;
+ width: 100px;
+ border: 1px solid black;
+ }
+ .box {
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+ background-color: gray;
+ }
+ </style>
+</head>
+<body>
+<div class="container">
+ <div class="box"></div>
+</div>
+</body>
+</html>
Added: trunk/LayoutTests/transforms/transform-is-containing-block-for-absolute.html (0 => 177200)
--- trunk/LayoutTests/transforms/transform-is-containing-block-for-absolute.html (rev 0)
+++ trunk/LayoutTests/transforms/transform-is-containing-block-for-absolute.html 2014-12-12 01:59:37 UTC (rev 177200)
@@ -0,0 +1,28 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+ <style>
+ .container {
+ margin: 50px;
+ height: 100px;
+ width: 100px;
+ border: 1px solid black;
+ -webkit-transform: translate(0, 0);
+ }
+ .box {
+ position: absolute;
+ top: 0;
+ left: 0;
+ height: 100%;
+ width: 100%;
+ background-color: gray;
+ }
+ </style>
+</head>
+<body>
+<div class="container">
+ <div class="box"></div>
+</div>
+</body>
+</html>
Modified: trunk/Source/WebCore/ChangeLog (177199 => 177200)
--- trunk/Source/WebCore/ChangeLog 2014-12-12 01:48:45 UTC (rev 177199)
+++ trunk/Source/WebCore/ChangeLog 2014-12-12 01:59:37 UTC (rev 177200)
@@ -1,3 +1,93 @@
+2014-12-11 Simon Fraser <[email protected]>
+
+ Transform-style should not kill position:fixed
+ https://bugs.webkit.org/show_bug.cgi?id=138122
+
+ Reviewed by Dean Jackson.
+
+ Various bits of rendering code checked RenderObject::hasTransform() for various
+ reasons. Confusingly, this meant "has transform, or preserve-3d, or perspective".
+
+ This patch teases those behaviors apart to produce the following behavior:
+
+ 1. "transform" acts as containing block for fixed position (no behavior change).
+ 2. "transform" acts as containing block for absolute/relative position (no behavior change).
+ 3. "perspective" does not act as containing block for fixed position (no behavior change).
+ 4. "perspective" acts as containing block for absolute/relative position (no behavior change).
+ 5. "preserve-3d" does not act as containing block for fixed position (behavior change).
+ 6. "preserve-3d" acts as containing block for absolute/relative position. This is not a
+ behavior change, but seems like incorrect behavior (https://www.w3.org/Bugs/Public/show_bug.cgi?id=27566).
+ However, we may be forced to keep it for compatibility.
+
+ The gist of the change is to rename RenderObject::hasTransform() to RenderObject::hasTransformRelatedProperty(),
+ and add hasTransform() with the more restrictive meaning. All call sites of hasTransform() were examined
+ and fixed to produce the desired behaviors.
+
+ Tests: transforms/2d/perspective-not-fixed-container.html
+ transforms/2d/preserve3d-not-fixed-container.html
+ transforms/perspective-is-containing-block-for-absolute.html
+ transforms/preserve3d-is-containing-block-for-absolute.html
+ transforms/transform-is-containing-block-for-absolute.html
+
+ * css/CSSComputedStyleDeclaration.cpp:
+ (WebCore::computedTransform): Now we can just test hasTransform().
+ * rendering/LogicalSelectionOffsetCaches.h:
+ (WebCore::isContainingBlockCandidateForAbsolutelyPositionedObject): For now, this
+ can just use hasTransformRelatedProperty(), but if we change [6] above this will have
+ to change (as documented in the comment). Also FIXME comments about sharing code.
+ * rendering/RenderBox.cpp:
+ (WebCore::RenderBox::updateFromStyle):
+ (WebCore::RenderBox::mapLocalToContainer): Can just use hasTransform() now.
+ (WebCore::RenderBox::pushMappingToContainer): Ditto.
+ (WebCore::RenderBox::mapAbsoluteToLocalPoint): Ditto.
+ (WebCore::RenderBox::layoutOverflowRectForPropagation): Ditto.
+ * rendering/RenderBox.h: All transform-related properties create RenderLayers.
+ * rendering/RenderBoxModelObject.h: Ditto.
+ * rendering/RenderElement.cpp:
+ (WebCore::RenderElement::styleWillChange):
+ * rendering/RenderGeometryMap.cpp:
+ (WebCore::canMapBetweenRenderersViaLayers): Rename to clarify. We need to not map via
+ layers if we have a perspective (since we need to generate a perspective matrix). It's
+ OK with preserve-3d though.
+ (WebCore::RenderGeometryMap::pushMappingsToAncestor):
+ (WebCore::canMapBetweenRenderers): Deleted.
+ * rendering/RenderInline.cpp:
+ (WebCore::RenderInline::updateFromStyle):
+ * rendering/RenderLayer.cpp:
+ (WebCore::RenderLayer::updateTransform): Can just check hasTransform().
+ (WebCore::RenderLayer::updateLayerPosition): Avoid calling parent() and enclosingPositionedAncestor() twice.
+ (WebCore::RenderLayer::perspectiveTransform): Do the fast bit check hasTransformRelatedProperty() first.
+ (WebCore::RenderLayer::perspectiveOrigin): Ditto.
+ (WebCore::isContainerForPositioned): This code has to now have different behavior for absolute and fixed
+ position. Changed it to call existing functions, rather than having a 3rd place that has to know about
+ containing block rules.
+ (WebCore::RenderLayer::enclosingAncestorForPosition): Call isContainerForPositioned() now.
+ (WebCore::accumulateOffsetTowardsAncestor): Call enclosingAncestorForPosition().
+ (WebCore::RenderLayer::createLocalTransformState):
+ (WebCore::RenderLayer::calculateClipRects):
+ (WebCore::isPositionedContainer): Deleted.
+ (WebCore::isFixedPositionedContainer): Deleted.
+ (WebCore::RenderLayer::enclosingPositionedAncestor): Deleted.
+ * rendering/RenderLayer.h:
+ * rendering/RenderLayerBacking.cpp:
+ (WebCore::RenderLayerBacking::updateGeometry):
+ * rendering/RenderLayerModelObject.cpp:
+ (WebCore::RenderLayerModelObject::styleDidChange):
+ * rendering/RenderObject.cpp:
+ (WebCore::RenderObject::shouldUseTransformFromContainer): Can just check hasTransform() now.
+ (WebCore::RenderObject::container):
+ * rendering/RenderObject.h:
+ (WebCore::RenderObject::hasTransformRelatedProperty):
+ (WebCore::RenderObject::hasTransform):
+ (WebCore::RenderObject::setHasTransformRelatedProperty):
+ (WebCore::RenderObject::RenderObjectBitfields::RenderObjectBitfields):
+ (WebCore::RenderObject::setHasTransform): Deleted.
+ * rendering/RenderTableRow.h:
+ * rendering/RenderView.cpp:
+ (WebCore::RenderView::mapLocalToContainer): nullptr goodness.
+ (WebCore::RenderView::pushMappingToContainer): Ditto.
+ (WebCore::RenderView::mapAbsoluteToLocalPoint): Ditto.
+
2014-12-11 Rich Tibbett <[email protected]>
[iOS] Normalize iOS DeviceOrientation beta/gamma per spec.
Modified: trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp (177199 => 177200)
--- trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp 2014-12-12 01:48:45 UTC (rev 177199)
+++ trunk/Source/WebCore/css/CSSComputedStyleDeclaration.cpp 2014-12-12 01:59:37 UTC (rev 177200)
@@ -847,7 +847,7 @@
static PassRef<CSSValue> computedTransform(RenderObject* renderer, const RenderStyle* style)
{
- if (!renderer || !renderer->hasTransform() || !style->hasTransform())
+ if (!renderer || !renderer->hasTransform())
return cssValuePool().createIdentifierValue(CSSValueNone);
FloatRect pixelSnappedRect;
Modified: trunk/Source/WebCore/rendering/LogicalSelectionOffsetCaches.h (177199 => 177200)
--- trunk/Source/WebCore/rendering/LogicalSelectionOffsetCaches.h 2014-12-12 01:48:45 UTC (rev 177199)
+++ trunk/Source/WebCore/rendering/LogicalSelectionOffsetCaches.h 2014-12-12 01:59:37 UTC (rev 177200)
@@ -25,10 +25,12 @@
namespace WebCore {
+// FIXME: share code with RenderObject::container().
static inline bool isContainingBlockCandidateForAbsolutelyPositionedObject(RenderElement& object)
{
+ // FIXME: hasTransformRelatedProperty() includes preserves3D() check, but this may need to change: https://www.w3.org/Bugs/Public/show_bug.cgi?id=27566
return object.style().position() != StaticPosition
- || (object.hasTransform() && object.isRenderBlock())
+ || (object.isRenderBlock() && object.hasTransformRelatedProperty())
|| object.isSVGForeignObject()
|| object.isRenderView();
}
@@ -38,6 +40,7 @@
return (object.isInline() && !object.isReplaced()) || !object.isRenderBlock();
}
+// FIXME: share code with RenderObject::container().
static inline RenderBlock* containingBlockForFixedPosition(RenderElement* parent)
{
RenderElement* object = parent;
Modified: trunk/Source/WebCore/rendering/RenderBox.cpp (177199 => 177200)
--- trunk/Source/WebCore/rendering/RenderBox.cpp 2014-12-12 01:48:45 UTC (rev 177199)
+++ trunk/Source/WebCore/rendering/RenderBox.cpp 2014-12-12 01:59:37 UTC (rev 177200)
@@ -484,7 +484,7 @@
}
}
- setHasTransform(styleToUse.hasTransformRelatedProperty());
+ setHasTransformRelatedProperty(styleToUse.hasTransformRelatedProperty());
setHasReflection(styleToUse.boxReflect());
}
@@ -1918,10 +1918,9 @@
return;
bool isFixedPos = style().position() == FixedPosition;
- bool hasTransform = hasLayer() && layer()->transform();
// If this box has a transform, it acts as a fixed position container for fixed descendants,
// and may itself also be fixed position. So propagate 'fixed' up only if this box is fixed position.
- if (hasTransform && !isFixedPos)
+ if (hasTransform() && !isFixedPos)
mode &= ~IsFixed;
else if (isFixedPos)
mode |= IsFixed;
@@ -1967,8 +1966,6 @@
return nullptr;
bool isFixedPos = style().position() == FixedPosition;
- bool hasTransform = hasLayer() && layer()->transform();
-
LayoutSize adjustmentForSkippedAncestor;
if (ancestorSkipped) {
// There can't be a transform between repaintContainer and o, because transforms create containers, so it should be safe
@@ -1985,10 +1982,10 @@
getTransformFromContainer(container, containerOffset, t);
t.translateRight(adjustmentForSkippedAncestor.width(), adjustmentForSkippedAncestor.height());
- geometryMap.push(this, t, preserve3D, offsetDependsOnPoint, isFixedPos, hasTransform);
+ geometryMap.push(this, t, preserve3D, offsetDependsOnPoint, isFixedPos, hasTransform());
} else {
containerOffset += adjustmentForSkippedAncestor;
- geometryMap.push(this, containerOffset, preserve3D, offsetDependsOnPoint, isFixedPos, hasTransform);
+ geometryMap.push(this, containerOffset, preserve3D, offsetDependsOnPoint, isFixedPos, hasTransform());
}
return ancestorSkipped ? ancestorToStopAt : container;
@@ -1997,8 +1994,7 @@
void RenderBox::mapAbsoluteToLocalPoint(MapCoordinatesFlags mode, TransformState& transformState) const
{
bool isFixedPos = style().position() == FixedPosition;
- bool hasTransform = hasLayer() && layer()->transform();
- if (hasTransform && !isFixedPos) {
+ if (hasTransform() && !isFixedPos) {
// If this box has a transform, it acts as a fixed position container for fixed descendants,
// and may itself also be fixed position. So propagate 'fixed' up only if this box is fixed position.
mode &= ~IsFixed;
@@ -4566,7 +4562,7 @@
if (!hasOverflowClip())
rect.unite(layoutOverflowRect());
- bool hasTransform = hasLayer() && layer()->transform();
+ bool hasTransform = this->hasTransform();
#if PLATFORM(IOS)
if (isInFlowPositioned() || (hasTransform && document().settings()->shouldTransformsAffectOverflow())) {
#else
Modified: trunk/Source/WebCore/rendering/RenderBox.h (177199 => 177200)
--- trunk/Source/WebCore/rendering/RenderBox.h 2014-12-12 01:48:45 UTC (rev 177199)
+++ trunk/Source/WebCore/rendering/RenderBox.h 2014-12-12 01:59:37 UTC (rev 177200)
@@ -53,7 +53,7 @@
virtual bool requiresLayer() const override
{
return isRoot() || isPositioned() || createsGroup() || hasClipPath() || hasOverflowClip()
- || hasTransform() || hasHiddenBackface() || hasReflection() || style().specifiesColumns()
+ || hasTransformRelatedProperty() || hasHiddenBackface() || hasReflection() || style().specifiesColumns()
|| !style().hasAutoZIndex();
}
Modified: trunk/Source/WebCore/rendering/RenderBoxModelObject.h (177199 => 177200)
--- trunk/Source/WebCore/rendering/RenderBoxModelObject.h 2014-12-12 01:48:45 UTC (rev 177199)
+++ trunk/Source/WebCore/rendering/RenderBoxModelObject.h 2014-12-12 01:59:37 UTC (rev 177200)
@@ -142,7 +142,7 @@
virtual void updateFromStyle() override;
- virtual bool requiresLayer() const override { return isRoot() || isPositioned() || createsGroup() || hasClipPath() || hasTransform() || hasHiddenBackface() || hasReflection(); }
+ virtual bool requiresLayer() const override { return isRoot() || isPositioned() || createsGroup() || hasClipPath() || hasTransformRelatedProperty() || hasHiddenBackface() || hasReflection(); }
// This will work on inlines to return the bounding box of all of the lines' border boxes.
virtual IntRect borderBoundingBox() const = 0;
Modified: trunk/Source/WebCore/rendering/RenderElement.cpp (177199 => 177200)
--- trunk/Source/WebCore/rendering/RenderElement.cpp 2014-12-12 01:48:45 UTC (rev 177199)
+++ trunk/Source/WebCore/rendering/RenderElement.cpp 2014-12-12 01:59:37 UTC (rev 177200)
@@ -858,7 +858,7 @@
setHorizontalWritingMode(true);
setHasBoxDecorations(false);
setHasOverflowClip(false);
- setHasTransform(false);
+ setHasTransformRelatedProperty(false);
setHasReflection(false);
} else {
s_affectsParentBlock = false;
Modified: trunk/Source/WebCore/rendering/RenderGeometryMap.cpp (177199 => 177200)
--- trunk/Source/WebCore/rendering/RenderGeometryMap.cpp 2014-12-12 01:48:45 UTC (rev 177199)
+++ trunk/Source/WebCore/rendering/RenderGeometryMap.cpp 2014-12-12 01:59:37 UTC (rev 177200)
@@ -155,15 +155,18 @@
ASSERT(m_mapping.isEmpty() || m_mapping[0].m_renderer->isRenderView());
}
-static bool canMapBetweenRenderers(const RenderLayerModelObject& renderer, const RenderLayerModelObject& ancestor)
+static bool canMapBetweenRenderersViaLayers(const RenderLayerModelObject& renderer, const RenderLayerModelObject& ancestor)
{
for (const RenderElement* current = &renderer; ; current = current->parent()) {
const RenderStyle& style = current->style();
if (style.position() == FixedPosition || style.isFlippedBlocksWritingMode())
return false;
- if (current->hasTransform() || current->isRenderFlowThread())
+ if (current->hasTransformRelatedProperty() && (current->style().hasTransform() || current->style().hasPerspective()))
return false;
+
+ if (current->isRenderFlowThread())
+ return false;
if (current->isSVGRoot())
return false;
@@ -181,7 +184,7 @@
// We have to visit all the renderers to detect flipped blocks. This might defeat the gains
// from mapping via layers.
- bool canConvertInLayerTree = ancestorLayer ? canMapBetweenRenderers(layer->renderer(), ancestorLayer->renderer()) : false;
+ bool canConvertInLayerTree = ancestorLayer ? canMapBetweenRenderersViaLayers(layer->renderer(), ancestorLayer->renderer()) : false;
if (canConvertInLayerTree) {
LayoutSize layerOffset = layer->offsetFromAncestor(ancestorLayer);
Modified: trunk/Source/WebCore/rendering/RenderInline.cpp (177199 => 177200)
--- trunk/Source/WebCore/rendering/RenderInline.cpp 2014-12-12 01:48:45 UTC (rev 177199)
+++ trunk/Source/WebCore/rendering/RenderInline.cpp 2014-12-12 01:59:37 UTC (rev 177200)
@@ -124,7 +124,7 @@
RenderBoxModelObject::updateFromStyle();
// FIXME: Support transforms and reflections on inline flows someday.
- setHasTransform(false);
+ setHasTransformRelatedProperty(false);
setHasReflection(false);
}
Modified: trunk/Source/WebCore/rendering/RenderLayer.cpp (177199 => 177200)
--- trunk/Source/WebCore/rendering/RenderLayer.cpp 2014-12-12 01:48:45 UTC (rev 177199)
+++ trunk/Source/WebCore/rendering/RenderLayer.cpp 2014-12-12 01:59:37 UTC (rev 177200)
@@ -77,6 +77,7 @@
#include "HitTestRequest.h"
#include "HitTestResult.h"
#include "InspectorInstrumentation.h"
+#include "LogicalSelectionOffsetCaches.h"
#include "OverflowEvent.h"
#include "OverlapTestRequestClient.h"
#include "Page.h"
@@ -830,9 +831,7 @@
void RenderLayer::updateTransform()
{
- // hasTransform() on the renderer is also true when there is transform-style: preserve-3d or perspective set,
- // so check style too.
- bool hasTransform = renderer().hasTransform() && renderer().style().hasTransform();
+ bool hasTransform = renderer().hasTransform();
bool had3DTransform = has3DTransform();
bool hadTransform = !!m_transform;
@@ -1210,10 +1209,10 @@
localPoint += box->topLeftLocationOffset();
}
- if (!renderer().isOutOfFlowPositioned() && renderer().parent()) {
+ RenderElement* ancestor;
+ if (!renderer().isOutOfFlowPositioned() && (ancestor = renderer().parent())) {
// We must adjust our position by walking up the render tree looking for the
// nearest enclosing object with a layer.
- RenderElement* ancestor = renderer().parent();
while (ancestor && !ancestor->hasLayer()) {
if (is<RenderBox>(*ancestor) && !is<RenderTableRow>(*ancestor)) {
// Rows and cells share the same coordinate space (that of the section).
@@ -1229,9 +1228,8 @@
}
// Subtract our parent's scroll offset.
- if (renderer().isOutOfFlowPositioned() && enclosingPositionedAncestor()) {
- RenderLayer* positionedParent = enclosingPositionedAncestor();
-
+ RenderLayer* positionedParent;
+ if (renderer().isOutOfFlowPositioned() && (positionedParent = enclosingAncestorForPosition(renderer().style().position()))) {
// For positioned layers, we subtract out the enclosing positioned layer's scroll offset.
if (positionedParent->renderer().hasOverflowClip()) {
LayoutSize offset = positionedParent->scrolledContentOffset();
@@ -1269,7 +1267,7 @@
TransformationMatrix RenderLayer::perspectiveTransform() const
{
- if (!renderer().hasTransform())
+ if (!renderer().hasTransformRelatedProperty())
return TransformationMatrix();
const RenderStyle& style = renderer().style();
@@ -1299,7 +1297,7 @@
FloatPoint RenderLayer::perspectiveOrigin() const
{
- if (!renderer().hasTransform())
+ if (!renderer().hasTransformRelatedProperty())
return FloatPoint();
const LayoutRect borderBox = downcast<RenderBox>(renderer()).borderBoxRect();
@@ -1319,20 +1317,25 @@
return layer;
}
-static inline bool isPositionedContainer(RenderLayer* layer)
+static inline bool isContainerForPositioned(RenderLayer& layer, EPosition position)
{
- return layer->isRootLayer() || layer->renderer().isPositioned() || layer->hasTransform();
-}
+ switch (position) {
+ case FixedPosition:
+ return layer.renderer().canContainFixedPositionObjects();
-static inline bool isFixedPositionedContainer(RenderLayer* layer)
-{
- return layer->isRootLayer() || layer->hasTransform();
+ case AbsolutePosition:
+ return isContainingBlockCandidateForAbsolutelyPositionedObject(layer.renderer());
+
+ default:
+ ASSERT_NOT_REACHED();
+ return false;
+ }
}
-RenderLayer* RenderLayer::enclosingPositionedAncestor() const
+RenderLayer* RenderLayer::enclosingAncestorForPosition(EPosition position) const
{
RenderLayer* curr = parent();
- while (curr && !isPositionedContainer(curr))
+ while (curr && !isContainerForPositioned(*curr, position))
curr = curr->parent();
return curr;
@@ -1911,7 +1914,7 @@
if (currLayer == ancestorLayer)
foundAncestor = true;
- if (isFixedPositionedContainer(currLayer)) {
+ if (isContainerForPositioned(*currLayer, FixedPosition)) {
fixedPositionContainerLayer = currLayer;
ASSERT_UNUSED(foundAncestor, foundAncestor);
break;
@@ -1948,14 +1951,14 @@
RenderLayer* parentLayer;
if (position == AbsolutePosition || position == FixedPosition) {
- // Do what enclosingPositionedAncestor() does, but check for ancestorLayer along the way.
+ // Do what enclosingAncestorForPosition() does, but check for ancestorLayer along the way.
parentLayer = layer->parent();
bool foundAncestorFirst = false;
while (parentLayer) {
// RenderFlowThread is a positioned container, child of RenderView, positioned at (0,0).
// This implies that, for out-of-flow positioned elements inside a RenderFlowThread,
// we are bailing out before reaching root layer.
- if (isPositionedContainer(parentLayer))
+ if (isContainerForPositioned(*parentLayer, position))
break;
if (parentLayer == ancestorLayer) {
@@ -1973,8 +1976,8 @@
if (foundAncestorFirst) {
// Found ancestorLayer before the abs. positioned container, so compute offset of both relative
- // to enclosingPositionedAncestor and subtract.
- RenderLayer* positionedAncestor = parentLayer->enclosingPositionedAncestor();
+ // to enclosingAncestorForPosition and subtract.
+ RenderLayer* positionedAncestor = parentLayer->enclosingAncestorForPosition(position);
LayoutSize thisCoords = layer->offsetFromAncestor(positionedAncestor);
LayoutSize ancestorCoords = ancestorLayer->offsetFromAncestor(positionedAncestor);
location += (thisCoords - ancestorCoords);
@@ -4718,7 +4721,7 @@
}
offset += translationOffset;
- RenderObject* containerRenderer = containerLayer ? &containerLayer->renderer() : 0;
+ RenderObject* containerRenderer = containerLayer ? &containerLayer->renderer() : nullptr;
if (renderer().shouldUseTransformFromContainer(containerRenderer)) {
TransformationMatrix containerTransform;
renderer().getTransformFromContainer(containerRenderer, offset, containerTransform);
@@ -6215,7 +6218,7 @@
|| (renderer().style().specifiesColumns() && !isRootLayer())
|| renderer().isInFlowRenderFlowThread())
&& !renderer().isPositioned()
- && !renderer().hasTransform()
+ && !renderer().hasTransformRelatedProperty()
&& !renderer().hasClipPath()
&& !renderer().hasFilter()
&& !renderer().hasBackdropFilter()
Modified: trunk/Source/WebCore/rendering/RenderLayer.h (177199 => 177200)
--- trunk/Source/WebCore/rendering/RenderLayer.h 2014-12-12 01:48:45 UTC (rev 177199)
+++ trunk/Source/WebCore/rendering/RenderLayer.h 2014-12-12 01:59:37 UTC (rev 177200)
@@ -619,7 +619,7 @@
// Gets the nearest enclosing positioned ancestor layer (also includes
// the <html> layer and the root layer).
- RenderLayer* enclosingPositionedAncestor() const;
+ RenderLayer* enclosingAncestorForPosition(EPosition) const;
// Returns the nearest enclosing layer that is scrollable.
RenderLayer* enclosingScrollableLayer() const;
Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.cpp (177199 => 177200)
--- trunk/Source/WebCore/rendering/RenderLayerBacking.cpp 2014-12-12 01:48:45 UTC (rev 177199)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.cpp 2014-12-12 01:59:37 UTC (rev 177200)
@@ -822,7 +822,7 @@
m_maskLayer->setOffsetFromRenderer(m_graphicsLayer->offsetFromRenderer());
}
- if (m_owningLayer.hasTransform()) {
+ if (m_owningLayer.renderer().hasTransformRelatedProperty()) {
// Update properties that depend on layer dimensions.
FloatPoint3D transformOrigin = computeTransformOriginForPainting(downcast<RenderBox>(renderer()).borderBoxRect());
// Get layout bounds in the coords of compAncestor to match relativeCompositingBounds.
Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (177199 => 177200)
--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp 2014-12-12 01:48:45 UTC (rev 177199)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp 2014-12-12 01:59:37 UTC (rev 177200)
@@ -2261,7 +2261,7 @@
reasons |= CompositingReasonNegativeZIndexChildren;
break;
case RenderLayer::IndirectCompositingReason::GraphicalEffect:
- if (renderer->layer()->transform())
+ if (renderer->hasTransform())
reasons |= CompositingReasonTransformWithCompositedDescendants;
if (renderer->isTransparent())
Modified: trunk/Source/WebCore/rendering/RenderLayerModelObject.cpp (177199 => 177200)
--- trunk/Source/WebCore/rendering/RenderLayerModelObject.cpp 2014-12-12 01:48:45 UTC (rev 177199)
+++ trunk/Source/WebCore/rendering/RenderLayerModelObject.cpp 2014-12-12 01:59:37 UTC (rev 177200)
@@ -147,7 +147,7 @@
if (oldStyle->hasBlendMode())
layer()->parent()->dirtyAncestorChainHasBlendingDescendants();
#endif
- setHasTransform(false); // Either a transform wasn't specified or the object doesn't support transforms, so just null out the bit.
+ setHasTransformRelatedProperty(false); // All transform-related propeties force layers, so we know we don't have one or the object doesn't support them.
setHasReflection(false);
layer()->removeOnlyThisLayer(); // calls destroyLayer() which clears m_layer
if (s_wasFloating && isFloating())
Modified: trunk/Source/WebCore/rendering/RenderObject.cpp (177199 => 177200)
--- trunk/Source/WebCore/rendering/RenderObject.cpp 2014-12-12 01:48:45 UTC (rev 177199)
+++ trunk/Source/WebCore/rendering/RenderObject.cpp 2014-12-12 01:59:37 UTC (rev 177200)
@@ -1648,9 +1648,7 @@
bool RenderObject::shouldUseTransformFromContainer(const RenderObject* containerObject) const
{
#if ENABLE(3D_RENDERING)
- // hasTransform() indicates whether the object has transform, transform-style or perspective. We just care about transform,
- // so check the layer's transform directly.
- return (hasLayer() && downcast<RenderLayerModelObject>(*this).layer()->transform()) || (containerObject && containerObject->style().hasPerspective());
+ return hasTransform() || (containerObject && containerObject->style().hasPerspective());
#else
UNUSED_PARAM(containerObject);
return hasTransform();
@@ -1811,6 +1809,7 @@
// we'll just return 0).
// FIXME: The definition of view() has changed to not crawl up the render tree. It might
// be safe now to use it.
+ // FIXME: share code with containingBlockForFixedPosition().
while (o && o->parent() && !(o->hasTransform() && o->isRenderBlock())) {
// foreignObject is the containing block for its contents.
if (o->isSVGForeignObject())
@@ -1830,7 +1829,9 @@
// Same goes here. We technically just want our containing block, but
// we may not have one if we're part of an uninstalled subtree. We'll
// climb as high as we can though.
- while (o && o->style().position() == StaticPosition && !o->isRenderView() && !(o->hasTransform() && o->isRenderBlock())) {
+ // FIXME: share code with isContainingBlockCandidateForAbsolutelyPositionedObject().
+ // FIXME: hasTransformRelatedProperty() includes preserves3D() check, but this may need to change: https://www.w3.org/Bugs/Public/show_bug.cgi?id=27566
+ while (o && o->style().position() == StaticPosition && !o->isRenderView() && !(o->hasTransformRelatedProperty() && o->isRenderBlock())) {
if (o->isSVGForeignObject()) // foreignObject is the containing block for contents inside it
break;
Modified: trunk/Source/WebCore/rendering/RenderObject.h (177199 => 177200)
--- trunk/Source/WebCore/rendering/RenderObject.h 2014-12-12 01:48:45 UTC (rev 177199)
+++ trunk/Source/WebCore/rendering/RenderObject.h 2014-12-12 01:59:37 UTC (rev 177200)
@@ -550,7 +550,8 @@
bool hasOverflowClip() const { return m_bitfields.hasOverflowClip(); }
- bool hasTransform() const { return m_bitfields.hasTransform(); }
+ bool hasTransformRelatedProperty() const { return m_bitfields.hasTransformRelatedProperty(); } // Transform, perspective or transform-style: preserve-3d.
+ bool hasTransform() const { return hasTransformRelatedProperty() && style().hasTransform(); }
inline bool preservesNewline() const;
@@ -616,7 +617,7 @@
void setHorizontalWritingMode(bool b = true) { m_bitfields.setHorizontalWritingMode(b); }
void setHasOverflowClip(bool b = true) { m_bitfields.setHasOverflowClip(b); }
void setHasLayer(bool b = true) { m_bitfields.setHasLayer(b); }
- void setHasTransform(bool b = true) { m_bitfields.setHasTransform(b); }
+ void setHasTransformRelatedProperty(bool b = true) { m_bitfields.setHasTransformRelatedProperty(b); }
void setHasReflection(bool b = true) { m_bitfields.setHasReflection(b); }
// Hook so that RenderTextControl can return the line height of its inner renderer.
@@ -927,7 +928,7 @@
, m_isDragging(false)
, m_hasLayer(false)
, m_hasOverflowClip(false)
- , m_hasTransform(false)
+ , m_hasTransformRelatedProperty(false)
, m_hasReflection(false)
, m_everHadLayout(false)
, m_childrenInline(false)
@@ -958,7 +959,7 @@
ADD_BOOLEAN_BITFIELD(hasLayer, HasLayer);
ADD_BOOLEAN_BITFIELD(hasOverflowClip, HasOverflowClip); // Set in the case of overflow:auto/scroll/hidden
- ADD_BOOLEAN_BITFIELD(hasTransform, HasTransform);
+ ADD_BOOLEAN_BITFIELD(hasTransformRelatedProperty, HasTransformRelatedProperty);
ADD_BOOLEAN_BITFIELD(hasReflection, HasReflection);
ADD_BOOLEAN_BITFIELD(everHadLayout, EverHadLayout);
Modified: trunk/Source/WebCore/rendering/RenderRegion.cpp (177199 => 177200)
--- trunk/Source/WebCore/rendering/RenderRegion.cpp 2014-12-12 01:48:45 UTC (rev 177199)
+++ trunk/Source/WebCore/rendering/RenderRegion.cpp 2014-12-12 01:59:37 UTC (rev 177200)
@@ -544,7 +544,7 @@
if (!box->hasOverflowClip())
rect.unite(layoutOverflowRectForBox(box));
- bool hasTransform = box->hasLayer() && box->layer()->transform();
+ bool hasTransform = box->hasTransform();
if (box->isInFlowPositioned() || hasTransform) {
if (hasTransform)
rect = box->layer()->currentTransform().mapRect(rect);
Modified: trunk/Source/WebCore/rendering/RenderTableRow.h (177199 => 177200)
--- trunk/Source/WebCore/rendering/RenderTableRow.h 2014-12-12 01:48:45 UTC (rev 177199)
+++ trunk/Source/WebCore/rendering/RenderTableRow.h 2014-12-12 01:59:37 UTC (rev 177200)
@@ -103,7 +103,7 @@
virtual void layout() override;
virtual LayoutRect clippedOverflowRectForRepaint(const RenderLayerModelObject* repaintContainer) const override;
- virtual bool requiresLayer() const override { return hasOverflowClip() || hasTransform() || hasHiddenBackface() || hasClipPath() || createsGroup() || isStickyPositioned(); }
+ virtual bool requiresLayer() const override { return hasOverflowClip() || hasTransformRelatedProperty() || hasHiddenBackface() || hasClipPath() || createsGroup() || isStickyPositioned(); }
virtual void paint(PaintInfo&, const LayoutPoint&) override;
Modified: trunk/Source/WebCore/rendering/RenderView.cpp (177199 => 177200)
--- trunk/Source/WebCore/rendering/RenderView.cpp 2014-12-12 01:48:45 UTC (rev 177199)
+++ trunk/Source/WebCore/rendering/RenderView.cpp 2014-12-12 01:59:37 UTC (rev 177200)
@@ -420,9 +420,9 @@
ASSERT_ARG(repaintContainer, !repaintContainer || repaintContainer == this);
ASSERT_UNUSED(wasFixed, !wasFixed || *wasFixed == (mode & IsFixed));
- if (!repaintContainer && mode & UseTransforms && shouldUseTransformFromContainer(0)) {
+ if (!repaintContainer && mode & UseTransforms && shouldUseTransformFromContainer(nullptr)) {
TransformationMatrix t;
- getTransformFromContainer(0, LayoutSize(), t);
+ getTransformFromContainer(nullptr, LayoutSize(), t);
transformState.applyTransform(t);
}
@@ -446,9 +446,9 @@
LayoutSize scrollOffset = frameView().scrollOffsetForFixedPosition();
#endif
- if (!ancestorToStopAt && shouldUseTransformFromContainer(0)) {
+ if (!ancestorToStopAt && shouldUseTransformFromContainer(nullptr)) {
TransformationMatrix t;
- getTransformFromContainer(0, LayoutSize(), t);
+ getTransformFromContainer(nullptr, LayoutSize(), t);
geometryMap.pushView(this, scrollOffset, &t);
} else
geometryMap.pushView(this, scrollOffset);
@@ -465,9 +465,9 @@
transformState.move(frameView().scrollOffsetForFixedPosition());
#endif
- if (mode & UseTransforms && shouldUseTransformFromContainer(0)) {
+ if (mode & UseTransforms && shouldUseTransformFromContainer(nullptr)) {
TransformationMatrix t;
- getTransformFromContainer(0, LayoutSize(), t);
+ getTransformFromContainer(nullptr, LayoutSize(), t);
transformState.applyTransform(t);
}
}