[whatwg] Stroking algorithm in Canvas 2d

Ian Hickson ian at hixie.ch
Thu Oct 10 14:48:15 PDT 2013


On Thu, 10 Oct 2013, Rik Cabanier wrote:
> On Thu, Oct 10, 2013 at 1:28 PM, Ian Hickson <ian at hixie.ch> wrote:
> > On Thu, 10 Oct 2013, Rik Cabanier wrote:
> > > > >
> > > > > If you draw a rect with dashes today, the dashing will be 
> > > > > applied normally. Justin wants to change this behavior so we 
> > > > > will need something to trigger that. Othewise, existing 
> > > > > applications that use dashed rectangles will start looking 
> > > > > different.
> > > >
> > > > Do we really have enough deployed content using this API that we 
> > > > are already constrained? What applications are these?
> > >
> > > Not sure I follow. Are you asking who would use dashed rectangles in 
> > > canvas?
> >
> > You mentioned "existing applications". I'm just curious which these 
> > are?
> 
> Websites using canvas?

Do you have URLs I could look at?


> > Specifically: it allows for all three kinds of renderings. You can 
> > have the behaviour you're describing by creating new paths. You can 
> > have the behaviour I'm describing by using a single path. You can have 
> > the behaviour Justin described by a modest addition to the path API 
> > (as he described). This is better than the alternative because it's 
> > more flexible. Justin also pointed out some other arguments, 
> > specifically that not restarting at each subpath results in an overall 
> > more even distribution of the dash density, which is aethestically 
> > pleasing.
> 
> Why are you breaking a path up in sections in the first place?

Presumably because it's not a continuous path. For example, it might be a 
stick figure with two arms and two legs and a head. It's not clear how you 
would draw that as one continuous path.


> That is not guarenteed to look the same anyway since if you have curves, 
> you will get gaps.

Not guaranteed to look the same as what? I'm not sure anyone is asking for 
anything to look the same as something else.


> > It would be really funky that if you took a line:
> >
> >    ---------------------------
> >
> > ...and then split it in three and moved the three parts around in an
> > animated fashion:
> >
> >    ---------
> >             ---------
> >                      ---------
> >
> > ...the dash pattern would change.
> 
> Those are 3 lines; they are no longer 1 segment. (model of stroking = 
> drawing with a pen)

Here's my concrete use case. I have a dashed line. I want the user to 
click two points on it, and then I want to split the line at those points 
and move the three segements independently. I do not want the dashes to 
change when I go from there being one line to there being three.

How do I get this effect with the mechanism you describe?


> setLineDash([30]);
> rect(10, 10, 100, 100);
> rect(10, 110, 100, 100);
> rect(10, 210, 100, 100);
> stroke();
> 
> These rectangles should look the same.

I presume you mean "I want those rectangles to look the same". I don't see 
any a priori objective reason why they should look the same.

You could get that effect easily with my proposal:

 setLineDash([30]);
 beginPath();
 rect(10, 10, 100, 100);
 stroke();
 beginPath();
 rect(10, 110, 100, 100);
 stroke();
 beginPath();
 rect(10, 210, 100, 100);
 stroke();


> > > For reason 3, authors will be surprised that identical constructs 
> > > from SVG, Core Graphics or their drawing applications would look 
> > > different in Canvas.
> >
> > I think most authors of Web applications have never used those APIs. 
> > Where is the data demonstrating this one way or the other?
> 
> I've seen several applications that morph SVG data into Canvas. Adobe 
> has tools that create canvas drawing calls to do stroking. Mozilla's 
> shumway and pdf.js rely on this as well.

Sure. We can support these easily if we implement dashing as the spec says 
now, by just adding the feature Justin suggested: an annotation on the 
path that says to reset the dash offset.

-- 
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