Bug 28754

Summary: Positioned, compositing child jumps around as opacity transition runs
Product: WebKit Reporter: Simon Fraser (smfr) <simon.fraser>
Component: Layout and RenderingAssignee: Simon Fraser (smfr) <simon.fraser>
Status: RESOLVED FIXED    
Severity: Normal Keywords: InRadar
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: PC   
OS: OS X 10.5   
Attachments:
Description Flags
Testcase
none
Simpler testcase
none
Patch, testcases, changelogs mitz: review+

Description Simon Fraser (smfr) 2009-08-26 15:57:53 PDT
Created attachment 38643 [details]
Testcase

The attached testcase shows a bug where the inner child renders in the wrong place while the opacity transition is running, when accelerated compositing is enabled.
Comment 1 Simon Fraser (smfr) 2009-08-26 15:58:20 PDT
<rdar://problem/7173461>
Comment 2 Simon Fraser (smfr) 2009-08-28 17:24:38 PDT
Created attachment 38765 [details]
Simpler testcase
Comment 3 Simon Fraser (smfr) 2009-08-28 18:43:00 PDT
Created attachment 38767 [details]
Patch, testcases, changelogs
Comment 4 mitz 2009-08-29 15:45:42 PDT
Comment on attachment 38767 [details]
Patch, testcases, changelogs

> +    for ( ; curr && !isPositionedContainer(curr); curr = curr->parent())
> +    { }

Is this the WebKit style convention for empty loop bodies? It seems strange.

>      for ( ; curr && !curr->renderer()->isRenderView() && !curr->transform(); curr = curr->parent())
> -        { }
> +    { }

Ditto.

> +            RenderLayer* positionedAncestor = enclosingPositionedAncestor();

I think you can call parentLayer->enclosingPositionedAncestor() instead.

> +            int thisX = 0, thisY = 0;

Please define each variable on a separate line.

> +            convertToLayerCoords(positionedAncestor, thisX, thisY);
> +            
> +            int ancestorX = 0, ancestorY = 0;

Separate lines, please.
Comment 5 Simon Fraser (smfr) 2009-08-31 11:38:30 PDT
http://trac.webkit.org/changeset/47900