[whatwg] Proposal: Add CanvasRenderingContext2D.fillRule with "nonzero" (default) and "evenodd" options

Ian Hickson ian at hixie.ch
Thu Jan 3 16:58:52 PST 2013

On Thu, 3 Jan 2013, Rik Cabanier wrote:
> >
> > I have made it be part of the graphics state in the spec; it would be 
> > unusual in the API for it not to be. However, if this doesn't match 
> > implementations, please let me know.
> Do you mean browser implementations or graphic libraries? AFAIK all 
> graphic libraries except cairo are different. I'm unsure about the 
> browsers.

Implementations of the spec (i.e. browsers).

> > On Wed, 2 Jan 2013, Rik Cabanier wrote:
> > >
> > > this features is not a trivial as it seems. Adding this will 
> > > necessitate updates to the algorithms that deal with paths and the 
> > > outlining of strokes and text.
> >
> > Can you elaborate on what updates are needed? I couldn't see any that 
> > actually needed to be changed.
> One of the intents of the path object is so you can 'accumulate' the 
> regions that were drawn so you can set them up as hit regions.

It is? I don't think that's one of the use cases I've seen before. It's an 
interesting use case, though, true.

> This means that a hit regions can contain shapes that were drawn with 
> different winding rules. The current path syntax does not allow you to 
> store this information so you can't set up a hit region that was drawn 
> with an [even-odd fill].

The Path objects just store paths, not filled shapes, so you can't really 
store non-zero-based shapes any more than even-odd-based shaped, if you're 
going to mix them.

If this (the region accumulation thing) is a use case we should support, 
then we need a way to add paths together in a way that converts all the 
paths to a specific fill rule type (ideally to be agnostic of the rule).

> > > As Dirk mentioned, instead of making it part of the graphics state, 
> > > it's more likely better to make it part of the fill or clip operator 
> > > like SVG, PDF and PostScript.
> >
> > That seems like it would be inconsistent with the rest of the canvas 
> > API.
> Winding is specific per draw and unlikely to persist across several draw 
> commands. This makes it different than color or the stroke style.

I'd have thought that would make it exactly like the stroke style.

> > > The easiest way to implement this, would be to leave the core 
> > > interface of canvas alone and just extend the path object with 
> > > winding rules and a method to 'simplify' a path so it can be drawn 
> > > with any winding rule.
> >
> > This doesn't seem like it would be easier... in particular, fillRule 
> > is now implemented in two browsers, so the implementation cost for 
> > them would be zero, and they don't yet implement Path at all, so the 
> > implementation cost for Path would be quite high, even without 
> > "simplify". :-)
> It's easier because of all the other work that's necessary to make this 
> feature work correctly. So, yes, it is easier now because they don't 
> rely on the spec to implement stroking and they don't have an 
> implementation for paths.
> However, the spec is supposed to be followed (right?) and at some point, 
> paths should be implemented. Going the easy way now will give a headache 
> later.

I'm happy to defer to the browsers vendors on this -- browser vendosr, 
what would be simpler for you to implement?

> > On Wed, 2 Jan 2013, Rik Cabanier wrote:
> > >
> > > However, just look at how stroke is implemented in the Canvas 2d 
> > > spec or how you can create paths by stroking or stroked text. 
> > > They're all affected by the winding rules.
> >
> > How so?
> For instance, take a figure eight that is stroked. If you draw it out, 
> you will see that you cross 2 lines to get to the middle which means 
> that there will be a gap when doing an [even-odd fill].

Could you elaborate on this? How would you propose this should be changed?

> > > (The description on how to do strokes in the spec is very wrong, but 
> > > that can be addressed later)
> >
> > Can you elaborate on this? If there's a mistake obviously I'd like to 
> > fix it...
> I'm unsure where to begin...

If you could just file bugs for each mistake, that would be great.


Ian Hickson               U+1047E                )\._.,--....,'``.    fL
http://ln.hixie.ch/       U+263A                /,   _.. \   _\  ;`._ ,.
Things that are impossible just take longer.   `._.-(,_..'--(,_..'`-.;.'

More information about the whatwg mailing list