diff options
author | Antony Riakiotakis <kalast@gmail.com> | 2014-09-18 14:45:49 +0400 |
---|---|---|
committer | Antony Riakiotakis <kalast@gmail.com> | 2014-09-18 14:51:54 +0400 |
commit | 90c1afb02005671bb631c0fcb8b4981c3aa6e89e (patch) | |
tree | 3d5532d9e9f119bec1d72895773729401cd66a0e | |
parent | 44121442e97496963a13a80a3d96c24d8b38392f (diff) |
Fix T41708, active palette indicator not refreshing when clicking
Issue, after a lot of blood sweat and tears, was found in
ui_but_update_from_old_block, where we restore a button to its old
values when possible. The problem here is that a1 and a2 are not really
meant to store temporary variables, because they tend to get overriden
and palette selection is one of those temporary states.
Instead, we now store the position of each button in the palette in a2
and pointer to the palette in the customdata pointer of each button and
use that to test if it's active. The positions won't change when
clicking so we are guaranteed that the old button won't override the new
one with garbage.
It's still hacky but it is better than testing button types when copying
old values.
5 files changed, 4 insertions, 8 deletions
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index 1e9756ff771..bc794bf3350 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -295,7 +295,6 @@ typedef enum { #define UI_GRAD_L_ALT 10 #define UI_PALETTE_COLOR 20 -#define UI_PALETTE_COLOR_ACTIVE 1 /* Drawing * diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 17f898b5ba3..d3c9ec1fafb 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -4318,9 +4318,7 @@ static int ui_do_but_COLOR(bContext *C, uiBut *but, uiHandleButtonData *data, co else if ((int)(but->a1) == UI_PALETTE_COLOR && event->type == DELKEY && event->val == KM_PRESS) { - Scene *scene = CTX_data_scene(C); - Paint *paint = BKE_paint_get_active(scene); - Palette *palette = BKE_paint_palette(paint); + Palette *palette = but->rnapoin.id.data; PaletteColor *color = but->rnapoin.data; BKE_palette_color_remove(palette, color); diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h index cdc611a60f4..2f66c4a9900 100644 --- a/source/blender/editors/interface/interface_intern.h +++ b/source/blender/editors/interface/interface_intern.h @@ -225,7 +225,7 @@ struct uiBut { * (type == NUM), Use to store RNA 'precision' value, for dragging and click-step. * (type == LABEL), If (a1 == 1.0f) use a2 as a blending factor. * (type == SEARCH_MENU) Use as number or columns. - * (type == COLOR) Use as indication of active palette color + * (type == COLOR) Use as index in palette (not so good, needs refactor) */ float a2; diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index 364a62bd2a0..b0bea42e3bc 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -2407,8 +2407,7 @@ void uiTemplatePalette(uiLayout *layout, PointerRNA *ptr, const char *propname, RNA_pointer_create(&palette->id, &RNA_PaletteColor, color, &ptr); uiDefButR(block, COLOR, 0, "", 0, 0, UI_UNIT_X, UI_UNIT_Y, &ptr, "color", -1, 0.0, 1.0, - UI_PALETTE_COLOR, (col_id == palette->active_color) ? UI_PALETTE_COLOR_ACTIVE : 0.0, ""); - + UI_PALETTE_COLOR, col_id, ""); row_cols++; col_id++; } diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index 0ffd45e2f50..5cd6b1e2b4c 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -2898,7 +2898,7 @@ static void widget_swatch(uiBut *but, uiWidgetColors *wcol, rcti *rect, int stat widgetbase_draw(&wtb, wcol); - if (but->a1 == UI_PALETTE_COLOR && but->a2 == UI_PALETTE_COLOR_ACTIVE) { + if (but->a1 == UI_PALETTE_COLOR && ((Palette *)but->rnapoin.id.data)->active_color == (int)but->a2) { float width = rect->xmax - rect->xmin; float height = rect->ymax - rect->ymin; /* find color luminance and change it slightly */ |