Fixed background is scrolling in http://www.nieuwecode.nl/ in Qt webkit2
authoryael.aharon@nokia.com <yael.aharon@nokia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 24 Apr 2012 23:43:46 +0000 (23:43 +0000)
committeryael.aharon@nokia.com <yael.aharon@nokia.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 24 Apr 2012 23:43:46 +0000 (23:43 +0000)
https://bugs.webkit.org/show_bug.cgi?id=83980

Reviewed by Simon Fraser.

.:

* ManualTests/fixed-position-no-z-index.html: Added.

Source/WebCore:

When a fixed position element does not have z-index explicitly specified, it does not create a
stacking context. This results in fixed elements scrolling with the content layer.
This patch creates a stacking context for fixed positioned elements for the Qt port, by enabling
the flag ENABLE_FIXED_POSITION_CREATES_STACKING_CONTEXT.
Added a manual test because this patch takes effect only during scrolling.

* css/CSSStyleSelector.cpp:
(WebCore::CSSStyleSelector::collectMatchingRulesForList):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@115134 268f45cc-cd09-0410-ab3c-d52691b4dbfc

ChangeLog
ManualTests/fixed-position-no-z-index.html [new file with mode: 0644]
Source/WebCore/ChangeLog
Source/WebCore/css/CSSStyleSelector.cpp

index 4e47253..c7d8e77 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+2012-04-24  Yael Aharon  <yael.aharon@nokia.com>
+
+        Fixed background is scrolling in http://www.nieuwecode.nl/ in Qt webkit2
+        https://bugs.webkit.org/show_bug.cgi?id=83980
+
+        Reviewed by Simon Fraser.
+
+        * ManualTests/fixed-position-no-z-index.html: Added.
+
 2012-04-24  Carlos Garcia Campos  <cgarcia@igalia.com>
 
         [GTK] Build and run TestWebKitAPI unit tests
diff --git a/ManualTests/fixed-position-no-z-index.html b/ManualTests/fixed-position-no-z-index.html
new file mode 100644 (file)
index 0000000..4c0b715
--- /dev/null
@@ -0,0 +1,25 @@
+<html>
+<head>
+<style>
+.back { z-index: -1; position: absolute; width:1000px; height:1000px;}
+.d1 { position:fixed; top:0; left:0; width:1000px; height:1000px;}
+.d2 { margin: 30px 40% 20px 20%;  position: relative; z-index: 5;}
+body { margin: 0px; }
+</style>
+</head>
+<body>
+<div class="d1"><img class="back" src="resources/simple_image.png">
+</div>
+<div class="d2">
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. In ornare risus. Aliquam nonummy libero et risus. Vestibulum sit amet massa nec mauris interdum luctus. Nam ut dolor ut nunc malesuada varius. Duis risus. Mauris vel nulla ut odio porta vestibulum. Mauris ac sapien. In a dolor at urna malesuada suscipit. Aenean nisl erat, nonummy quis, blandit in, sagittis et, ligula. Maecenas consequat. Donec nonummy rutrum nibh. Praesent tincidunt cursus mi. Donec adipiscing. Nulla at ipsum. Aenean fermentum.<br>
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. In ornare risus. Aliquam nonummy libero et risus. Vestibulum sit amet massa nec mauris interdum luctus. Nam ut dolor ut nunc malesuada varius. Duis risus. Mauris vel nulla ut odio porta vestibulum. Mauris ac sapien. In a dolor at urna malesuada suscipit. Aenean nisl erat, nonummy quis, blandit in, sagittis et, ligula. Maecenas consequat. Donec nonummy rutrum nibh. Praesent tincidunt cursus mi. Donec adipiscing. Nulla at ipsum. Aenean fermentum.<br>
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. In ornare risus. Aliquam nonummy libero et risus. Vestibulum sit amet massa nec mauris interdum luctus. Nam ut dolor ut nunc malesuada varius. Duis risus. Mauris vel nulla ut odio porta vestibulum. Mauris ac sapien. In a dolor at urna malesuada suscipit. Aenean nisl erat, nonummy quis, blandit in, sagittis et, ligula. Maecenas consequat. Donec nonummy rutrum nibh. Praesent tincidunt cursus mi. Donec adipiscing. Nulla at ipsum. Aenean fermentum.<br>
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. In ornare risus. Aliquam nonummy libero et risus. Vestibulum sit amet massa nec mauris interdum luctus. Nam ut dolor ut nunc malesuada varius. Duis risus. Mauris vel nulla ut odio porta vestibulum. Mauris ac sapien. In a dolor at urna malesuada suscipit. Aenean nisl erat, nonummy quis, blandit in, sagittis et, ligula. Maecenas consequat. Donec nonummy rutrum nibh. Praesent tincidunt cursus mi. Donec adipiscing. Nulla at ipsum. Aenean fermentum.<br>
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. In ornare risus. Aliquam nonummy libero et risus. Vestibulum sit amet massa nec mauris interdum luctus. Nam ut dolor ut nunc malesuada varius. Duis risus. Mauris vel nulla ut odio porta vestibulum. Mauris ac sapien. In a dolor at urna malesuada suscipit. Aenean nisl erat, nonummy quis, blandit in, sagittis et, ligula. Maecenas consequat. Donec nonummy rutrum nibh. Praesent tincidunt cursus mi. Donec adipiscing. Nulla at ipsum. Aenean fermentum.<br>
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. In ornare risus. Aliquam nonummy libero et risus. Vestibulum sit amet massa nec mauris interdum luctus. Nam ut dolor ut nunc malesuada varius. Duis risus. Mauris vel nulla ut odio porta vestibulum. Mauris ac sapien. In a dolor at urna malesuada suscipit. Aenean nisl erat, nonummy quis, blandit in, sagittis et, ligula. Maecenas consequat. Donec nonummy rutrum nibh. Praesent tincidunt cursus mi. Donec adipiscing. Nulla at ipsum. Aenean fermentum.<br>
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. In ornare risus. Aliquam nonummy libero et risus. Vestibulum sit amet massa nec mauris interdum luctus. Nam ut dolor ut nunc malesuada varius. Duis risus. Mauris vel nulla ut odio porta vestibulum. Mauris ac sapien. In a dolor at urna malesuada suscipit. Aenean nisl erat, nonummy quis, blandit in, sagittis et, ligula. Maecenas consequat. Donec nonummy rutrum nibh. Praesent tincidunt cursus mi. Donec adipiscing. Nulla at ipsum. Aenean fermentum.<br>
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. In ornare risus. Aliquam nonummy libero et risus. Vestibulum sit amet massa nec mauris interdum luctus. Nam ut dolor ut nunc malesuada varius. Duis risus. Mauris vel nulla ut odio porta vestibulum. Mauris ac sapien. In a dolor at urna malesuada suscipit. Aenean nisl erat, nonummy quis, blandit in, sagittis et, ligula. Maecenas consequat. Donec nonummy rutrum nibh. Praesent tincidunt cursus mi. Donec adipiscing. Nulla at ipsum. Aenean fermentum.<br>
+Lorem ipsum dolor sit amet, consectetuer adipiscing elit. In ornare risus. Aliquam nonummy libero et risus. Vestibulum sit amet massa nec mauris interdum luctus. Nam ut dolor ut nunc malesuada varius. Duis risus. Mauris vel nulla ut odio porta vestibulum. Mauris ac sapien. In a dolor at urna malesuada suscipit. Aenean nisl erat, nonummy quis, blandit in, sagittis et, ligula. Maecenas consequat. Donec nonummy rutrum nibh. Praesent tincidunt cursus mi. Donec adipiscing. Nulla at ipsum. Aenean fermentum.<br>
+
+</div>
+</body></html>
index e074c91..cd24407 100644 (file)
@@ -1,3 +1,19 @@
+2012-04-24  Yael Aharon  <yael.aharon@nokia.com>
+
+        Fixed background is scrolling in http://www.nieuwecode.nl/ in Qt webkit2
+        https://bugs.webkit.org/show_bug.cgi?id=83980
+
+        Reviewed by Simon Fraser.
+
+        When a fixed position element does not have z-index explicitly specified, it does not create a
+        stacking context. This results in fixed elements scrolling with the content layer.
+        This patch creates a stacking context for fixed positioned elements for the Qt port, by enabling
+        the flag ENABLE_FIXED_POSITION_CREATES_STACKING_CONTEXT.
+        Added a manual test because this patch takes effect only during scrolling.
+
+        * css/CSSStyleSelector.cpp:
+        (WebCore::CSSStyleSelector::collectMatchingRulesForList):
+
 2012-04-24  Andreas Kling  <kling@webkit.org>
 
         REGRESSION(r115099): html5lib/runner.html crashes.
index 1ae051b..16f68ff 100644 (file)
 #include "StyleCachedImageSet.h"
 #endif
 
+#if PLATFORM(QT)
+#define FIXED_POSITION_CREATES_STACKING_CONTEXT 1
+#endif
+
 using namespace std;
 
 namespace WebCore {
@@ -2007,6 +2011,9 @@ void StyleResolver::adjustRenderStyle(RenderStyle* style, RenderStyle* parentSty
     // object wedged in between them.  Auto z-index also becomes 0 for objects that specify transforms/masks/reflections.
     if (style->hasAutoZIndex() && ((e && e->document()->documentElement() == e) || style->opacity() < 1.0f
         || style->hasTransformRelatedProperty() || style->hasMask() || style->boxReflect() || style->hasFilter()
+#ifdef FIXED_POSITION_CREATES_STACKING_CONTEXT
+        || style->position() == FixedPosition
+#endif
 #if ENABLE(OVERFLOW_SCROLLING)
         // Touch overflow scrolling creates a stacking context.
         || style->useTouchOverflowScrolling()