Bug 28754 - Positioned, compositing child jumps around as opacity transition runs
Summary: Positioned, compositing child jumps around as opacity transition runs
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: Layout and Rendering (show other bugs)
Version: 528+ (Nightly build)
Hardware: PC OS X 10.5
: P2 Normal
Assignee: Simon Fraser (smfr)
URL:
Keywords: InRadar
Depends on:
Blocks:
 
Reported: 2009-08-26 15:57 PDT by Simon Fraser (smfr)
Modified: 2009-08-31 11:38 PDT (History)
0 users

See Also:


Attachments
Testcase (1.88 KB, text/html)
2009-08-26 15:57 PDT, Simon Fraser (smfr)
no flags Details
Simpler testcase (1.06 KB, text/html)
2009-08-28 17:24 PDT, Simon Fraser (smfr)
no flags Details
Patch, testcases, changelogs (11.94 KB, patch)
2009-08-28 18:43 PDT, Simon Fraser (smfr)
mitz: review+
Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
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