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! :)
This commit is contained in:
@@ -197,59 +197,23 @@ void ED_markers_get_minmax(ListBase *markers, short sel, float *first, float *la
|
||||
{
|
||||
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++;
|
||||
}
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user