/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ // https://html.spec.whatwg.org/multipage/#2dcontext // typedef (HTMLImageElement or // SVGImageElement) HTMLOrSVGImageElement; typedef HTMLImageElement HTMLOrSVGImageElement; typedef (HTMLOrSVGImageElement or HTMLVideoElement or HTMLCanvasElement or ImageBitmap or OffscreenCanvas or /*VideoFrame or*/ /*CSSImageValue*/ CSSStyleValue) CanvasImageSource; enum PredefinedColorSpace { "srgb"/*, "display-p3"*/ }; enum CanvasColorType { "unorm8", "float16" }; enum CanvasFillRule { "nonzero", "evenodd" }; [Exposed=Window] interface CanvasRenderingContext2D { // back-reference to the canvas readonly attribute HTMLCanvasElement canvas; }; CanvasRenderingContext2D includes CanvasState; CanvasRenderingContext2D includes CanvasTransform; CanvasRenderingContext2D includes CanvasCompositing; CanvasRenderingContext2D includes CanvasImageSmoothing; CanvasRenderingContext2D includes CanvasFillStrokeStyles; CanvasRenderingContext2D includes CanvasShadowStyles; CanvasRenderingContext2D includes CanvasFilters; CanvasRenderingContext2D includes CanvasRect; CanvasRenderingContext2D includes CanvasDrawPath; CanvasRenderingContext2D includes CanvasUserInterface; CanvasRenderingContext2D includes CanvasText; CanvasRenderingContext2D includes CanvasDrawImage; CanvasRenderingContext2D includes CanvasImageData; CanvasRenderingContext2D includes CanvasPathDrawingStyles; CanvasRenderingContext2D includes CanvasTextDrawingStyles; CanvasRenderingContext2D includes CanvasPath; interface mixin CanvasState { // state undefined save(); // push state on state stack undefined restore(); // pop state stack and restore state undefined reset(); }; interface mixin CanvasTransform { // transformations (default transform is the identity matrix) undefined scale(unrestricted double x, unrestricted double y); undefined rotate(unrestricted double angle); undefined translate(unrestricted double x, unrestricted double y); undefined transform(unrestricted double a, unrestricted double b, unrestricted double c, unrestricted double d, unrestricted double e, unrestricted double f); [NewObject] DOMMatrix getTransform(); // See https://bugzilla.mozilla.org/show_bug.cgi?id=1020975 [Throws] undefined setTransform(unrestricted double a, unrestricted double b, unrestricted double c, unrestricted double d, unrestricted double e, unrestricted double f); [Throws] undefined setTransform(optional DOMMatrix2DInit transform = {}); undefined resetTransform(); }; interface mixin CanvasCompositing { // compositing attribute unrestricted double globalAlpha; // (default 1.0) attribute DOMString globalCompositeOperation; // (default source-over) }; interface mixin CanvasImageSmoothing { // image smoothing attribute boolean imageSmoothingEnabled; // (default true) // attribute ImageSmoothingQuality imageSmoothingQuality; // (default low) }; interface mixin CanvasFillStrokeStyles { // colours and styles (see also the CanvasDrawingStyles interface) attribute (DOMString or CanvasGradient or CanvasPattern) strokeStyle; // (default black) attribute (DOMString or CanvasGradient or CanvasPattern) fillStyle; // (default black) CanvasGradient createLinearGradient(double x0, double y0, double x1, double y1); [Throws] CanvasGradient createRadialGradient(double x0, double y0, double r0, double x1, double y1, double r1); [Throws] CanvasPattern? createPattern(CanvasImageSource image, [LegacyNullToEmptyString] DOMString repetition); }; interface mixin CanvasShadowStyles { // shadows attribute unrestricted double shadowOffsetX; // (default 0) attribute unrestricted double shadowOffsetY; // (default 0) attribute unrestricted double shadowBlur; // (default 0) attribute DOMString shadowColor; // (default transparent black) }; interface mixin CanvasFilters { // filters //attribute DOMString filter; // (default "none") }; interface mixin CanvasRect { // rects undefined clearRect(unrestricted double x, unrestricted double y, unrestricted double w, unrestricted double h); undefined fillRect(unrestricted double x, unrestricted double y, unrestricted double w, unrestricted double h); undefined strokeRect(unrestricted double x, unrestricted double y, unrestricted double w, unrestricted double h); }; interface mixin CanvasDrawPath { // path API (see also CanvasPath) undefined beginPath(); undefined fill(optional CanvasFillRule fillRule = "nonzero"); undefined fill(Path2D path, optional CanvasFillRule fillRule = "nonzero"); undefined stroke(); undefined stroke(Path2D path); undefined clip(optional CanvasFillRule fillRule = "nonzero"); undefined clip(Path2D path, optional CanvasFillRule fillRule = "nonzero"); boolean isPointInPath(unrestricted double x, unrestricted double y, optional CanvasFillRule fillRule = "nonzero"); boolean isPointInPath(Path2D path, unrestricted double x, unrestricted double y, optional CanvasFillRule fillRule = "nonzero"); //boolean isPointInStroke(unrestricted double x, unrestricted double y); //boolean isPointInStroke(Path2D path, unrestricted double x, unrestricted double y); }; interface mixin CanvasUserInterface { //void drawFocusIfNeeded(Element element); //void drawFocusIfNeeded(Path2D path, Element element); //void scrollPathIntoView(); //void scrollPathIntoView(Path2D path); }; interface mixin CanvasText { // text (see also the CanvasPathDrawingStyles and CanvasTextDrawingStyles interfaces) [Pref="dom_canvas_text_enabled"] undefined fillText(DOMString text, unrestricted double x, unrestricted double y, optional unrestricted double maxWidth); //void strokeText(DOMString text, unrestricted double x, unrestricted double y, // optional unrestricted double maxWidth); [Pref="dom_canvas_text_enabled"] TextMetrics measureText(DOMString text); }; interface mixin CanvasDrawImage { // drawing images [Throws] undefined drawImage(CanvasImageSource image, unrestricted double dx, unrestricted double dy); [Throws] undefined drawImage(CanvasImageSource image, unrestricted double dx, unrestricted double dy, unrestricted double dw, unrestricted double dh); [Throws] undefined drawImage(CanvasImageSource image, unrestricted double sx, unrestricted double sy, unrestricted double sw, unrestricted double sh, unrestricted double dx, unrestricted double dy, unrestricted double dw, unrestricted double dh); }; interface mixin CanvasImageData { // pixel manipulation [Throws] ImageData createImageData([EnforceRange] long sw, [EnforceRange] long sh); [Throws] ImageData createImageData(ImageData imagedata); [Throws] ImageData getImageData([EnforceRange] long sx, [EnforceRange] long sy, [EnforceRange] long sw, [EnforceRange] long sh); undefined putImageData(ImageData imagedata, [EnforceRange] long dx, [EnforceRange] long dy); undefined putImageData(ImageData imagedata, [EnforceRange] long dx, [EnforceRange] long dy, [EnforceRange] long dirtyX, [EnforceRange] long dirtyY, [EnforceRange] long dirtyWidth, [EnforceRange] long dirtyHeight); }; enum CanvasLineCap { "butt", "round", "square" }; enum CanvasLineJoin { "round", "bevel", "miter"}; enum CanvasTextAlign { "start", "end", "left", "right", "center" }; enum CanvasTextBaseline { "top", "hanging", "middle", "alphabetic", "ideographic", "bottom" }; enum CanvasDirection { "ltr", "rtl", "inherit" }; interface mixin CanvasPathDrawingStyles { // line caps/joins attribute unrestricted double lineWidth; // (default 1) attribute CanvasLineCap lineCap; // (default "butt") attribute CanvasLineJoin lineJoin; // (default "miter") attribute unrestricted double miterLimit; // (default 10) // dashed lines undefined setLineDash(sequence segments); // default empty sequence getLineDash(); attribute unrestricted double lineDashOffset; }; interface mixin CanvasTextDrawingStyles { // text attribute DOMString font; // (default 10px sans-serif) attribute CanvasTextAlign textAlign; // "start", "end", "left", "right", "center" (default: "start") attribute CanvasTextBaseline textBaseline; // "top", "hanging", "middle", "alphabetic", // "ideographic", "bottom" (default: "alphabetic") attribute CanvasDirection direction; // "ltr", "rtl", "inherit" (default: "inherit") }; interface mixin CanvasPath { // shared path API methods undefined closePath(); undefined moveTo(unrestricted double x, unrestricted double y); undefined lineTo(unrestricted double x, unrestricted double y); undefined quadraticCurveTo(unrestricted double cpx, unrestricted double cpy, unrestricted double x, unrestricted double y); undefined bezierCurveTo(unrestricted double cp1x, unrestricted double cp1y, unrestricted double cp2x, unrestricted double cp2y, unrestricted double x, unrestricted double y); [Throws] undefined arcTo(unrestricted double x1, unrestricted double y1, unrestricted double x2, unrestricted double y2, unrestricted double radius); undefined rect(unrestricted double x, unrestricted double y, unrestricted double w, unrestricted double h); [Throws] undefined arc(unrestricted double x, unrestricted double y, unrestricted double radius, unrestricted double startAngle, unrestricted double endAngle, optional boolean anticlockwise = false); [Throws] undefined ellipse(unrestricted double x, unrestricted double y, unrestricted double radius_x, unrestricted double radius_y, unrestricted double rotation, unrestricted double startAngle, unrestricted double endAngle, optional boolean anticlockwise = false); }; [Exposed=(Window, PaintWorklet, Worker)] interface CanvasGradient { // opaque object [Throws] undefined addColorStop(double offset, DOMString color); }; [Exposed=(Window, PaintWorklet, Worker)] interface CanvasPattern { // opaque object [Throws] undefined setTransform(optional DOMMatrix2DInit transform = {}); }; // TODO: Float16Array typedef Uint8ClampedArray ImageDataArray; enum ImageDataPixelFormat { "rgba-unorm8"/*, "rgba-float16"*/ }; dictionary ImageDataSettings { PredefinedColorSpace colorSpace; ImageDataPixelFormat pixelFormat = "rgba-unorm8"; }; [Exposed=(Window,Worker), Serializable] interface ImageData { [Throws] constructor(unsigned long sw, unsigned long sh, optional ImageDataSettings settings = {}); [Throws] constructor(ImageDataArray data, unsigned long sw, optional unsigned long sh, optional ImageDataSettings settings = {}); readonly attribute unsigned long width; readonly attribute unsigned long height; [Throws] readonly attribute ImageDataArray data; readonly attribute ImageDataPixelFormat pixelFormat; readonly attribute PredefinedColorSpace colorSpace; }; [Exposed=(Window,Worker)] interface Path2D { constructor(); constructor(Path2D other); constructor(DOMString pathString); undefined addPath(Path2D path/*, SVGMatrix? transformation*/); }; Path2D includes CanvasPath;