Fix SVG animations which set rx or ry attributes Merged from Blink: https://src.chromium.org/viewvc/blink?revision=152376&view=revision
Created attachment 221730 [details] patch
Comment on attachment 221730 [details] patch Clearing flags on attachment: 221730 Committed r162438: <http://trac.webkit.org/changeset/162438>
All reviewed patches have been landed. Closing bug.
Comment on attachment 221730 [details] patch View in context: https://bugs.webkit.org/attachment.cgi?id=221730&action=review > Source/WebCore/rendering/svg/SVGPathData.cpp:119 > + bool hasRx = rect->rx().value(lengthContext) > 0; > + bool hasRy = rect->ry().value(lengthContext) > 0; Wasteful to repeat these expressions once to evaluate the has booleans and a second time if either is true. Should refactor so we don’t do it twice. Also, is > 0 really the correct test? Is that from the spec, or just copying what the Blink folks did? Did the Blink folks give a rationale for that particular test?
(In reply to comment #4) > (From update of attachment 221730 [details]) > View in context: https://bugs.webkit.org/attachment.cgi?id=221730&action=review > > > Source/WebCore/rendering/svg/SVGPathData.cpp:119 > > + bool hasRx = rect->rx().value(lengthContext) > 0; > > + bool hasRy = rect->ry().value(lengthContext) > 0; > > Wasteful to repeat these expressions once to evaluate the has booleans and a second time if either is true. Should refactor so we don’t do it twice. Excellent catch Darin. We should definitely refactor that into a helper function. > > Also, is > 0 really the correct test? Is that from the spec, or just copying what the Blink folks did? Did the Blink folks give a rationale for that particular test? The Blink folks did a terrible job of describing this change and I apologize for that :( The spec is clear about negative rx/ry values in https://svgwg.org/svg2-draft/single-page.html#shapes-RectElement, and the new behavior matches Firefox (IE does not support SMIL). This change is really about making the negative rx/ry logic work for animations as well. The hasAttribute check is not appropriate for attributes that can be set by an animation element.
(In reply to comment #5) > (In reply to comment #4) > > (From update of attachment 221730 [details] [details]) > > View in context: https://bugs.webkit.org/attachment.cgi?id=221730&action=review > > > > > Source/WebCore/rendering/svg/SVGPathData.cpp:119 > > > + bool hasRx = rect->rx().value(lengthContext) > 0; > > > + bool hasRy = rect->ry().value(lengthContext) > 0; > > > > Wasteful to repeat these expressions once to evaluate the has booleans and a second time if either is true. Should refactor so we don’t do it twice. > > Excellent catch Darin. We should definitely refactor that into a helper function. > > > > > Also, is > 0 really the correct test? Is that from the spec, or just copying what the Blink folks did? Did the Blink folks give a rationale for that particular test? > > The Blink folks did a terrible job of describing this change and I apologize for that :( > The spec is clear about negative rx/ry values in https://svgwg.org/svg2-draft/single-page.html#shapes-RectElement, and the new behavior matches Firefox (IE does not support SMIL). This change is really about making the negative rx/ry logic work for animations as well. The hasAttribute check is not appropriate for attributes that can be set by an animation element. I created a new bug for the follow-up: https://bugs.webkit.org/show_bug.cgi?id=127423 The double calculation issue is resolved there.