[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [60880] trunk/blender/source/blender/ editors/animation/anim_markers.c: Followup to r60857: code was assuming markers were sorted, which is not guaranted.

Bastien Montagne montagne29 at wanadoo.fr
Mon Oct 21 16:40:14 CEST 2013


Revision: 60880
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=60880
Author:   mont29
Date:     2013-10-21 14:40:14 +0000 (Mon, 21 Oct 2013)
Log Message:
-----------
Followup to r60857: code was assuming markers were sorted, which is not guaranted. Also heavily simplified it (previous code was supposed to have optimizations, but ended just looping twice over the markers' list...).

Many thanks to Brecht and Sergey for noting the quirk and reviews! :)

Revision Links:
--------------
    http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=60857

Modified Paths:
--------------
    trunk/blender/source/blender/editors/animation/anim_markers.c

Modified: trunk/blender/source/blender/editors/animation/anim_markers.c
===================================================================
--- trunk/blender/source/blender/editors/animation/anim_markers.c	2013-10-21 14:23:32 UTC (rev 60879)
+++ trunk/blender/source/blender/editors/animation/anim_markers.c	2013-10-21 14:40:14 UTC (rev 60880)
@@ -197,62 +197,26 @@
 {
 	TimeMarker *marker;
 	float min, max;
-	int selcount = 0;
 	
 	/* sanity check */
 	//printf("markers = %p -  %p, %p\n", markers, markers->first, markers->last);
-	if (markers == NULL) {
+	if (ELEM3(NULL, markers, markers->first, markers->last)) {
 		*first = 0.0f;
 		*last = 0.0f;
 		return;
 	}
-	
-	if (markers->first && markers->last) {
-		TimeMarker *fm = markers->first;
-		TimeMarker *lm = markers->last;
-		
-		/* Store last marker in min, and first marker in max, so that later real value calc actually works! [#37146]. */
-		min = (float)lm->frame;
-		max = (float)fm->frame;
-	}
-	else {
-		*first = 0.0f;
-		*last = 0.0f;
-		return;
-	}
-	
-	/* count how many markers are usable - see later */
-	if (sel) {
-		for (marker = markers->first; marker; marker = marker->next) {
-			if (marker->flag & SELECT)
-				selcount++;
+
+	min = FLT_MAX;
+	max = -FLT_MAX;
+	for (marker = markers->first; marker; marker = marker->next) {
+		if (!sel || (marker->flag & SELECT)) {
+			if (marker->frame < min)
+				min = (float)marker->frame;
+			if (marker->frame > max)
+				max = (float)marker->frame;
 		}
 	}
-	else
-		selcount = BLI_countlist(markers);
 	
-	/* if only selected are to be considered, only consider the selected ones
-	 * (optimization for not searching list)
-	 */
-	if (selcount > 1) {
-		for (marker = markers->first; marker; marker = marker->next) {
-			if (sel) {
-				if (marker->flag & SELECT) {
-					if (marker->frame < min)
-						min = (float)marker->frame;
-					if (marker->frame > max)
-						max = (float)marker->frame;
-				}
-			}
-			else {
-				if (marker->frame < min)
-					min = (float)marker->frame;
-				if (marker->frame > max)
-					max = (float)marker->frame;
-			}
-		}
-	}
-	
 	/* set the min/max values */
 	*first = min;
 	*last = max;




More information about the Bf-blender-cvs mailing list