@@ -4033,6 +4033,14 @@ a.setAttribute('href', 'https://example.com/'); // change the content attribute
40334033 <li>The <dfn data-x-href="https://drafts.csswg.org/css-text/#propdef-word-spacing">'word-spacing'</dfn> property</li>
40344034 </ul>
40354035
4036+ <p>The following features are defined in <cite>CSS Transforms</cite>: <ref>CSSTRANSFORMS</ref></p>
4037+
4038+ <ul class="brief">
4039+ <li>The <dfn data-x-href="https://drafts.csswg.org/css-transforms/#transform-property">'transform'</dfn> property</li>
4040+ <li>The <dfn data-x-href="https://drafts.csswg.org/css-transforms/#transform-origin-property">'transform-origin'</dfn> property</li>
4041+ <li>The <dfn data-x-href="https://drafts.csswg.org/css-transforms/#transformation-matrix">transformation matrix</dfn></li>
4042+ </ul>
4043+
40364044 <p>The following features are defined in <cite>CSS Writing Modes</cite>: <ref>CSSWM</ref></p>
40374045
40384046 <ul class="brief">
@@ -68431,7 +68439,7 @@ callback <dfn callback>BlobCallback</dfn> = undefined (<span>Blob</span>? blob);
6843168439 <p>The <dfn element-attr for="canvas"><code
6843268440 data-x="attr-canvas-layoutsubtree">layoutsubtree</code></dfn> attribute is a <span>boolean
6843368441 attribute</span>. If present, <span data-x="concept-tree-child">children</span> of the
68434- <data>canvas</data> element are layed out, so that they can be drawn using <code
68442+ <data>canvas</data> element are laid out, so that they can be drawn using <code
6843568443 data-x="dom-context-2d-drawElementImage">drawElementImage()</code>.</p>
6843668444
6843768445 <p class="note">A <code>canvas</code> element can be sized arbitrarily by a style sheet, its
@@ -68561,11 +68569,12 @@ callback <dfn callback>BlobCallback</dfn> = undefined (<span>Blob</span>? blob);
6856168569
6856268570 <div algorithm>
6856368571 <p>To <dfn>get element transform</dfn> with an <code>HTMLCanvasElement</code> <var>canvas</var>,
68564- an element <var>element</var>, and a tranformation matrix <var>T<sub>draw</sub></var>:</p>
68572+ an element <var>element</var>, and a transformation matrix <var>T<sub>draw</sub></var>:</p>
6856568573
6856668574 <ol>
6856768575 <li><p>Let <var>T<sub>origin</sub></var> be a translation matrix corresponding to the
68568- <span>computed value</span> of the 'transform-origin' property of <var>element</var>.</p></li>
68576+ <span>computed value</span> of the <span>'transform-origin'</span> property of
68577+ <var>element</var>.</p></li>
6856968578
6857068579 <li><p>Let <var>T<sub>scale</sub></var> be a scaling matrix corresponding to the scale difference
6857168580 between <span data-x="'px'">CSS pixels</span> and <var>canvas</var>'s backing store's
@@ -69091,20 +69100,8 @@ interface mixin <dfn interface>CanvasText</dfn> {
6909169100
6909269101interface mixin <dfn interface>CanvasDrawElementImage</dfn> {
6909369102 // drawing elements
69094- DOMMatrix <span data-x="dom-context-2d-drawElementImage">drawElementImage</span>(<span>Element</span> element, unrestricted double x, unrestricted double y);
69095- DOMMatrix <span data-x="dom-context-2d-drawElementImage">drawElementImage</span>(<span>Element</span> element, unrestricted double x, unrestricted double y, unrestricted double w, unrestricted double h);
69096- };
69097-
69098- dictionary <dfn dictionary>CanvasHitTestRect</dfn> {
69099- double <dfn dict-member for="CanvasHitTestRect" data-x="dom-CanvasHitTestRect-x">x</dfn>;
69100- double <dfn dict-member for="CanvasHitTestRect" data-x="dom-CanvasHitTestRect-y">y</dfn>;
69101- double? <dfn dict-member for="CanvasHitTestRect" data-x="dom-CanvasHitTestRect-width">width</dfn>;
69102- double? <dfn dict-member for="CanvasHitTestRect" data-x="dom-CanvasHitTestRect-height">height</dfn>;
69103- };
69104-
69105- dictionary <dfn dictionary>CanvasElementHitTestRegion</dfn> {
69106- <span>Element</span> <dfn dict-member for="CanvasElementHitTestRegion" data-x="dom-CanvasElementHitTestRegion-element">element</dfn>;
69107- <span>CanvasHitTestRect</span> <dfn dict-member for="CanvasElementHitTestRegion" data-x="dom-CanvasElementHitTestRegion-rect">rect</dfn>;
69103+ DOMMatrix <span data-x="dom-context-2d-drawElementImage">drawElementImage</span>(<span>Element</span> element, unrestricted double dx, unrestricted double dy);
69104+ DOMMatrix <span data-x="dom-context-2d-drawElementImage">drawElementImage</span>(<span>Element</span> element, unrestricted double dx, unrestricted double dy, unrestricted double dw, unrestricted double dh);
6910869105};
6910969106
6911069107interface mixin <dfn interface>CanvasDrawImage</dfn> {
@@ -73584,13 +73581,14 @@ try {
7358473581 <h6>Drawing elements</h6>
7358573582
7358673583 <dl class="domintro">
73587- <dt><code data-x=""><var>transform</var> = <var>context</var>.<span subdfn data-x="dom-context-2d-drawElementImage">drawElementImage</span>(<var>element</var>, <var>x </var>, <var>y </var>)</code></dt>
73588- <dt><code data-x=""><var>transform</var> = <var>context</var>.<span data-x="dom-context-2d-drawElementImage">drawElementImage</span>(<var>element</var>, <var>x </var>, <var>y </var>, <var>w </var>, <var>h </var>)</code></dt>
73584+ <dt><code data-x=""><var>transform</var> = <var>context</var>.<span subdfn data-x="dom-context-2d-drawElementImage">drawElementImage</span>(<var>element</var>, <var>dx </var>, <var>dy </var>)</code></dt>
73585+ <dt><code data-x=""><var>transform</var> = <var>context</var>.<span data-x="dom-context-2d-drawElementImage">drawElementImage</span>(<var>element</var>, <var>dx </var>, <var>dy </var>, <var>dw </var>, <var>dh </var>)</code></dt>
7358973586
7359073587 <dd>
7359173588 <p>Draws the given element onto the canvas. Throws a <code>TypeError</code> if the element isn't
73592- a descendant of the canvas. Returns a transform that can be applied to the CSS 'transform'
73593- property on element to align it's location for hit testing with its drawn location.</p>
73589+ a descendant of the canvas. Returns a transform that can be applied to the
73590+ <span>'transform'</span> property on element to align its location for hit testing with its
73591+ drawn location.</p>
7359473592 </dd>
7359573593 </dl>
7359673594
@@ -73604,24 +73602,24 @@ try {
7360473602 <div algorithm>
7360573603 <p>The <code data-x="dom-context-2d-drawElementImage">drawElementImage(element, x, y)</code> method,
7360673604 when invoked, must <span>draw an element</span> with <span>this</span>, <var>element</var>,
73607- <var>x </var>, <var>y </var>.</p>
73605+ <var>dx </var>, <var>dy </var>.</p>
7360873606 </div>
7360973607
7361073608 <div algorithm>
7361173609 <p>The <code data-x="dom-context-2d-drawElementImage">drawElementImage(element, x, y, w, h)</code>
7361273610 method, when invoked, must <span>draw an element</span> with <span>this</span>,
73613- <var>element</var>, <var>x </var>, <var>y </var>, <var>w </var>, and <var>h </var>.</p>
73611+ <var>element</var>, <var>dx </var>, <var>dy </var>, <var>dw </var>, and <var>dh </var>.</p>
7361473612 </div>
7361573613
7361673614 <div algorithm>
7361773615 <p>To <dfn>draw an element</dfn>, with a <code>CanvasRenderingContext2D</code> <var>context</var>,
73618- an element <var>element</var>, numbers <var>x </var> and <var>y </var>, and optional numbers
73619- <var>w </var> and <var>h </var>:</p>
73616+ an element <var>element</var>, numbers <var>dx </var> and <var>dy </var>, and optional numbers
73617+ <var>dw </var> and <var>dh </var>:</p>
7362073618
7362173619 <ol>
73622- <li><p>If <var>x </var> or <var>y </var> are infinite or NaN, then return.</p></li>
73620+ <li><p>If <var>dx </var> or <var>dy </var> are infinite or NaN, then return.</p></li>
7362373621
73624- <li><p>If <var>w </var> and <var>h </var> are given and either are infinite or NaN, then
73622+ <li><p>If <var>dw </var> and <var>dh </var> are given and either are infinite or NaN, then
7362573623 return.</p></li>
7362673624
7362773625 <li><p>Let <var>canvas</var> be the <code>canvas</code> element to which <var>context</var> is
@@ -73636,18 +73634,31 @@ try {
7363673634
7363773635 <li><p>Let <var>borderBox</var> be <var>element</var>'s <span>border box</span>.</p></li>
7363873636
73639- <li><p>If not given, <var>w </var> and <var>h </var> must default to the width and height of
73640- <var>borderBox</var>.</p></li>
73637+ <li><p>Let <var>layoutWidth </var> and <var>layoutHeight </var> be the width and height of
73638+ <var>borderBox</var>, respectively .</p></li>
7364173639
73642- <li><p>If either <var>w</var> or <var>h</var> are zero, then return.</p></li>
73640+ <li><p>If not given, <var>dw</var> and <var>dh</var> must default to the <var>layoutWidth</var>
73641+ and <var>layoutHeight</var>, respectively.</p></li>
7364373642
73644- <li><p>Paint <var>element</var> to the specified rectangular area without using any
73645- <span>sensitive information</span>. Instead, either paint nothing or use static information that
73646- is the same for all users.</p></li>
73643+ <li><p>If either <var>dw</var> or <var>dh</var> are zero, then return.</p></li>
7364773644
73648- <li><p>Let <var>T<sub>draw</sub></var> be the scale+translation matrix that transforms the box
73649- (0, 0, width of <var>borderBox</var>, width of <var>borderBox</var>,) to
73650- (<var>x</var>, <var>y</var>, <var>w</var>, <var>h</var>).</p></li>
73645+ <li>
73646+ <p>Paint <var>element</var> to the specified rectangular area, ignoring <var>element</var>'s
73647+ <span>transformation matrix</span> and without using any <span>sensitive information</span>.
73648+ Instead, either paint nothing or use static information that is the same for all users.</p>
73649+
73650+ <p class="note">There is no requirement to synchronously rasterize into the backing store at
73651+ this point. As an optimization, implementations are free to instead store the information
73652+ required to rasterize later, as long as the difference is not observable.</p>
73653+ </li>
73654+
73655+ <li><p>Let <var>T<sub>draw</sub></var> be a copy of the <span>current transformation
73656+ matrix</span>.</p></li>
73657+
73658+ <li><p>Translate <var>T<sub>draw</sub></var> by (<var>dx</var>, <var>dy</var>).</p></li>
73659+
73660+ <li><p>Scale <var>T<sub>draw</sub></var> by (<var>dw</var> / <var>layoutWidth</var>,
73661+ <var>dh</var> / <var>layoutHeight</var>).</p></li>
7365173662
7365273663 <li><p>Return the result of <span>get element transform</span> with <var>context</var>'s
7365373664 <code>canvas</code> element, <var>element</var>, and <var>T<sub>draw</sub></var>.</p></li>
@@ -73687,8 +73698,9 @@ try {
7368773698
7368873699 <p>This example paints two elements with hit testing. Since all children are laid out at the
7368973700 top left, the 'transform' CSS property is used to make their position for hit testing match
73690- the drawn order. In order redraw when needed, for example if text is selected a ResizeObserver
73691- with the <code data-x="">fireOnEveryPaint</code> parameter.</p>
73701+ the drawn order. In order redraw when needed, for example if text is selected, a <code
73702+ data-x="">ResizeObserver</code> with the <code data-x="">fireOnEveryPaint</code> parameter is
73703+ used.</p>
7369273704
7369373705 <pre><code class="html"><!doctype html>
7369473706<meta charset="utf-8" />
@@ -73753,8 +73765,7 @@ try {
7375373765 }
7375473766
7375573767 onload = () => {
73756- const resizeObserver = new ResizeObserver((entries) => {
73757- const entry = entries.find((entry) => entry.target === canvas);
73768+ const resizeObserver = new ResizeObserver(([entry]) => {
7375873769 canvas.width = entry.devicePixelContentBoxSize[0].inlineSize;
7375973770 canvas.height = entry.devicePixelContentBoxSize[0].blockSize;
7376073771 draw();
@@ -146870,7 +146881,7 @@ legend[align=right i] {
146870146881
146871146882 <pre><code class="css">@namespace "http://www.w3.org/1999/xhtml";
146872146883
146873- canvas[layoutsubtree] > * { isolation: isolate !important; contain: strict !important; }
146884+ canvas[layoutsubtree] > * { isolation: isolate !important; contain: paint !important; }
146874146885iframe { border: 2px inset; }
146875146886<span id="video-object-fit">video { object-fit: contain; }</span></code></pre>
146876146887
@@ -155521,6 +155532,9 @@ INSERT INTERFACES HERE
155521155532 <dt id="refsCSSTEXT">[CSSTEXT]</dt>
155522155533 <dd><cite><a href="https://drafts.csswg.org/css-text/">CSS Text</a></cite>, E. Etemad, K. Ishii. W3C.</dd>
155523155534
155535+ <dt id="refsCSSTRANSFORMS">[CSSTRANSFORMS]</dt>
155536+ <dd><cite><a href="https://drafts.csswg.org/css-transforms/">CSS Transforms</a></cite>, L. Baron, S. Fraser, D. Jackson, T. O'Connor, D. Schulze. W3C.</dd>
155537+
155524155538 <dt id="refsCSSVALUES">[CSSVALUES]</dt>
155525155539 <dd><cite><a href="https://drafts.csswg.org/css-values/">CSS3 Values and Units</a></cite>, H. Lie, T. Atkins, E. Etemad. W3C.</dd>
155526155540
0 commit comments