Palettes:
Avoid having an invalid active index if user deletes a color. Also attempt to set active color on clicking (Not working yet but fix coming soon)
This commit is contained in:
@@ -315,8 +315,14 @@ void BKE_paint_curve_set(Brush *br, PaintCurve *pc)
|
||||
/* remove colour from palette. Must be certain color is inside the palette! */
|
||||
void BKE_palette_color_remove(Palette *palette, PaletteColor *color)
|
||||
{
|
||||
int num_items;
|
||||
BLI_remlink(&palette->colors, color);
|
||||
|
||||
num_items = BLI_countlist(&palette->colors);
|
||||
|
||||
BLI_addhead(&palette->deleted, color);
|
||||
if (palette->active_color == num_items && num_items > 0)
|
||||
palette->active_color--;
|
||||
}
|
||||
|
||||
void BKE_palette_cleanup(Palette *palette)
|
||||
|
||||
@@ -4255,11 +4255,21 @@ static bool ui_numedit_but_NORMAL(uiBut *but, uiHandleButtonData *data,
|
||||
return changed;
|
||||
}
|
||||
|
||||
static void ui_palette_set_active(uiBut *but)
|
||||
{
|
||||
if ((int)(but->a1) == UI_PALETTE_COLOR) {
|
||||
Palette *palette = but->rnapoin.id.data;
|
||||
PaletteColor *color = but->rnapoin.data;
|
||||
palette->active_color = BLI_findindex(&palette->colors, color);
|
||||
}
|
||||
}
|
||||
|
||||
static int ui_do_but_COLOR(bContext *C, uiBut *but, uiHandleButtonData *data, const wmEvent *event)
|
||||
{
|
||||
if (data->state == BUTTON_STATE_HIGHLIGHT) {
|
||||
/* first handle click on icondrag type button */
|
||||
if (event->type == LEFTMOUSE && but->dragpoin && event->val == KM_PRESS) {
|
||||
ui_palette_set_active(but);
|
||||
if (ui_but_mouse_inside_icon(but, data->region, event)) {
|
||||
button_activate_state(C, but, BUTTON_STATE_WAIT_DRAG);
|
||||
data->dragstartx = event->x;
|
||||
@@ -4269,6 +4279,7 @@ static int ui_do_but_COLOR(bContext *C, uiBut *but, uiHandleButtonData *data, co
|
||||
}
|
||||
#ifdef USE_DRAG_TOGGLE
|
||||
if (event->type == LEFTMOUSE && event->val == KM_PRESS) {
|
||||
ui_palette_set_active(but);
|
||||
button_activate_state(C, but, BUTTON_STATE_WAIT_DRAG);
|
||||
data->dragstartx = event->x;
|
||||
data->dragstarty = event->y;
|
||||
@@ -4277,6 +4288,7 @@ static int ui_do_but_COLOR(bContext *C, uiBut *but, uiHandleButtonData *data, co
|
||||
#endif
|
||||
/* regular open menu */
|
||||
if (ELEM(event->type, LEFTMOUSE, PADENTER, RETKEY) && event->val == KM_PRESS) {
|
||||
ui_palette_set_active(but);
|
||||
button_activate_state(C, but, BUTTON_STATE_MENU_OPEN);
|
||||
return WM_UI_HANDLER_BREAK;
|
||||
}
|
||||
@@ -4333,13 +4345,6 @@ static int ui_do_but_COLOR(bContext *C, uiBut *but, uiHandleButtonData *data, co
|
||||
|
||||
if (event->type == LEFTMOUSE && event->val == KM_RELEASE) {
|
||||
if ((int)(but->a1) == UI_PALETTE_COLOR) {
|
||||
Palette *palette = but->rnapoin.id.data;
|
||||
PaletteColor *color = but->rnapoin.data;
|
||||
palette->active_color = BLI_findindex(&palette->colors, color);
|
||||
|
||||
/* enforce redraw, sometimes state here can already be exit */
|
||||
ED_region_tag_redraw(data->region);
|
||||
|
||||
if (!event->ctrl) {
|
||||
float color[3];
|
||||
Scene *scene = CTX_data_scene(C);
|
||||
|
||||
@@ -153,8 +153,8 @@ typedef struct Palette
|
||||
ListBase colors;
|
||||
ListBase deleted;
|
||||
|
||||
int num_of_colours;
|
||||
int active_color;
|
||||
int pad;
|
||||
} Palette;
|
||||
|
||||
typedef struct PaintCurvePoint
|
||||
|
||||
Reference in New Issue
Block a user