[whatwg] Drawing shapes on canvas
cabanier at gmail.com
Wed Jan 8 16:55:17 PST 2014
around a year ago, I wrote a blog post  that introduced a new 'Shape'
class that described a filled or stroked region or an area of text. Java2D
has a similar concept that they call 'Area' .
We've had some discussions but it doesn't look like there was any sort of
conclusion. I'd like to pick it back up now that we have a partial
implementation of the Path object and people are starting to look into
I'll reiterate my proposal:
1. remove all the addxxx methods from the Path2D object 
Path object are just containers for segments. Aggregating segments will
generally not give the desired results since the segments will interact
AddPath *could* be kept if people see a strong use case.
2. introduce a new class 'Shape2D'
Constructor(Path2D , CanvasWindingRule = "nonzero"),
Constructor(Path2D , CanvasDrawingStyles, SVGMatrix?), // strokes a path
Constructor(DomString text, CanvasDrawingStyles, SVGMatrix?, unrestricted
double, unrestricted double, boolean isStroked = false, optional
Shape2D transform(matrix); // returns a transformed path
Shape2D add(Shape2D); // returns a path that is the union of the 2 paths
This class will represent a painted area. Because it knows the winding and
stroking rules, the browser will be able to do expensive math in advance.
It can also cache the region on the GPU.
a. default constructor that creates an empty region
b. constructor that take a path and a winding rule. This represents a
c. constructor that takes a path, canvasDrawingStyles object and a matrix.
This represent a stroked region.
d. constructor that takes text + canvasDrawingStyles. This represent a
region of filled or stroked text.
a. transform -> transform the shape by the matrix and returns a new shape
b. add -> add the region of the shape to the current shape and return as a
3. Add new methods: fill(Shape2D)/clip(Shape2D)/isPointInShape(Shape2D,...)
4. remove stroke(path), fill(path), clip(path), isPointInPath(path,...)
5. HitRegionOptions takes a Shape2D instead of a path + winding rule
What do people think?
More information about the whatwg