Author: Carlos Lopez <[email protected]>
Date: Fri Nov 11 20:04:36 2011 +0100
Fix bug in Time Loop Layer. Patch ID: 3414729 by Ray Frederikson
---
synfig-core/src/modules/lyr_std/timeloop.cpp | 41 +++++++++++++++++---------
1 files changed, 27 insertions(+), 14 deletions(-)
diff --git a/synfig-core/src/modules/lyr_std/timeloop.cpp
b/synfig-core/src/modules/lyr_std/timeloop.cpp
index bdab6ea..b66798c 100644
--- a/synfig-core/src/modules/lyr_std/timeloop.cpp
+++ b/synfig-core/src/modules/lyr_std/timeloop.cpp
@@ -42,6 +42,7 @@
#include <synfig/paramdesc.h>
#include <synfig/renddesc.h>
#include <synfig/value.h>
+#include <synfig/canvas.h>
#endif
@@ -221,29 +222,41 @@ void
Layer_TimeLoop::set_time(Context context, Time t)const
{
Time time = t;
-
+ float document_fps=get_canvas()->rend_desc().get_frame_rate();
if (!only_for_positive_duration || duration > 0)
{
if (duration == 0)
t = link_time;
- else if (duration > 0)
- {
- t -= local_time;
- t -= floor(t / duration) * duration;
- t = link_time + t;
- }
- else
- {
- t -= local_time;
- t -= floor(t / -duration) * -duration;
- t = link_time - t;
+ else {
+ float t_frames = round(t*document_fps);
+ float duration_frames = round(duration*document_fps);
+ if (duration > 0)
+ {
+ t -= local_time;
+ // Simple formula looks like this:
+ // t -= floor(t / duration) * duration;
+ // but we should make all calculations in
frames to avoid round errors
+ t_frames -= floor(t_frames / duration_frames) *
duration_frames;
+ // converting back to seconds:
+ t = t_frames / document_fps;
+ t = link_time + t;
+ }
+ else
+ {
+ t -= local_time;
+ // Simple formula looks like this:
+ // t -= floor(t / -duration) * -duration;
+ // but we should make all calculations in
frames to avoid round errors
+ t_frames -= floor(t_frames / -duration_frames)
* -duration_frames;
+ // converting back to seconds:
+ t = t_frames / document_fps;
+ t = link_time - t;
+ }
}
-
// for compatibility with v0.1 layers; before local_time is
reached, take a step back
if (!symmetrical && time < local_time)
t -= duration;
}
-
context.set_time(t);
}
------------------------------------------------------------------------------
RSA(R) Conference 2012
Save $700 by Nov 18
Register now
http://p.sf.net/sfu/rsa-sfdev2dev1
_______________________________________________
Synfig-devl mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/synfig-devl