Title: [182785] releases/WebKitGTK/webkit-2.8
Revision
182785
Author
carlo...@webkit.org
Date
2015-04-14 01:37:03 -0700 (Tue, 14 Apr 2015)

Log Message

Merge r182743 - Fixed position element is truncated if moved onscreen by a transform
https://bugs.webkit.org/show_bug.cgi?id=143655
Source/WebCore:

rdar://problem/15020044

Reviewed by Darin Adler.

Our "don't do layout if transform changes" code was too aggressive.
If an element changes between having a transform and not having one, we
really need to do a layout since so much else depends on transforms. In
this particular case, we clip position:fixed elements to the viewport if
they are not transformed, and were failing to re-evaluate this when a
transform was added. Doing a layout fixes this.

Test: compositing/geometry/fixed-transformed.html

* rendering/style/RenderStyle.cpp:
(WebCore::RenderStyle::changeRequiresLayout):
* rendering/style/StyleTransformData.h:
(WebCore::StyleTransformData::hasTransform):

LayoutTests:

Reviewed by Darin Adler.

Test that moves a position:fixed element on-screen using a transform.

* compositing/geometry/fixed-transformed.html: Added.

Modified Paths

Added Paths

Diff

Modified: releases/WebKitGTK/webkit-2.8/LayoutTests/ChangeLog (182784 => 182785)


--- releases/WebKitGTK/webkit-2.8/LayoutTests/ChangeLog	2015-04-14 08:27:45 UTC (rev 182784)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/ChangeLog	2015-04-14 08:37:03 UTC (rev 182785)
@@ -1,3 +1,14 @@
+2015-04-13  Simon Fraser  <simon.fra...@apple.com>
+
+        Fixed position element is truncated if moved onscreen by a transform
+        https://bugs.webkit.org/show_bug.cgi?id=143655
+
+        Reviewed by Darin Adler.
+        
+        Test that moves a position:fixed element on-screen using a transform.
+
+        * compositing/geometry/fixed-transformed.html: Added.
+
 2015-04-12  Simon Fraser  <simon.fra...@apple.com>
 
         Selects don't scroll at some aspect ratios

Added: releases/WebKitGTK/webkit-2.8/LayoutTests/compositing/geometry/fixed-transformed.html (0 => 182785)


--- releases/WebKitGTK/webkit-2.8/LayoutTests/compositing/geometry/fixed-transformed.html	                        (rev 0)
+++ releases/WebKitGTK/webkit-2.8/LayoutTests/compositing/geometry/fixed-transformed.html	2015-04-14 08:37:03 UTC (rev 182785)
@@ -0,0 +1,40 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+    <style>
+        #slider {
+            position: fixed;
+            top: 100px;
+            left: -100px;
+            width: 200px;
+            height: 100px;
+            background-color: blue;
+            border: 10px solid gray;
+        }
+        #slider.out {
+            -webkit-transform: translateX(100px);
+        }
+    </style>
+    <script>
+        if (window.testRunner) {
+            testRunner.dumpAsText();
+            testRunner.waitUntilDone();
+        }
+        window.addEventListener('load', function() {
+            window.setTimeout(function() {
+                document.getElementById('slider').classList.add('out');
+                if (window.testRunner) {
+                    document.getElementById('layertree').innerText = window.internals.layerTreeAsText(document);
+                    testRunner.notifyDone();
+                }
+            }, 0);
+        }, false);
+        
+    </script>
+</head>
+<body>
+<div id="slider"></div>
+<pre id="layertree"></pre>
+</body>
+</html>

Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/ChangeLog (182784 => 182785)


--- releases/WebKitGTK/webkit-2.8/Source/WebCore/ChangeLog	2015-04-14 08:27:45 UTC (rev 182784)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/ChangeLog	2015-04-14 08:37:03 UTC (rev 182785)
@@ -1,3 +1,25 @@
+2015-04-13  Simon Fraser  <simon.fra...@apple.com>
+
+        Fixed position element is truncated if moved onscreen by a transform
+        https://bugs.webkit.org/show_bug.cgi?id=143655
+        rdar://problem/15020044
+
+        Reviewed by Darin Adler.
+        
+        Our "don't do layout if transform changes" code was too aggressive.
+        If an element changes between having a transform and not having one, we
+        really need to do a layout since so much else depends on transforms. In
+        this particular case, we clip position:fixed elements to the viewport if
+        they are not transformed, and were failing to re-evaluate this when a
+        transform was added. Doing a layout fixes this.
+
+        Test: compositing/geometry/fixed-transformed.html
+
+        * rendering/style/RenderStyle.cpp:
+        (WebCore::RenderStyle::changeRequiresLayout):
+        * rendering/style/StyleTransformData.h:
+        (WebCore::StyleTransformData::hasTransform):
+
 2015-04-13  Darin Adler  <da...@apple.com>
 
         Remove needless recreation of URL in NavigationScheduler::scheduleLocationChange

Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/rendering/style/RenderStyle.cpp (182784 => 182785)


--- releases/WebKitGTK/webkit-2.8/Source/WebCore/rendering/style/RenderStyle.cpp	2015-04-14 08:27:45 UTC (rev 182784)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/rendering/style/RenderStyle.cpp	2015-04-14 08:37:03 UTC (rev 182785)
@@ -474,10 +474,13 @@
             && *rareNonInheritedData->m_multiCol.get() != *other.rareNonInheritedData->m_multiCol.get())
             return true;
 
-        if (rareNonInheritedData->m_transform.get() != other.rareNonInheritedData->m_transform.get()
-            && *rareNonInheritedData->m_transform.get() != *other.rareNonInheritedData->m_transform.get()) {
-            changedContextSensitiveProperties |= ContextSensitivePropertyTransform;
-            // Don't return; keep looking for another change
+        if (rareNonInheritedData->m_transform != other.rareNonInheritedData->m_transform) {
+            if (rareNonInheritedData->m_transform->hasTransform() != other.rareNonInheritedData->m_transform->hasTransform())
+                return true;
+            if (*rareNonInheritedData->m_transform != *other.rareNonInheritedData->m_transform) {
+                changedContextSensitiveProperties |= ContextSensitivePropertyTransform;
+                // Don't return; keep looking for another change
+            }
         }
 
 #if ENABLE(CSS_GRID_LAYOUT)

Modified: releases/WebKitGTK/webkit-2.8/Source/WebCore/rendering/style/StyleTransformData.h (182784 => 182785)


--- releases/WebKitGTK/webkit-2.8/Source/WebCore/rendering/style/StyleTransformData.h	2015-04-14 08:27:45 UTC (rev 182784)
+++ releases/WebKitGTK/webkit-2.8/Source/WebCore/rendering/style/StyleTransformData.h	2015-04-14 08:37:03 UTC (rev 182785)
@@ -42,6 +42,8 @@
     {
         return !(*this == o);
     }
+    
+    bool hasTransform() const { return m_operations.size(); }
 
     TransformOperations m_operations;
     Length m_x;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to