Bug 80674

Summary: Compat issues <canvas> strokes with dash and dashOffset
Product: WebKit Reporter: noel gordon <noel.gordon>
Component: CanvasAssignee: noel gordon <noel.gordon>
Status: RESOLVED FIXED    
Severity: Normal CC: dino, eoconnor, ian, krit, webkit
Priority: P2    
Version: 528+ (Nightly build)   
Hardware: Unspecified   
OS: Unspecified   
URL: https://www.w3.org/Bugs/Public/show_bug.cgi?id=9301
Attachments:
Description Flags
complex paths and line joins
none
Results on 10.6 mac-osx -- chrome 19 dev, firefox 10.0.2, safari 5.1.2
none
Results on win7 -- chrome 19 dev, firefox 10.0.2, safari 5.1.2, internet explorer 9
none
Patch: v8 bindings
none
Patch: test simple line dash and dash offsets
none
Patch: test line dash and line-width
none
Patch: test line dash and line-joins
none
Patch: test line dash and complex path line-joins
none
Patch: test line dash with gradient stroke style
none
Patch: test line dash with shaped path (circles)
none
Patch: test angular line dash with line-joins none

Description noel gordon 2012-03-08 21:07:56 PST
Bug 63933 introduced dashed lines support for the <canvas> element.  No tests pixel were added, no V8 bindings.
 
Chrome bindings would be simple, and would route to the GraphicsContext line stroker used for SVG dashed paths.  For simple lines paths compat b/w browsers is reasonable.  However, for complex paths, the interaction of line-joins and path shapes lead to interesting compat issues.  knots.svg attached.
Comment 1 noel gordon 2012-03-08 21:08:42 PST
Created attachment 130968 [details]
complex paths and line joins
Comment 2 noel gordon 2012-03-08 21:14:17 PST
Created attachment 130969 [details]
Results on 10.6 mac-osx -- chrome 19 dev, firefox 10.0.2, safari 5.1.2
Comment 3 noel gordon 2012-03-08 21:17:04 PST
Created attachment 130971 [details]
Results on win7 -- chrome 19 dev, firefox 10.0.2, safari 5.1.2, internet explorer 9
Comment 4 noel gordon 2012-03-08 21:36:20 PST
The differences in the SVG line-join implementations are clear.  Some are bugs, but the required behavior is unspecified in SVG, best I can tell.  <canvas> dashed lines would exhibit these same "line-join effects".
Comment 5 noel gordon 2012-03-08 22:40:42 PST
Created attachment 130984 [details]
Patch: v8 bindings
Comment 6 noel gordon 2012-03-08 23:03:38 PST
Created attachment 130985 [details]
Patch: test simple line dash and dash offsets
Comment 7 noel gordon 2012-03-08 23:16:49 PST
Created attachment 130988 [details]
Patch: test line dash and line-width
Comment 8 noel gordon 2012-03-08 23:29:30 PST
Created attachment 130990 [details]
Patch: test line dash and line-joins
Comment 9 noel gordon 2012-03-08 23:41:45 PST
Created attachment 130991 [details]
Patch: test line dash and complex path line-joins
Comment 10 noel gordon 2012-03-08 23:46:18 PST
Created attachment 130992 [details]
Patch: test line dash with gradient stroke style
Comment 11 noel gordon 2012-03-08 23:52:26 PST
Created attachment 130994 [details]
Patch: test line dash with shaped path (circles)
Comment 12 noel gordon 2012-03-11 19:06:05 PDT
Created attachment 131269 [details]
Patch: test angular line dash with line-joins
Comment 13 noel gordon 2012-03-11 20:01:18 PDT
http://www.w3.org/TR/SVGTiny12/painting.html#StrokeDasharrayProperty contains a note about the compat issues wrt stroke-dasharray, and my test results confirm it.
Comment 14 Ian 'Hixie' Hickson 2012-03-28 14:48:17 PDT
HTML spec has been updated with an API for this.
Comment 15 Dirk Schulze 2014-04-03 06:37:18 PDT
Not sure why this is still open. Seems to be fixed with the exception of issue in bug 80560. Closing bug.
Comment 16 noel gordon 2014-04-03 18:01:37 PDT
WebKit has implemented the dash-stroke API Ian added per #14 ?
Comment 17 Dirk Schulze 2014-04-04 00:44:44 PDT
(In reply to comment #16)
> WebKit has implemented the dash-stroke API Ian added per #14 ?

yes
Comment 18 noel gordon 2014-04-10 22:38:50 PDT
Meant how stroke depends the trace-a-path-algorithm [1] and the dash-list. 

[1] http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#trace-a-path
Comment 19 Dirk Schulze 2014-04-11 01:17:20 PDT
(In reply to comment #18)
> Meant how stroke depends the trace-a-path-algorithm [1] and the dash-list. 
> 
> [1] http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#trace-a-path

Implementations rely on the behavior of graphic libraries which are mostly based on the rendering of PDF. I do not see any need to follow the text in the canvas part of the specification. This makes the results likely less interoperable across other formats as for example SVG and the browser slower.
Comment 20 noel gordon 2014-04-11 03:10:33 PDT
Can be interoperable by relying on graphics library behavior?

Based on SVGTiny1.2's 'stroke-dasharray' note about the incompatibilities caused by graphics libraries, #13 and [1], one SVG 2.0 goal is to define stroke-dash behavior, regardless of graphics library [2].  Why bother?
  
[1] https://www.w3.org/Graphics/SVG/WG/track/issues/2191
[2] https://svgwg.org/svg2-draft/single-page.html#painting-TermDashPositions