W3C home > Mailing lists > Public > www-style@w3.org > August 2012

Re: [css3-exclusions] remove <fill-rule> from "polygon()" syntax

From: Dirk Schulze <dschulze@adobe.com>
Date: Tue, 28 Aug 2012 17:44:15 -0700
To: Rik Cabanier <cabanier@gmail.com>
CC: Alan Stearns <stearns@adobe.com>, Bear Travis <betravis@adobe.com>, "Tab Atkins Jr." <jackalmage@gmail.com>, www-style list <www-style@w3.org>
Message-ID: <B65C5D62-A2D1-45DF-9A59-5A8D5EC3F75D@adobe.com>

On Aug 28, 2012, at 5:09 PM, Rik Cabanier <cabanier@gmail.com> wrote:

> In SVG, fill-rule [1] and clip-rule[2] are inherited so they can be set on a <g> element and affect the paths of the children.
> 
> 1: http://www.w3.org/TR/SVG/painting.html#FillProperties
> 2: http://www.w3.org/TR/SVG/masking.html#EstablishingANewClippingPath
> 
> On Tue, Aug 28, 2012 at 3:54 PM, Dirk Schulze <dschulze@adobe.com> wrote:
> 
> On Aug 28, 2012, at 3:51 PM, Rik Cabanier <cabanier@gmail.com> wrote:
> 
> > I think fill/clip-rule should stay with the marking operator in CSS.
> > It makes much more sense to keep them there than making them part of the graphics state and it will make the implementation much easier.
> > (I know this is different from SVG.)
> I am not sure what you mean. Can you clarify more please?
> 
> In SVG, fill-rule [1] and clip-rule[2] are inherited so they can be set on a <g> element and affect the paths of the children.
> 
> It would be better if these rules are not inherited and just specified per fill/stroke/clip. Not only would it save you from having to keep them in the state, it would also help if you move paths around since you don't have to remember their inherited winding. I've never seen a case where you want to use the same path with different fill rules.
> 
Like you noted, they are already defined in SVG 1.1.

Also 'inherit' is one of the default keywords that apply to every CSS property and the default value is not 'inherit' but 'nonzero'. Therefore you need to specify the 'fill-rule'/'clip-rule' on the path itself to 'inherit'. If you do that, I assume you are aware that it inherits the value from the parent :).

Greetings,
Dirk

> Rik
> 
> 1: http://www.w3.org/TR/SVG/painting.html#FillProperties
> 2: http://www.w3.org/TR/SVG/masking.html#EstablishingANewClippingPath
>  
> >
> > On Tue, Aug 28, 2012 at 3:28 PM, Dirk Schulze <dschulze@adobe.com> wrote:
> >
> > On Aug 28, 2012, at 1:55 PM, Alan Stearns <stearns@adobe.com> wrote:
> >
> > > (I hope I fixed the quoting correctly)
> > >
> > > On 8/28/12 12:17 PM, "Bear Travis" <betravis@adobe.com> wrote:
> > >
> > >> On 8/28/12 11:29 AM, "Dirk Schulze" <dschulze@adobe.com> wrote:
> > >>
> > >>> On Aug 28, 2012, at 8:50 AM, Tab Atkins Jr. <jackalmage@gmail.com> wrote:
> > >>>
> > >>>> On Tue, Aug 28, 2012 at 6:45 AM, Dirk Schulze <dschulze@adobe.com>
> > >>>> wrote:
> > >>>>> Hi,
> > >>>>> I think the keywords for <fill-rule> should be removed from the syntax
> > >>>>> of 'polygon()'[1]. I think the shapes on the exclusion spec can be
> > >>>>> reused in other contexts as well. One example is <shape> as shorthand
> > >>>>> for 'clip-path' in the CSS Masking[2] spec. But for 'clip-path' we
> > >>>>> already have the 'clip-rule' property with the values 'nonzero' and
> > >>>>> 'evenodd' [3].
> > >>>>> I would suggest using the 'fill-rule' property from SVG [4] to specify
> > >>>>> the fill rule on 'polygon()'. This property is already implemented by
> > >>>>> all browsers anyway.
> > >>>>
> > >>>> I don't see how that works, if shape functions are going to be usable
> > >>>> in multiple properties.
> > >>>
> > >>> We have clip-rule and fill-rule. So where is the problem?
> > >>
> > >> What would the effect be on CSS Exclusions? [1]
> > >>
> > >> It seems like the css for specifying a shape-inside [2] would change from
> > >> {
> > >> shape-inside: polygon(evenOdd, 0 0, 10px 0, 5px 10px 0 0);
> > >> }
> > >> To
> > >> {
> > >> shape-inside: polygon(0 0, 10px 0, 5px 10px, 0 0);
> > >> fill-rule: evenOdd;
> > >> }
> > >>
> > >> Is this correct?
> > >>
> > >> -Bear
> > >>
> > >> [1] http://dev.w3.org/csswg/css3-exclusions/
> > >> [2] http://dev.w3.org/csswg/css3-exclusions/#shape-inside-property
> > >
> > > Bear,
> > >
> > >
> > > I believe that's what Dirk is asking for. But it sounds to me like it
> > > would need to be an additional property per
> > > property-that-accepted-shape-syntax (fill-rule, clip-rule - what about
> > > shape-inside-rule and shape-outside-rule?). And these new properties would
> > > only apply if the polygon syntax was used. I think it might be better kept
> > > as a parameter in the polygon function.
> > >
> > Yes, you might be right.
> >
> > Basic shapes could be a good fit for 'clip-path'. For 'clip-path' we have the 'clip-rule' property which sets the fill-rule. The keyword for the fill-rule on 'polygon()' is optional but nonzero by default. I would like to use the value of the 'clip-rule' property if no keyword was set on 'polygon()'. Is it possible that CSS Exclusions also let other specifications and properties define the clip rule then? E.g.
> >
> > clip-rule: evenodd;
> > clip-path: polygon(25% 25%, 50% 50%, 75% 25%);
> >
> > The clip rule would be evenodd for the polygon(), since 'clip-rule' property defines it.
> >
> > If the rule was set on the polygon(), it overrides any other property that aims to set the fill rule.
> >
> > Does that sound reasonable for you?
> >
> > Greetings,
> > Dirk
> >
> > > Thanks,
> > >
> > > Alan
> > >
> >
> >
> >
> 
> 
Received on Wednesday, 29 August 2012 00:44:44 GMT

This archive was generated by hypermail 2.3.1 : Tuesday, 26 March 2013 17:20:59 GMT