Re: Inheritance during SVG Animation of CSS properties -- should "base value" incorporate ancestors' animation effects?

Ken Stacey:
>Thanks Olaf,
>
>But I'm still confused.

The example is confusing, I agree.

>
>> the SMIL result for the frozen value is #404040 + 0.5 * inherit.
>> Because according to SVG/CSS inherit can be a time dependent color
>> value, this result is time dependent as well.
>
>I understand that inherited values can be time dependent.  The animation 
>function is time dependent, obviously, and must yield a valid value.  At 
>  2.5s that value is a color.  Why is that value not the frozen value? 
>Or, to edit your result above, why isn't the frozen value
>
>f(2.5) = #404040 + 0.5 * inherit(2.5)
>
>Ken

I think, this case is not explictly discussed in SMIL.
There it is not assumed, that something currently animated
can be an item of a values list itself. 
Obviously SVG/CSS allows this anyway.
To get f(t >2.5) = #404040 + 0.5 * inherit(2.5) 
one had to freeze the animation too, inherit
results from, else this still changes.
But as mentioned, the animation is not finished,
until it is for example restarted or the document ends.
Therefore still each time the viewer has to create
a new presentation, it has to look for changes
(SMIL cares more about new entries in the begin
and end time lists). 
Because SVG wants the current value to be presented
for inherit, the viewer has to update this for the presentation.

The result f(t>2.5)=#404040 + 0.5 * inherit(t)
is simply derived from SMIL formulas without thinking
to much about what it means, before the result is written
down (trying to get the result before interpreting it).
Indeed SMIL only explains that one has to freeze the
animation with f(t>2.5)=#404040 + 0.5 * inherit,
but there is no indication, that 'inherit' itself is frozen too,
just this interpolation state.

And for 
<animate attributeName="fill" to="blue;inherit" dur="10s"
fill="freeze" />
it is clearly expected, that if the inherited value is changed, the
appearence has to change as well - else it would be pretty 
useless to put inherit into the animation at all.
Just because the more complicated case results in a mixture,
this does not indicate, that the expectation changes.
But such a mixture can complicate implementations of course.


I think, it would be helpful to mention this or your suggestion
as the intended behaviour, whatever seems to be more useful.
If written down as a rule this is much better then trying to 
derive a result from SMIL, I assume it was not intended for.
Maybe I'm wrong with my result, then someone should explain 
how to get another result with the rules from SMIL.

If you have
<g>
<animate attributeName="fill" values="blue;red" dur="10s" />
<circle r="1">     
     <animate attributeName="fill" by="green" dur="10s" 
                      end="5s" fill="freeze" />
</circle>
</g>
the color changes as well after 5s, because the underlying value
still changes. Not really the same but already an indication, that
things do not necessarily stop to change, if the animation with the
highest priority is frozen (what would apply here only for 'to' 
instead of 'by'). 


Olaf

Received on Wednesday, 9 June 2010 18:26:53 UTC