- From: Kang-Hao (Kenny) Lu <kennyluck@w3.org>
- Date: Thu, 22 Sep 2011 17:48:01 +0800
- To: 中文HTML5同樂會ML <public-html-ig-zh@w3.org>
上次在 WHATWG 的郵件群看到有人對 Canvas 2d API 的建議,後來我問了一下
WHATWG 的朋友們才發現 WHATWG 版本的各個規範裡其實有用註解紀錄一些從各個
地方來的新想法,大致的格式是:
<!-- vN 新想法-->
其中 N 是一個數字。我把關於 Canvas 2D Context[1] 的部份節錄下來,裡面竟
然還不少豎排的部份,求翻譯!另外也歡迎大家嘗試這些新功能的兼容實作。(話
說,DVT 是什麼意思?)
[1]
http://www.whatwg.org/specs/web-apps/current-work/complete/the-canvas-element.html
<!--
// v6 we've also received requests for:
attribute boolean <span
title="dom-context-2d-forceHighQuality">forceHighQuality</span> //
(default false)
// when enabled, it would prevent the UA from falling back on
lower-quality but faster rendering routines
// useful e.g. for when an image manipulation app uses <canvas> both
for UI previews and the actual work
-->
<!--
// v6 we've also received requests for:
void skew(...);
void reflect(...); // or mirror(...)
-->
<!--
// v6 we've also received requests for:
- turning off antialiasing to avoid seams when patterns are painted
next to each other
- might be better to overdraw?
- might be better to just draw at a higher res then downsample, like
for 3d?
- nested layers
- the ability to composite an entire set of drawing operations with
one shadow all at once
http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2008-August/015567.html
-->
<!-- v6DVT
void <span
title="dom-context-2d-fillVerticalText">fillVerticalText</span>(DOMString text,
double x, double y, optional double maxHeight);
void <span
title="dom-context-2d-strokeVerticalText">strokeVerticalText</span>(DOMString
text, double x, double y, optional double maxHeight); -->
<!-- v6
idea from Mihai:
> 5. Drawing states should be saveable with IDs, and for easier restoring.
>
> save(id)
> restore(id)
>
> If id is not provided, then save() works as defined now. The same for
> restore().
>
> Currently, it's not trivial to save and restore a specific state.
...and from Philip:
> I think a more convenient syntax would be:
> var state = ctx.save();
> ctx.restore(state);
> But how would it interact with normal calls to ctx.restore()?
-->
<!-- v6 feature requests:
* Getting and setting colours by component to bypass the CSS value
parsing.
Either:
context.fillStyle.red += 1;
Or:
var array = context.fillStyle;
array[1] += 1;
context.fillStyle = array;
* A more performant way of setting colours in general, e.g.:
context.setFillColor(r,g,b,a) // already supported by webkit
Or:
context.fillStyle = 0xRRGGBBAA; // set a 32bit int directly
* fill rule for deciding between winding and even-odd algorithms.
SVG has fill-rule: nonzero | evenodd
http://www.w3.org/TR/SVG/painting.html#FillProperties
-->
<!--
Requests for v6 features:
* apply transforms to patterns, so you don't have to create
transformed patterns manually by rendering them to an off-screen
canvas then using that canvas as the pattern.
-->
<!--
v6: dashed lines have been requested. Philip Taylor provides these
notes on what would need to be defined for dashed lines:
> I don't think it's entirely trivial to add, to the detail that's
> necessary in a specification. The common graphics APIs (at least
> Cairo, Quartz and java.awt.Graphics, and any SVG implementation) all
> have dashes specified by passing an array of dash lengths (alternating
> on/off), so that should be alright as long as you define what units
> it's measured in and what happens when you specify an odd number of
> values and how errors are handled and what happens if you update the
> array later. But after that, what does it do when stroking multiple
> subpaths, in terms of offsetting the dashes? When you use strokeRect,
> where is offset 0? Does moveTo reset the offset? How does it interact
> with lineCap/lineJoin? All the potential issues need test cases too,
> and the implementations need to make sure they handle any edge cases
> that the underlying graphics library does differently. (SVG Tiny 1.2
> appears to skip some of the problems by leaving things undefined and
> allowing whatever behavior the graphics library has.)
Another request has been for hairline width lines, that remain
hairline width with transform. ack Shaun Morris.
-->
<!-- v6 feature request:
* points as a primitive shape
http://home.comcast.net/~urbanjost/canvas/vogle4.html
-->
<!-- v6
Jordan OSETE suggests:
* support ways of extending the clipping region (union instead of
intersection)
- also "add", "subtract", "replace", "intersect" and "xor"
* support ways of resetting the clipping region without save/restore
-->
<!--v6DVT - this is commented out until CSS can get its act together
enough to actual specify vertical text rendering (how long have we
been waiting now?)
WHEN EDITING THIS, FIX THE PARTS MARKED "XXX" BELOW
<p>The <dfn
title="dom-context-2d-fillVerticalText"><code>fillVerticalText()</code></dfn>
and <dfn
title="dom-context-2d-strokeVerticalText"><code>strokeVerticalText()</code></dfn>
methods take three or four arguments, <var title="">text</var>, <var
title="">x</var>, <var title="">y</var>, and optionally <var
title="">maxHeight</var>, and render the given <var
title="">text</var> as vertical text at the given (<var
title="">x</var>, <var title="">y</var>) coordinates ensuring that
the text isn't taller than <var title="">maxHeight</var> if
specified, using the current <code
title="dom-context-2d-font">font</code> and <code
title="dom-context-2d-textAlign">textAlign</code>
values. Specifically, when the methods are called, the user agent
must run the following steps:</p>
<ol>
<li><p>If <var title="">maxHeight</var> is present but less than or
equal to zero, return without doing anything; abort these
steps.</p></li>
<li><p>Let <var title="">font</var> be the current font of the
context, as given by the <code
title="dom-context-2d-font">font</code> attribute.</p></li>
<li><p>Replace all the <span title="space character">space
characters</span> in <var title="">text</var> with U+0020 SPACE
characters.</p></li>
<li><p>Form a <em class="XXX">whatever CSS ends
up calling
vertical line boxes and inline boxes</em> containing the text <var
title="">text</var>, with all the properties at their initial
values except the 'font' property of the inline box set to <var
title="">font</var> and the 'direction' property of the inline
box set to <span>the directionality</span> of the <code>canvas</code>
element.</p></li>
<!- - if you insert a step here, make sure to adjust the next step's
final words - ->
<li><p>If the <var title="">maxHeight</var> argument was specified
and the hypothetical height of the <em
class="XXX">box</em>
in the hypothetical line box is greater than <var
title="">maxHeight</var> CSS pixels, then change <var
title="">font</var> to have a more condensed font (if one is
available or if a reasonably readable one can be synthesized by
applying an appropriate scale factor to the font) or a smaller
font, and return to the previous step.</p></li>
<li>
<p>Let the <var title="">anchor point</var> be a point on the <em
class="XXX">inline box</var>, determined by the
<code
title="dom-context-2d-textAlign">textAlign</code>, as follows:</p>
<p>Vertical position:</p>
<dl>
<dt> If <code
title="dom-context-2d-textAlign">textAlign</code> is <code
title="">start</code></dt>
<dt> If <code
title="dom-context-2d-textAlign">textAlign</code> is <code
title="">left</code> and <span>the directionality</span> of the
<code>canvas</code> element is 'ltr'</dt>
<dt> If <code
title="dom-context-2d-textAlign">textAlign</code> is <code
title="">right</code> and <span>the directionality</span> of the
<code>canvas</code> element is 'rtl'</dt>
<dd>Let the <var title="">anchor point</var>'s vertical
position be the top edge of the <em
class="XXX">inline
box</em>.</dd>
<dt> If <code
title="dom-context-2d-textAlign">textAlign</code> is <code
title="">end</code></dt>
<dt> If <code
title="dom-context-2d-textAlign">textAlign</code> is <code
title="">right</code> and <span>the directionality</span> of the
<code>canvas</code> element is 'ltr'</dt>
<dt> If <code
title="dom-context-2d-textAlign">textAlign</code> is <code
title="">left</code> and <span>the directionality</span> of the
<code>canvas</code> element is 'rtl'</dt>
<dd>Let the <var title="">anchor point</var>'s vertical
position be the bottom edge of the <em
class="XXX">inline
box</em>.</dd>
<dt> If <code
title="dom-context-2d-textAlign">textAlign</code> is <code
title="">center</code></dt>
<dd>Let the <var title="">anchor point</var>'s vertical position
be half way between the top and bottom edges of the <em
class="XXX">inline box</em>.</dd>
</dl>
<p>Let the horizontal position be half way between the left and
right edges of the em box of the first available font of the <em
class="XXX">inline box</em>.</p>
</li>
<li>
<p>Paint the hypothetical inline box as the shape given by the
text's glyphs, as transformed by the <span
title="dom-context-2d-transformation">current transformation
matrix</span>, and anchored and sized so that before applying the
<span title="dom-context-2d-transformation">current transformation
matrix</span>, the <var title="">anchor point</var> is at (<var
title="">x</var>, <var title="">y</var>) and each CSS pixel is
mapped to one coordinate space unit.</p>
<p>For <code
title="dom-context-2d-fillVerticalText">fillVerticalText()</code>
<code title="dom-context-2d-fillStyle">fillStyle</code> must be
applied and <code
title="dom-context-2d-strokeStyle">strokeStyle</code> must be
ignored. For <code
title="dom-context-2d-strokeVerticalText">strokeVerticalText()</code>
the reverse holds and <code
title="dom-context-2d-strokeStyle">strokeStyle</code> must be
applied and <code
title="dom-context-2d-fillStyle">fillStyle</code> must be
ignored.</p>
<p>Text is painted without affecting the current path, and is
subject to <span title="shadows">shadow effects</span>, <span
title="dom-context-2d-globalAlpha">global alpha</span>, the <span
title="clipping region">clipping region</span>, and <span
title="dom-context-2d-globalCompositeOperation">global composition
operators</span>.</p>
</li>
</ol>
v6DVT (also check for '- -' bits in the part above) -->
<!-- v6: Drawing text along a given path -->
<!-- v6: Adding text to a path -->
<!-- see also:
http://www.w3.org/TR/SVG11/text.html#TextpathLayoutRules -->
<!-- see also:
http://developer.mozilla.org/en/docs/Drawing_text_using_a_canvas -->
<!-- v3: drawImage() of an ImageData object might make sense (when
resizing as well as filtering) - ack Charles Pritchard -->
歡迎大家繼續分享有關規範的種種訊息!
Kenny
Received on Thursday, 22 September 2011 09:48:42 UTC