| OLD | NEW |
| 1 This scenario verifies that the green "container" element and lime "innerScrolli
ng" element scroll properly even though there is a blue fixed-position element l
ayered in between them. | 1 This scenario verifies that the green "container" element and lime "innerScrolli
ng" element scroll properly even though there is a blue fixed-position element l
ayered in between them. |
| 2 | 2 |
| 3 The catch is that the squashing requirements should be computed in correct paint
order, so that the green container does not accidentally position itself with r
espect to the wrong layer and not scroll. | 3 The catch is that the squashing requirements should be computed in correct paint
order, so that the green container does not accidentally position itself with r
espect to the wrong layer and not scroll. |
| 4 | 4 |
| 5 CASE 1, original layer tree: | 5 CASE 1, original layer tree: |
| 6 { | 6 { |
| 7 "name": "Content Root Layer", | 7 "layers": [ |
| 8 "bounds": [785, 4100], | |
| 9 "children": [ | |
| 10 { | 8 { |
| 11 "name": "LayoutView #document", | 9 "name": "LayoutView #document", |
| 12 "bounds": [785, 4100], | 10 "bounds": [785, 4100], |
| 13 "contentsOpaque": true, | 11 "contentsOpaque": true, |
| 12 "drawsContent": true |
| 13 }, |
| 14 { |
| 15 "name": "LayoutBlockFlow (positioned) DIV id='backgroundFixed'", |
| 16 "bounds": [400, 400], |
| 17 "contentsOpaque": true, |
| 14 "drawsContent": true, | 18 "drawsContent": true, |
| 15 "children": [ | 19 "backgroundColor": "#808080" |
| 16 { | 20 }, |
| 17 "name": "LayoutBlockFlow (positioned) DIV id='backgroundFixed'", | 21 { |
| 18 "bounds": [400, 400], | 22 "name": "LayoutBlockFlow (positioned) DIV id='container'", |
| 19 "contentsOpaque": true, | 23 "position": [100, 100], |
| 20 "drawsContent": true, | 24 "bounds": [100, 4000], |
| 21 "backgroundColor": "#808080" | 25 "contentsOpaque": true, |
| 22 }, | 26 "drawsContent": true, |
| 23 { | 27 "backgroundColor": "#008000" |
| 24 "name": "LayoutBlockFlow (positioned) DIV id='container'", | 28 }, |
| 25 "position": [100, 100], | 29 { |
| 26 "bounds": [100, 4000], | 30 "name": "LayoutBlockFlow (positioned) DIV id='innerFixed'", |
| 27 "contentsOpaque": true, | 31 "position": [0, 50], |
| 28 "drawsContent": true, | 32 "bounds": [200, 100], |
| 29 "backgroundColor": "#008000", | 33 "contentsOpaque": true, |
| 30 "children": [ | 34 "drawsContent": true, |
| 31 { | 35 "backgroundColor": "#0000FF" |
| 32 "name": "LayoutBlockFlow (positioned) DIV id='innerFixed'", | 36 }, |
| 33 "position": [0, 50], | 37 { |
| 34 "bounds": [200, 100], | 38 "name": "LayoutBlockFlow (positioned) DIV id='innerScrolling'", |
| 35 "contentsOpaque": true, | 39 "position": [100, 0], |
| 36 "drawsContent": true, | 40 "bounds": [100, 100], |
| 37 "backgroundColor": "#0000FF" | 41 "contentsOpaque": true, |
| 38 }, | 42 "drawsContent": true, |
| 39 { | 43 "backgroundColor": "#00FF00" |
| 40 "name": "LayoutBlockFlow (positioned) DIV id='innerScrolling'", | |
| 41 "position": [100, 0], | |
| 42 "bounds": [100, 100], | |
| 43 "contentsOpaque": true, | |
| 44 "drawsContent": true, | |
| 45 "backgroundColor": "#00FF00" | |
| 46 } | |
| 47 ] | |
| 48 } | |
| 49 ] | |
| 50 } | 44 } |
| 51 ] | 45 ] |
| 52 } | 46 } |
| 53 CASE 2, scrolling y by 10 pixels, both the "container" and "inner" should scroll
properly. | 47 CASE 2, scrolling y by 10 pixels, both the "container" and "inner" should scroll
properly. |
| 54 { | 48 { |
| 55 "name": "Content Root Layer", | 49 "layers": [ |
| 56 "bounds": [785, 4100], | |
| 57 "children": [ | |
| 58 { | 50 { |
| 59 "name": "LayoutView #document", | 51 "name": "LayoutView #document", |
| 60 "bounds": [785, 4100], | 52 "bounds": [785, 4100], |
| 61 "contentsOpaque": true, | 53 "contentsOpaque": true, |
| 54 "drawsContent": true |
| 55 }, |
| 56 { |
| 57 "name": "LayoutBlockFlow (positioned) DIV id='backgroundFixed'", |
| 58 "position": [0, 10], |
| 59 "bounds": [400, 400], |
| 60 "contentsOpaque": true, |
| 62 "drawsContent": true, | 61 "drawsContent": true, |
| 63 "children": [ | 62 "backgroundColor": "#808080" |
| 64 { | 63 }, |
| 65 "name": "LayoutBlockFlow (positioned) DIV id='backgroundFixed'", | 64 { |
| 66 "position": [0, 10], | 65 "name": "LayoutBlockFlow (positioned) DIV id='container'", |
| 67 "bounds": [400, 400], | 66 "position": [100, 100], |
| 68 "contentsOpaque": true, | 67 "bounds": [100, 4000], |
| 69 "drawsContent": true, | 68 "contentsOpaque": true, |
| 70 "backgroundColor": "#808080" | 69 "drawsContent": true, |
| 71 }, | 70 "backgroundColor": "#008000" |
| 72 { | 71 }, |
| 73 "name": "LayoutBlockFlow (positioned) DIV id='container'", | 72 { |
| 74 "position": [100, 100], | 73 "name": "LayoutBlockFlow (positioned) DIV id='innerFixed'", |
| 75 "bounds": [100, 4000], | 74 "position": [0, 60], |
| 76 "contentsOpaque": true, | 75 "bounds": [200, 100], |
| 77 "drawsContent": true, | 76 "contentsOpaque": true, |
| 78 "backgroundColor": "#008000", | 77 "drawsContent": true, |
| 79 "children": [ | 78 "backgroundColor": "#0000FF" |
| 80 { | 79 }, |
| 81 "name": "LayoutBlockFlow (positioned) DIV id='innerFixed'", | 80 { |
| 82 "position": [0, 60], | 81 "name": "LayoutBlockFlow (positioned) DIV id='innerScrolling'", |
| 83 "bounds": [200, 100], | 82 "position": [100, 0], |
| 84 "contentsOpaque": true, | 83 "bounds": [100, 100], |
| 85 "drawsContent": true, | 84 "contentsOpaque": true, |
| 86 "backgroundColor": "#0000FF" | 85 "drawsContent": true, |
| 87 }, | 86 "backgroundColor": "#00FF00" |
| 88 { | |
| 89 "name": "LayoutBlockFlow (positioned) DIV id='innerScrolling'", | |
| 90 "position": [100, 0], | |
| 91 "bounds": [100, 100], | |
| 92 "contentsOpaque": true, | |
| 93 "drawsContent": true, | |
| 94 "backgroundColor": "#00FF00" | |
| 95 } | |
| 96 ] | |
| 97 } | |
| 98 ] | |
| 99 } | 87 } |
| 100 ] | 88 ] |
| 101 } | 89 } |
| 102 CASE 3, scrolling y further so that "inner" no longer overlaps the fixed-pos lay
er, then the stacking context of "container" includes the "innerScrolling" layer
, and doubles in width: | 90 CASE 3, scrolling y further so that "inner" no longer overlaps the fixed-pos lay
er, then the stacking context of "container" includes the "innerScrolling" layer
, and doubles in width: |
| 103 { | 91 { |
| 104 "name": "Content Root Layer", | 92 "layers": [ |
| 105 "bounds": [785, 4100], | |
| 106 "children": [ | |
| 107 { | 93 { |
| 108 "name": "LayoutView #document", | 94 "name": "LayoutView #document", |
| 109 "bounds": [785, 4100], | 95 "bounds": [785, 4100], |
| 110 "contentsOpaque": true, | 96 "contentsOpaque": true, |
| 97 "drawsContent": true |
| 98 }, |
| 99 { |
| 100 "name": "LayoutBlockFlow (positioned) DIV id='backgroundFixed'", |
| 101 "position": [0, 110], |
| 102 "bounds": [400, 400], |
| 103 "contentsOpaque": true, |
| 111 "drawsContent": true, | 104 "drawsContent": true, |
| 112 "children": [ | 105 "backgroundColor": "#808080" |
| 106 }, |
| 107 { |
| 108 "name": "LayoutBlockFlow (positioned) DIV id='container'", |
| 109 "position": [100, 100], |
| 110 "bounds": [200, 4000], |
| 111 "drawsContent": true, |
| 112 "backgroundColor": "#008000", |
| 113 "paintInvalidations": [ |
| 113 { | 114 { |
| 114 "name": "LayoutBlockFlow (positioned) DIV id='backgroundFixed'", | 115 "object": "LayoutBlockFlow (positioned) DIV id='innerScrolling'", |
| 115 "position": [0, 110], | 116 "rect": [100, 0, 100, 100], |
| 116 "bounds": [400, 400], | 117 "reason": "compositing update" |
| 117 "contentsOpaque": true, | |
| 118 "drawsContent": true, | |
| 119 "backgroundColor": "#808080" | |
| 120 }, | |
| 121 { | |
| 122 "name": "LayoutBlockFlow (positioned) DIV id='container'", | |
| 123 "position": [100, 100], | |
| 124 "bounds": [200, 4000], | |
| 125 "drawsContent": true, | |
| 126 "backgroundColor": "#008000", | |
| 127 "paintInvalidations": [ | |
| 128 { | |
| 129 "object": "LayoutBlockFlow (positioned) DIV id='innerScrolling'", | |
| 130 "rect": [100, 0, 100, 100], | |
| 131 "reason": "compositing update" | |
| 132 } | |
| 133 ], | |
| 134 "children": [ | |
| 135 { | |
| 136 "name": "LayoutBlockFlow (positioned) DIV id='innerFixed'", | |
| 137 "position": [0, 160], | |
| 138 "bounds": [200, 100], | |
| 139 "contentsOpaque": true, | |
| 140 "drawsContent": true, | |
| 141 "backgroundColor": "#0000FF" | |
| 142 } | |
| 143 ] | |
| 144 } | 118 } |
| 145 ] | 119 ] |
| 120 }, |
| 121 { |
| 122 "name": "LayoutBlockFlow (positioned) DIV id='innerFixed'", |
| 123 "position": [0, 160], |
| 124 "bounds": [200, 100], |
| 125 "contentsOpaque": true, |
| 126 "drawsContent": true, |
| 127 "backgroundColor": "#0000FF" |
| 146 } | 128 } |
| 147 ], | 129 ], |
| 148 "objectPaintInvalidations": [ | 130 "objectPaintInvalidations": [ |
| 149 { | 131 { |
| 150 "object": "LayoutBlockFlow (positioned) DIV id='innerScrolling'", | 132 "object": "LayoutBlockFlow (positioned) DIV id='innerScrolling'", |
| 151 "reason": "compositing update" | 133 "reason": "compositing update" |
| 152 } | 134 } |
| 153 ] | 135 ] |
| 154 } | 136 } |
| 155 | 137 |
| OLD | NEW |