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

James Ascroft-Leigh jwal at jwal.me.uk
Wed Jan 9 15:56:06 PST 2013


Hi,

Thanks Rik for your counter proposal and thanks everyone for helping to
refine it.  I am in full agreement that an evenodd or nonzero argument to
the fill() and clip() operations is better than a state property.  The only
thing I can think of in favor of the fillRule property that prompted this
discussion is for client code to discover whether the feature is
implemented.

pdf.js seems like a great example of a need for this.  They are going to
need to check whether the fill() operation supports setting the winding
rule and fall back to the mozFillRule property if not.  Some website might
need to detect that neither feature is present and fall back to server-side
rendering.

How can the presence of the winding rule parameter of the fill() and clip()
operations be detected by client code?  Perhaps I missed something in the
discussion.

Regards,

James

P.S. Looks like I might not get my first patch into WebKit as I had hoped.
I am still happy to help out coding some of this and writing up test cases
so please let me know if there is something you think I can contribute.


On 9 January 2013 21:20, Rik Cabanier <cabanier at gmail.com> wrote:

> Thanks for your feedback!
> Based on this, I propose the following:
> 1. create an enum for the winding rule:
>
> enum CanvasWindingRule { "nonzero
> <
> http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-fillrule-nonzero
> >",
> "evenodd <
> http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-fillrule-evenodd
> >"
> };
>
> Since this enum will likely be used by the path syntax (and possibly SVG),
> maybe we can leave the 'Canvas' portion off
> 2. extend fill:
>
> void fill <
> http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-fill
> >(optional
> CanvasWindingRule w = "nonzero
> <
> http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-fillrule-nonzero
> >");
>
> 3. extend clip:
>
> void c <
> http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-fill
> >lip(optional
> CanvasWindingRule w = "nonzero
> <
> http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-fillrule-nonzero
> >");
>
> 4. extend isPointInPath:
>
> boolean isPointInPath
> <
> http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-ispointinpath
> >(unrestricted
> double x, unrestricted double y, optional CanvasWindingRule w =
> "nonzero <
> http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#dom-context-2d-fillrule-nonzero
> >");
>
>
> Rik
>
> On Wed, Jan 9, 2013 at 11:59 AM, Tab Atkins Jr. <jackalmage at gmail.com
> >wrote:
>
> > On Wed, Jan 9, 2013 at 11:42 AM, Rik Cabanier <cabanier at gmail.com>
> wrote:
> > > Do people have an opinion on a boolean value vs an enum?
> > > A boolean value is slightly faster to execute and type while an enum is
> > > more descriptive.
> > >
> > > So far, canvas has not used enum values before.
> >
> > I strongly prefer enums for cases where it's not a simple yes/no, and
> > this clearly qualifies.
> >
> > (I also prefer enums generally even when this is true, but that's my
> > CSS experience talking, where we have a history of changing things
> > that were once booleans into multi-state when people ask for more
> > features later.)
> >
> > ~TJ
> >
>



More information about the whatwg mailing list