Hi Dieter.

[EMAIL PROTECTED]:
> Modified: 
> xmlgraphics/batik/trunk/sources/org/apache/batik/anim/timing/TimedElement.java
> URL: 
> http://svn.apache.org/viewvc/xmlgraphics/batik/trunk/sources/org/apache/batik/anim/timing/TimedElement.java?rev=656363&r1=656362&r2=656363&view=diff
> ==============================================================================
> --- 
> xmlgraphics/batik/trunk/sources/org/apache/batik/anim/timing/TimedElement.java
>  (original)
> +++ 
> xmlgraphics/batik/trunk/sources/org/apache/batik/anim/timing/TimedElement.java
>  Wed May 14 12:05:10 2008
> @@ -799,11 +799,11 @@
>              boolean atLast;
>              if (isActive) {
>                  t = currentInterval.getBegin() + repeatDuration - 
> lastRepeatTime;
> -                atLast = lastRepeatTime + d == currentInterval.getBegin() + 
> repeatDuration;
> -            } else {
> -                // Interval previousInterval = (Interval) 
> previousIntervals.getLast();
> -                t = previousInterval.getEnd() - lastRepeatTime;
> -                atLast = lastRepeatTime + d == previousInterval.getEnd();
> +                atLast = lastRepeatTime + d == currentInterval.getBegin() + 
> repeatDuration;    // cam, given that d can
> +            } else {                                                         
>                   // be infinite, nan or value
> +                // Interval previousInterval = (Interval) 
> previousIntervals.getLast();         // does this always make sense?
> +                t = previousInterval.getEnd() - lastRepeatTime;              
>                   // at least i would use >=
> +                atLast = lastRepeatTime + d == previousInterval.getEnd();    
>                   // <- same here
>              }
>              if (atLast) {
>                  // Trace.print("element frozen" + (isActive ? " (but still 
> active)" : "") + ", sampling last value");

I think in most normal uses of the animation at the moment (because we
don’t have time container and no media for which dur="media" would make
sense) that d will be only either a value or Infinity, but not NaN.

The behaviour of a frozen, indefinite animation should be the starting
value, e.g. with:

  <svg xmlns='http://www.w3.org/2000/svg' width='100' height='100'>
    <rect width='0' height='100'>
      <animate attributeName='width' from='50' to='100' dur='indefinite'
               begin='0s' end='1s' fill='freeze'/>
    </rect>
  </svg>

then the width should stay at 50.  atLast is set to false when d is
Infinity, so when the animation is actually sampled, the right behaviour
should fall out:

  sampledAt(t % d, d, currentRepeatIteration);

Since t will be 1.0 and currentRepeatIteration will be 0, it’ll call:

  sampledAt(1.0, Float.POSITIVE_INFINITY, 0);

which eventually in InterpolatingAnimation.sampledAt() will determine
that the unitTime is 0, thus using the starting value.

Do you agree?

-- 
Cameron McCormack ≝ http://mcc.id.au/

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to