-
Notifications
You must be signed in to change notification settings - Fork 2.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add a lang
IDL Attribute to CanvasTextDrawingStyles, and clarify "direction" on same
#10873
base: main
Are you sure you want to change the base?
Changes from all commits
eba506c
caa22ca
488b95b
01e6185
b6df5ee
1b5a1df
152e3a4
60a5971
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -65339,6 +65339,14 @@ callback <dfn callback>BlobCallback</dfn> = undefined (<span>Blob</span>? blob); | |
<li><p>Set this <code>canvas</code> element's <span data-x="concept-canvas-context-mode">context | ||
mode</span> to <span data-x="concept-canvas-placeholder">placeholder</span>.</p></li> | ||
|
||
<li><p>Set the <span data-x="offscreencanvas-inherited-lang">inherited language</span> of | ||
<var>offscreenCanvas</var> to the <span data-x="language">language</span> of this | ||
<code>canvas</code> element.</p></li> | ||
|
||
<li><p>Set the <span data-x="offscreencanvas-inherited-direction">inherited direction</span> of | ||
<var>offscreenCanvas</var> to the <span data-x="the directionality">directionality</span> of this | ||
<code>canvas</code> element.</p></li> | ||
|
||
<li><p>Return <var>offscreenCanvas</var>.</p></li> | ||
</ol> | ||
|
||
|
@@ -65549,6 +65557,7 @@ interface mixin <dfn interface>CanvasPathDrawingStyles</dfn> { | |
|
||
interface mixin <dfn interface>CanvasTextDrawingStyles</dfn> { | ||
// text | ||
attribute DOMString <span data-x="dom-context-2d-lang">lang</span>; // (default: "inherit") | ||
attribute DOMString <span data-x="dom-context-2d-font">font</span>; // (default 10px sans-serif) | ||
attribute <span>CanvasTextAlign</span> <span data-x="dom-context-2d-textAlign">textAlign</span>; // (default: "start") | ||
attribute <span>CanvasTextBaseline</span> <span data-x="dom-context-2d-textBaseline">textBaseline</span>; // (default: "alphabetic") | ||
|
@@ -66022,6 +66031,7 @@ context.fillRect(100,0,50,50); // only this square remains</code></pre> | |
data-x="dom-context-2d-shadowOffsetX">shadowOffsetX</code>, <code | ||
data-x="dom-context-2d-shadowOffsetY">shadowOffsetY</code>, <code | ||
data-x="dom-context-2d-shadowBlur">shadowBlur</code>, <code | ||
data-x="dom-context-2d-lang">lang</code>, <code | ||
data-x="dom-context-2d-font">font</code>, <code | ||
data-x="dom-context-2d-textAlign">textAlign</code>, <code | ||
data-x="dom-context-2d-textBaseline">textBaseline</code>, <code | ||
|
@@ -66516,13 +66526,26 @@ transform. ack Shaun Morris. --> | |
<h6>Text styles</h6> | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Nit: seems more correct to refer to something like |
||
<dl class="domintro"> | ||
<dt><code data-x=""><var>context</var>.<span subdfn data-x="dom-context-2d-lang">lang</span> [ = <var>value</var> ]</code></dt> | ||
<dt><code data-x=""><var>styles</var>.<span data-x="dom-context-2d-lang">lang</span> [ = <var>value</var> ]</code></dt> | ||
<dd> | ||
<p>Returns the current language setting.</p> | ||
|
||
<p>Can be set, to change the language used when resolving fonts. The syntax and valid values | ||
are the same as those for the <span data-x="attr-lang">lang</span> element attribute, or the | ||
value "<code data-x="dom-context-2d-direction-inherit">inherit</code>" which is described | ||
below.</p> | ||
|
||
<p>The default is "<code data-x="dom-context-2d-direction-inherit">inherit</code>".</p> | ||
</dd> | ||
|
||
<dt><code data-x=""><var>context</var>.<span subdfn data-x="dom-context-2d-font">font</span> [ = <var>value</var> ]</code></dt> | ||
<dt><code data-x=""><var>styles</var>.<span data-x="dom-context-2d-font">font</span> [ = <var>value</var> ]</code></dt> | ||
<dd> | ||
<p>Returns the current font settings.</p> | ||
|
||
<p>Can be set, to change the font. The syntax is the same as for the CSS <span>'font'</span> | ||
property; values that cannot be parsed as CSS font values are ignored.</p> | ||
property; values that cannot be parsed as CSS font values are ignored. The default is "10px sans-serif".</p> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We wrap at a 100 columns. |
||
|
||
<p>Relative keywords and lengths are computed relative to the font of the <code>canvas</code> | ||
element.</p> | ||
|
@@ -66694,15 +66717,51 @@ worker.postMessage(offscreenCanvas, [offscreenCanvas]);</code></pre> | |
Notice that the font is only loaded inside the worker, and not in the document context.</p> | ||
</div> | ||
|
||
<p>Objects that implement the <code>CanvasTextDrawingStyles</code> interface have a <dfn attribute | ||
for="CanvasTextDrawingStyles"><code data-x="dom-context-2d-lang">lang</code></dfn> attribute | ||
that controls localization of the font. The <code data-x="dom-context-2d-lang">lang</code> IDL | ||
schenney-chromium marked this conversation as resolved.
Show resolved
Hide resolved
|
||
attribute, on getting, must return the current value. The <code | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Couple issues here:
|
||
data-x="dom-context-2d-lang">lang</code> setter steps are:</p> | ||
|
||
<ol> | ||
<li><p>Change the current value to the new value.</p></li> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This needs to manipulate an internal concept. |
||
<li><p>Set the <dfn data-x="dom-context-2d-font-language">language for the font</dfn> using the | ||
following steps:</p> | ||
Comment on lines
+66728
to
+66729
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This statement seems redundant with subsequent statements. I suggest we drop it. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Perhaps this is meant to be the internal language concept? But if so we shouldn't define it inline in the algorithm. |
||
<ol> | ||
<li><p>If the value is "<code data-x="dom-context-2d-direction-inherit">inherit</code>", then</p> | ||
<ol> | ||
<li><p>If <var>object</var>'s <span>font style source object</span> is a <code>canvas</code> | ||
element, then set the <span data-x="dom-context-2d-font-language">language for the | ||
font</span> to the element's <span data-x="language">language</span>.</p></li> | ||
|
||
<li><p>Otherwise, <var>object</var>'s <span>font style source object</span> is an | ||
<code>OffscreenCanvas</code> object/ Set the <span data-x="dom-context-2d-font-language"> | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We don't want this kind of specification style (or "COME FROM"). This makes the model very hard to understand. Instead we should propagate this state in the same place where you'd implement it, the There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. To be sure I understand, I would modify the algorithm for creating offscreen canvas objects to include the steps to capture the direction and language when the object is created. Is that right? It sure makes sense to me and addresses something I thought was not well explained. There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Yeah and you'll have to store them somewhere so you also have to create some internal fields on There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Done, I think. |
||
language for the font</span> to the <code>OffscreenCanvas</code>'s internal | ||
<span data-x="offscreencanvas-inherited-lang">inherited language</span>.</p></li> | ||
</ol> | ||
</li> | ||
<li><p>Otherwise, the <span data-x="dom-context-2d-font-language">language for the font</span> | ||
is the value.</p></li> | ||
</ol> | ||
</li> | ||
</ol> | ||
|
||
<p>When the object implementing the <code>CanvasTextDrawingStyles</code> interface is created, | ||
the <code data-x="dom-context-2d-lang">lang</code> attribute must initially have the value | ||
"<code data-x="dom-context-2d-direction-inherit">inherit</code>" and the | ||
<span data-x="dom-context-2d-font-language">language for the font</span> must be set as above.</p> | ||
|
||
<p>The <dfn attribute for="CanvasTextDrawingStyles"><code | ||
data-x="dom-context-2d-font">font</code></dfn> IDL attribute, on setting, must be <span | ||
data-x="parse something according to a CSS grammar">parsed as a CSS <'font'> value</span> (but | ||
without supporting property-independent style sheet syntax like 'inherit'), and the resulting font | ||
must be assigned to the context, with the <span>'line-height'</span> component forced to 'normal', | ||
with the <span>'font-size'</span> component converted to <span data-x="'px'">CSS pixels</span>, | ||
and with system fonts being computed to explicit values. If the new value is syntactically | ||
incorrect (including using property-independent style sheet syntax like 'inherit' or 'initial'), | ||
then it must be ignored, without assigning a new font value. <ref>CSS</ref></p> | ||
must be assigned to the context, with the <span data-x="dom-context-2d-font-language">language | ||
for the font</span> as determined above, with the <span>'line-height'</span> | ||
component forced to 'normal', with the <span>'font-size'</span> component converted to <span | ||
data-x="'px'">CSS pixels</span>, and with system fonts being computed to explicit values. If the | ||
new value is syntactically incorrect (including using property-independent style sheet syntax | ||
like 'inherit' or 'initial'), then it must be ignored, without assigning a new font value. | ||
<ref>CSS</ref></p> | ||
|
||
<p>Font family names must be interpreted in the context of the <span>font style source | ||
object</span> when the font is to be used; any fonts embedded using <code | ||
|
@@ -66900,16 +66959,30 @@ worker.postMessage(offscreenCanvas, [offscreenCanvas]);</code></pre> | |
|
||
<dd><p>Treat input to the <span>text preparation algorithm</span> as right-to-left text.</p></dd> | ||
|
||
<!-- | ||
<dt><dfn><code data-x="dom-context-2d-direction-auto">auto</code></dfn> | ||
<dt><dfn enum-value for="CanvasDirection"><code data-x="dom-context-2d-direction-inherit">inherit</code></dfn> | ||
|
||
<dd><p>Determine the direction from the input to the <span>text preparation algorithm</span>.</p></dd> | ||
--> | ||
<dd><p>Use the following process to determine the value for the | ||
<dfn for="CanvasDirection"><code data-x="dom-context-2d-inherited-direction">inherited direction</code></dfn> referred to in the <span>text preparation algorithm</span></p> | ||
|
||
<dt><dfn enum-value for="CanvasDirection"><code data-x="dom-context-2d-direction-inherit">inherit</code></dfn> | ||
<ol> | ||
<li><p>If <var>object</var>'s <span>font style source object</span> is a <code>canvas</code> | ||
element:</p> | ||
<ol> | ||
<li><p>If the element has a <span>computed value</span> for | ||
<span>'direction'</span> use that as the <span data-x="dom-context-2d-inherited-direction">inherited direction</span>.</p></li> | ||
|
||
<dd><p>Default to the directionality of the <code>canvas</code> element or <code>Document</code> | ||
as appropriate.</p></dd> | ||
<li><p>Otherwise, use the <span data-x="the directionality">directionality</span> | ||
of the element as the <span data-x="dom-context-2d-inherited-direction">inherited direction</span>.</p></li> | ||
</ol> | ||
|
||
<li><p>Otherwise, <var>object</var>'s <span>font style source object</span> is an | ||
<code>OffscreenCanvas</code> object. Set the <span | ||
data-x="dom-context-2d-inherited-direction">inherited direction</span> to the | ||
<code>OffscreenCanvas</code>'s internal <span | ||
data-x="offscreencanvas-inherited-direction">inherited | ||
direction</span>.</p></li> | ||
</ol> | ||
</dd> | ||
</dl> | ||
|
||
<p>The <code data-x="dom-context-2d-fontKerning">fontKerning</code> attribute's allowed keywords | ||
|
@@ -67033,32 +67106,11 @@ worker.postMessage(offscreenCanvas, [offscreenCanvas]);</code></pre> | |
data-x="dom-context-2d-direction-rtl">rtl</code>"</dt> | ||
<dd>Let <var>direction</var> be '<span data-x="concept-rtl">rtl</span>'.</dd> | ||
|
||
<!-- | ||
<dt>If the <var>target</var> object's <code | ||
data-x="dom-context-2d-direction">direction</code> attribute has the value "<code | ||
data-x="dom-context-2d-direction-auto">auto</code>"</dt> | ||
<dd> | ||
Find the first character in <var>text</var> of bidirectional character type L, AL, or | ||
R, if any. If such a character is found and it is of bidirectional character type AL or R, | ||
then let <var>direction</var> be '<span data-x="concept-rtl">rtl</span>'; otherwise, | ||
let <var>direction</var> be '<span data-x="concept-rtl">rtl</span>'. <ref>BIDI</ref> | ||
</dd> | ||
--> | ||
|
||
<dt>If the <var>target</var> object's <span>font style source object</span> is an | ||
element</dt> | ||
|
||
<dd>Let <var>direction</var> be <span>the directionality</span> of the <var>target</var> object's <span>font style source object</span>.</dd> | ||
|
||
<dt>If the <var>target</var> object's <span>font style source object</span> is a | ||
<code>Document</code> with a non-null <span>document element</span></dt> | ||
|
||
<dd>Let <var>direction</var> be <span>the directionality</span> of the <var>target</var> | ||
object's <span>font style source object</span>'s <span>document element</span>.</dd> | ||
|
||
<dt>Otherwise</dt> | ||
|
||
<dd>Let <var>direction</var> be '<span data-x="concept-ltr">ltr</span>'.</dd> | ||
data-x="dom-context-2d-direction-inherit">inherit</code>"</dt> | ||
<dd>Let <var>direction</var> be the <var>target</var>'s <span | ||
data-x="dom-context-2d-inherited-direction">inherited direction</span>.</dd> | ||
</dl> | ||
</li> | ||
|
||
|
@@ -71268,6 +71320,11 @@ interface <dfn interface>OffscreenCanvas</dfn> : <span>EventTarget</span> { | |
data-x="dom-OffscreenCanvas-height">height</code> attributes of the <code>OffscreenCanvas</code> | ||
object. Initially, all the bitmap's pixels are <span>transparent black</span>.</p> | ||
|
||
<p>An <code>OffscreenCanvas</code> object has an internal <dfn | ||
data-x="offscreencanvas-inherited-lang">inherited language</dfn> and <dfn | ||
data-x="offscreencanvas-inherited-direction">inherited direction</dfn> set when | ||
the <code>OffscreenCanvas</code> is created.</p> | ||
|
||
<p>An <code>OffscreenCanvas</code> object can have a rendering context bound to it. Initially, | ||
it does not have a bound rendering context. To keep track of whether it has a rendering context | ||
or not, and what kind of rendering context it is, an <code>OffscreenCanvas</code> object also | ||
|
@@ -71288,9 +71345,35 @@ interface <dfn interface>OffscreenCanvas</dfn> : <span>EventTarget</span> { | |
array of <span>transparent black</span> pixels of the dimensions specified by <var>width</var> and | ||
<var>height</var>; and its <code data-x="dom-OffscreenCanvas-width">width</code> and <code | ||
data-x="dom-OffscreenCanvas-height">height</code> attributes initialized to <var>width</var> and | ||
<var>height</var> respectively.</p> | ||
<var>height</var> respectively. The <span data-x="offscreencanvas-inherited-lang">inherited | ||
language</span> and <span data-x="offscreencanvas-inherited-direction">inherited direction</span> | ||
internal values must be set as follows:</p> | ||
|
||
<hr> | ||
<ol> | ||
<li><p>Let <var>global</var> be the <code>OffscreenCanvas</code>'s <span>relevant global | ||
object</span>.</p></li> | ||
<li><p>If <var>global</var> is a <code>Window</code> object:</p> | ||
<ol> | ||
<li><p>Let <var>Document</var> be the <var>global</var>'s | ||
<span data-x="concept-document-window">associated <code>Document</code></span>.</p></li> | ||
|
||
<li><p>Set the <span data-x="offscreencanvas-inherited-lang">inherited language</span> | ||
to the <var>Document</var>'s <span data-x="language">language</span>.</p></li> | ||
|
||
<li><p>Set the <span data-x="offscreencanvas-inherited-direction">inherited direction</span> | ||
to the <var>Document</var>'s <span data-x="the directionality">directionality</span>.</p></li> | ||
</ol> | ||
</li> | ||
<li><p>Otherwise:</p> | ||
<ol> | ||
<li><p>Set the <span data-x="offscreencanvas-inherited-lang">inherited language</span> | ||
to explicitly unknown.</p></li> | ||
|
||
<li><p>Set the <span data-x="offscreencanvas-inherited-direction">inherited direction</span> | ||
to "ltr".</p></li> | ||
</ol> | ||
</li> | ||
</ol> | ||
|
||
<p><code>OffscreenCanvas</code> objects are <span data-x="transferable | ||
objects">transferable</span>. Their <span>transfer steps</span>, given <var>value</var> and | ||
|
@@ -146999,6 +147082,7 @@ INSERT INTERFACES HERE | |
Ştefan Vargyas, | ||
Stefan Weiss, | ||
Steffen Meschkat, | ||
Stephen Chenney, | ||
Stephen Ma, | ||
Stephen Stewart, | ||
Stephen White, | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Nit (to be applied throughout this PR):
(There's further modernization to be done here, but let's consider that out-of-scope.)