[html5] r810 - /

whatwg at whatwg.org whatwg at whatwg.org
Mon May 14 19:36:53 PDT 2007


Author: ianh
Date: 2007-05-14 19:36:51 -0700 (Mon, 14 May 2007)
New Revision: 810

Modified:
   index
   source
Log:
[agow] (2) <canvas> gradient updates, cross reference fixes, and editorial fixes

Modified: index
===================================================================
--- index	2007-05-11 23:20:38 UTC (rev 809)
+++ index	2007-05-15 02:36:51 UTC (rev 810)
@@ -22,7 +22,7 @@
 
    <h1 id=html-5>HTML 5</h1>
 
-   <h2 class="no-num no-toc" id=working>Working Draft &mdash; 11 May 2007</h2>
+   <h2 class="no-num no-toc" id=working>Working Draft &mdash; 15 May 2007</h2>
 
    <p>You can take part in this work. <a
     href="http://www.whatwg.org/mailing-list">Join the working group's
@@ -15455,7 +15455,7 @@
 
   <p>When the UA is passed an empty string or a string specifying a context
    that it does not support, then it must return null. String comparisons
-   should be literal and case-sensitive.
+   must be literal and case-sensitive.
 
   <p class=note>A future version of this specification will probably define a
    <code>3d</code> context (probably based on the OpenGL ES API).
@@ -15554,15 +15554,15 @@
 -->
   // compositing
            attribute float <a href="#globalalpha" title=dom-context-2d-globalAlpha>globalAlpha</a>; // (default 1.0)
-           attribute DOMString <a href="#globalcompositeoperation" title=dom-context-2d-globalCompositeOperation>globalCompositeOperation</a>; // (default over)
+           attribute DOMString <a href="#globalcompositeoperation" title=dom-context-2d-globalCompositeOperation>globalCompositeOperation</a>; // (default source-over)
 
   // colors and styles
            attribute DOMObject <a href="#strokestyle" title=dom-context-2d-strokeStyle>strokeStyle</a>; // (default black)
            attribute DOMObject <a href="#fillstyle" title=dom-context-2d-fillStyle>fillStyle</a>; // (default black)
-  <a href="#canvasgradient0">CanvasGradient</a> <span title=dom-context-2d-createLinearGradient>createLinearGradient</span>(in float x0, in float y0, in float x1, in float y1);
-  <a href="#canvasgradient0">CanvasGradient</a> <span title=dom-context-2d-createRadialGradient>createRadialGradient</span>(in float x0, in float y0, in float r0, in float x1, in float y1, in float r1);
-  <a href="#canvaspattern0">CanvasPattern</a> <span title=dom-context-2d-createPattern>createPattern</span>(in <a href="#htmlimageelement">HTMLImageElement</a> image, DOMString repetition);
-  <a href="#canvaspattern0">CanvasPattern</a> <span title=dom-context-2d-createPattern>createPattern</span>(in <a href="#htmlcanvaselement">HTMLCanvasElement</a> image, DOMString repetition);
+  <a href="#canvasgradient0">CanvasGradient</a> <a href="#createlineargradient" title=dom-context-2d-createLinearGradient>createLinearGradient</a>(in float x0, in float y0, in float x1, in float y1);
+  <a href="#canvasgradient0">CanvasGradient</a> <a href="#createradialgradient" title=dom-context-2d-createRadialGradient>createRadialGradient</a>(in float x0, in float y0, in float r0, in float x1, in float y1, in float r1);
+  <a href="#canvaspattern0">CanvasPattern</a> <a href="#createpatternimage" title=dom-context-2d-createPattern>createPattern</a>(in <a href="#htmlimageelement">HTMLImageElement</a> image, DOMString repetition);
+  <a href="#canvaspattern0">CanvasPattern</a> <a href="#createpatternimage" title=dom-context-2d-createPattern>createPattern</a>(in <a href="#htmlcanvaselement">HTMLCanvasElement</a> image, DOMString repetition);
 
   // line caps/joins
            attribute float <a href="#linewidth" title=dom-context-2d-lineWidth>lineWidth</a>; // (default 1)
@@ -15574,7 +15574,7 @@
            attribute float <a href="#shadowoffsetx" title=dom-context-2d-shadowOffsetX>shadowOffsetX</a>; // (default 0)
            attribute float <a href="#shadowoffsety" title=dom-context-2d-shadowOffsetY>shadowOffsetY</a>; // (default 0)
            attribute float <a href="#shadowblur" title=dom-context-2d-shadowBlur>shadowBlur</a>; // (default 0)
-           attribute DOMString <a href="#shadowcolor" title=dom-context-2d-shadowColor>shadowColor</a>; // (default black)
+           attribute DOMString <a href="#shadowcolor" title=dom-context-2d-shadowColor>shadowColor</a>; // (default transparent black)
 
   // rects
   void <a href="#clearrect" title=dom-context-2d-clearRect>clearRect</a>(in float x, in float y, in float w, in float h);
@@ -15676,13 +15676,13 @@
    canvas</span><!-- XXX xref -->, not the context.
 
   <p>The <dfn id=save title=dom-context-2d-save><code>save()</code></dfn>
-   method pushes a copy of the current drawing state onto the drawing state
-   stack.
+   method must push a copy of the current drawing state onto the drawing
+   state stack.
 
   <p>The <dfn id=restore
-   title=dom-context-2d-restore><code>restore()</code></dfn> method pops the
-   top entry in the drawing state stack, and resets the drawing state it
-   describes. If there is no saved state, the method does nothing.
+   title=dom-context-2d-restore><code>restore()</code></dfn> method must pop
+   the top entry in the drawing state stack, and reset the drawing state it
+   describes. If there is no saved state, the method must do nothing.
 
   <h6 id=transformations><span class=secno>3.14.11.1.2. </span><dfn
    id=transformations0>Transformations</dfn></h6>
@@ -15901,9 +15901,9 @@
 
   <p>Both attributes can be either strings, <code><a
    href="#canvasgradient0">CanvasGradient</a></code>s, or <code><a
-   href="#canvaspattern0">CanvasPattern</a></code>s. On setting, strings
-   should be parsed as CSS &lt;color&gt; values and the color assigned, and
-   <code><a href="#canvasgradient0">CanvasGradient</a></code> and <code><a
+   href="#canvaspattern0">CanvasPattern</a></code>s. On setting, strings must
+   be parsed as CSS &lt;color&gt; values and the color assigned, and <code><a
+   href="#canvasgradient0">CanvasGradient</a></code> and <code><a
    href="#canvaspattern0">CanvasPattern</a></code> objects must be assigned
    themselves. <a href="#refsCSS3COLOR">[CSS3COLOR]</a> If the value is a
    string but is not a valid color, or is neither a string, a <code><a
@@ -15932,10 +15932,10 @@
 
   <p>Otherwise, if it is not a color but a <code><a
    href="#canvasgradient0">CanvasGradient</a></code> or <code><a
-   href="#canvaspattern0">CanvasPattern</a></code>, then an object supporting
-   those interfaces must be returned. Such objects are opaque and therefore
-   only useful for assigning to other attributes or for comparison to other
-   gradients or patterns.
+   href="#canvaspattern0">CanvasPattern</a></code>, then the respective
+   object must be returned. (Such objects are opaque and therefore only
+   useful for assigning to other attributes or for comparison to other
+   gradients or patterns.)
 
   <p>When the context is created, the <code
    title=dom-context-2d-strokeStyle><a
@@ -15948,12 +15948,15 @@
    both represented by objects implementing the opaque <dfn
    id=canvasgradient0><code>CanvasGradient</code></dfn> interface.
 
-  <p>Once a gradient has been created (see below), stops must be placed along
-   it to define how the colors are distributed along the gradient. Between
-   each such stop, the colors and the alpha component must be interpolated
-   over the RGBA space to find the color to use at that offset. Immediately
-   before the 0 offset and immediately after the 1 offset, transparent black
-   stops are be assumed.
+  <p>Once a gradient has been created (see below), stops are placed along it
+   to define how the colors are distributed along the gradient. The color of
+   the gradient at each stop is the color specified for that stop. Between
+   each such stop, the colors and the alpha component must be linearly
+   interpolated over the RGBA space without premultiplying the alpha value to
+   find the color to use at that offset. Before the first stop, the color
+   must be the color of the first stop. After the last stop, the color must
+   be the color of the last stop. When there are no stops, the gradient is
+   transparent black.
 
   <p>The <dfn id=addcolorstop
    title=dom-canvasgradient-addColorStop><code>addColorStop(<var
@@ -15963,10 +15966,17 @@
    than 0 or greater than 1 then an <code>INDEX_SIZE_ERR</code> exception
    must be raised. If the <var title="">color</var> cannot be parsed as a CSS
    color, then a <code>SYNTAX_ERR</code> exception must be raised. Otherwise,
-   the gradient must be updated with the new stop information.
+   the gradient must have a new stop placed, at offset <var
+   title="">offset</var> relative to the whole gradient, and with the color
+   obtained by parsing <var title="">color</var> as a CSS &lt;color&gt;
+   value. If multiple stops are placed at the same place on a gradient, they
+   must be placed in the order added, with the first one closest to the start
+   of the gradient, and each subsequent one infinitesimally further along
+   towards the end point (in effect causing all but the first and last stop
+   added at each point to be ignored).
 
-  <p>The <dfn id=createlineargradient title=createLinearGradient><code
-   title=dom-context-2d-createLinearGradient>createLinearGradient(<var
+  <p>The <dfn id=createlineargradient
+   title=dom-context-2d-createLinearGradient><code>createLinearGradient(<var
    title="">x0</var>, <var title="">y0</var>, <var title="">x1</var>, <var
    title="">y1</var>)</code></dfn> method takes four arguments, representing
    the start point (<var title="">x0</var>, <var title="">y0</var>) and end
@@ -15975,15 +15985,23 @@
    href="#canvasgradient0">CanvasGradient</a></code> initialised with that
    line.
 
-  <p>Linear gradients must be rendered such that at the starting point on the
-   canvas the color at offset 0 is used, that at the ending point the color
-   at offset 1 is used, that all points on a line perpendicular to the line
-   between the start and end points have the color at the point where those
-   two lines cross (interpolation happening as described above), and that any
-   points beyond the start or end points are a transparent black.
+  <p>Linear gradients must be rendered such that at and before the starting
+   point on the canvas the color at offset 0 is used, that at and after the
+   ending point the color at offset 1 is used, and that all points on a line
+   perpendicular to the line that crosses the start and end points have the
+   color at the point where those two lines cross (with the colors coming
+   from the interpolation described above).
 
-  <p>The <dfn id=createradialgradient title=createRadialGradient><code
-   title=dom-context-2d-createRadialGradient>createRadialGradient(<var
+  <p>If <span><var title="">x<sub>0</sub></var>&nbsp;=&nbsp;<var
+   title="">x<sub>1</sub></var></span> and <span><var
+   title="">y<sub>0</sub></var>&nbsp;=&nbsp;<var
+   title="">y<sub>1</sub></var></span>, then the linear gradient must paint
+   nothing.</p>
+  <!-- XXX could make this paint the start colour,
+  or the end colour, or raise an exception -->
+
+  <p>The <dfn id=createradialgradient
+   title=dom-context-2d-createRadialGradient><code>createRadialGradient(<var
    title="">x0</var>, <var title="">y0</var>, <var title="">r0</var>, <var
    title="">x1</var>, <var title="">y1</var>, <var
    title="">r1</var>)</code></dfn> method takes six arguments, the first
@@ -15993,44 +16011,92 @@
    <var title="">y1</var>) and radius <var title="">r1</var>. The values are
    in coordinate space units. The method must return a radial <code><a
    href="#canvasgradient0">CanvasGradient</a></code> initialised with those
-   two circles.
+   two circles. If either of <var title="">r0</var> or <var title="">r1</var>
+   are negative, an <code>INDEX_SIZE_ERR</code> exception must be raised.
 
-  <p>Radial gradients must be rendered such that a cone is created from the
-   two circles, so that at the circumference of the starting circle the color
-   at offset 0 is used, that at the circumference around the ending circle
-   the color at offset 1 is used, that the circumference of a circle drawn a
-   certain fraction of the way along the line between the two origins with a
-   radius the same fraction of the way between the two radii has the color at
-   that offset (interpolation happening as described above), that the end
-   circle appear to be above the start circle when the end circle is not
-   completely enclosed by the start circle, that the end circle be filled by
-   the color at offset 1, and that any points not described by the gradient
-   are a transparent black.
+  <p>Radial gradients must be rendered by following these steps:
 
-  <p>If a gradient has no stops defined, then the gradient must be treated as
-   a solid transparent black. Gradients are, naturally, only painted where
-   the stroking or filling effect requires that they be drawn.
+  <ol>
+   <li>
+    <p>Let <span>x(<var title="">&omega;</var>)&nbsp;=&nbsp;(<var
+     title="">x<sub>1</sub></var>-<var title="">x<sub>0</sub></var>)<var
+     title="">&omega;</var>&nbsp;+&nbsp;<var
+     title="">x<sub>0</sub></var></span></p>
 
+    <p>Let <span>y(<var title="">&omega;</var>)&nbsp;=&nbsp;(<var
+     title="">y<sub>1</sub></var>-<var title="">y<sub>0</sub></var>)<var
+     title="">&omega;</var>&nbsp;+&nbsp;<var
+     title="">y<sub>0</sub></var></span></p>
+
+    <p>Let <span>r(<var title="">&omega;</var>)&nbsp;=&nbsp;(<var
+     title="">r<sub>1</sub></var>-<var title="">r<sub>0</sub></var>)<var
+     title="">&omega;</var>&nbsp;+&nbsp;<var
+     title="">r<sub>0</sub></var></span></p>
+
+    <p>Let the color at <var title="">&omega;</var> be the color of the
+     gradient at offset 0.0 for all values of <var title="">&omega;</var>
+     less than 0.0, the color at offset 1.0 for all values of <var
+     title="">&omega;</var> greater than 1.0, and the color at the given
+     offset for values of <var title="">&omega;</var> in the range
+     <span>0.0&nbsp;&le;&nbsp;<var
+     title="">&omega;</var>&nbsp;&le;&nbsp;1.0</span>
+
+   <li>
+    <p>For all values of <var title="">&omega;</var> where <span>r(<var
+     title="">&omega;</var>)&nbsp;&gt;&nbsp;0</span>, starting with the value
+     of <var title="">&omega;</var> nearest to positive infinity and ending
+     with the value of <var title="">&omega;</var> nearest to negative
+     infinity, draw the circumference of the circle with radius of radius
+     <span>r(<var title="">&omega;</var>)</span> at position (<span>x(<var
+     title="">&omega;</var>)</span>, <span>y(<var
+     title="">&omega;</var>)</span>), with the color at <var
+     title="">&omega;</var>, but only painting on the parts of the canvas
+     that have not yet been painted on by earlier circles in this step for
+     this rendering of the gradient.
+  </ol>
+
+  <p>If <span><var title="">x<sub>0</sub></var>&nbsp;=&nbsp;<var
+   title="">x<sub>1</sub></var></span> and <span><var
+   title="">y<sub>0</sub></var>&nbsp;=&nbsp;<var
+   title="">y<sub>1</sub></var></span> and <span><var
+   title="">r<sub>0</sub></var>&nbsp;=&nbsp;<var
+   title="">r<sub>1</sub></var></span>, then the radial gradient must paint
+   nothing.</p>
+  <!-- XXX could make this paint the start colour,
+  or the end colour, or a circle of one in the other, or raise an
+  exception -->
+
+  <p class=note>This effectively creates a cone, touched by the two circles
+   defined in the creation of the gradient, with the part of the cone before
+   the start circle (0.0) using the color of the first offset, the part of
+   the cone after the end circle (1.0) using the color of the last offset,
+   and areas outside the cone untouched by the gradient (transparent black).
+   If the two circles overlap, the effect is as if the second (end) circle is
+   painted on top of the first circle. The end circle is always filled with
+   the color of the last stop.
+
+  <p>Gradients must only be painted where the relevant stroking or filling
+   effects requires that they be drawn.
+
   <p>Support for actually painting gradients is optional. Instead of painting
    the gradients, user agents may instead just paint the first stop's color.
-   However, <code
-   title=dom-context-2d-createLinearGradient>createLinearGradient()</code>
-   and <code
-   title=dom-context-2d-createRadialGradient>createRadialGradient()</code>
-   must always return objects when passed valid arguments.
+   However, <code title=dom-context-2d-createLinearGradient><a
+   href="#createlineargradient">createLinearGradient()</a></code> and <code
+   title=dom-context-2d-createRadialGradient><a
+   href="#createradialgradient">createRadialGradient()</a></code> must always
+   return objects when passed valid arguments.
 
   <p>Patterns are represented by objects implementing the opaque <dfn
    id=canvaspattern0><code>CanvasPattern</code></dfn> interface.
 
   <p>To create objects of this type, the <dfn id=createpatternimage
-   title=createPattern><code
-   title=dom-context-2d-createPattern>createPattern(image,
+   title=dom-context-2d-createPattern><code>createPattern(image,
    repetition)</code></dfn> method is used. The first argument gives the
    image to use as the pattern (either an <code><a
    href="#htmlimageelement">HTMLImageElement</a></code> or an <code><a
    href="#htmlcanvaselement">HTMLCanvasElement</a></code>). Modifying this
-   image after calling the <code
-   title=dom-context-2d-createPattern>createPattern()</code> method must not
+   image after calling the <code title=dom-context-2d-createPattern><a
+   href="#createpatternimage">createPattern()</a></code> method must not
    affect the pattern. The second argument must be a string with one of the
    following values: <code title="">repeat</code>, <code
    title="">repeat-x</code>, <code title="">repeat-y</code>, <code
@@ -16064,9 +16130,8 @@
    be drawn, and are affected by the current transformation matrix.
 
   <p>Support for patterns is optional. If the user agent doesn't support
-   patterns, then <code
-   title=dom-context-2d-createPattern>createPattern()</code> must return
-   null.</p>
+   patterns, then <code title=dom-context-2d-createPattern><a
+   href="#createpatternimage">createPattern()</a></code> must return null.</p>
   <!--
    Requests for v3 features:
     * apply transforms to patterns, so you don't have to create
@@ -39100,9 +39165,9 @@
    H&aring;kon Wium Lie, Henri Sivonen, Henrik Lied, Ignacio Javier, J. King,
    James Graham, James M Snell, James Perrett, Jan-Klaas Kollhof, Jasper
    Bryant-Greene, Jeff Cutsinger, Jens Bannmann, Joel Spolsky, John Harding,
-   Johnny Stenback, Jon Perlow, Jonathan Worent, Jorgen Horstink, Joshua
-   Randall, Jukka K. Korpela, Kai Hendry, <!-- Keryx Web, = Lars
-  Gunther -->
+   Johnny Stenback, Jon Perlow, Jonathan Worent, Jorgen Horstink, Josh
+   Levenberg, Joshua Randall, Jukka K. Korpela, Kai Hendry, <!-- Keryx
+  Web, = Lars Gunther -->
    Kornel Lesinski, &#x9ed2;&#x6fa4;&#x525b;&#x5fd7; (KUROSAWA Takeshi),
    Lachlan Hunt, Larry Page, Lars Gunther, Laurens Holst, Lenny Domnitser,
    L&eacute;onard Bouchet, Leons Petrazickis, Logan<!-- on moz irc -->,
@@ -39111,8 +39176,8 @@
    Matthew Raymond, Matthew Thomas, Mattias Waldau, Max Romantschuk, Michael
    'Ratt' Iannarelli, Michael A. Nachbaur, Michael Gratton, Michael Powers,
    Michel Fortin, Mihai &#x015E;ucan<!-- from ROBO Design -->, Mike
-   Dierken<!--
-  S. Mike Dierken -->, Mike Dixon, Mike Schinkel, Mike Shaver,
+   Dierken<!-- S. Mike
+  Dierken -->, Mike Dixon, Mike Schinkel, Mike Shaver,
    Mikko Rantalainen, Neil Deakin, Olav Junker Kj&aelig;r, Philip Taylor,
    Rajas Moonka, Rimantas Liubertas, Robert O'Callahan, Robert Sayre, Roman
    Ivanov, S. Mike Dierken, Sam Ruby, Sean Knapp, Shadow2531, Shaun Inman,

Modified: source
===================================================================
--- source	2007-05-11 23:20:38 UTC (rev 809)
+++ source	2007-05-15 02:36:51 UTC (rev 810)
@@ -13039,7 +13039,7 @@
 
   <p>When the UA is passed an empty string or a string specifying a
   context that it does not support, then it must return null. String
-  comparisons should be literal and case-sensitive.</p>
+  comparisons must be literal and case-sensitive.</p>
 
   <p class="note">A future version of this specification will probably
   define a <code>3d</code> context (probably based on the OpenGL ES
@@ -13136,7 +13136,7 @@
 -->
   // compositing
            attribute float <span title="dom-context-2d-globalAlpha">globalAlpha</span>; // (default 1.0)
-           attribute DOMString <span title="dom-context-2d-globalCompositeOperation">globalCompositeOperation</span>; // (default over)
+           attribute DOMString <span title="dom-context-2d-globalCompositeOperation">globalCompositeOperation</span>; // (default source-over)
 
   // colors and styles
            attribute DOMObject <span title="dom-context-2d-strokeStyle">strokeStyle</span>; // (default black)
@@ -13156,7 +13156,7 @@
            attribute float <span title="dom-context-2d-shadowOffsetX">shadowOffsetX</span>; // (default 0)
            attribute float <span title="dom-context-2d-shadowOffsetY">shadowOffsetY</span>; // (default 0)
            attribute float <span title="dom-context-2d-shadowBlur">shadowBlur</span>; // (default 0)
-           attribute DOMString <span title="dom-context-2d-shadowColor">shadowColor</span>; // (default black)
+           attribute DOMString <span title="dom-context-2d-shadowColor">shadowColor</span>; // (default transparent black)
 
   // rects
   void <span title="dom-context-2d-clearRect">clearRect</span>(in float x, in float y, in float w, in float h);
@@ -13247,14 +13247,14 @@
   the canvas</span><!-- XXX xref -->, not the context.</p>
 
   <p>The <dfn title="dom-context-2d-save"><code>save()</code></dfn>
-  method pushes a copy of the current drawing state onto the drawing
-  state stack.</p>
+  method must push a copy of the current drawing state onto the
+  drawing state stack.</p>
 
   <p>The <dfn
   title="dom-context-2d-restore"><code>restore()</code></dfn> method
-  pops the top entry in the drawing state stack, and resets the
+  must pop the top entry in the drawing state stack, and reset the
   drawing state it describes. If there is no saved state, the method
-  does nothing.</p>
+  must do nothing.</p>
 
 
   <h6><dfn>Transformations</dfn></h6>
@@ -13473,8 +13473,8 @@
 
   <p>Both attributes can be either strings,
   <code>CanvasGradient</code>s, or <code>CanvasPattern</code>s. On
-  setting, strings should be parsed as CSS &lt;color&gt; values and
-  the color assigned, and <code>CanvasGradient</code> and
+  setting, strings must be parsed as CSS &lt;color&gt; values and the
+  color assigned, and <code>CanvasGradient</code> and
   <code>CanvasPattern</code> objects must be assigned themselves. <a
   href="#refsCSS3COLOR">[CSS3COLOR]</a> If the value is a string but
   is not a valid color, or is neither a string, a
@@ -13503,10 +13503,10 @@
   U+0029 RIGHT PARENTHESIS.</p>
 
   <p>Otherwise, if it is not a color but a <code>CanvasGradient</code>
-  or <code>CanvasPattern</code>, then an object supporting those
-  interfaces must be returned. Such objects are opaque and therefore
-  only useful for assigning to other attributes or for comparison to
-  other gradients or patterns.</p>
+  or <code>CanvasPattern</code>, then the respective object must be
+  returned. (Such objects are opaque and therefore only useful for
+  assigning to other attributes or for comparison to other gradients
+  or patterns.)</p>
 
   <p>When the context is created, the <code
   title="dom-context-2d-strokeStyle">strokeStyle</code> and <code
@@ -13517,12 +13517,16 @@
   gradients, both represented by objects implementing the opaque
   <dfn><code>CanvasGradient</code></dfn> interface.</p>
 
-  <p>Once a gradient has been created (see below), stops must be
-  placed along it to define how the colors are distributed along the
-  gradient. Between each such stop, the colors and the alpha component
-  must be interpolated over the RGBA space to find the color to use at
-  that offset. Immediately before the 0 offset and immediately after
-  the 1 offset, transparent black stops are be assumed.</p>
+  <p>Once a gradient has been created (see below), stops are placed
+  along it to define how the colors are distributed along the
+  gradient. The color of the gradient at each stop is the color
+  specified for that stop. Between each such stop, the colors and the
+  alpha component must be linearly interpolated over the RGBA space
+  without premultiplying the alpha value to find the color to use at
+  that offset. Before the first stop, the color must be the color of
+  the first stop. After the last stop, the color must be the color of
+  the last stop. When there are no stops, the gradient is transparent
+  black.</p>
 
   <p>The <dfn
   title="dom-canvasgradient-addColorStop"><code>addColorStop(<var
@@ -13532,11 +13536,18 @@
   greater than 1 then an <code>INDEX_SIZE_ERR</code> exception must be
   raised. If the <var title="">color</var> cannot be parsed as a CSS
   color, then a <code>SYNTAX_ERR</code> exception must be raised.
-  Otherwise, the gradient must be updated with the new stop
-  information.</p>
+  Otherwise, the gradient must have a new stop placed, at offset <var
+  title="">offset</var> relative to the whole gradient, and with the
+  color obtained by parsing <var title="">color</var> as a CSS
+  &lt;color&gt; value. If multiple stops are placed at the same place
+  on a gradient, they must be placed in the order added, with the
+  first one closest to the start of the gradient, and each subsequent
+  one infinitesimally further along towards the end point (in effect
+  causing all but the first and last stop added at each point to be
+  ignored).</p>
 
-  <p>The <dfn title="createLinearGradient"><code
-  title="dom-context-2d-createLinearGradient">createLinearGradient(<var
+  <p>The <dfn
+  title="dom-context-2d-createLinearGradient"><code>createLinearGradient(<var
   title="">x0</var>, <var title="">y0</var>, <var title="">x1</var>,
   <var title="">y1</var>)</code></dfn> method takes four arguments,
   representing the start point (<var title="">x0</var>, <var
@@ -13545,16 +13556,23 @@
   must return a linear <code>CanvasGradient</code> initialised with
   that line.</p>
 
-  <p>Linear gradients must be rendered such that at the starting point
-  on the canvas the color at offset 0 is used, that at the ending
-  point the color at offset 1 is used, that all points on a line
-  perpendicular to the line between the start and end points have the
-  color at the point where those two lines cross (interpolation
-  happening as described above), and that any points beyond the start
-  or end points are a transparent black.</p>
+  <p>Linear gradients must be rendered such that at and before the
+  starting point on the canvas the color at offset 0 is used, that at
+  and after the ending point the color at offset 1 is used, and that
+  all points on a line perpendicular to the line that crosses the
+  start and end points have the color at the point where those two
+  lines cross (with the colors coming from the interpolation described
+  above).</p>
 
-  <p>The <dfn title="createRadialGradient"><code
-  title="dom-context-2d-createRadialGradient">createRadialGradient(<var
+  <p>If <span><var title="">x<sub>0</sub></var>&nbsp;=&nbsp;<var
+  title="">x<sub>1</sub></var></span> and <span><var
+  title="">y<sub>0</sub></var>&nbsp;=&nbsp;<var
+  title="">y<sub>1</sub></var></span>, then the linear gradient must
+  paint nothing.</p> <!-- XXX could make this paint the start colour,
+  or the end colour, or raise an exception -->
+
+  <p>The <dfn
+  title="dom-context-2d-createRadialGradient"><code>createRadialGradient(<var
   title="">x0</var>, <var title="">y0</var>, <var title="">r0</var>,
   <var title="">x1</var>, <var title="">y1</var>, <var
   title="">r1</var>)</code></dfn> method takes six arguments, the
@@ -13564,26 +13582,82 @@
   with origin (<var title="">x1</var>, <var title="">y1</var>) and
   radius <var title="">r1</var>. The values are in coordinate space
   units. The method must return a radial <code>CanvasGradient</code>
-  initialised with those two circles.</p>
+  initialised with those two circles. If either of <var
+  title="">r0</var> or <var title="">r1</var> are negative, an
+  <code>INDEX_SIZE_ERR</code> exception must be raised.</p>
 
-  <p>Radial gradients must be rendered such that a cone is created
-  from the two circles, so that at the circumference of the starting
-  circle the color at offset 0 is used, that at the circumference
-  around the ending circle the color at offset 1 is used, that the
-  circumference of a circle drawn a certain fraction of the way along
-  the line between the two origins with a radius the same fraction of
-  the way between the two radii has the color at that offset
-  (interpolation happening as described above), that the end circle
-  appear to be above the start circle when the end circle is not
-  completely enclosed by the start circle, that the end circle be
-  filled by the color at offset 1, and that any points not described
-  by the gradient are a transparent black.</p>
+  <p>Radial gradients must be rendered by following these steps:</p>
 
-  <p>If a gradient has no stops defined, then the gradient must be
-  treated as a solid transparent black. Gradients are, naturally, only
-  painted where the stroking or filling effect requires that they be
-  drawn.</p>
+  <ol>
 
+   <li>
+
+    <p>Let <span>x(<var title="">&omega;</var>)&nbsp;=&nbsp;(<var
+    title="">x<sub>1</sub></var>-<var
+    title="">x<sub>0</sub></var>)<var
+    title="">&omega;</var>&nbsp;+&nbsp;<var
+    title="">x<sub>0</sub></var></span></p>
+
+    <p>Let <span>y(<var title="">&omega;</var>)&nbsp;=&nbsp;(<var
+    title="">y<sub>1</sub></var>-<var
+    title="">y<sub>0</sub></var>)<var
+    title="">&omega;</var>&nbsp;+&nbsp;<var
+    title="">y<sub>0</sub></var></span></p>
+
+    <p>Let <span>r(<var title="">&omega;</var>)&nbsp;=&nbsp;(<var
+    title="">r<sub>1</sub></var>-<var
+    title="">r<sub>0</sub></var>)<var
+    title="">&omega;</var>&nbsp;+&nbsp;<var
+    title="">r<sub>0</sub></var></span></p>
+
+    <p>Let the color at <var title="">&omega;</var> be the color of
+    the gradient at offset 0.0 for all values of <var
+    title="">&omega;</var> less than 0.0, the color at offset 1.0 for
+    all values of <var title="">&omega;</var> greater than 1.0, and
+    the color at the given offset for values of <var
+    title="">&omega;</var> in the range <span>0.0&nbsp;&le;&nbsp;<var
+    title="">&omega;</var>&nbsp;&le;&nbsp;1.0</span>
+
+   </li>
+
+   <li><p>For all values of <var title="">&omega;</var> where
+   <span>r(<var title="">&omega;</var>)&nbsp;&gt;&nbsp;0</span>,
+   starting with the value of <var title="">&omega;</var> nearest to
+   positive infinity and ending with the value of <var
+   title="">&omega;</var> nearest to negative infinity, draw the
+   circumference of the circle with radius of radius <span>r(<var
+   title="">&omega;</var>)</span> at position (<span>x(<var
+   title="">&omega;</var>)</span>, <span>y(<var
+   title="">&omega;</var>)</span>), with the color at <var
+   title="">&omega;</var>, but only painting on the parts of the
+   canvas that have not yet been painted on by earlier circles in this
+   step for this rendering of the gradient.</p></li>
+
+  </ol>
+
+  <p>If <span><var title="">x<sub>0</sub></var>&nbsp;=&nbsp;<var
+  title="">x<sub>1</sub></var></span> and <span><var
+  title="">y<sub>0</sub></var>&nbsp;=&nbsp;<var
+  title="">y<sub>1</sub></var></span> and <span><var
+  title="">r<sub>0</sub></var>&nbsp;=&nbsp;<var
+  title="">r<sub>1</sub></var></span>, then the radial gradient must
+  paint nothing.</p> <!-- XXX could make this paint the start colour,
+  or the end colour, or a circle of one in the other, or raise an
+  exception -->
+
+  <p class="note">This effectively creates a cone, touched by the two
+  circles defined in the creation of the gradient, with the part of
+  the cone before the start circle (0.0) using the color of the first
+  offset, the part of the cone after the end circle (1.0) using the
+  color of the last offset, and areas outside the cone untouched by
+  the gradient (transparent black). If the two circles overlap, the
+  effect is as if the second (end) circle is painted on top of the
+  first circle. The end circle is always filled with the color of the
+  last stop.</p>
+
+  <p>Gradients must only be painted where the relevant stroking or
+  filling effects requires that they be drawn.</p>
+
   <p>Support for actually painting gradients is optional. Instead of
   painting the gradients, user agents may instead just paint the first
   stop's color. However, <code
@@ -13596,8 +13670,7 @@
   <dfn><code>CanvasPattern</code></dfn> interface.</p>
 
   <p>To create objects of this type, the <dfn
-  title="createPattern"><code
-  title="dom-context-2d-createPattern">createPattern(image,
+  title="dom-context-2d-createPattern"><code>createPattern(image,
   repetition)</code></dfn> method is used. The first argument gives
   the image to use as the pattern (either an
   <code>HTMLImageElement</code> or an <code>HTMLCanvasElement</code>).
@@ -35562,18 +35635,19 @@
   Sivonen, Henrik Lied, Ignacio Javier, J. King, James Graham, James M
   Snell, James Perrett, Jan-Klaas Kollhof, Jasper Bryant-Greene, Jeff
   Cutsinger, Jens Bannmann, Joel Spolsky, John Harding, Johnny
-  Stenback, Jon Perlow, Jonathan Worent, Jorgen Horstink, Joshua
-  Randall, Jukka K. Korpela, Kai Hendry, <!-- Keryx Web, = Lars
-  Gunther --> Kornel Lesinski, &#x9ed2;&#x6fa4;&#x525b;&#x5fd7;
-  (KUROSAWA Takeshi), Lachlan Hunt, Larry Page, Lars Gunther, Laurens
-  Holst, Lenny Domnitser, L&eacute;onard Bouchet, Leons Petrazickis,
-  Logan<!-- on moz irc -->, Maciej Stachowiak, Malcolm Rowe, Mark
-  Nottingham, Mark Schenk, Martijn Wargers, Martin Atkins, Martin
-  Honnen, Mathieu Henri, Matthew Mastracci, Matthew Raymond, Matthew
-  Thomas, Mattias Waldau, Max Romantschuk, Michael 'Ratt' Iannarelli,
-  Michael A. Nachbaur, Michael Gratton, Michael Powers, Michel Fortin,
-  Mihai &#x015E;ucan<!-- from ROBO Design -->, Mike Dierken<!--
-  S. Mike Dierken -->, Mike Dixon, Mike Schinkel, Mike Shaver, Mikko
+  Stenback, Jon Perlow, Jonathan Worent, Jorgen Horstink, Josh
+  Levenberg, Joshua Randall, Jukka K. Korpela, Kai Hendry, <!-- Keryx
+  Web, = Lars Gunther --> Kornel Lesinski,
+  &#x9ed2;&#x6fa4;&#x525b;&#x5fd7; (KUROSAWA Takeshi), Lachlan Hunt,
+  Larry Page, Lars Gunther, Laurens Holst, Lenny Domnitser,
+  L&eacute;onard Bouchet, Leons Petrazickis, Logan<!-- on moz irc -->,
+  Maciej Stachowiak, Malcolm Rowe, Mark Nottingham, Mark Schenk,
+  Martijn Wargers, Martin Atkins, Martin Honnen, Mathieu Henri,
+  Matthew Mastracci, Matthew Raymond, Matthew Thomas, Mattias Waldau,
+  Max Romantschuk, Michael 'Ratt' Iannarelli, Michael A. Nachbaur,
+  Michael Gratton, Michael Powers, Michel Fortin, Mihai
+  &#x015E;ucan<!-- from ROBO Design -->, Mike Dierken<!-- S. Mike
+  Dierken -->, Mike Dixon, Mike Schinkel, Mike Shaver, Mikko
   Rantalainen, Neil Deakin, Olav Junker Kj&aelig;r, Philip Taylor,
   Rajas Moonka, Rimantas Liubertas, Robert O'Callahan, Robert Sayre,
   Roman Ivanov, S. Mike Dierken, Sam Ruby, Sean Knapp, Shadow2531,




More information about the Commit-Watchers mailing list