Author: Carlos Lopez <genet...@gmail.com> 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 Synfig-devl@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/synfig-devl