Skip to content

Commit b2000b4

Browse files
committed
Transform lists get no longer premultiplied for certain transform functions.
1 parent 28973a9 commit b2000b4

3 files changed

Lines changed: 64 additions & 115 deletions

File tree

css3-transforms/ChangeLog

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,11 @@
1+
2012-07-26 dschulze@adobe.com
2+
Transform lists get no longer premultiplied if some functions in the list
3+
are of type 'matrix', 'rotate3d', 'rotateX', 'rotateY', 'rotateZ', 'matrix3d'
4+
and ‘perspective’.
5+
Instead 'rotateX', 'rotateY' and 'rotateZ' get interpolated numericaly and
6+
'matrix', 'rotate3d' and ‘perspective’ get converted to matrix4x4 and
7+
interpolated as matrices.
8+
19
2012-07-20 dschulze@adobe.com
210
Changed behavior for transforms on patterns, gradients and other resources.
311
The user space for transformations does not depend on the ‘patternUnit’,

css3-transforms/Overview.html

Lines changed: 34 additions & 59 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 20 July 2012</h2>
42+
<h2 class="no-num no-toc" id=longstatus-date>Editor's Draft 27 July 2012</h2>
4343

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

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

5151
<dt>Latest version:
5252

@@ -1987,8 +1987,8 @@ <h3 id=svg-transform-functions><span class=secno>13.4. </span> SVG
19871987
that amount (using the current transformation matrix) for the duration of
19881988
the rotate operation. For example ‘<code class=css>rotate(90deg, 100px,
19891989
100px)</code>’ would cause elements to appear rotated one-quarter of a
1990-
turn in the clockwise direction after a translation of 100 pixel in the
1991-
vertical and horizontal direction.
1990+
turn in the clockwise direction after a translation of the
1991+
transform-origin of 100 pixel in the horizontal and vertical directions.
19921992
</dl>
19931993

19941994
<p> User agents are just required to support the two optional arguments for
@@ -2691,7 +2691,7 @@ <h2 id=transform-primitives><span class=secno>18. </span> Transform
26912691
two-dimensional and three-dimensional transform functions are listed
26922692
below.
26932693

2694-
<p> Two-dimensional primitives and derived transform functions are:
2694+
<p> Two-dimensional primitives with derived transform functions are:
26952695

26962696
<dl>
26972697
<dt id=translate-primitive> <code
@@ -2709,28 +2709,15 @@ <h2 id=transform-primitives><span class=secno>18. </span> Transform
27092709
href="#svg-transform-functions">rotate with three arguments</a> is
27102710
supported.
27112711

2712-
<dt id=translate-primitive> <code class=css>rotate(&lt;angle&gt;)</code>
2713-
2714-
<dd> if <a href="#svg-transform-functions">rotate with three arguments</a>
2715-
is not supported.
2716-
27172712
<dt id=scale-primitive> <code class=css>scale(&lt;number&gt;,
27182713
&lt;number&gt;)</code>
27192714

27202715
<dd> for <code class=css>scaleX(&lt;number&gt;)</code>, <code
27212716
class=css>scaleY(&lt;number&gt;)</code> and <code
27222717
class=css>scale(&lt;number&gt;)</code>.
2723-
2724-
<dt id=skewX-primitive> <code class=css>skewX(&lt;angle&gt;)</code>
2725-
2726-
<dd>
2727-
2728-
<dt id=skewY-primitive> <code class=css>skewY(&lt;angle&gt;)</code>
2729-
2730-
<dd>
27312718
</dl>
27322719

2733-
<p> Three-dimensional primitives and derived transform functions are:
2720+
<p> Three-dimensional primitives with derived transform functions are:
27342721

27352722
<dl>
27362723
<dt id=translate3d-primitive> <code
@@ -2749,44 +2736,23 @@ <h2 id=transform-primitives><span class=secno>18. </span> Transform
27492736
<dd> for <code class=css>scaleX(&lt;number&gt;)</code>, <code
27502737
class=css>scaleY(&lt;number&gt;)</code>, <code
27512738
class=css>scaleZ(&lt;number&gt;)</code> and <code
2752-
class=css>scale(&lt;number&gt;[, &lt;number&gt;])</code>.</dd>
2753-
<!-- The following possible primitives would need a decomposing according to
2754-
the current text in "Transitions and Animations between Transform Values".
2755-
Therefore I would not define them as primitives. -->
2756-
<!--
2757-
<dt id="rotate3d-primitive">
2758-
<code class="css">rotate3d(&lt;number&gt;, &lt;number&gt;, &lt;angle&gt;)</code>
2759-
</dt>
2760-
<dd>
2761-
for <code class="css">rotate(&lt;angle&gt;)</code> (excluding rotate with three
2762-
arguments), <code class="css">rotateX(&lt;angle&gt;)</code>, <code
2763-
class="css">rotateY(&lt;angle&gt;)</code> and <code
2764-
class="css">rotateZ(&lt;angle&gt;)</code>.
2765-
</dd>
2766-
<dt id="matrix3d-primitive">
2767-
<code class="css">matrix3d(&lt;number&gt;, &lt;number&gt;, &lt;number&gt;,
2768-
&lt;number&gt;, &lt;number&gt;, &lt;number&gt;, &lt;number&gt;, &lt;number&gt;,
2769-
&lt;number&gt;, &lt;number&gt;, &lt;number&gt;, &lt;number&gt;, &lt;number&gt;,
2770-
&lt;number&gt;, &lt;number&gt;, &lt;number&gt;)</code>
2771-
</dt>
2772-
<dd>
2773-
for <code class="css">matrix(&lt;number&gt;, &lt;number&gt;, &lt;number&gt;,
2774-
&lt;number&gt;, &lt;number&gt;, &lt;number&gt;).
2775-
</dd>
2776-
<dt id="perspective-primitive">
2777-
<code class="css">perspective(&lt;length&gt;)</code>
2778-
</dt>
2779-
<dd>
2780-
</dd>
2781-
-->
2739+
class=css>scale(&lt;number&gt;[, &lt;number&gt;])</code>.
27822740
</dl>
27832741

2784-
<p id=primitive-on-its-own> Every primitive listed above is a derivative on
2785-
its own. E.g <code class=css>translate(&lt;translation-value&gt;,
2786-
&lt;translation-value&gt;)</code> can be interpolated with every other
2787-
transform function that has <code
2742+
<p id=primitive-on-its-own> Every transform function is a derivative on its
2743+
own. E.g <code class=css>translate(&lt;translation-value&gt;,
2744+
&lt;translation-value&gt;)</code> of one transform list and <code
27882745
class=css>translate(&lt;translation-value&gt;,
2789-
&lt;translation-value&gt;)</code> as primitive.
2746+
&lt;translation-value&gt;)</code> of another transform list can be
2747+
interpolated with ‘<code class=css>translate</code>’ as primitive.
2748+
2749+
<p> The following transform functions are primitives without further
2750+
derivates: ‘<code class=css>skewX</code>’, ‘<code
2751+
class=css>skewY</code>’, ‘<code class=css>matrix</code>’, ‘<code
2752+
class=css>rotateX</code>’, ‘<code class=css>rotateY</code>’,
2753+
<code class=css>rotateZ</code>’, ‘<code
2754+
class=css>rotate3d</code>’, ‘<code class=css>matrix3d</code>’ and
2755+
<a href="#perspective"><code class=css>perspective</code></a>’.
27902756

27912757
<p id=interpolation-two-three-dimensional-function> For derived transform
27922758
functions that have a two-dimensional primitive and a three-dimensional
@@ -2804,10 +2770,13 @@ <h2 id=transform-primitives><span class=secno>18. </span> Transform
28042770
<h2 id=interpolation-of-transform-functions><span class=secno>19. </span>
28052771
Interpolation of primitives and derived transform functions</h2>
28062772

2807-
<p> Two transform functions of the same type and the same number of
2808-
arguments are interpolated numerically without a former conversion. The
2809-
calculated value will be of the same transform function type with the same
2810-
number of arguments.
2773+
<p> With the exception of ‘<code class=css>matrix</code>’, ‘<code
2774+
class=css>rotate3d</code>’, ‘<code class=css>matrix3d</code>’ and
2775+
<a href="#perspective"><code class=css>perspective</code></a>’, two
2776+
transform functions of the same type and the same number of arguments are
2777+
interpolated numerically without a former conversion. The calculated value
2778+
will be of the same transform function type with the same number of
2779+
arguments.
28112780

28122781
<div class=example>
28132782
<p> The two transform functions ‘<code class=css>translate(0)</code>
@@ -2879,6 +2848,12 @@ <h2 id=interpolation-of-transform-functions><span class=secno>19. </span>
28792848
100px)</code></code>’ respectively. Then both converted transform
28802849
functions get interpolated numerically.</p>
28812850
</div>
2851+
2852+
<p> The transform functions ‘<code class=css>matrix</code>’, ‘<code
2853+
class=css>rotate3d</code>’, ‘<code class=css>matrix3d</code>’ and
2854+
<a href="#perspective"><code class=css>perspective</code></a>’ get
2855+
converted into 4x4 matrices first and interpolated as defined in section
2856+
<a href="">Interpolation of Matrices</a> afterwards.</p>
28822857
<!-- ======================================================================================================= -->
28832858

28842859
<h2 id=matrix-interpolation><span class=secno>20. </span> Interpolation of

css3-transforms/Transforms.src.html

Lines changed: 22 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ <h2 id="definitions">Definitions</h2>
192192
<p>
193193
A transformable element is an element in the HTML namespace
194194
which is either a
195-
<a href="http://www.w3.org/TR/CSS2/visuren.html#block-level">block-level</a>
195+
<a href="http://www.w3.org/TR/CSS2/visuren.html#block-level">block-level</a>
196196
or
197197
<a href="http://www.w3.org/TR/CSS2/visuren.html#x13">atomic inline-level element</a>,
198198
or whose '<code class="property">display</code>' property
@@ -1854,8 +1854,8 @@ <h3 id="svg-transform-functions">
18541854
is translated by that amount (using the current transformation matrix) for the
18551855
duration of the rotate operation. For example ''rotate(90deg, 100px, 100px)''
18561856
would cause elements to appear rotated one-quarter of a turn in the clockwise
1857-
direction after a translation of 100 pixel in the vertical and horizontal
1858-
direction.
1857+
direction after a translation of the transform-origin of 100 pixel in the
1858+
horizontal and vertical directions.
18591859
</dd>
18601860
</dl>
18611861

@@ -2530,7 +2530,7 @@ <h2 id="transform-primitives">
25302530
</p>
25312531

25322532
<p>
2533-
Two-dimensional primitives and derived transform functions are:
2533+
Two-dimensional primitives with derived transform functions are:
25342534
</p>
25352535

25362536
<dl>
@@ -2551,13 +2551,6 @@ <h2 id="transform-primitives">
25512551
for <code class="css">rotate(&lt;angle&gt;)</code> if
25522552
<a href="#svg-transform-functions">rotate with three arguments</a> is supported.
25532553
</dd>
2554-
<dt id="translate-primitive">
2555-
<code class="css">rotate(&lt;angle&gt;)</code>
2556-
</dt>
2557-
<dd>
2558-
if <a href="#svg-transform-functions">rotate with three arguments</a> is not
2559-
supported.
2560-
</dd>
25612554
<dt id="scale-primitive">
25622555
<code class="css">scale(&lt;number&gt;, &lt;number&gt;)</code>
25632556
</dt>
@@ -2566,20 +2559,10 @@ <h2 id="transform-primitives">
25662559
class="css">scaleY(&lt;number&gt;)</code> and <code
25672560
class="css">scale(&lt;number&gt;)</code>.
25682561
</dd>
2569-
<dt id="skewX-primitive">
2570-
<code class="css">skewX(&lt;angle&gt;)</code>
2571-
</dt>
2572-
<dd>
2573-
</dd>
2574-
<dt id="skewY-primitive">
2575-
<code class="css">skewY(&lt;angle&gt;)</code>
2576-
</dt>
2577-
<dd>
2578-
</dd>
25792562
</dl>
25802563

25812564
<p>
2582-
Three-dimensional primitives and derived transform functions are:
2565+
Three-dimensional primitives with derived transform functions are:
25832566
</p>
25842567

25852568
<dl>
@@ -2603,44 +2586,20 @@ <h2 id="transform-primitives">
26032586
class="css">scaleZ(&lt;number&gt;)</code> and <code
26042587
class="css">scale(&lt;number&gt;[, &lt;number&gt;])</code>.
26052588
</dd>
2606-
2607-
<!-- The following possible primitives would need a decomposing according to
2608-
the current text in "Transitions and Animations between Transform Values".
2609-
Therefore I would not define them as primitives. -->
2610-
<!--
2611-
<dt id="rotate3d-primitive">
2612-
<code class="css">rotate3d(&lt;number&gt;, &lt;number&gt;, &lt;angle&gt;)</code>
2613-
</dt>
2614-
<dd>
2615-
for <code class="css">rotate(&lt;angle&gt;)</code> (excluding rotate with three
2616-
arguments), <code class="css">rotateX(&lt;angle&gt;)</code>, <code
2617-
class="css">rotateY(&lt;angle&gt;)</code> and <code
2618-
class="css">rotateZ(&lt;angle&gt;)</code>.
2619-
</dd>
2620-
<dt id="matrix3d-primitive">
2621-
<code class="css">matrix3d(&lt;number&gt;, &lt;number&gt;, &lt;number&gt;,
2622-
&lt;number&gt;, &lt;number&gt;, &lt;number&gt;, &lt;number&gt;, &lt;number&gt;,
2623-
&lt;number&gt;, &lt;number&gt;, &lt;number&gt;, &lt;number&gt;, &lt;number&gt;,
2624-
&lt;number&gt;, &lt;number&gt;, &lt;number&gt;)</code>
2625-
</dt>
2626-
<dd>
2627-
for <code class="css">matrix(&lt;number&gt;, &lt;number&gt;, &lt;number&gt;,
2628-
&lt;number&gt;, &lt;number&gt;, &lt;number&gt;).
2629-
</dd>
2630-
<dt id="perspective-primitive">
2631-
<code class="css">perspective(&lt;length&gt;)</code>
2632-
</dt>
2633-
<dd>
2634-
</dd>
2635-
-->
26362589
</dl>
26372590

26382591
<p id="primitive-on-its-own">
2639-
Every primitive listed above is a derivative on its own. E.g <code
2592+
Every transform function is a derivative on its own. E.g <code
26402593
class="css">translate(&lt;translation-value&gt;, &lt;translation-value&gt;)</code>
2641-
can be interpolated with every other transform function that has <code
2594+
of one transform list and <code
26422595
class="css">translate(&lt;translation-value&gt;, &lt;translation-value&gt;)</code>
2643-
as primitive.
2596+
of another transform list can be interpolated with ''translate'' as primitive.
2597+
</p>
2598+
2599+
<p>
2600+
The following transform functions are primitives without further derivates:
2601+
''skewX'', ''skewY'', ''matrix'', ''rotateX'', ''rotateY'', ''rotateZ'',
2602+
''rotate3d'', ''matrix3d'' and ''perspective''.
26442603
</p>
26452604

26462605
<p id="interpolation-two-three-dimensional-function">
@@ -2664,7 +2623,8 @@ <h2 id="interpolation-of-transform-functions">
26642623
</h2>
26652624

26662625
<p>
2667-
Two transform functions of the same type and the same number of arguments are
2626+
With the exception of ''matrix'', ''rotate3d'', ''matrix3d'' and ''perspective'',
2627+
two transform functions of the same type and the same number of arguments are
26682628
interpolated numerically without a former conversion. The calculated value will be
26692629
of the same transform function type with the same number of arguments.
26702630
</p>
@@ -2745,6 +2705,12 @@ <h2 id="interpolation-of-transform-functions">
27452705
</p>
27462706
</div>
27472707

2708+
<p>
2709+
The transform functions ''matrix'', ''rotate3d'', ''matrix3d'' and ''perspective''
2710+
get converted into 4x4 matrices first and interpolated as defined in section <a
2711+
href="">Interpolation of Matrices</a> afterwards.
2712+
</p>
2713+
27482714
<!-- ======================================================================================================= -->
27492715

27502716
<h2 id="matrix-interpolation">

0 commit comments

Comments
 (0)