- From: Ian Hickson <ian@hixie.ch>
- Date: Fri, 6 Jul 2012 05:06:47 +0000 (UTC)
- To: Simon Fraser <smfr@me.com>
- Cc: whatwg@lists.whatwg.org, Edward O'Connor <eoconnor@apple.com>
On Thu, 5 Jul 2012, Simon Fraser wrote: > On Jul 5, 2012, at 2:25 PM, Ian Hickson <ian@hixie.ch> wrote: > > On Thu, 5 Jul 2012, Edward O'Connor wrote: > >> > >> As things currently stand in the spec, implementations basically need > >> to keep N+1 bitmaps per canvas, where N is the number of hit regions. > >> I doubt any implementors would be enthusiastic to implement hit > >> regions like this. From a WebKit perspective, we'd much prefer > >> keeping a Path for each hit region, and then simply using > >> isPointInPath for hit testing. This also implies that the current > >> piggybacking of "Clear regions that cover the pixels" in clearRect() > >> could go away. Yay! :) > > > > You only need one bitmap to implement the hit testing. > > > > (Or you can do it using paths, sure. The effect is the same, but it's > > probably quicker to use a bitmap.) > > I don't think the spec should be written with a particular > implementation in mind, nor should it dictate one. I agree it shouldn't (and doesn't) dictate one. But it's crazy to not consider implementations at all when writing a spec. That way lies madness like requiring O(N^2) algorithms and solving the halting problem and all kinds of other disasters (all of which I've seen in real proposals). > I also strongly object to having to update this hit testing bitmap > and/or path set on drawing operations like clearRect(). That will > potentially hurt performance. How so? If it's a path set, you just add a rectangle (you can keep the list of shapes down by occasionally running pruning algorithms to remove shapes entirely contained by later ones). If it's a bitmap, it's even easier; you just wipe the rectangle in the bitmap. > I think its up to the author to manage their set of paths appropriately, > independently from the drawing operations. Having the drawing mechanism work in a tightly integrated fashion with the region code IMHO helps authors avoid bugs. You don't have to track which regions you've defined, you just make sure to draw the regions while you're drawing the paths and it all Just Works. Not having to track the regions is the entire point of how this API was designed -- it's also the main differentiating factor between this API's design and the design of hit testing in retained-mode APIs such as SVG. -- Ian Hickson U+1047E )\._.,--....,'``. fL http://ln.hixie.ch/ U+263A /, _.. \ _\ ;`._ ,. Things that are impossible just take longer. `._.-(,_..'--(,_..'`-.;.'
Received on Friday, 6 July 2012 05:07:17 UTC