Skip to content

Commit c79c23f

Browse files
committed
Define additive behavior for transform-list on 'animate'.
1 parent f745eef commit c79c23f

3 files changed

Lines changed: 203 additions & 98 deletions

File tree

css3-transforms/ChangeLog

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
2012-05-31 dschulze@adobe.com
2+
Define additive behavior for transform-list on 'animate'.
3+
Disallow 'paced' animations for now.
4+
Corrected some style errors.
5+
16
2012-05-29 dschulze@adobe.com
27
Clarify that objects with non-invertible CTM don't get displayed.
38

css3-transforms/Overview.html

Lines changed: 112 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,14 @@
3939

4040
<h1>CSS Transforms</h1>
4141

42-
<h2 class="no-num no-toc" id=longstatus-date>Editor's Draft 29 May 2012</h2>
42+
<h2 class="no-num no-toc" id=longstatus-date>Editor's Draft 1 June 2012</h2>
4343

4444
<dl>
4545
<dt>This version:
4646

4747
<dd> <a
48-
href="http://www.w3.org/TR/2012/ED-css3-transforms-20120529/">http://dev.w3.org/csswg/css3-transforms/</a>
49-
<!--http://www.w3.org/TR/2012/WD-css3-transforms-20120529/-->
48+
href="http://www.w3.org/TR/2012/ED-css3-transforms-20120601/">http://dev.w3.org/csswg/css3-transforms/</a>
49+
<!--http://www.w3.org/TR/2012/WD-css3-transforms-20120601/-->
5050

5151
<dt>Latest version:
5252

@@ -282,8 +282,9 @@ <h2 class="no-num no-toc" id=contents>Table of contents</h2>
282282
<li><a href="#svg-animation"><span class=secno>14. </span> SVG Animation
283283
</a>
284284
<ul class=toc>
285-
<li><a href="#svg-animate-element"><span class=secno>14.1. </span>
286-
Elements, attributes and properties that can be animated </a>
285+
<li><a href="#svg-animate-element"><span class=secno>14.1. </span> The
286+
<code class=property>animate</code>’ and ‘<code
287+
class=property>set</code>’ element </a>
287288

288289
<li><a href="#neutral-element"><span class=secno>14.2. </span> Neutral
289290
element for addition </a>
@@ -1739,12 +1740,12 @@ <h2 id=backface-visibility-property><span class=secno>12. </span> The ‘<a
17391740
follows:
17401741

17411742
<ol>
1742-
<li> For an element in a <a href="#d-rendering-context">3D rendering
1743-
context</a>, compute its <a
1744-
href="#TermAccumulated3DTransformationMatrix"> accumulated 3D
1745-
transformation matrix</a>. For an element not in a <a
1743+
<li> For an element in a <a class=term href="#d-rendering-context">3D
1744+
rendering context</a>, compute its <a class=term
1745+
href="#accumulated-3d-transformation-matrix"> accumulated 3D
1746+
transformation matrix</a>. For an element not in a <a class=term
17461747
href="#d-rendering-context">3D rendering context</a>, compute its <a
1747-
href="#TermTransformationMatrix">transformation matrix</a>.
1748+
class=term href="#transformation-matrix">transformation matrix</a>.
17481749

17491750
<li> If the component of the matrix in row 3, column 3 is negative, then
17501751
the element should be hidden. Otherwise it is visible.
@@ -1954,11 +1955,10 @@ <h3 id=svg-transform-functions><span class=secno>13.4. </span> SVG
19541955
class=property>transform-origin</code></a>’ property. If the optional
19551956
translation values are specified, the transform origin is translated by
19561957
that amount (using the current transformation matrix) for the duration of
1957-
the rotate operation. For example ‘<code class=css><code
1958-
class=css>rotate(90deg, 100px, 100px)</code></code>’ would cause
1959-
elements to appear rotated one-quarter of a turn in the clockwise
1960-
direction after a translation of 100 pixel in the vertical and horizontal
1961-
direction.
1958+
the rotate operation. For example ‘<code class=css>rotate(90deg, 100px,
1959+
100px)</code>’ would cause elements to appear rotated one-quarter of a
1960+
turn in the clockwise direction after a translation of 100 pixel in the
1961+
vertical and horizontal direction.
19621962
</dl>
19631963

19641964
<p> User agents are just required to support the two optional arguments for
@@ -2004,8 +2004,8 @@ <h3 id=svg-three-dimensional-functions><span class=secno>13.5. </span>SVG
20042004

20052005
<p> If the ‘<code class=property>vector-effect</code>’ property is set
20062006
to ‘<code class=css>non-scaling-stroke</code>’ and an object is within
2007-
a <a href="#d-rendering-context">3D rendering context</a> the property has
2008-
no affect on stroking the object.
2007+
a <a class=term href="#d-rendering-context">3D rendering context</a> the
2008+
property has no affect on stroking the object.
20092009

20102010
<h3 id=svg-user-coordinate-space><span class=secno>13.6. </span> User
20112011
coordinate space</h3>
@@ -2025,10 +2025,12 @@ <h3 id=svg-user-coordinate-space><span class=secno>13.6. </span> User
20252025
<code class=css>objectBoundingBox</code>’ the user coordinate system
20262026
for the ‘<a href="#effects"><code class=property>transform</code></a>
20272027
property and the ‘<code class=property>patternTransform</code>
2028-
attribute is established using the bounding box of the element to which
2029-
the pattern is applied (see <a
2028+
attribute is established using the <a class=term
2029+
href="#bounding-box">bounding box</a> of the element to which the pattern
2030+
is applied (see <a
20302031
href="http://www.w3.org/TR/SVG/coords.html#ObjectBoundingBoxUnits">Object
2031-
bounding box units</a>).
2032+
bounding box units</a> <a href="#SVG11"
2033+
rel=biblioentry>[SVG11]<!--{{SVG11}}--></a>).
20322034

20332035
<p> If the ‘<code class=property>gradientUnit</code>’ attribute of the
20342036
SVG ‘<code class=property>linearGradient</code>’ element and the
@@ -2046,10 +2048,12 @@ <h3 id=svg-user-coordinate-space><span class=secno>13.6. </span> User
20462048
<code class=css>objectBoundingBox</code>’ the user coordinate system
20472049
for the ‘<a href="#effects"><code class=property>transform</code></a>
20482050
property and the ‘<code class=property>patternTransform</code>
2049-
attribute is established using the bounding box of the element to which
2050-
the gradient is applied (see <a
2051+
attribute is established using the <a class=term
2052+
href="#bounding-box">bounding box</a> of the element to which the gradient
2053+
is applied (see <a
20512054
href="http://www.w3.org/TR/SVG/coords.html#ObjectBoundingBoxUnits">Object
2052-
bounding box units</a>).
2055+
bounding box units</a> <a href="#SVG11"
2056+
rel=biblioentry>[SVG11]<!--{{SVG11}}--></a>).
20532057

20542058
<p> If the ‘<code class=property>maskUnit</code>’ attribute of the SVG
20552059
<code class=property>mask</code>’ element is ‘<code
@@ -2063,10 +2067,12 @@ <h3 id=svg-user-coordinate-space><span class=secno>13.6. </span> User
20632067
If the ‘<code class=property>maskUnit</code>’ attribute is set to
20642068
<code class=css>objectBoundingBox</code>’ the user coordinate system
20652069
for the ‘<a href="#effects"><code class=property>transform</code></a>
2066-
presentation attribute is established using the bounding box of the
2067-
element to which the mask is applied (see <a
2070+
presentation attribute is established using the <a class=term
2071+
href="#bounding-box">bounding box</a> of the element to which the mask is
2072+
applied (see <a
20682073
href="http://www.w3.org/TR/SVG/coords.html#ObjectBoundingBoxUnits">Object
2069-
bounding box units</a>).
2074+
bounding box units</a> <a href="#SVG11"
2075+
rel=biblioentry>[SVG11]<!--{{SVG11}}--></a>).
20702076

20712077
<p> For the ‘<code class=property>clipPath</code>’ element the ‘<a
20722078
href="#effects"><code class=property>transform</code></a>’ presentation
@@ -2076,13 +2082,13 @@ <h3 id=svg-user-coordinate-space><span class=secno>13.6. </span> User
20762082
the ‘<code class=property>clipPath</code>’ element via the ‘<code
20772083
class=property>clip-path</code>’ property).
20782084

2079-
<p> For all other <a href="#TermTransformableElement">transformable
2085+
<p> For all other <a class=term href="#transformable-element">transformable
20802086
elements</a> the ‘<a href="#effects"><code
20812087
class=property>transform</code></a>’ presentation attribute represents
20822088
values in the current user coordinate system of the parent. All percentage
20832089
values of the ‘<a href="#effects"><code
20842090
class=property>transform</code></a>’ presentation attribute are relative
2085-
to the element's <a href=TermBoundingBox>bounding box</a>.
2091+
to the element's <a class=term href="#bounding-box">bounding box</a>.
20862092

20872093
<div class=example>
20882094
<p> The ‘<a href="#transform-origin"><code
@@ -2110,9 +2116,10 @@ <h3 id=svg-user-coordinate-space><span class=secno>13.6. </span> User
21102116
&lt;/svg&gt;</pre>
21112117

21122118
<p> An SVG ‘<code class=property>pattern</code>’ element doesn't have
2113-
a bounding box. The bounding box of the referencing ‘<code
2114-
class=property>rect</code>’ element is used instead to solve the
2115-
relative values of the ‘<a href="#transform-origin"><code
2119+
a bounding box. The <a class=term href="#bounding-box">bounding box</a>
2120+
of the referencing ‘<code class=property>rect</code>’ element is used
2121+
instead to solve the relative values of the ‘<a
2122+
href="#transform-origin"><code
21162123
class=property>transform-origin</code></a>’ property. Therefore the
21172124
point of origin will get translated by 50 pixels temporarily to rotate
21182125
the user space of the ‘<code class=property>pattern</code>’ elements
@@ -2161,11 +2168,10 @@ <h3 id=transform-attribute-dom><span class=secno>13.7. </span> SVG DOM
21612168
of ‘<code class=css><a
21622169
href="http://www.w3.org/TR/SVG/coords.html#InterfaceSVGTransform">SVGTransform</a></code>
21632170
must return ‘<code class=css><a
2164-
href="http://www.w3.org/TR/SVG/coords.html#__svg__SVGTransform__SVG_TRANSFORM_UNKNOWN">
2165-
SVG_TRANSFORM_UNKNOWN</a></code>’ for <a
2166-
href="#transform-functions">Transform Functions</a> or unit types that are
2167-
not supported by this interface. If a two-dimensional transform function
2168-
is not supported, the attribute ‘<code class=css><a
2171+
href="http://www.w3.org/TR/SVG/coords.html#__svg__SVGTransform__SVG_TRANSFORM_UNKNOWN">SVG_TRANSFORM_UNKNOWN</a></code>
2172+
for <a href="#transform-functions">Transform Functions</a> or unit types
2173+
that are not supported by this interface. If a two-dimensional transform
2174+
function is not supported, the attribute ‘<code class=css><a
21692175
href="http://www.w3.org/TR/SVG/coords.html#__svg__SVGTransform__matrix">matrix</a></code>
21702176
must return a 3x2 ‘<code class=css><a
21712177
href="http://www.w3.org/TR/SVG/coords.html#InterfaceSVGMatrix">SVGMatrix</a></code>
@@ -2175,10 +2181,44 @@ <h3 id=transform-attribute-dom><span class=secno>13.7. </span> SVG DOM
21752181

21762182
<h2 id=svg-animation><span class=secno>14. </span> SVG Animation</h2>
21772183

2178-
<h3 id=svg-animate-element><span class=secno>14.1. </span> Elements,
2179-
attributes and properties that can be animated</h3>
2180-
2181-
<p class=note>This section extends <a
2184+
<h3 id=svg-animate-element><span class=secno>14.1. </span> The ‘<code
2185+
class=property>animate</code>’ and ‘<code class=property>set</code>
2186+
element</h3>
2187+
2188+
<p> With this specification, the ‘<code class=property>animate</code>
2189+
element and the ‘<code class=property>set</code>’ element can animate
2190+
the data type <var>&lt;transform-list&gt;</var>.
2191+
2192+
<p> The animation effect is post-multiplied to the underlying value for
2193+
additive ‘<code class=property>animate</code>’ animations (see below)
2194+
instead of added to the underlying value, due to the specific behavior of
2195+
<var>&lt;transform-list&gt;</var> animations.
2196+
2197+
<p> <var>From-to</var>, <var>from-by</var> and <var>by</var> animations are
2198+
defined in SMIL to be equivalent to a corresponding <var>values</var>
2199+
animation. However, <var>to</var> animations are a mixture of additive and
2200+
non-additive behavior <a href="#SMIL3"
2201+
rel=biblioentry>[SMIL3]<!--{{SMIL3}}--></a>.
2202+
2203+
<p> <var>To</var> animations on ‘<code class=property>animate</code>
2204+
provide specific functionality to get a smooth change from the underlying
2205+
value to the ‘<code class=property>to</code>’ attribute value, which
2206+
conflicts mathematically with the requirement for additive transform
2207+
animations to be post-multiplied. As a consequence, the behavior of
2208+
<var>to</var> animations for ‘<code class=property>animate</code>’ is
2209+
undefined. Authors are suggested to use <var>from-to</var>,
2210+
<var>from-by</var>, <var>by</var> or <var>values</var> animations to
2211+
achieve any desired transform animation.
2212+
2213+
<p> The value ‘<code class=property>paced</code>’ is undefined for the
2214+
attribute ‘<code class=property>calcMode</code>’ on ‘<code
2215+
class=property>animate</code>’ for animations of the data type
2216+
<var>&lt;transform-list&gt;</var>. If specified, UAs may choose the value
2217+
<code class=property>linear</code>’ instead. Future versions of this
2218+
specification may define how paced animations can be performed on
2219+
<var>&lt;transform-list&gt;</var>.
2220+
2221+
<p class=note>The following paragraphs extend <a
21822222
href="http://www.w3.org/TR/SVG/animate.html#complexDistances">Elements,
21832223
attributes and properties that can be animated</a> <a href="#SVG11"
21842224
rel=biblioentry>[SVG11]<!--{{SVG11}}--></a>.
@@ -2269,33 +2309,37 @@ <h3 id=svg-animate-element><span class=secno>14.1. </span> Elements,
22692309
<h3 id=neutral-element><span class=secno>14.2. </span> Neutral element for
22702310
addition</h3>
22712311

2272-
<p> Some animations require a neutral element for addition. This neutral
2273-
element for transform functions must be equivalent to the null matrix.
2274-
Examples for transform functions and their values that fulfill this
2275-
requirement are ‘<code class=css>translate(0)</code>’, ‘<code
2276-
class=css>translate3d(0, 0, 0)</code>’, ‘<code
2277-
class=css>translateX(0)</code>’, ‘<code
2312+
<p> Some animations require a neutral element for addition. For transform
2313+
functions this is a scalar or a list of scalars of 0. Examples of neutral
2314+
elements for transform functions are ‘<code
2315+
class=css>translate(0)</code>’, ‘<code class=css>translate3d(0, 0,
2316+
0)</code>’, ‘<code class=css>translateX(0)</code>’, ‘<code
22782317
class=css>translateY(0)</code>’, ‘<code
22792318
class=css>translateZ(0)</code>’, ‘<code class=css>scale(0)</code>’,
22802319
<code class=css>scaleX(0)</code>’, ‘<code
22812320
class=css>scaleY(0)</code>’, ‘<code class=css>scaleZ(0)</code>’,
2282-
<code class=css>rotate(0)</code>’, <!--''rotate3d(1, 1, 1, 0)'',-->
2283-
<code class=css>rotateX(0)</code>’, ‘<code
2284-
class=css>rotateY(0)</code>’, ‘<code class=css>rotateZ(0)</code>’,
2285-
<code class=css>skewX(0)</code>’, ‘<code
2286-
class=css>skewY(0)</code>’, ‘<code class=css>matrix(0, 0, 0, 0, 0,
2287-
0)</code>’ and ‘<code class=css>matrix3d(0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2288-
0, 0, 0, 0, 0, 0)</code>’. A special case is perspective: ‘<code
2289-
class=css>perspective(infinity)</code>’. The value of m<sub>34</sub>
2290-
becomes infinitesimal small and the transform function is therefore
2291-
assumed to be equal to the null matrix.
2321+
<code class=css>rotate(0)</code>’, ‘<code
2322+
class=css>rotate3d(v<sub>x</sub>, v<sub>y</sub>, v<sub>z</sub>,
2323+
0)</code>’ (where <var>v</var> is a context dependent vector), ‘<code
2324+
class=css>rotateX(0)</code>’, ‘<code class=css>rotateY(0)</code>’,
2325+
<code class=css>rotateZ(0)</code>’, ‘<code
2326+
class=css>skewX(0)</code>’, ‘<code class=css>skewY(0)</code>’,
2327+
<code class=css>matrix(0, 0, 0, 0, 0, 0)</code>’, ‘<code
2328+
class=css>matrix3d(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
2329+
0)</code>’ and ‘<code class=css>perspective(0)</code>’.
2330+
2331+
<p class=note> Some animations from or to a neutral element for addition
2332+
might need matrix interpolation. Since matrix interpolation is just
2333+
defined for invertible transform functions, any animation must fallback to
2334+
discrete animation as specified in <a
2335+
href="#matrix-interpolation">Interpolation of Matrices</a>.
22922336

22932337
<div class=example>
22942338
<p> A <var>by</var> animation with a by value v<sub>b</sub> is equivalent
22952339
to the same animation with a values list with 2 values, the neutral
22962340
element for addition for the domain of the target attribute (denoted 0)
2297-
and v<sub>b</sub>, and ‘<code class=css>additive="sum"</code>’.
2298-
[[SMILANIM]]</p>
2341+
and v<sub>b</sub>, and ‘<code class=css>additive="sum"</code>’. <a
2342+
href="#SMIL3" rel=biblioentry>[SMIL3]<!--{{SMIL3}}--></a></p>
22992343

23002344
<pre>
23012345
&lt;rect width="100" height="100"&gt;
@@ -3271,6 +3315,16 @@ <h3 class=no-num id=other-references>Other references</h3>
32713315
<dt style="display: none"><!-- keeps the doc valid if the DL is empty -->
32723316
<!---->
32733317

3318+
<dt id=SMIL3>[SMIL3]
3319+
3320+
<dd>Dick Bulterman. <a
3321+
href="http://www.w3.org/TR/2008/REC-SMIL3-20081201/"><cite>Synchronized
3322+
Multimedia Integration Language (SMIL 3.0).</cite></a> 1 December 2008.
3323+
W3C Recommendation. URL: <a
3324+
href="http://www.w3.org/TR/2008/REC-SMIL3-20081201/">http://www.w3.org/TR/2008/REC-SMIL3-20081201/</a>
3325+
</dd>
3326+
<!---->
3327+
32743328
<dt id=SVG11>[SVG11]
32753329

32763330
<dd>Erik Dahlström; et al. <a

0 commit comments

Comments
 (0)