Summary: | Object bounding box wrong for some paths | ||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Product: | WebKit | Reporter: | Simon Fraser (smfr) <simon.fraser> | ||||||||
Component: | SVG | Assignee: | Simon Fraser (smfr) <simon.fraser> | ||||||||
Status: | RESOLVED FIXED | ||||||||||
Severity: | Normal | CC: | commit-queue, dino, simon.fraser, thorton, zimmermann | ||||||||
Priority: | P2 | ||||||||||
Version: | WebKit Nightly Build | ||||||||||
Hardware: | Unspecified | ||||||||||
OS: | Unspecified | ||||||||||
URL: | https://codepen.io/AmeliaBR/details/dRyPJE/ | ||||||||||
Attachments: |
|
Description
Simon Fraser (smfr)
2017-06-02 11:41:51 PDT
Created attachment 311881 [details]
Testcase
Created attachment 311884 [details]
Better testcase
RenderSVGShape::calculateObjectBoundingBox() is calling path().fastBoundingRect() which, on macOS, calls CGPathGetBoundingBox(). The comments say: /* Return the bounding box of `path'. The bounding box is the smallest rectangle completely enclosing all points in the path, including control points for Bézier cubic and quadratic curves. If the path is empty, then return `CGRectNull'. */ We should instead use: /* Return the path bounding box of `path'. The path bounding box is the smallest rectangle completely enclosing all points in the path, *not* including control points for Bézier cubic and quadratic curves. If the path is empty, then return `CGRectNull'. */ CG_EXTERN CGRect CGPathGetPathBoundingBox(CGPathRef path); but need to vet all callers of Path::fastBoundingRect(). Created attachment 311965 [details]
Patch
Comment on attachment 311965 [details] Patch Clearing flags on attachment: 311965 Committed r217772: <http://trac.webkit.org/changeset/217772> All reviewed patches have been landed. Closing bug. |