[Webkit-unassigned] [Bug 68777] Absolute child is not repainted when parent opacity changes

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Mon Oct 17 10:59:01 PDT 2011


--- Comment #3 from Konstantin Shcheglov <scheglov at google.com>  2011-10-17 10:59:01 PST ---
I can reproduce this with Chromium, with USE(ACCELERATED_COMPOSITING).

Trick is that first change of opacity is not propagated to children.
Problem is in order of style[Will/Did]Change and diff calculation in RenderObject::setStyle().

1. Before styleWillChange().
RenderObject::adjustStyleDifference() correctly determines that diff=StyleDifferenceRepaintLayer. However at this point there are no layer (i.e. !hasLayer()). So, diff=StyleDifferenceRepaint used instead.

2. In styleWillChange().
RenderBoxModelObject::styleWillChange() for parent, sees diff=StyleDifferenceRepaint and calls repaint(). In contrast, second time, there is already layer, so layer()->repaintIncludingDescendants() is used.

3. In styleDidChange().
New RenderLayer is created for parent (and child layer moved to this new layer). So, now parent has layer.

4. After styleDidChange().
RenderObject::adjustStyleDifference() is called again, with all layers ready, so now diff=StyleDifferenceRepaintLayer. But this diff handled as just StyleDifferenceRepaint (at very end of RenderObject::setStyle()) and causes just repaint(), i.e. again not enough to repaint child (its layer).

Configure bugmail: https://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.

More information about the webkit-unassigned mailing list