Changeset 151202 in webkit


Ignore:
Timestamp:
Jun 5, 2013 1:19:46 AM (11 years ago)
Author:
mihnea@adobe.com
Message:

[CSS Regions] REGRESSION Incorrect layer clipping inside flow thread
https://bugs.webkit.org/show_bug.cgi?id=117074

Reviewed by David Hyatt.

Source/WebCore:

Function RenderBox::mapLocalToContainer was adapted for elements inside flow threads to convert
elements coordinates to RenderView coordinates, passing through the region in which the elements
were flowed (https://bugs.webkit.org/show_bug.cgi?id=66641).

The fix for https://bugs.webkit.org/show_bug.cgi?id=76486 modified RenderLayer::calculateClipRects and replaced
convertToLayerCoords with localToContainerPoint, which further calls mapLocalToContainer.

However, for elements inside the flow thread, which acts as a root layer for its collected children, we do not want
to get the offset in RenderView coordinates but rather in flow thread coordinates (and still take transforms into
account). This patch modifies RenderBox::mapLocalToContainer so that it stops at flow thread boundary when the passed
repaintContainer is the flow thread. The flow thread is the container for repaint for elements inside it, as seen from
RenderObject::containerForRepaint.

No new tests, converted overflow-size-change-with-stacking-context and overflow-size-change-with-stacking-context-rtl
into ref tests so that the we do not rely on pixel tests in the future.

  • rendering/RenderBox.cpp:

(WebCore::RenderBox::mapLocalToContainer):

LayoutTests:

Convert overflow-size-change-with-stacking-context and overflow-size-change-with-stacking-context-rtl
to ref tests.

  • fast/regions/overflow-size-change-with-stacking-context-expected.html: Added.
  • fast/regions/overflow-size-change-with-stacking-context-rtl-expected.html: Added.
  • fast/regions/overflow-size-change-with-stacking-context-rtl.html:
  • fast/regions/overflow-size-change-with-stacking-context.html:
  • platform/efl/fast/regions/overflow-size-change-with-stacking-context-expected.png: Removed.
  • platform/efl/fast/regions/overflow-size-change-with-stacking-context-expected.txt: Removed.
  • platform/efl/fast/regions/overflow-size-change-with-stacking-context-rtl-expected.png: Removed.
  • platform/efl/fast/regions/overflow-size-change-with-stacking-context-rtl-expected.txt: Removed.
  • platform/gtk/fast/regions/overflow-size-change-with-stacking-context-expected.png: Removed.
  • platform/gtk/fast/regions/overflow-size-change-with-stacking-context-expected.txt: Removed.
  • platform/gtk/fast/regions/overflow-size-change-with-stacking-context-rtl-expected.png: Removed.
  • platform/gtk/fast/regions/overflow-size-change-with-stacking-context-rtl-expected.txt: Removed.
  • platform/mac/fast/regions/overflow-size-change-with-stacking-context-expected.png: Removed.
  • platform/mac/fast/regions/overflow-size-change-with-stacking-context-expected.txt: Removed.
  • platform/mac/fast/regions/overflow-size-change-with-stacking-context-rtl-expected.png: Removed.
  • platform/mac/fast/regions/overflow-size-change-with-stacking-context-rtl-expected.txt: Removed.
  • platform/qt/fast/regions/overflow-size-change-with-stacking-context-expected.txt: Removed.
  • platform/qt/fast/regions/overflow-size-change-with-stacking-context-rtl-expected.png: Removed.
  • platform/qt/fast/regions/overflow-size-change-with-stacking-context-rtl-expected.txt: Removed.
Location:
trunk
Files:
2 added
15 deleted
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r151200 r151202  
     12013-06-05  Mihnea Ovidenie  <mihnea@adobe.com>
     2
     3        [CSS Regions] REGRESSION Incorrect layer clipping inside flow thread
     4        https://bugs.webkit.org/show_bug.cgi?id=117074
     5
     6        Reviewed by David Hyatt.
     7
     8        Convert overflow-size-change-with-stacking-context and overflow-size-change-with-stacking-context-rtl
     9        to ref tests.
     10
     11        * fast/regions/overflow-size-change-with-stacking-context-expected.html: Added.
     12        * fast/regions/overflow-size-change-with-stacking-context-rtl-expected.html: Added.
     13        * fast/regions/overflow-size-change-with-stacking-context-rtl.html:
     14        * fast/regions/overflow-size-change-with-stacking-context.html:
     15        * platform/efl/fast/regions/overflow-size-change-with-stacking-context-expected.png: Removed.
     16        * platform/efl/fast/regions/overflow-size-change-with-stacking-context-expected.txt: Removed.
     17        * platform/efl/fast/regions/overflow-size-change-with-stacking-context-rtl-expected.png: Removed.
     18        * platform/efl/fast/regions/overflow-size-change-with-stacking-context-rtl-expected.txt: Removed.
     19        * platform/gtk/fast/regions/overflow-size-change-with-stacking-context-expected.png: Removed.
     20        * platform/gtk/fast/regions/overflow-size-change-with-stacking-context-expected.txt: Removed.
     21        * platform/gtk/fast/regions/overflow-size-change-with-stacking-context-rtl-expected.png: Removed.
     22        * platform/gtk/fast/regions/overflow-size-change-with-stacking-context-rtl-expected.txt: Removed.
     23        * platform/mac/fast/regions/overflow-size-change-with-stacking-context-expected.png: Removed.
     24        * platform/mac/fast/regions/overflow-size-change-with-stacking-context-expected.txt: Removed.
     25        * platform/mac/fast/regions/overflow-size-change-with-stacking-context-rtl-expected.png: Removed.
     26        * platform/mac/fast/regions/overflow-size-change-with-stacking-context-rtl-expected.txt: Removed.
     27        * platform/qt/fast/regions/overflow-size-change-with-stacking-context-expected.txt: Removed.
     28        * platform/qt/fast/regions/overflow-size-change-with-stacking-context-rtl-expected.png: Removed.
     29        * platform/qt/fast/regions/overflow-size-change-with-stacking-context-rtl-expected.txt: Removed.
     30
    1312013-06-05  Christophe Dumez  <ch.dumez@sisa.samsung.com>
    232
  • trunk/LayoutTests/fast/regions/overflow-size-change-with-stacking-context-rtl.html

    r97701 r151202  
    1 <!doctype html>
     1<!DOCTYPE html>
    22<html style="direction:rtl">
    3 <head>
    4  <style>
    5     #content {
    6         -webkit-flow-into: flow1;
    7         text-align: justify;
    8         padding: 5px;
    9     }
    10    
    11     #first-box {
    12         border: 1px solid blue;
    13     }
    14    
    15     #second-box {
    16         margin: auto;
    17         border: 1px solid green;
    18         overflow:hidden;
    19         width:75%;
    20         position:relative;
    21         z-index:0;
    22         padding-bottom:20px;
    23     }
    24    
    25     #region1, #region2, #region3 {
    26         border: 1px solid black;
    27         -webkit-flow-from: flow1;
    28     }
     3    <head>
     4        <style>
     5            body {
     6                font: 16px/1.25 monospace;
     7            }
    298
    30     #region1 {
    31         width: 200px;
    32         height: 100px;
    33     }
    34    
    35     #region2 {
    36         width: 300px;
    37         height: 180px;
    38     }
    39    
    40     #region3 {
    41         width: 120px;
    42         height: 120px;
    43     }
    44 </style>
    45 </head>
    46 <body>
    47 <p style="direction:ltr">The first and last lines of text in the regions below should be clipped to the green box. The overflow
    48 section sizes itself and clips differently in each region.</p>
     9            #content {
     10                -webkit-flow-into: flow1;
     11                padding: 5px;
     12            }
    4913
    50 <div id="content">
    51     <div id="first-box">
    52         <div id="second-box">
    53             <div style="width:500px; opacity:0.8">Clipped line of text that should not be visible.</div>
    54             <p>These lines will not spill out of the regions. These lines will not spill out of the regions.
    55             These lines will not spill out of the regions. These lines will not spill out of the regions. </p>
    56             <p>These lines will not spill out of the regions. These lines will not spill out of the regions.
    57             These lines will not spill out of the regions. These lines will not spill out of the regions. </p>
    58             <div style="width:500px; position:absolute;bottom:0">Clipped line of text that should not be visible.</div>
     14            .first-box {
     15                border: 1px solid blue;
     16            }
     17
     18            .second-box {
     19                margin: auto;
     20                border: 1px solid green;
     21                overflow:hidden;
     22                width:75%;
     23                position:relative;
     24                z-index:0;
     25                padding-bottom:20px;
     26            }
     27
     28            #region1, #region2, #region3 {
     29                border: 1px solid black;
     30                -webkit-flow-from: flow1;
     31            }
     32
     33            #region1 {
     34                width: 200px;
     35                height: 100px;
     36            }
     37
     38            #region2 {
     39                width: 300px;
     40                height: 180px;
     41            }
     42
     43            #region3 {
     44                width: 120px;
     45                height: 120px;
     46            }
     47        </style>
     48    </head>
     49    <body>
     50        <p style="direction:ltr">The first and last lines of text in the regions below should be clipped to the green box. The overflow section sizes itself and clips differently in each region.</p>
     51
     52        <div id="content">
     53            <div class="first-box">
     54                <div class="second-box">
     55                    <div style="width:500px; opacity:0.8">Clipped line of text that should not be visible.</div>
     56                    <p>These lines will not spill out of the regions. These lines will not spill out of the regions.
     57                    These lines will not spill out of the regions. These lines will not spill out of the regions.
     58                    These lines will not spill out of the regions.</p>
     59                    <div style="width:500px; position:absolute;bottom:0">Clipped line of text that should not be visible.</div>
     60                </div>
     61            </div>
    5962        </div>
    60     </div>
    61 </div>
    6263
    63 <div id="container">
    64     <div id="region1"></div>
    65     <div id="region2"></div>
    66     <div id="region3"></div>
    67 </div>
     64        <div id="container">
     65            <div id="region1"></div>
     66            <div id="region2"></div>
     67            <div id="region3"></div>
     68        </div>
     69    </body>
     70</html>
  • trunk/LayoutTests/fast/regions/overflow-size-change-with-stacking-context.html

    r97701 r151202  
    1 <!doctype html>
     1<!DOCTYPE html>
     2<html>
     3    <head>
     4        <style>
     5            body {
     6                font: 16px/1.25 monospace;
     7            }
    28
    3  <style>
    4     #content {
    5         -webkit-flow-into: flow1;
    6         text-align: justify;
    7         padding: 5px;
    8     }
    9    
    10     #first-box {
    11         border: 1px solid blue;
    12     }
    13    
    14     #second-box {
    15         margin: auto;
    16         border: 1px solid green;
    17         overflow:hidden;
    18         width:75%;
    19         position:relative;
    20         z-index:0;
    21         padding-bottom:20px;
    22     }
    23    
    24     #region1, #region2, #region3 {
    25         border: 1px solid black;
    26         -webkit-flow-from: flow1;
    27     }
     9            #content {
     10                -webkit-flow-into: flow1;
     11                padding: 5px;
     12            }
    2813
    29     #region1 {
    30         width: 200px;
    31         height: 100px;
    32     }
    33    
    34     #region2 {
    35         width: 300px;
    36         height: 180px;
    37     }
    38    
    39     #region3 {
    40         width: 120px;
    41         height: 120px;
    42     }
    43 </style>
     14            .first-box {
     15                border: 1px solid blue;
     16            }
    4417
    45 <body>
    46 <p>The first and last lines of text in the regions below should be clipped to the green box. The overflow
    47 section sizes itself and clips differently in each region.</p>
     18            .second-box {
     19                margin: auto;
     20                border: 1px solid green;
     21                overflow:hidden;
     22                width:75%;
     23                position:relative;
     24                z-index:0;
     25                padding-bottom:20px;
     26            }
    4827
    49 <div id="content">
    50     <div id="first-box">
    51         <div id="second-box">
    52             <div style="width:500px; opacity:0.8">Clipped line of text that should not be visible.</div>
    53             <p>These lines will not spill out of the regions. These lines will not spill out of the regions.
    54             These lines will not spill out of the regions. These lines will not spill out of the regions. </p>
    55             <p>These lines will not spill out of the regions. These lines will not spill out of the regions.
    56             These lines will not spill out of the regions. These lines will not spill out of the regions. </p>
    57             <div style="width:500px; position:absolute;bottom:0">Clipped line of text that should not be visible.</div>
     28            #region1, #region2, #region3 {
     29                border: 1px solid black;
     30                -webkit-flow-from: flow1;
     31            }
     32
     33            #region1 {
     34                width: 200px;
     35                height: 100px;
     36            }
     37
     38            #region2 {
     39                width: 300px;
     40                height: 180px;
     41            }
     42
     43            #region3 {
     44                width: 120px;
     45                height: 120px;
     46            }
     47        </style>
     48    </head>
     49    <body>
     50        <p>The first and last lines of text in the regions below should be clipped to the green box. The overflow
     51        section sizes itself and clips differently in each region.</p>
     52
     53        <div id="content">
     54            <div class="first-box">
     55                <div class="second-box">
     56                    <div style="width:500px; opacity:0.8">Clipped line of text that should not be visible.</div>
     57                    <p>These lines will not spill out of the regions. These lines will not spill out of the regions.
     58                    These lines will not spill out of the regions. These lines will not spill out of the regions.
     59                    These lines will not spill out of the regions.</p>
     60                    <div style="width:500px; position:absolute;bottom:0">Clipped line of text that should not be visible.</div>
     61                </div>
     62            </div>
    5863        </div>
    59     </div>
    60 </div>
    6164
    62 <div id="container">
    63     <div id="region1"></div>
    64     <div id="region2"></div>
    65     <div id="region3"></div>
    66 </div>
     65        <div id="container">
     66            <div id="region1"></div>
     67            <div id="region2"></div>
     68            <div id="region3"></div>
     69        </div>
     70    </body>
     71</html>
  • trunk/Source/WebCore/ChangeLog

    r151200 r151202  
     12013-06-05  Mihnea Ovidenie  <mihnea@adobe.com>
     2
     3        [CSS Regions] REGRESSION Incorrect layer clipping inside flow thread
     4        https://bugs.webkit.org/show_bug.cgi?id=117074
     5
     6        Reviewed by David Hyatt.
     7
     8        Function RenderBox::mapLocalToContainer was adapted for elements inside flow threads to convert
     9        elements coordinates to RenderView coordinates, passing through the region in which the elements
     10        were flowed (https://bugs.webkit.org/show_bug.cgi?id=66641).
     11
     12        The fix for https://bugs.webkit.org/show_bug.cgi?id=76486 modified RenderLayer::calculateClipRects and replaced
     13        convertToLayerCoords with localToContainerPoint, which further calls mapLocalToContainer.
     14
     15        However, for elements inside the flow thread, which acts as a root layer for its collected children, we do not want
     16        to get the offset in RenderView coordinates but rather in flow thread coordinates (and still take transforms into
     17        account). This patch modifies RenderBox::mapLocalToContainer so that it stops at flow thread boundary when the passed
     18        repaintContainer is the flow thread. The flow thread is the container for repaint for elements inside it, as seen from
     19        RenderObject::containerForRepaint.
     20
     21        No new tests, converted overflow-size-change-with-stacking-context and overflow-size-change-with-stacking-context-rtl
     22        into ref tests so that the we do not rely on pixel tests in the future.
     23
     24        * rendering/RenderBox.cpp:
     25        (WebCore::RenderBox::mapLocalToContainer):
     26
    1272013-06-05  Christophe Dumez  <ch.dumez@sisa.samsung.com>
    228
  • trunk/Source/WebCore/rendering/RenderBox.cpp

    r151178 r151202  
    17601760
    17611761    mode &= ~ApplyContainerFlip;
    1762     if (o->isRenderFlowThread()) {
     1762
     1763    if (o->isRenderFlowThread() && (o != repaintContainer)) {
    17631764        // Transform from render flow coordinates into region coordinates.
    17641765        RenderRegion* region = toRenderFlowThread(o)->mapFromFlowToRegion(transformState);
Note: See TracChangeset for help on using the changeset viewer.