Skip to content

Commit ced6b5a

Browse files
authored
[web-animations] Use 'auto' for unspecified keyframe-specific composite operations (#3001)
This fixes #3000.
1 parent 206498e commit ced6b5a

File tree

1 file changed

+52
-35
lines changed

1 file changed

+52
-35
lines changed

web-animations-1/Overview.bs

+52-35
Original file line numberDiff line numberDiff line change
@@ -3269,13 +3269,13 @@ The <a>timing function</a> specified on the last keyframe in the
32693269
list is never applied.
32703270

32713271
Each <a>keyframe</a> may have a <dfn>keyframe-specific composite
3272-
operation</dfn> that, if not null, is applied to all values
3273-
specified in that <a>keyframe</a>.
3272+
operation</dfn> that, if set, is applied to all values specified in that
3273+
<a>keyframe</a>.
32743274
The possible operations and their meanings are identical to those defined
32753275
for the <a>composite operation</a> associated with the <a>keyframe effect</a>
32763276
as a whole in [[#effect-composition]].
32773277
If the <a>keyframe-specific composite operation</a> for a <a>keyframe</a>
3278-
is null, the <a>composite operation</a> specified for the
3278+
is not set, the <a>composite operation</a> specified for the
32793279
<a>keyframe effect</a> as a whole is used for values specified in that keyframe.
32803280

32813281
<h4 id="calculating-computed-keyframes">Calculating computed keyframes</h4>
@@ -4669,10 +4669,10 @@ interface KeyframeEffect : AnimationEffect {
46694669
dictionary ComputedKeyframe {
46704670
// ... property-value pairs ...
46714671
// i.e. DOMString propertyName
4672-
double? offset = null;
4673-
double computedOffset;
4674-
DOMString easing = "linear";
4675-
CompositeOperation? composite = null;
4672+
double? offset = null;
4673+
double computedOffset;
4674+
DOMString easing = "linear";
4675+
CompositeOperationOrAuto composite = "auto";
46764676
};
46774677
</pre>
46784678

@@ -4701,8 +4701,9 @@ interface KeyframeEffect : AnimationEffect {
47014701
:: The <a>keyframe-specific composite operation</a> used to combine the
47024702
values specified in this keyframe with the <a>underlying value</a>.
47034703

4704-
This member will be <code>null</code> if the <a>composite
4705-
operation</a> specified on the <a>keyframe effect</a> is being used.
4704+
This member will be {{CompositeOperationOrAuto/auto}} if the
4705+
<a>composite operation</a> specified on the <a>keyframe effect</a> is
4706+
being used.
47064707

47074708
</div>
47084709

@@ -4722,10 +4723,10 @@ interface KeyframeEffect : AnimationEffect {
47224723

47234724
<pre class='idl'>
47244725
dictionary BaseComputedKeyframe {
4725-
double? offset = null;
4726-
double computedOffset;
4727-
DOMString easing = "linear";
4728-
CompositeOperation? composite = null;
4726+
double? offset = null;
4727+
double computedOffset;
4728+
DOMString easing = "linear";
4729+
CompositeOperationOrAuto composite = "auto";
47294730
};
47304731
</pre>
47314732

@@ -4999,17 +5000,17 @@ WebIDL-like definition:
49995000
dictionary Keyframe {
50005001
// ... property-value pairs ...
50015002
// i.e. DOMString propertyName
5002-
double? offset = null;
5003-
DOMString easing = "linear";
5004-
CompositeOperation? composite = null;
5003+
double? offset = null;
5004+
DOMString easing = "linear";
5005+
CompositeOperationOrAuto composite = "auto";
50055006
};
50065007

50075008
dictionary PropertyIndexedKeyframes {
50085009
// ... property-value and property-valuelist pairs ...
50095010
// i.e. (DOMString or sequence&amp;lt;DOMString&amp;gt;) propertyName
50105011
(double? or sequence&lt;double?&gt;) offset = [];
50115012
(DOMString or sequence&lt;DOMString&gt;) easing = [];
5012-
(CompositeOperation? or sequence&lt;CompositeOperation?&gt;) composite = [];
5013+
(CompositeOperationOrAuto or sequence&lt;CompositeOperationOrAuto&gt;) composite = [];
50135014
};
50145015

50155016
typedef (sequence&lt;Keyframe&gt; or PropertyIndexedKeyframes) KeyframeArgument;
@@ -5042,8 +5043,8 @@ The meaning and allowed values of each argument is as follows:
50425043
:: The <a>keyframe-specific composite operation</a> used to combine the values
50435044
specified in this keyframe with the <a>underlying value</a>.
50445045

5045-
If <code>null</code>, the <a>composite operation</a> specified on the
5046-
<a>keyframe effect</a> will be used.
5046+
If {{CompositeOperationOrAuto/auto}}, the <a>composite operation</a>
5047+
specified on the <a>keyframe effect</a> will be used.
50475048

50485049

50495050
Since this type cannot be expressed in WebIDL, its processing is defined in
@@ -5096,7 +5097,7 @@ otherwise, using the following procedure:
50965097
dictionary BasePropertyIndexedKeyframe {
50975098
(double? or sequence&lt;double?&gt;) offset = [];
50985099
(DOMString or sequence&lt;DOMString&gt;) easing = [];
5099-
(CompositeOperation? or sequence&lt;CompositeOperation?&gt;) composite = [];
5100+
(CompositeOperationOrAuto or sequence&lt;CompositeOperationOrAuto&gt;) composite = [];
51005101
};
51015102
</pre>
51025103

@@ -5105,9 +5106,9 @@ otherwise, using the following procedure:
51055106

51065107
<pre class='idl'>
51075108
dictionary BaseKeyframe {
5108-
double? offset = null;
5109-
DOMString easing = "linear";
5110-
CompositeOperation? composite = null;
5109+
double? offset = null;
5110+
DOMString easing = "linear";
5111+
CompositeOperationOrAuto composite = "auto";
51115112
};
51125113
</pre>
51135114

@@ -5330,11 +5331,11 @@ keyframes using the following procedure:
53305331
1. If the &ldquo;composite&rdquo; member of the <var>property-indexed
53315332
keyframe</var> is <em>not</em> an empty sequence:
53325333

5333-
1. Let <var>composite modes</var> be a sequence of <a>nullable</a>
5334-
<a>composite operations</a> assigned from the
5334+
1. Let <var>composite modes</var> be a sequence of
5335+
{{CompositeOperationOrAuto}} values assigned from the
53355336
&ldquo;composite&rdquo; member of <var>property-indexed
53365337
keyframe</var>.
5337-
If that member is a single <a>nullable</a> <a>composite
5338+
If that member is a single {{CompositeOperationOrAuto}} value
53385339
operation</a>, let <var>composite modes</var> be a sequence of
53395340
length one, with the value of the &ldquo;composite&rdquo; as its
53405341
single item.
@@ -5345,7 +5346,8 @@ keyframes using the following procedure:
53455346
from the beginning of the list until <var>composite modes</var>
53465347
has as many items as <var>processed keyframes</var>.
53475348

5348-
1. Assign each non-null value in <var>composite modes</var> to the
5349+
1. Assign each value in <var>composite modes</var> that is not
5350+
{{CompositeOperationOrAuto/auto}} to the
53495351
<a>keyframe-specific composite operation</a> on the
53505352
<a>keyframe</a> with the corresponding position in
53515353
<var>processed keyframes</var> until the end of <var>processed
@@ -5435,7 +5437,8 @@ dictionary KeyframeEffectOptions : EffectTiming {
54355437
animation with the <a>effect stack</a>, as specified by one
54365438
of the <a>CompositeOperation</a> enumeration values.
54375439
This is used for all <a>keyframes</a> that specify
5438-
a null <a>keyframe-specific composite operation</a>.
5440+
a {{CompositeOperationOrAuto/auto}} <a>keyframe-specific composite
5441+
operation</a>.
54395442

54405443
</div>
54415444

@@ -5462,39 +5465,51 @@ enum IterationCompositeOperation {"replace", "accumulate"};
54625465
subsequent iterations of an <a>animation effect</a> build
54635466
on the final value of the previous iteration.
54645467

5465-
<h3 id="the-compositeoperation-enumeration">The <code>CompositeOperation</code> enumeration</h3>
5468+
<h3 id="the-compositeoperation-enumeration">The <code>CompositeOperation</code> and <code>CompositeOperationOrAuto</code> enumerations</h3>
54665469

5467-
The possible values of an <a>animation effect</a>'s
5470+
The possible values of an <a>keyframe effect</a>'s
54685471
composition behavior are represented by the
54695472
<dfn>CompositeOperation</dfn> enumeration.
54705473

54715474
<pre class='idl'>
54725475
enum CompositeOperation {"replace", "add", "accumulate"};
54735476
</pre>
54745477

5475-
: <code>replace</code>
5478+
: <dfn enum-value for=CompositeOperation><dfn enum-value for=CompositeOperationOrAuto>replace</dfn></dfn>
54765479
:: Corresponds to the <a
54775480
lt="composite operation replace">replace</a>
54785481
<a>composite operation</a> value such that
54795482
the <a>animation effect</a> overrides the <a>underlying value</a> it
54805483
is combined with.
54815484

5482-
: <code>add</code>
5485+
: <dfn enum-value for=CompositeOperation><dfn enum-value for=CompositeOperationOrAuto>add</dfn></dfn>
54835486
:: Corresponds to the <a
54845487
lt="composite operation add">add</a>
54855488
<a>composite operation</a> value such that
54865489
the <a>animation effect</a> is <a
54875490
lt="animation addition">added</a> to the <a>underlying value</a>
54885491
with which it is combined.
54895492

5490-
: <code>accumulate</code>
5493+
: <dfn enum-value for=CompositeOperation><dfn enum-value for=CompositeOperationOrAuto>accumulate</dfn></dfn>
54915494
:: Corresponds to the <a
54925495
lt="composite operation accumulate">accumulate</a>
54935496
<a>composite operation</a> value such that
54945497
the <a>animation effect</a> is <a
54955498
lt="animation accumulation">accumulated</a> on to the
54965499
<a>underlying value</a>.
54975500

5501+
The possible values of a [=keyframe=]'s composition behavior share the same
5502+
values as the {{CompositeOperation}} enumeration along with the additional
5503+
{{CompositeOperationOrAuto/auto}} value.
5504+
5505+
<pre class='idl'>
5506+
enum CompositeOperationOrAuto {"replace", "add", "accumulate", "auto"};
5507+
</pre>
5508+
5509+
: <dfn enum-value for=CompositeOperationOrAuto>auto</dfn>
5510+
:: Indicates that the [=composite operation=] of the associated [=keyframe
5511+
effect=] should be used.
5512+
54985513
<h3 id="the-animatable-interface-mixin">The <code>Animatable</code> interface mixin</h3>
54995514

55005515
Objects that may be the target of an {{KeyframeEffect}} object implement
@@ -5972,15 +5987,17 @@ The following changes have been made since the <a
59725987
the attribute name used to specify keyframe offsets.
59735988
* Updated the procedure to <a>process a keyframes argument</a> to allow
59745989
specifying <code>offset</code>, <code>composite</code> and multiple
5975-
<code>easing</code> values including allowing <code>null</code> values for
5976-
<code>composite</code>.
5990+
<code>easing</code> values including allowing
5991+
{{CompositeOperationOrAuto/auto}} values for <code>composite</code>.
59775992
* Changed the type of the
59785993
{{KeyframeEffect/KeyframeEffect(target, keyframes,
59795994
options)/target}} argument to the {{KeyframeEffect}} and
59805995
(now obsolete) <code>KeyframeEffectReadOnly</code> constructors,
59815996
and the {{KeyframeEffect/target}} member of these same interfaces,
59825997
from <code>Animatable?</code> to <code>(Element or CSSPseudoElement)?</code>
59835998
(<a href="https://github.com/w3c/web-animations/issues/186">#186</a>).
5999+
* Made unspecified [=composite operations=] on [=keyframes=] be represented by
6000+
{{CompositeOperationOrAuto/auto}} values.
59846001
* Dropped the <code>SharedKeyframeList</code> interface.
59856002
* Converted {{Animatable}} from a <code>[NoInterfaceObject]</code> interface
59866003
to an [=interface mixin=].

0 commit comments

Comments
 (0)