Changeset 87475 in webkit


Ignore:
Timestamp:
May 26, 2011 11:28:40 PM (13 years ago)
Author:
commit-queue@webkit.org
Message:

2011-05-26 Shane Stephens <shanestephens@google.com>

Reviewed by James Robinson.

REGRESSION (r81992): layout triggered by position update fails to apply when transform is updated at same time
https://bugs.webkit.org/show_bug.cgi?id=60689

  • transforms/2d/set-transform-and-top-expected.txt: Added.
  • transforms/2d/set-transform-and-top.html: Added.

2011-05-26 Shane Stephens <shanestephens@google.com>

Reviewed by James Robinson.

REGRESSION (r81992): layout triggered by position update fails to apply when transform is updated at same time
https://bugs.webkit.org/show_bug.cgi?id=60689

When a transform is modified in a style, we were upgrading our understanding
of the difference from PositionedMovementOnly to SimplifiedLayout. However,
if the position of the style is independently changed at the same time, both
PositionedMovement and SimplifiedLayout passes are required.

Test: transforms/2d/set-transform-and-top.html

  • rendering/RenderObject.cpp: Added checks for SimplifiedLayoutAndPositionedMovement - when encountered, set both PositionedMovement and SimplifiedLayout update flasgs.
  • rendering/style/RenderStyleConstants.h: Added a new StyleDifference enum value (SimplifiedLayoutAndPositionedMovement) for cases when both PositionedMovement and SimplifiedLayout are required.
Location:
trunk
Files:
2 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r87473 r87475  
     12011-05-26  Shane Stephens  <shanestephens@google.com>
     2
     3        Reviewed by James Robinson.
     4
     5        REGRESSION (r81992): layout triggered by position update fails to apply when transform is updated at same time
     6        https://bugs.webkit.org/show_bug.cgi?id=60689
     7
     8        * transforms/2d/set-transform-and-top-expected.txt: Added.
     9        * transforms/2d/set-transform-and-top.html: Added.
     10
    1112011-05-26  Adam Barth  <abarth@webkit.org>
    212
  • trunk/Source/WebCore/ChangeLog

    r87474 r87475  
     12011-05-26  Shane Stephens  <shanestephens@google.com>
     2
     3        Reviewed by James Robinson.
     4
     5        REGRESSION (r81992): layout triggered by position update fails to apply when transform is updated at same time
     6        https://bugs.webkit.org/show_bug.cgi?id=60689
     7
     8        When a transform is modified in a style, we were upgrading our understanding
     9        of the difference from PositionedMovementOnly to SimplifiedLayout.  However,
     10        if the position of the style is independently changed at the same time, both
     11        PositionedMovement and SimplifiedLayout passes are required.
     12
     13        Test: transforms/2d/set-transform-and-top.html
     14
     15        * rendering/RenderObject.cpp:
     16        Added checks for SimplifiedLayoutAndPositionedMovement - when encountered,
     17        set both PositionedMovement and SimplifiedLayout update flasgs.
     18        * rendering/style/RenderStyleConstants.h:
     19        Added a new StyleDifference enum value (SimplifiedLayoutAndPositionedMovement) for
     20        cases when both PositionedMovement and SimplifiedLayout are required.
     21
    1222011-05-26  Luke Macpherson   <macpherson@chromium.org>
    223
     
    379400        * rendering/RenderTextControlSingleLine.h:
    380401
    381 <<<<<<< .mine
    3824022011-05-25  Levi Weintraub  <leviw@chromium.org>
    383403
     
    413433        * rendering/RenderTextControlSingleLine.h:
    414434
    415 =======
    4164352011-05-26  Jeff Miller  <jeffm@apple.com>
    417436
     
    429448        (FullScreenController::enterFullScreenRepaintCompleted): Make m_fullScreenWindow a topmost window before animating it in to ensure the taskbar is hidden.
    430449
    431 >>>>>>> .r87442
    4324502011-05-26  James Robinson  <jamesr@chromium.org>
    433451
  • trunk/Source/WebCore/rendering/RenderObject.cpp

    r87467 r87475  
    15551555        // FIXME: when transforms are taken into account for overflow, we will need to do a layout.
    15561556        if (!isText() && (!hasLayer() || !toRenderBoxModelObject(this)->layer()->isComposited())) {
     1557            // We need to set at least SimplifiedLayout, but if PositionedMovementOnly is already set
     1558            // then we actually need SimplifiedLayoutAndPositionedMovement.
    15571559            if (!hasLayer())
    15581560                diff = StyleDifferenceLayout; // FIXME: Do this for now since SimplifiedLayout cannot handle updating floating objects lists.
     1561            else if (diff < StyleDifferenceLayoutPositionedMovementOnly)
     1562                diff = StyleDifferenceSimplifiedLayout;
    15591563            else if (diff < StyleDifferenceSimplifiedLayout)
    1560                 diff = StyleDifferenceSimplifiedLayout;
     1564                diff = StyleDifferenceSimplifiedLayoutAndPositionedMovement;
    15611565        } else if (diff < StyleDifferenceRecompositeLayer)
    15621566            diff = StyleDifferenceRecompositeLayer;
     
    16381642        else if (updatedDiff == StyleDifferenceLayoutPositionedMovementOnly)
    16391643            setNeedsPositionedMovementLayout();
    1640         else if (updatedDiff == StyleDifferenceSimplifiedLayout)
     1644        else if (updatedDiff == StyleDifferenceSimplifiedLayoutAndPositionedMovement) {
     1645            setNeedsPositionedMovementLayout();
     1646            setNeedsSimplifiedNormalFlowLayout();
     1647        } else if (updatedDiff == StyleDifferenceSimplifiedLayout)
    16411648            setNeedsSimplifiedNormalFlowLayout();
    16421649    }
     
    17681775        else
    17691776            setNeedsSimplifiedNormalFlowLayout();
     1777    } else if (diff == StyleDifferenceSimplifiedLayoutAndPositionedMovement) {
     1778        setNeedsPositionedMovementLayout();
     1779        setNeedsSimplifiedNormalFlowLayout();
    17701780    } else if (diff == StyleDifferenceLayoutPositionedMovementOnly)
    17711781        setNeedsPositionedMovementLayout();
  • trunk/Source/WebCore/rendering/style/RenderStyleConstants.h

    r87235 r87475  
    4343// (3) StyleDifferenceRepaint - The object just needs to be repainted.
    4444// (4) StyleDifferenceRepaintLayer - The layer and its descendant layers needs to be repainted.
    45 // (5) StyleDifferenceLayout - A layout is required.
     45// (5) StyleDifferenceLayoutPositionedMovementOnly - Only the position of this positioned object has been updated
     46// (6) StyleDifferenceSimplifiedLayout - Only overflow needs to be recomputed
     47// (7) StyleDifferenceSimplifiedLayoutAndPositionedMovement - Both positioned movement and simplified layout updates are required.
     48// (8) StyleDifferenceLayout - A full layout is required.
    4649enum StyleDifference {
    4750    StyleDifferenceEqual,
     
    5356    StyleDifferenceLayoutPositionedMovementOnly,
    5457    StyleDifferenceSimplifiedLayout,
     58    StyleDifferenceSimplifiedLayoutAndPositionedMovement,
    5559    StyleDifferenceLayout
    5660};
Note: See TracChangeset for help on using the changeset viewer.