d3-path icon indicating copy to clipboard operation
d3-path copied to clipboard

Add support for ellipse() ?

Open nitaku opened this issue 4 years ago • 6 comments

It would be very useful to have support for the ellipse() method. Specs: https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-ellipse

nitaku avatar Feb 17 '21 19:02 nitaku

Is ellipse new? Doesn’t look like part of CanvasPathMethods:

https://www.w3.org/TR/2dcontext/#canvaspathmethods

mbostock avatar Feb 17 '21 20:02 mbostock

I found it in this MDN documentation page, which lead to the HTML Living Standard spec.

I am not 100% sure about the status of these specifications, but the W3C one you mentioned is marked as "superseded". A level 2 spec was in the working, but it seems to be abandoned: https://www.w3.org/TR/2dcontext2/

I tested ellipse() with canvas on Chrome 88. It also seems to be widely adopted, according to https://caniuse.com/mdn-api_canvasrenderingcontext2d_ellipse

nitaku avatar Feb 17 '21 20:02 nitaku

I hope it could be a matter of adapting the code to accept two different radii, given that the A command in an SVG path definition already represents an elliptical arc (and providing an ellipse() method, which could be also leveraged by arc()).

nitaku avatar Feb 17 '21 20:02 nitaku

@nitaku Do you have an idea in mind for what the API could look like?

curran avatar Feb 18 '21 21:02 curran

I would expect this signature for the ellipse method:

ellipse(x, y, radiusX, radiusY, rotation, startAngle, endAngle, counterclockwise)

as described here in more detail: https://html.spec.whatwg.org/multipage/canvas.html#dom-context-2d-ellipse It would be identical to the ellipse method defined for canvas.

nitaku avatar Feb 18 '21 21:02 nitaku

We used a few test renderings made with Canvas as a reference. Here is a CodePen that compares Canvas and SVG renderings made with the modified code: https://codepen.io/nitaku/pen/dyvyGaZ

nitaku avatar May 11 '21 11:05 nitaku