app: treat gradient segments as clopen ranges

Treat gradient segment exents as [left, right) ranges, instead of
[left, right], so that they don't overlap, and each point
corresponds to a unique color.

Perform less comparisons in gimp_gradient_get_segment_at_internal().
This commit is contained in:
Ell 2017-08-12 11:50:54 -04:00
parent d710773aba
commit 3aff0a1a0e
1 changed files with 10 additions and 20 deletions

View File

@ -2077,29 +2077,19 @@ gimp_gradient_get_segment_at_internal (GimpGradient *gradient,
if (! seg)
seg = gradient->segments;
while (seg)
if (pos >= seg->left)
{
if (pos >= seg->left)
{
if (pos <= seg->right)
{
return seg;
}
else
{
seg = seg->next;
}
}
else
{
seg = seg->prev;
}
while (seg->next && pos >= seg->right)
seg = seg->next;
}
else
{
do
seg = seg->prev;
while (pos < seg->left);
}
/* Oops: we should have found a segment, but we didn't */
g_warning ("%s: no matching segment for position %0.15f", G_STRFUNC, pos);
return NULL;
return seg;
}
static void