- From: Daniel Holbert <dholbert@mozilla.com>
- Date: Tue, 08 Jun 2010 17:38:35 -0700
- To: www-svg@w3.org
Hi www-svg,
Today, jwatt & I were speaking about the issues raised in this thread
from last year (links to original posts are at end of this email), and
he suggested that I bring this back up for possible discussion on a
teleconference, to hopefully establish a consensus of some sort. Could
we discuss this at some point during an upcoming SVG call?
To paraphrase the basic question from the thread:
THE SETUP:
- Suppose a given property is being animated on a (parent) node.
- Suppose there's a child node that has the value "inherit" for this
same property. (so, it's inheriting the parent's animated value, since
SVG 1.1 19.2.9 says that animated values inherit where applicable)
- Now, suppose we begin a "by" animation that targets our property on
the child node, e.g.
<animate by="[amount] dur="1s".../>
MY QUESTION: What should be used as the "base value" for this
animation on the child node? The actual underlying value is "inherit",
but what should that evaluate to, when we place it at the base of the
animation sandwich to compose the child's "by-animation"? Should we use
the parent's animated value, or the parent's underlying non-animated value?
MY PROPOSED ANSWER: The most sensible thing is to use the parent's
*animated* value, since that's what we'll be using on the child up until
the moment the "by-animation" begins, and I feel like the idea of a
"by-animation" is to smoothly animate away from the value that was
showing before the animation started. (If we instead used the parent's
non-animated value, then that could trigger a huge jump at the moment
the child's "by-animation" begins.)
This problem is (slightly) more general than this, though -- in
particular, we hit the same basic question with the "currentColor"
value, with no inheritance at all. The situation for this is as
follows: if we animate the "color" attribute on an element that has e.g.
style="fill: currentColor", and then we begin a "by" animation on the
"fill" property, should the "color" animation feed into the base value
of the "fill" animation? (I'd say "yes".)
So, to clarify this issue generally, I propose that the SVG spec be
amended/clarified to state something like this:
========
If an attribute is being animated and its base value* could be
influenced by another attribute's animated value**, then during each
animation sample, the browser should compose animations on the
influencing attribute _before_ composing animations on the
potentially-influenced attribute.***
* e.g. 'inherit' or 'currentColor' on a particular element.
** e.g. the parent-element's value for the same property, or the value
of 'color' property on the same element.
*** e.g. we should compose any given property on ancestors before
composing that property on their children, and compose animations on the
'color' property on a given node before composing color-valued
properties on that node.
========
I'm asking for clarification on this because this behavior isn't
well-defined in any spec right now. SVG 1.1 Section 19.2.9 gives meager
support to my position by simply affirming that animated values can be
inherited, but it doesn't mention at all how the inherited values should
interact with animations on children. (and it of course it doesn't
mention the analogous color/currentColor issue). On the other hand,
SMIL3 specifies an action that goes against my suggested behavior. It
says we should clear the whole override stylesheet before looking up the
base value of any CSS property. (which would hide any animated values
and prevent them from being inherited as base values for other
animations) However, SMIL3 never even mentions the word "inherit", so it
might just be that it doesn't consider inheritance issues at all.
Here are my links to my posts on this from last year, with a bit more
details & actual spec references:
* My initial post:
http://lists.w3.org/Archives/Public/www-svg/2009Jul/0037.html
* Cameron [largely agreeing w/ me & bringing up SMIL 3]:
http://lists.w3.org/Archives/Public/www-svg/2009Jul/0052.html
* Me [lamenting the trouble that SMIL 3's language causes]:
http://lists.w3.org/Archives/Public/www-svg/2009Aug/0008.html
(Sorry for the large post -- this is a complex & subtle issue, so I want
to try to be precise & minimize hand-waving.)
Thanks!
~Daniel
Received on Wednesday, 9 June 2010 00:39:12 UTC