From deb7402299a2ddbbbb2f5f52b744caacb49e0d41 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Mon, 5 Jul 2010 15:52:25 +0000 Subject: option for color wheel widget to make it easier to select values closer to white, enable for color balance. --- source/blender/editors/include/UI_interface.h | 3 ++- source/blender/editors/interface/interface_handlers.c | 5 ++++- source/blender/editors/interface/interface_templates.c | 5 ++++- source/blender/editors/interface/interface_widgets.c | 8 +++++++- source/blender/editors/space_node/drawnode.c | 14 +++++++------- source/blender/makesrna/intern/rna_ui_api.c | 1 + 6 files changed, 25 insertions(+), 11 deletions(-) (limited to 'source') diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index 00a7c5c9f48..93e91d02599 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -153,6 +153,7 @@ typedef struct uiLayout uiLayout; #define UI_BUT_NO_TOOLTIP (1<<27) #define UI_BUT_VEC_SIZE_LOCK (1<<28) /* used to flag if color hsv-circle should keep luminance */ +#define UI_BUT_COLOR_CUBIC (1<<29) /* cubic saturation for the color wheel */ #define UI_PANEL_WIDTH 340 #define UI_COMPACT_PANEL_WIDTH 160 @@ -685,7 +686,7 @@ void uiTemplateHistogram(uiLayout *layout, struct PointerRNA *ptr, char *propnam void uiTemplateWaveform(uiLayout *layout, struct PointerRNA *ptr, char *propname, int expand); void uiTemplateVectorscope(uiLayout *layout, struct PointerRNA *ptr, char *propname, int expand); void uiTemplateCurveMapping(uiLayout *layout, struct PointerRNA *ptr, char *propname, int type, int levels, int brush); -void uiTemplateColorWheel(uiLayout *layout, struct PointerRNA *ptr, char *propname, int value_slider, int lock, int lock_luminosity); +void uiTemplateColorWheel(uiLayout *layout, struct PointerRNA *ptr, char *propname, int value_slider, int lock, int lock_luminosity, int cubic); void uiTemplateTriColorSet(uiLayout *layout, struct PointerRNA *ptr, char *propname); void uiTemplateLayers(uiLayout *layout, struct PointerRNA *ptr, char *propname, PointerRNA *used_ptr, char *used_propname, int active_layer); diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 6eb96b32efe..a19113d4b27 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -3073,7 +3073,10 @@ static int ui_numedit_but_HSVCIRCLE(uiBut *but, uiHandleButtonData *data, int mx } ui_hsvcircle_vals_from_pos(hsv, hsv+1, &rect, (float)mx, (float)my); - + + if(but->flag & UI_BUT_COLOR_CUBIC) + hsv[1]= 1.0f - sqrt3f(1.0f - hsv[1]); + hsv_to_rgb(hsv[0], hsv[1], hsv[2], rgb, rgb+1, rgb+2); if((but->flag & UI_BUT_VEC_SIZE_LOCK) && (rgb[0] || rgb[1] || rgb[2])) { diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index 59a67f9a541..f253e8c9fd5 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -1953,7 +1953,7 @@ void uiTemplateCurveMapping(uiLayout *layout, PointerRNA *ptr, char *propname, i #define WHEEL_SIZE 100 -void uiTemplateColorWheel(uiLayout *layout, PointerRNA *ptr, char *propname, int value_slider, int lock, int lock_luminosity) +void uiTemplateColorWheel(uiLayout *layout, PointerRNA *ptr, char *propname, int value_slider, int lock, int lock_luminosity, int cubic) { PropertyRNA *prop= RNA_struct_find_property(ptr, propname); uiBlock *block= uiLayoutGetBlock(layout); @@ -1984,6 +1984,9 @@ void uiTemplateColorWheel(uiLayout *layout, PointerRNA *ptr, char *propname, int but->a2= len_v3(color); } + if(cubic) + but->flag |= UI_BUT_COLOR_CUBIC; + uiItemS(row); if (value_slider) diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index 5bebf71167d..d2860adbf50 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -1675,6 +1675,7 @@ void ui_draw_but_HSVCIRCLE(uiBut *but, uiWidgetColors *wcol, rcti *rect) ui_hsvcircle_vals_from_pos(hsv, hsv+1, rect, centx + co*radius, centy + si*radius); CLAMP(hsv[2], 0.0f, 1.0f); /* for display only */ + hsv_to_rgb(hsv[0], hsv[1], hsv[2], col, col+1, col+2); glColor3fv(col); glVertex2f( centx + co*radius, centy + si*radius); @@ -1696,7 +1697,12 @@ void ui_draw_but_HSVCIRCLE(uiBut *but, uiWidgetColors *wcol, rcti *rect) /* cursor */ ang= 2.0f*M_PI*hsvo[0] + 0.5f*M_PI; - radius= hsvo[1]*radius; + + if(but->flag & UI_BUT_COLOR_CUBIC) + radius= (1.0f - pow(1.0f - hsvo[1], 3.0f)) *radius; + else + radius= hsvo[1] * radius; + ui_hsv_cursor(centx + cos(-ang)*radius, centy + sin(-ang)*radius); } diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c index 7b4584da3ab..2d111b731ad 100644 --- a/source/blender/editors/space_node/drawnode.c +++ b/source/blender/editors/space_node/drawnode.c @@ -107,7 +107,7 @@ static void node_buts_rgb(uiLayout *layout, bContext *C, PointerRNA *ptr) RNA_property_collection_lookup_int(ptr, prop, 0, &sockptr); col = uiLayoutColumn(layout, 0); - uiTemplateColorWheel(col, &sockptr, "default_value", 1, 0, 0); + uiTemplateColorWheel(col, &sockptr, "default_value", 1, 0, 0, 0); uiItemR(col, &sockptr, "default_value", 0, "", 0); } @@ -947,17 +947,17 @@ static void node_composit_buts_colorbalance(uiLayout *layout, bContext *C, Point split = uiLayoutSplit(layout, 0, 0); col = uiLayoutColumn(split, 0); - uiTemplateColorWheel(col, ptr, "lift", 1, 1, 0); + uiTemplateColorWheel(col, ptr, "lift", 1, 1, 0, 1); row = uiLayoutRow(col, 0); uiItemR(row, ptr, "lift", 0, NULL, 0); col = uiLayoutColumn(split, 0); - uiTemplateColorWheel(col, ptr, "gamma", 1, 1, 1); + uiTemplateColorWheel(col, ptr, "gamma", 1, 1, 1, 1); row = uiLayoutRow(col, 0); uiItemR(row, ptr, "gamma", 0, NULL, 0); col = uiLayoutColumn(split, 0); - uiTemplateColorWheel(col, ptr, "gain", 1, 1, 1); + uiTemplateColorWheel(col, ptr, "gain", 1, 1, 1, 1); row = uiLayoutRow(col, 0); uiItemR(row, ptr, "gain", 0, NULL, 0); @@ -965,17 +965,17 @@ static void node_composit_buts_colorbalance(uiLayout *layout, bContext *C, Point split = uiLayoutSplit(layout, 0, 0); col = uiLayoutColumn(split, 0); - uiTemplateColorWheel(col, ptr, "offset", 1, 1, 0); + uiTemplateColorWheel(col, ptr, "offset", 1, 1, 0, 1); row = uiLayoutRow(col, 0); uiItemR(row, ptr, "offset", 0, NULL, 0); col = uiLayoutColumn(split, 0); - uiTemplateColorWheel(col, ptr, "power", 1, 1, 0); + uiTemplateColorWheel(col, ptr, "power", 1, 1, 0, 1); row = uiLayoutRow(col, 0); uiItemR(row, ptr, "power", 0, NULL, 0); col = uiLayoutColumn(split, 0); - uiTemplateColorWheel(col, ptr, "slope", 1, 1, 0); + uiTemplateColorWheel(col, ptr, "slope", 1, 1, 0, 1); row = uiLayoutRow(col, 0); uiItemR(row, ptr, "slope", 0, NULL, 0); } diff --git a/source/blender/makesrna/intern/rna_ui_api.c b/source/blender/makesrna/intern/rna_ui_api.c index 6cf0768b192..1c751433e31 100644 --- a/source/blender/makesrna/intern/rna_ui_api.c +++ b/source/blender/makesrna/intern/rna_ui_api.c @@ -361,6 +361,7 @@ void RNA_api_ui_layout(StructRNA *srna) RNA_def_boolean(func, "value_slider", 0, "", "Display the value slider to the right of the color wheel"); RNA_def_boolean(func, "lock", 0, "", "Lock the color wheel display to value 1.0 regardless of actual color"); RNA_def_boolean(func, "lock_luminosity", 0, "", "Keep the color at its original vector length"); + RNA_def_boolean(func, "cubic", 1, "", "Cubic saturation for picking values close to white"); func= RNA_def_function(srna, "template_triColorSet", "uiTemplateTriColorSet"); api_ui_item_rna_common(func); -- cgit v1.2.3