Summary: | Transition animation fails to render correctly at http://www.ferretarmy.com/ (singular matrices) | ||||||||
---|---|---|---|---|---|---|---|---|---|
Product: | WebKit | Reporter: | Chris Marrin <cmarrin> | ||||||
Component: | CSS | Assignee: | Chris Marrin <cmarrin> | ||||||
Status: | RESOLVED FIXED | ||||||||
Severity: | Normal | Keywords: | InRadar | ||||||
Priority: | P2 | ||||||||
Version: | 528+ (Nightly build) | ||||||||
Hardware: | Mac | ||||||||
OS: | OS X 10.5 | ||||||||
URL: | http://www.ferretarmy.com/files/css-animation/test1/test1.html | ||||||||
Attachments: |
|
Description
Chris Marrin
2009-06-19 09:42:58 PDT
Created attachment 31547 [details]
Patch
Comment on attachment 31547 [details] Patch > Index: WebCore/platform/graphics/mac/GraphicsLayerCA.mm > =================================================================== > --- WebCore/platform/graphics/mac/GraphicsLayerCA.mm (revision 44828) > +++ WebCore/platform/graphics/mac/GraphicsLayerCA.mm (working copy) > @@ -981,6 +981,15 @@ bool GraphicsLayerCA::animateTransform(c > if (isMatrixAnimation) { > TransformationMatrix t; > curValue.value()->apply(size, t); > + > + // If any matrix is singular, CA won't animate it correctly. So fall back to software animation > + if (!t.isInvertible()) { > + [timesArray release]; > + [valArray release]; > + [tfArray release]; > + return false; > + } Maybe use OwnPtrs for those arrays so we don't have to worry about releasing them? Also, you can't return here without END_BLOCK_OBJC_EXCEPTIONS. I'd prefer a 'break' out of the loop, to avoid additional returns from this method. > CATransform3D cat; > copyTransform(cat, t); > [valArray addObject:[NSValue valueWithCATransform3D:cat]]; > @@ -1004,6 +1013,12 @@ bool GraphicsLayerCA::animateTransform(c > TransformationMatrix fromt, tot; > valueList.at(0).value()->apply(size, fromt); > valueList.at(1).value()->apply(size, tot); > + > + // If any matrix is singular, CA won't animate it correctly. So fall back to software animation > + if (!fromt.isInvertible()) > + return false; > + if (!tot.isInvertible()) > + return false; Same issue about returning without END_BLOCK_OBJC_EXCEPTIONS. Created attachment 31562 [details]
Replacement patch
Incorporates changes from review
Sending WebCore/ChangeLog Sending WebCore/platform/graphics/mac/GraphicsLayerCA.mm Transmitting file data .. Committed revision 44878. |