[whatwg] Dashed strokes on <canvas>

David Flanagan david at davidflanagan.com
Wed May 9 11:37:10 PDT 2007

Ian Hickson wrote:
> On Wed, 17 May 2006, David Flanagan wrote:
>> What surprises me about the omission of dashed lines is that every 
>> graphics API I'm familiar with (Xlib, PostScript, Java 2D) supports 
>> dashed lines. Unless there is some important platform out there that 
>> does not support them in the underlying graphics library, it seems to me 
>> that it would have been trivial to add dashed lines to the API.
>> And, I can't think of any simple or efficient way to simulate dashed 
>> lines without having them in the API.  And while dashed lines may not be 
>> a high-use feature, I wouldn't say they're infrequently used.  For 
>> example: when drawing a line chart with multiple lines which is intended 
>> to be printed on a black-and-white laser printer.
> There are many styles that aren't supported -- dashes aren't an exception. 
> For example, there's no support for having defined markers repeated around 
> the stroke. Similarly, we don't havenative  support for rounded corners, 
> or for many shapes (e.g. circles).

Dashes would be trivial to add--it is just a single additional line 
style property. I assert that every possible underlying graphics library 
already supports dashes, and I haven't heard a counter example from you. 
  You support the miterLimit property--something that is hardly ever 
used, but won't support dashed lines, which is a relatively common thing 
to use.  It just seems bizarre.

I believe that dashed lines have universal support in native graphics 
libraries.  Markers around the stroke do not.  Rounded corners are more 
common, but are not universal.  Lack of support for ellipses is a 
shortcoming of the API, and I hope you'll address it, but it does not 
excuse the omission of dashed lines.

> You can do dashed lines using paths. 

This is true only in theory. Way too much computation is necessary to 
transform a path into a dashed path.  How do dashes go around corners, 
for example?  Give that *every single platform supports dashes 
natively*, do you really want to argue that people who want dashed lines 
  should compute them in JavaScript?

Writing a method to draw a circle using only the arc and arcTo methods 
is pretty trivial and can be done efficiently.  Defining your own dashed 
path is not.  We really cannot do dashed lines in a Canvas without API 

Without more demand for this feature,
> it's not clear that it's worth us putting it into the language.

It is just one more method on CanvasRenderingContext2D.  And the 
implementation would almost certainly be trivial.  You'll see the demand 
for dashed lines when Canvas becomes standardized without it, and people 
start wondering how to do dashes.  It truly seems strange to me that 
this feature has been omitted.

> On Sat, 20 May 2006, Peter Hall wrote:
>> Flash is an example of a platform that does not support dashed lines in 
>> its drawing API. Dashed lines created in the Flash Authoring tool are 
>> actually exported into a swf as a series of short curves.
>> However, this is a huge limitation, when it comes to drawing lines 
>> dynamically, so I don't think one platform's omission of the feature is 
>> a good argument anyway.
> There apparently isn't much demand for it for Flash either.

I think you're completely misunderstanding Peter's point.  Flash authors 
can use dashed lines whenever they want to.  Because their authoring 
environment does the expensive compilation required to transform their 
paths into dashed paths.  Then their *compiled* SWF files are executed 
on the Flash VM, which supports only a highly restricted set of graphics 
primitives.  Flash is a VM, not an API, and trying to draw dynamic 
graphics (as opposed to pre-compiled graphics) using Flash is expensive 
and tedious.  It is completely inappropriate to compare the Canvas API 
to the Flash API.

>> It is a reasonable and worthwhile goal to natively support emulation of 
>> all style attributes that are specifiable in CSS.
> Why? CSS' styles are the result of a pretty arbitrary set of decisions in 
> committee meetings. (I know, I've been on the CSSWG for ~7 years.)

Okay, if you don't like CSS, how about this argument: it would be 
foolish and obstinate to purposely obstruct compatibility between Canvas 
and SVG-Tiny (see the stroke-dasharray property in 
especially over something that is so trivial to add to the specification 
and so trivial to implement.

I really think you're making a mistake here.

   David Flanagan

> On Sat, 20 May 2006, Peter Hall wrote:
>>> Correct, it doesn't have stroke styles other than gradients, patterns, 
>>> and solid colours. It was an intentional omission since it was not 
>>> considered a high-use feature. (Similarly, text is not available in 
>>> Canvas; you have to overlay HTML if you want to mix text with the 
>>> graphics.)
>> May I assume that the inclusion of gradients is solely because they are 
>> implemented for fills aleady?
> Pretty much, I think.

More information about the whatwg mailing list