From 6c0fd81b0b99cda9fbf687fdb80b8a9920681473 Mon Sep 17 00:00:00 2001 From: Pete LePage Date: Mon, 19 Aug 2024 08:44:46 -0400 Subject: [PATCH] Add Canvas2D context (#1500) Co-authored-by: Daniel D. Beck --- features/canvas-2d-alpha.yml | 6 + features/canvas-2d-alpha.yml.dist | 13 + features/canvas-2d-color-managment.yml | 6 + features/canvas-2d-color-managment.yml.dist | 13 + features/canvas-2d-desynchronized.yml | 6 + features/canvas-2d-desynchronized.yml.dist | 13 + features/canvas-2d-willreadfrequently.yml | 6 + .../canvas-2d-willreadfrequently.yml.dist | 13 + features/canvas-2d.yml | 83 ++++ features/canvas-2d.yml.dist | 353 ++++++++++++++++++ features/canvas-text-baselines.yml | 7 - features/canvas-text-baselines.yml.dist | 18 - features/canvas-text.yml | 4 - features/canvas-text.yml.dist | 46 --- 14 files changed, 512 insertions(+), 75 deletions(-) create mode 100644 features/canvas-2d-alpha.yml create mode 100644 features/canvas-2d-alpha.yml.dist create mode 100644 features/canvas-2d-color-managment.yml create mode 100644 features/canvas-2d-color-managment.yml.dist create mode 100644 features/canvas-2d-desynchronized.yml create mode 100644 features/canvas-2d-desynchronized.yml.dist create mode 100644 features/canvas-2d-willreadfrequently.yml create mode 100644 features/canvas-2d-willreadfrequently.yml.dist create mode 100644 features/canvas-2d.yml create mode 100644 features/canvas-2d.yml.dist delete mode 100644 features/canvas-text-baselines.yml delete mode 100644 features/canvas-text-baselines.yml.dist delete mode 100644 features/canvas-text.yml delete mode 100644 features/canvas-text.yml.dist diff --git a/features/canvas-2d-alpha.yml b/features/canvas-2d-alpha.yml new file mode 100644 index 00000000000..19d06197463 --- /dev/null +++ b/features/canvas-2d-alpha.yml @@ -0,0 +1,6 @@ +name: 2D canvas opacity +description: The optional `alpha` parameter of a 2D canvas's `getContext()` method sets whether the canvas has an alpha transparency channel. If set to `false`, then this permits the browser to optimize compositing for an opaque canvas. +spec: https://html.spec.whatwg.org/multipage/canvas.html#concept-canvas-alpha +group: canvas +compat_features: + - api.HTMLCanvasElement.getContext.2d_context.options_alpha_parameter diff --git a/features/canvas-2d-alpha.yml.dist b/features/canvas-2d-alpha.yml.dist new file mode 100644 index 00000000000..83959deb993 --- /dev/null +++ b/features/canvas-2d-alpha.yml.dist @@ -0,0 +1,13 @@ +# Generated from: canvas-2d-alpha.yml +# Do not edit this file by hand. Edit the source file instead! + +status: + baseline: false + support: + chrome: "32" + chrome_android: "32" + edge: ≤79 + firefox: "30" + firefox_android: "30" +compat_features: + - api.HTMLCanvasElement.getContext.2d_context.options_alpha_parameter diff --git a/features/canvas-2d-color-managment.yml b/features/canvas-2d-color-managment.yml new file mode 100644 index 00000000000..2c765ee4720 --- /dev/null +++ b/features/canvas-2d-color-managment.yml @@ -0,0 +1,6 @@ +name: Color management for 2D canvas +description: The optional `colorSpace` parameter of a 2D canvas's `getContext()` method chooses the color representation, such as `"srgb"` or `"display-p3"`. +spec: https://html.spec.whatwg.org/multipage/canvas.html#concept-canvas-color-space +group: canvas +compat_features: + - api.HTMLCanvasElement.getContext.2d_context.options_colorSpace_parameter diff --git a/features/canvas-2d-color-managment.yml.dist b/features/canvas-2d-color-managment.yml.dist new file mode 100644 index 00000000000..9a9b9fb6e49 --- /dev/null +++ b/features/canvas-2d-color-managment.yml.dist @@ -0,0 +1,13 @@ +# Generated from: canvas-2d-color-managment.yml +# Do not edit this file by hand. Edit the source file instead! + +status: + baseline: false + support: + chrome: "92" + chrome_android: "92" + edge: "92" + safari: "15.2" + safari_ios: "15.2" +compat_features: + - api.HTMLCanvasElement.getContext.2d_context.options_colorSpace_parameter diff --git a/features/canvas-2d-desynchronized.yml b/features/canvas-2d-desynchronized.yml new file mode 100644 index 00000000000..5cbf8443273 --- /dev/null +++ b/features/canvas-2d-desynchronized.yml @@ -0,0 +1,6 @@ +name: Desynchronized 2D canvas +description: The optional `desynchronized` parameter of a canvas's `getContext()` method permits the browser to draw a 2D canvas independently of the event loop. This can reduce drawing latency. +spec: https://html.spec.whatwg.org/multipage/canvas.html#concept-canvas-desynchronized +group: canvas +compat_features: + - api.HTMLCanvasElement.getContext.2d_context.options_desynchronized_parameter diff --git a/features/canvas-2d-desynchronized.yml.dist b/features/canvas-2d-desynchronized.yml.dist new file mode 100644 index 00000000000..2c7875d7411 --- /dev/null +++ b/features/canvas-2d-desynchronized.yml.dist @@ -0,0 +1,13 @@ +# Generated from: canvas-2d-desynchronized.yml +# Do not edit this file by hand. Edit the source file instead! + +status: + baseline: false + support: + chrome: "81" + chrome_android: "75" + edge: "79" + safari: "15" + safari_ios: "15" +compat_features: + - api.HTMLCanvasElement.getContext.2d_context.options_desynchronized_parameter diff --git a/features/canvas-2d-willreadfrequently.yml b/features/canvas-2d-willreadfrequently.yml new file mode 100644 index 00000000000..278be97bebb --- /dev/null +++ b/features/canvas-2d-willreadfrequently.yml @@ -0,0 +1,6 @@ +name: willReadFrequently +description: The optional `willReadFrequently` parameter of a canvas's `getContext()` method permits the browser to optimize for frequent `getImageData()` calls by avoiding hardware acceleration. Also known as multiple readback. +spec: https://html.spec.whatwg.org/multipage/canvas.html#concept-canvas-will-read-frequently +group: canvas +compat_features: + - api.HTMLCanvasElement.getContext.2d_context.options_willReadFrequently_parameter diff --git a/features/canvas-2d-willreadfrequently.yml.dist b/features/canvas-2d-willreadfrequently.yml.dist new file mode 100644 index 00000000000..b8a1c1d0265 --- /dev/null +++ b/features/canvas-2d-willreadfrequently.yml.dist @@ -0,0 +1,13 @@ +# Generated from: canvas-2d-willreadfrequently.yml +# Do not edit this file by hand. Edit the source file instead! + +status: + baseline: false + support: + chrome: "99" + chrome_android: "99" + edge: "99" + firefox: "28" + firefox_android: "28" +compat_features: + - api.HTMLCanvasElement.getContext.2d_context.options_willReadFrequently_parameter diff --git a/features/canvas-2d.yml b/features/canvas-2d.yml new file mode 100644 index 00000000000..6b73af848ed --- /dev/null +++ b/features/canvas-2d.yml @@ -0,0 +1,83 @@ +name: 2D canvas +description: The `CanvasRenderingContext2D` API is the "2d" rendering context for the `` element. It represents a flat, two-dimensional space for drawing graphics and animations. +spec: https://html.spec.whatwg.org/multipage/canvas.html#2dcontext +group: canvas +status: + compute_from: api.CanvasRenderingContext2D +compat_features: + - api.CanvasGradient + - api.CanvasGradient.addColorStop + - api.CanvasRenderingContext2D + - api.CanvasRenderingContext2D.arc + - api.CanvasRenderingContext2D.arcTo + - api.CanvasRenderingContext2D.beginPath + - api.CanvasRenderingContext2D.bezierCurveTo + - api.CanvasRenderingContext2D.canvas + - api.CanvasRenderingContext2D.clearRect + - api.CanvasRenderingContext2D.clip + - api.CanvasRenderingContext2D.closePath + - api.CanvasRenderingContext2D.createImageData + - api.CanvasRenderingContext2D.createLinearGradient + - api.CanvasRenderingContext2D.createPattern + - api.CanvasRenderingContext2D.createRadialGradient + - api.CanvasRenderingContext2D.direction + - api.CanvasRenderingContext2D.drawFocusIfNeeded + - api.CanvasRenderingContext2D.drawImage + - api.CanvasRenderingContext2D.ellipse + - api.CanvasRenderingContext2D.fill + - api.CanvasRenderingContext2D.fillRect + - api.CanvasRenderingContext2D.fillStyle + - api.CanvasRenderingContext2D.fillText + - api.CanvasRenderingContext2D.filter + - api.CanvasRenderingContext2D.font + - api.CanvasRenderingContext2D.fontKerning + - api.CanvasRenderingContext2D.fontStretch + - api.CanvasRenderingContext2D.fontVariantCaps + - api.CanvasRenderingContext2D.getContextAttributes + - api.CanvasRenderingContext2D.getImageData + - api.CanvasRenderingContext2D.getLineDash + - api.CanvasRenderingContext2D.getTransform + - api.CanvasRenderingContext2D.globalAlpha + - api.CanvasRenderingContext2D.globalCompositeOperation + - api.CanvasRenderingContext2D.imageSmoothingEnabled + - api.CanvasRenderingContext2D.imageSmoothingQuality + - api.CanvasRenderingContext2D.isPointInPath + - api.CanvasRenderingContext2D.isPointInStroke + - api.CanvasRenderingContext2D.letterSpacing + - api.CanvasRenderingContext2D.lineCap + - api.CanvasRenderingContext2D.lineDashOffset + - api.CanvasRenderingContext2D.lineJoin + - api.CanvasRenderingContext2D.lineTo + - api.CanvasRenderingContext2D.lineWidth + - api.CanvasRenderingContext2D.measureText + - api.CanvasRenderingContext2D.miterLimit + - api.CanvasRenderingContext2D.moveTo + - api.CanvasRenderingContext2D.putImageData + - api.CanvasRenderingContext2D.quadraticCurveTo + - api.CanvasRenderingContext2D.rect + - api.CanvasRenderingContext2D.resetTransform + - api.CanvasRenderingContext2D.restore + - api.CanvasRenderingContext2D.rotate + - api.CanvasRenderingContext2D.save + - api.CanvasRenderingContext2D.scale + - api.CanvasRenderingContext2D.setLineDash + - api.CanvasRenderingContext2D.setTransform + - api.CanvasRenderingContext2D.shadowBlur + - api.CanvasRenderingContext2D.shadowColor + - api.CanvasRenderingContext2D.shadowOffsetX + - api.CanvasRenderingContext2D.shadowOffsetY + - api.CanvasRenderingContext2D.stroke + - api.CanvasRenderingContext2D.strokeRect + - api.CanvasRenderingContext2D.strokeStyle + - api.CanvasRenderingContext2D.strokeText + - api.CanvasRenderingContext2D.textAlign + - api.CanvasRenderingContext2D.textBaseline + - api.CanvasRenderingContext2D.textRendering + - api.CanvasRenderingContext2D.transform + - api.CanvasRenderingContext2D.translate + - api.CanvasRenderingContext2D.wordSpacing + - api.TextMetrics + - api.TextMetrics.alphabeticBaseline + - api.TextMetrics.hangingBaseline + - api.TextMetrics.ideographicBaseline + - api.TextMetrics.width diff --git a/features/canvas-2d.yml.dist b/features/canvas-2d.yml.dist new file mode 100644 index 00000000000..d7f81c48dd3 --- /dev/null +++ b/features/canvas-2d.yml.dist @@ -0,0 +1,353 @@ +# Generated from: canvas-2d.yml +# Do not edit this file by hand. Edit the source file instead! + +status: + baseline: high + baseline_low_date: 2015-07-29 + baseline_high_date: 2018-01-29 + support: + chrome: "1" + chrome_android: "18" + edge: "12" + firefox: "1.5" + firefox_android: "4" + safari: "2" + safari_ios: "1" +compat_features: + # ⬇️ Same status as overall feature ⬇️ + # baseline: high + # baseline_low_date: 2015-07-29 + # baseline_high_date: 2018-01-29 + # support: + # chrome: "1" + # chrome_android: "18" + # edge: "12" + # firefox: "1.5" + # firefox_android: "4" + # safari: "2" + # safari_ios: "1" + - api.CanvasGradient + - api.CanvasGradient.addColorStop + - api.CanvasRenderingContext2D + - api.CanvasRenderingContext2D.arcTo + - api.CanvasRenderingContext2D.beginPath + - api.CanvasRenderingContext2D.bezierCurveTo + - api.CanvasRenderingContext2D.clearRect + - api.CanvasRenderingContext2D.clip + - api.CanvasRenderingContext2D.closePath + - api.CanvasRenderingContext2D.createLinearGradient + - api.CanvasRenderingContext2D.createPattern + - api.CanvasRenderingContext2D.createRadialGradient + - api.CanvasRenderingContext2D.drawImage + - api.CanvasRenderingContext2D.fill + - api.CanvasRenderingContext2D.fillRect + - api.CanvasRenderingContext2D.fillStyle + - api.CanvasRenderingContext2D.globalAlpha + - api.CanvasRenderingContext2D.globalCompositeOperation + - api.CanvasRenderingContext2D.lineCap + - api.CanvasRenderingContext2D.lineJoin + - api.CanvasRenderingContext2D.lineTo + - api.CanvasRenderingContext2D.lineWidth + - api.CanvasRenderingContext2D.miterLimit + - api.CanvasRenderingContext2D.moveTo + - api.CanvasRenderingContext2D.rect + - api.CanvasRenderingContext2D.restore + - api.CanvasRenderingContext2D.rotate + - api.CanvasRenderingContext2D.save + - api.CanvasRenderingContext2D.scale + - api.CanvasRenderingContext2D.shadowBlur + - api.CanvasRenderingContext2D.shadowColor + - api.CanvasRenderingContext2D.shadowOffsetX + - api.CanvasRenderingContext2D.shadowOffsetY + - api.CanvasRenderingContext2D.stroke + - api.CanvasRenderingContext2D.strokeRect + - api.CanvasRenderingContext2D.strokeStyle + - api.CanvasRenderingContext2D.translate + + # baseline: high + # baseline_low_date: 2015-07-29 + # baseline_high_date: 2018-01-29 + # support: + # chrome: "1" + # chrome_android: "18" + # edge: "12" + # firefox: "1.5" + # firefox_android: "4" + # safari: "3" + # safari_ios: "1" + - api.CanvasRenderingContext2D.arc + - api.CanvasRenderingContext2D.canvas + - api.CanvasRenderingContext2D.quadraticCurveTo + + # baseline: high + # baseline_low_date: 2015-07-29 + # baseline_high_date: 2018-01-29 + # support: + # chrome: "1" + # chrome_android: "18" + # edge: "12" + # firefox: "2" + # firefox_android: "4" + # safari: "3.1" + # safari_ios: "2" + - api.CanvasRenderingContext2D.isPointInPath + + # baseline: high + # baseline_low_date: 2015-07-29 + # baseline_high_date: 2018-01-29 + # support: + # chrome: "1" + # chrome_android: "18" + # edge: "12" + # firefox: "3" + # firefox_android: "4" + # safari: "3.1" + # safari_ios: "2" + - api.CanvasRenderingContext2D.transform + + # baseline: high + # baseline_low_date: 2015-07-29 + # baseline_high_date: 2018-01-29 + # support: + # chrome: "2" + # chrome_android: "18" + # edge: "12" + # firefox: "1.5" + # firefox_android: "31" + # safari: "4" + # safari_ios: "3.2" + - api.TextMetrics + - api.TextMetrics.width + + # baseline: high + # baseline_low_date: 2015-07-29 + # baseline_high_date: 2018-01-29 + # support: + # chrome: "2" + # chrome_android: "18" + # edge: "12" + # firefox: "2" + # firefox_android: "4" + # safari: "4" + # safari_ios: "3.2" + - api.CanvasRenderingContext2D.getImageData + - api.CanvasRenderingContext2D.putImageData + + # baseline: high + # baseline_low_date: 2015-07-29 + # baseline_high_date: 2018-01-29 + # support: + # chrome: "2" + # chrome_android: "18" + # edge: "12" + # firefox: "3" + # firefox_android: "4" + # safari: "4" + # safari_ios: "3.2" + - api.CanvasRenderingContext2D.setTransform + + # baseline: high + # baseline_low_date: 2015-07-29 + # baseline_high_date: 2018-01-29 + # support: + # chrome: "2" + # chrome_android: "18" + # edge: "12" + # firefox: "3.5" + # firefox_android: "4" + # safari: "4" + # safari_ios: "3.2" + - api.CanvasRenderingContext2D.createImageData + - api.CanvasRenderingContext2D.fillText + - api.CanvasRenderingContext2D.font + - api.CanvasRenderingContext2D.measureText + - api.CanvasRenderingContext2D.strokeText + - api.CanvasRenderingContext2D.textAlign + - api.CanvasRenderingContext2D.textBaseline + + # baseline: high + # baseline_low_date: 2015-07-29 + # baseline_high_date: 2018-01-29 + # support: + # chrome: "23" + # chrome_android: "25" + # edge: "12" + # firefox: "27" + # firefox_android: "27" + # safari: "7" + # safari_ios: "7" + - api.CanvasRenderingContext2D.getLineDash + - api.CanvasRenderingContext2D.lineDashOffset + - api.CanvasRenderingContext2D.setLineDash + + # baseline: high + # baseline_low_date: 2016-08-02 + # baseline_high_date: 2019-02-02 + # support: + # chrome: "31" + # chrome_android: "31" + # edge: "13" + # firefox: "48" + # firefox_android: "48" + # safari: "9" + # safari_ios: "9" + - api.CanvasRenderingContext2D.ellipse + + # baseline: high + # baseline_low_date: 2016-08-02 + # baseline_high_date: 2019-02-02 + # support: + # chrome: "37" + # chrome_android: "37" + # edge: "14" + # firefox: "32" + # firefox_android: "32" + # safari: "8" + # safari_ios: "8" + - api.CanvasRenderingContext2D.drawFocusIfNeeded + + # baseline: high + # baseline_low_date: 2017-04-05 + # baseline_high_date: 2019-10-05 + # support: + # chrome: "30" + # chrome_android: "30" + # edge: "15" + # firefox: "51" + # firefox_android: "51" + # safari: "9.1" + # safari_ios: "9.3" + - api.CanvasRenderingContext2D.imageSmoothingEnabled + + # baseline: high + # baseline_low_date: 2020-01-15 + # baseline_high_date: 2022-07-15 + # support: + # chrome: "26" + # chrome_android: "26" + # edge: "79" + # firefox: "19" + # firefox_android: "19" + # safari: "7" + # safari_ios: "7" + - api.CanvasRenderingContext2D.isPointInStroke + + # baseline: high + # baseline_low_date: 2020-01-15 + # baseline_high_date: 2022-07-15 + # support: + # chrome: "31" + # chrome_android: "31" + # edge: "79" + # firefox: "36" + # firefox_android: "36" + # safari: "10.1" + # safari_ios: "10.3" + - api.CanvasRenderingContext2D.resetTransform + + # baseline: high + # baseline_low_date: 2020-07-28 + # baseline_high_date: 2023-01-28 + # support: + # chrome: "68" + # chrome_android: "68" + # edge: "79" + # firefox: "70" + # firefox_android: "79" + # safari: "11.1" + # safari_ios: "11.3" + - api.CanvasRenderingContext2D.getTransform + + # baseline: low + # baseline_low_date: 2022-05-31 + # support: + # chrome: "77" + # chrome_android: "77" + # edge: "79" + # firefox: "101" + # firefox_android: "101" + # safari: "9" + # safari_ios: "9" + - api.CanvasRenderingContext2D.direction + + # baseline: low + # baseline_low_date: 2023-08-29 + # support: + # chrome: "73" + # chrome_android: "73" + # edge: "79" + # firefox: "117" + # firefox_android: "117" + # safari: "15" + # safari_ios: "15" + - api.CanvasRenderingContext2D.getContextAttributes + + # baseline: low + # baseline_low_date: 2023-10-13 + # support: + # chrome: "118" + # chrome_android: "118" + # edge: "118" + # firefox: "116" + # firefox_android: "116" + # safari: "11.1" + # safari_ios: "11.3" + - api.TextMetrics.alphabeticBaseline + - api.TextMetrics.hangingBaseline + - api.TextMetrics.ideographicBaseline + + # baseline: false + # support: + # chrome: "52" + # chrome_android: "52" + # edge: "79" + # firefox: "49" + # firefox_android: "49" + - api.CanvasRenderingContext2D.filter + + # baseline: false + # support: + # chrome: "54" + # chrome_android: "54" + # edge: "79" + # safari: "9.1" + # safari_ios: "9.3" + - api.CanvasRenderingContext2D.imageSmoothingQuality + + # baseline: false + # support: + # chrome: "99" + # chrome_android: "99" + # edge: "99" + # firefox: "104" + # firefox_android: "104" + - api.CanvasRenderingContext2D.fontKerning + + # baseline: false + # support: + # chrome: "99" + # chrome_android: "99" + # edge: "99" + # firefox: "115" + # firefox_android: "115" + - api.CanvasRenderingContext2D.letterSpacing + - api.CanvasRenderingContext2D.wordSpacing + + # baseline: false + # support: + # chrome: "99" + # chrome_android: "99" + # edge: "99" + # firefox: "116" + # firefox_android: "116" + - api.CanvasRenderingContext2D.textRendering + + # baseline: false + # support: + # chrome: "99" + # chrome_android: "99" + # edge: "99" + # firefox: "117" + # firefox_android: "117" + - api.CanvasRenderingContext2D.fontStretch + - api.CanvasRenderingContext2D.fontVariantCaps diff --git a/features/canvas-text-baselines.yml b/features/canvas-text-baselines.yml deleted file mode 100644 index 44e76046efb..00000000000 --- a/features/canvas-text-baselines.yml +++ /dev/null @@ -1,7 +0,0 @@ -name: Canvas text baselines -description: The `alphabeticBaseline`, `hangingBaseline`, and `ideographicBaseline` canvas text metrics measure the distance from the used `textBaseline` to the respective typographic baseline. -spec: - - https://html.spec.whatwg.org/multipage/canvas.html#dom-textmetrics-alphabeticbaseline-dev - - https://html.spec.whatwg.org/multipage/canvas.html#dom-textmetrics-hangingbaseline-dev - - https://html.spec.whatwg.org/multipage/canvas.html#dom-textmetrics-ideographicbaseline-dev -group: canvas diff --git a/features/canvas-text-baselines.yml.dist b/features/canvas-text-baselines.yml.dist deleted file mode 100644 index 38d7a393719..00000000000 --- a/features/canvas-text-baselines.yml.dist +++ /dev/null @@ -1,18 +0,0 @@ -# Generated from: canvas-text-baselines.yml -# Do not edit this file by hand. Edit the source file instead! - -status: - baseline: low - baseline_low_date: 2023-10-13 - support: - chrome: "118" - chrome_android: "118" - edge: "118" - firefox: "116" - firefox_android: "116" - safari: "11.1" - safari_ios: "11.3" -compat_features: - - api.TextMetrics.alphabeticBaseline - - api.TextMetrics.hangingBaseline - - api.TextMetrics.ideographicBaseline diff --git a/features/canvas-text.yml b/features/canvas-text.yml deleted file mode 100644 index bf85575f060..00000000000 --- a/features/canvas-text.yml +++ /dev/null @@ -1,4 +0,0 @@ -name: Canvas text metrics -description: The `fillText()` and `strokeText()` methods draw text to a 2D canvas. The `measureText()` method measures the width and other metrics which can be used to position the text. -spec: https://html.spec.whatwg.org/multipage/canvas.html#drawing-text-to-the-bitmap -group: canvas diff --git a/features/canvas-text.yml.dist b/features/canvas-text.yml.dist deleted file mode 100644 index fa233a1f36c..00000000000 --- a/features/canvas-text.yml.dist +++ /dev/null @@ -1,46 +0,0 @@ -# Generated from: canvas-text.yml -# Do not edit this file by hand. Edit the source file instead! - -status: - baseline: high - baseline_low_date: 2015-07-29 - baseline_high_date: 2018-01-29 - support: - chrome: "2" - chrome_android: "18" - edge: "12" - firefox: "3.5" - firefox_android: "31" - safari: "4" - safari_ios: "3.2" -compat_features: - # baseline: high - # baseline_low_date: 2015-07-29 - # baseline_high_date: 2018-01-29 - # support: - # chrome: "2" - # chrome_android: "18" - # edge: "12" - # firefox: "1.5" - # firefox_android: "31" - # safari: "4" - # safari_ios: "3.2" - - api.TextMetrics - - api.TextMetrics.width - - # baseline: high - # baseline_low_date: 2015-07-29 - # baseline_high_date: 2018-01-29 - # support: - # chrome: "2" - # chrome_android: "18" - # edge: "12" - # firefox: "3.5" - # firefox_android: "4" - # safari: "4" - # safari_ios: "3.2" - - api.CanvasRenderingContext2D.fillText - - api.CanvasRenderingContext2D.measureText - - api.CanvasRenderingContext2D.strokeText - - api.CanvasRenderingContext2D.textAlign - - api.CanvasRenderingContext2D.textBaseline