Re: hit testing and retained graphics

On 6/23/2011 8:18 PM, Cameron McCormack wrote:
>> I've personally implemented SVG, and I've worked with other
>> developer's implementations of SVG which worked atop canvas. I've also
>> worked with issues where method calls had unfortunate overhead. In all
>> cases, it's a big help to have the Canvas implementation recognize
>> normalized SVG strings. And it's relatively inexpensive to add to
>> Canvas implementations.
> (Sorry to belabour this point.)
>
> I should think it would be easy enough for the implementation to support
> full SVG strings.  After all, if getCurrentPath returns a normalised
> string, and the current path your create on the canvas context included
> any arc commands, then your implementation will need to have code to
> flatten them down to Béziers or straight line segments.  On the other
> hand, if you perform no normalisation, the mapping from the path as
> built up using lineTo/arcTo/etc. to the path data string that you return
> is simple.
>
It's substantially more code to parse such strings and the code execution
paths are more simple when generating them. We're looking at 2x more code
required by vendors. arc is a particularly controversial piece of code.

It's not that it's -that- expensive or -that- difficult, but it's not 
necessary
in the UA environment, it can be done in scripting, and it is 2x more code
in -all- implementations if it's required.

>>> I think the whole point of SVG exposing path data as either
>>> normalised or un-normalised is that user script may find it easier
>>> not to have to deal with both relative and absolute commands, arcs,
>>> etc.
>> And the implementation. It's a lot of extra work, and it's not really
>> necessary, as it can be handled at other points in the pipeline.
> This is only the case if you somehow disallow authors from calling
> arcTo.  Authors can construct paths with canvas now that include arc
> commands.  If you want to return normalised path data, the
> implementation needs to do work to flatten this.  If you return
> unnormalised path data, you don’t have to do any work.

Implementations of SVG should be returning normalized paths; they're easier
on the CPU and they're more portable. You do not need to disallow arcTo;
in many implementations (traditionally, anyway), arcTo is decomposed
into curves.

Received on Friday, 24 June 2011 03:25:09 UTC