You are viewing a plain text version of this content. The canonical link for it is here.
Posted to batik-commits@xmlgraphics.apache.org by dv...@apache.org on 2008/05/14 21:05:11 UTC

svn commit: r656363 - /xmlgraphics/batik/trunk/sources/org/apache/batik/anim/timing/TimedElement.java

Author: dvholten
Date: Wed May 14 12:05:10 2008
New Revision: 656363

URL: http://svn.apache.org/viewvc?rev=656363&view=rev
Log:
cameron, please have a look

Modified:
    xmlgraphics/batik/trunk/sources/org/apache/batik/anim/timing/TimedElement.java

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");



Re: svn commit: r656363 - /xmlgraphics/batik/trunk/sources/org/apache/batik/anim/timing/TimedE lement.java

Posted by Cameron McCormack <ca...@mcc.id.au>.
Hi Dieter.

dvholten@apache.org:
> 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: batik-dev-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: batik-dev-help@xmlgraphics.apache.org