Fix T41617: Color ramp crashes user preferences
Color ramps with no handles caused issues.
This commit is contained in:
@@ -512,19 +512,18 @@ CBData *colorband_element_add(struct ColorBand *coba, float position)
|
||||
if (coba->tot == MAXCOLORBAND) {
|
||||
return NULL;
|
||||
}
|
||||
else if (coba->tot > 0) {
|
||||
else {
|
||||
CBData *xnew;
|
||||
float col[4];
|
||||
|
||||
do_colorband(coba, position, col);
|
||||
|
||||
xnew = &coba->data[coba->tot];
|
||||
xnew->pos = position;
|
||||
|
||||
xnew->r = col[0];
|
||||
xnew->g = col[1];
|
||||
xnew->b = col[2];
|
||||
xnew->a = col[3];
|
||||
if (coba->tot != 0) {
|
||||
do_colorband(coba, position, &xnew->r);
|
||||
}
|
||||
else {
|
||||
zero_v4(&xnew->r);
|
||||
}
|
||||
}
|
||||
|
||||
coba->tot++;
|
||||
|
||||
@@ -1151,9 +1151,11 @@ void ui_draw_but_COLORBAND(uiBut *but, uiWidgetColors *UNUSED(wcol), const rcti
|
||||
}
|
||||
|
||||
/* layer: active handle */
|
||||
cbd = &coba->data[coba->cur];
|
||||
pos = x1 + cbd->pos * (sizex - 1) + 1;
|
||||
ui_draw_colorband_handle(rect, pos, &cbd->r, display, true);
|
||||
if (coba->tot != 0) {
|
||||
cbd = &coba->data[coba->cur];
|
||||
pos = x1 + cbd->pos * (sizex - 1) + 1;
|
||||
ui_draw_colorband_handle(rect, pos, &cbd->r, display, true);
|
||||
}
|
||||
}
|
||||
|
||||
void ui_draw_but_NORMAL(uiBut *but, uiWidgetColors *wcol, const rcti *rect)
|
||||
|
||||
@@ -5020,6 +5020,9 @@ static bool ui_numedit_but_COLORBAND(uiBut *but, uiHandleButtonData *data, int m
|
||||
if (data->draglastx == mx)
|
||||
return changed;
|
||||
|
||||
if (data->coba->tot == 0)
|
||||
return changed;
|
||||
|
||||
dx = ((float)(mx - data->draglastx)) / BLI_rctf_size_x(&but->rect);
|
||||
data->dragcbd->pos += dx;
|
||||
CLAMP(data->dragcbd->pos, 0.0f, 1.0f);
|
||||
|
||||
Reference in New Issue
Block a user