RESOLVED FIXED 42579
CSS rotation transform can cause elements with certain styles to vanish during rotation.
https://bugs.webkit.org/show_bug.cgi?id=42579
Summary CSS rotation transform can cause elements with certain styles to vanish durin...
mrDarcyMurphy
Reported 2010-07-19 11:24:17 PDT
While an element is rotating, any element on the page that has no height, no width, is absolutely positioned, and has overflow set to hidden will vanish for the duration of the animation. I found this because a crucial element on a page had all those, yet still had a border, and then disappeared.
Attachments
Testcase (1.56 KB, text/html)
2010-07-19 14:37 PDT, Simon Fraser (smfr)
no flags
Patch (8.41 KB, patch)
2010-07-20 22:30 PDT, Simon Fraser (smfr)
mitz: review+
Mark Rowe (bdash)
Comment 1 2010-07-19 12:16:32 PDT
Simon Fraser (smfr)
Comment 2 2010-07-19 14:37:19 PDT
Created attachment 61993 [details] Testcase
Simon Fraser (smfr)
Comment 3 2010-07-20 21:25:46 PDT
The disappearing element has zero height and width but a large border. clipRectToApply ends up as a 0x0 rect in RenderLayerBacking::paintIntoLayer().
Simon Fraser (smfr)
Comment 4 2010-07-20 21:37:34 PDT
Hmm, RenderBlock::paint() is short-circuiting the paint here: // Check if we need to do anything at all. // FIXME: Could eliminate the isRoot() check if we fix background painting so that the RenderView // paints the root's background. if (!isRoot()) { IntRect overflowBox = visibleOverflowRect(); overflowBox.inflate(maximalOutlineSize(paintInfo.phase)); overflowBox.move(tx, ty); if (!overflowBox.intersects(paintInfo.rect)) return; } paintInfo.rect is the empty rect from clipRectToApply
Simon Fraser (smfr)
Comment 5 2010-07-20 21:47:27 PDT
Ah, this is caused by the 'inflate the paintBox for the body' logic in RenderLayerBacking::paintIntoLayer().
Simon Fraser (smfr)
Comment 6 2010-07-20 22:30:46 PDT
Simon Fraser (smfr)
Comment 7 2010-07-21 08:14:32 PDT
Note You need to log in before you can comment on or make changes to this bug.