[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [29328] trunk/blender/source/blender/ editors/screen/screen_ops.c: Bugfix #22453: Jump to Next keyframe doesn' t work on some frame

Joshua Leung aligorith at gmail.com
Tue Jun 8 02:08:45 CEST 2010


Revision: 29328
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=29328
Author:   aligorith
Date:     2010-06-08 02:08:45 +0200 (Tue, 08 Jun 2010)

Log Message:
-----------
Bugfix #22453: Jump to Next keyframe doesn't work on some frame

Jump to keyframe would get 'stuck' if it encountered a keyframe on "fraction" frames. Now, it will try multiple times until it finds one.

Modified Paths:
--------------
    trunk/blender/source/blender/editors/screen/screen_ops.c

Modified: trunk/blender/source/blender/editors/screen/screen_ops.c
===================================================================
--- trunk/blender/source/blender/editors/screen/screen_ops.c	2010-06-08 00:02:42 UTC (rev 29327)
+++ trunk/blender/source/blender/editors/screen/screen_ops.c	2010-06-08 00:08:45 UTC (rev 29328)
@@ -1571,6 +1571,7 @@
 	ActKeyColumn *ak;
 	float cfra= (scene)? (float)(CFRA) : 0.0f;
 	short next= RNA_boolean_get(op->ptr, "next");
+	short done = 0;
 	
 	/* sanity checks */
 	if (scene == NULL)
@@ -1589,15 +1590,27 @@
 	BLI_dlrbTree_linkedlist_sync(&keys);
 	
 	/* find matching keyframe in the right direction */
-	if (next)
-		ak= (ActKeyColumn *)BLI_dlrbTree_search_next(&keys, compare_ak_cfraPtr, &cfra);
-	else
-		ak= (ActKeyColumn *)BLI_dlrbTree_search_prev(&keys, compare_ak_cfraPtr, &cfra);
+	do {
+		if (next)
+			ak= (ActKeyColumn *)BLI_dlrbTree_search_next(&keys, compare_ak_cfraPtr, &cfra);
+		else
+			ak= (ActKeyColumn *)BLI_dlrbTree_search_prev(&keys, compare_ak_cfraPtr, &cfra);
+		
+		if (ak) {
+			if (CFRA != (int)ak->cfra) {
+				/* this changes the frame, so set the frame and we're done */
+				CFRA= (int)ak->cfra;
+				done = 1;
+			}
+			else {
+				/* make this the new starting point for the search */
+				cfra = ak->cfra;
+			}
+		}
+	} while ((ak != NULL) && (done == 0));
 	
-	/* set the new frame (if keyframe found) */
-	if (ak) 
-		CFRA= (int)ak->cfra;
-	else
+	/* any success? */
+	if (done == 0)
 		BKE_report(op->reports, RPT_INFO, "No more keyframes to jump to in this direction");
 	
 	/* free temp stuff */





More information about the Bf-blender-cvs mailing list