diff options
-rw-r--r-- | release/scripts/ui/properties_physics_common.py | 2 | ||||
-rw-r--r-- | release/scripts/ui/space_sequencer.py | 4 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/sequencer.c | 24 | ||||
-rw-r--r-- | source/blender/editors/include/UI_interface.h | 4 | ||||
-rw-r--r-- | source/blender/editors/interface/interface_handlers.c | 14 | ||||
-rw-r--r-- | source/blender/editors/interface/interface_intern.h | 8 | ||||
-rw-r--r-- | source/blender/editors/interface/interface_templates.c | 14 | ||||
-rw-r--r-- | source/blender/editors/interface/interface_widgets.c | 3 | ||||
-rw-r--r-- | source/blender/editors/space_node/drawnode.c | 14 | ||||
-rw-r--r-- | source/blender/makesrna/intern/rna_ui_api.c | 1 |
10 files changed, 60 insertions, 28 deletions
diff --git a/release/scripts/ui/properties_physics_common.py b/release/scripts/ui/properties_physics_common.py index 5b4c07642b4..6d97e82ff41 100644 --- a/release/scripts/ui/properties_physics_common.py +++ b/release/scripts/ui/properties_physics_common.py @@ -38,7 +38,7 @@ def point_cache_ui(self, context, cache, enabled, cachetype): col.operator("ptcache.remove", icon='ZOOMOUT', text="") row = layout.row() - if cachetype in {'PSYS', 'HAIR', 'SMOKE'}: + if cachetype in ('PSYS', 'HAIR', 'SMOKE'): row.prop(cache, "external") if cache.external: diff --git a/release/scripts/ui/space_sequencer.py b/release/scripts/ui/space_sequencer.py index ed39a98e86a..03e692693d8 100644 --- a/release/scripts/ui/space_sequencer.py +++ b/release/scripts/ui/space_sequencer.py @@ -753,11 +753,11 @@ class SEQUENCER_PT_filter(SequencerButtonsPanel): col.row().prop(strip.color_balance, "lift") col.prop(strip.color_balance, "inverse_lift", text="Inverse") col = row.column() - col.template_color_wheel(strip.color_balance, "gamma", value_slider=False) + col.template_color_wheel(strip.color_balance, "gamma", value_slider=False, lock_luminosity=True) col.row().prop(strip.color_balance, "gamma") col.prop(strip.color_balance, "inverse_gamma", text="Inverse") col = row.column() - col.template_color_wheel(strip.color_balance, "gain", value_slider=False) + col.template_color_wheel(strip.color_balance, "gain", value_slider=False, lock_luminosity=True) col.row().prop(strip.color_balance, "gain") col.prop(strip.color_balance, "inverse_gain", text="Inverse") diff --git a/source/blender/blenkernel/intern/sequencer.c b/source/blender/blenkernel/intern/sequencer.c index e21901f70d9..28cae5eeaa6 100644 --- a/source/blender/blenkernel/intern/sequencer.c +++ b/source/blender/blenkernel/intern/sequencer.c @@ -49,6 +49,7 @@ #include "RNA_access.h" #include "RE_pipeline.h" +#include "BLI_math.h" #include "BLI_fileops.h" #include "BLI_listbase.h" #include "BLI_path_util.h" @@ -1528,32 +1529,35 @@ static void make_cb_table_byte(float lift, float gain, float gamma, unsigned char * table, float mul) { int y; + /* matches 'LooksBuilder', generally looks nice too */ + if(lift >= 1.0f) lift= 0.0f; + else lift= (1.0f - lift) * (1.0f - lift); + /* end modif's */ for (y = 0; y < 256; y++) { - float v = 1.0 * y / 255; + float v = (float)y * (1.0 / 255.0f); v *= gain; - v += lift; + v = pow(v, lift); v = pow(v, gamma); v *= mul; - if ( v > 1.0) { - v = 1.0; - } else if (v < 0.0) { - v = 0.0; - } + CLAMP(v, 0.0f, 1.0f); table[y] = v * 255; } - } static void make_cb_table_float(float lift, float gain, float gamma, float * table, float mul) { int y; + /* matches 'LooksBuilder', generally looks nice too */ + if(lift >= 1.0f) lift= 0.0f; + else lift= (1.0f - lift) * (1.0f - lift); + /* end modif's */ for (y = 0; y < 256; y++) { - float v = (float) y * 1.0 / 255.0; + float v = (float)y * (1.0 / 255.0f); v *= gain; - v += lift; + v = pow(v, lift); v = pow(v, gamma); v *= mul; table[y] = v; diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h index 35531a2a029..fea8c32b43b 100644 --- a/source/blender/editors/include/UI_interface.h +++ b/source/blender/editors/include/UI_interface.h @@ -152,6 +152,8 @@ typedef struct uiLayout uiLayout; #define UI_BUT_IMMEDIATE (1<<26) #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_PANEL_WIDTH 340 #define UI_COMPACT_PANEL_WIDTH 160 @@ -683,7 +685,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); +void uiTemplateColorWheel(uiLayout *layout, struct PointerRNA *ptr, char *propname, int value_slider, int lock, int lock_luminosity); 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 eda7102e69b..999b92e6854 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -236,7 +236,7 @@ static uiBut *ui_but_last(uiBlock *block) static int ui_is_a_warp_but(uiBut *but) { if(U.uiflag & USER_CONTINUOUS_MOUSE) - if(ELEM(but->type, NUM, NUMABS)) + if(ELEM3(but->type, NUM, NUMABS, HSVCIRCLE)) return TRUE; return FALSE; @@ -3064,10 +3064,22 @@ static int ui_numedit_but_HSVCIRCLE(uiBut *but, uiHandleButtonData *data, int mx if (but->a2 == 1) { // lock if (hsv[2] == 0.f) hsv[2] = 0.0001f; } + + if(U.uiflag & USER_CONTINUOUS_MOUSE) { + /* slow down the mouse, this is fairly picky */ + mx = (data->dragstartx*0.9 + mx*0.1); + my = (data->dragstarty*0.9 + my*0.1); + } ui_hsvcircle_vals_from_pos(hsv, hsv+1, &rect, (float)mx, (float)my); hsv_to_rgb(hsv[0], hsv[1], hsv[2], rgb, rgb+1, rgb+2); + + if(but->flag & UI_BUT_VEC_SIZE_LOCK) { + normalize_v3(rgb); + mul_v3_fl(rgb, but->color_lum); + } + ui_set_but_vectorf(but, rgb); data->draglastx= mx; diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h index ecefcf93c28..078e337f8f9 100644 --- a/source/blender/editors/interface/interface_intern.h +++ b/source/blender/editors/interface/interface_intern.h @@ -173,6 +173,7 @@ struct uiBut { float hardmin, hardmax, softmin, softmax; float a1, a2, hsv[3]; // hsv is temp memory for hsv buttons float aspect; + float color_lum; /* used only for color buttons so far */ uiButHandleFunc func; void *func_arg1; @@ -184,8 +185,11 @@ struct uiBut { struct bContextStore *context; + /* not ysed yet, was used in 2.4x for ui_draw_pulldown_round & friends */ + /* void (*embossfunc)(int , int , float, float, float, float, float, int); void (*sliderfunc)(int , float, float, float, float, float, float, int); + */ uiButCompleteFunc autocomplete_func; void *autofunc_arg; @@ -228,12 +232,12 @@ struct uiBut { /* Operator data */ struct wmOperatorType *optype; - int opcontext; struct IDProperty *opproperties; struct PointerRNA *opptr; + short opcontext; /* Draggable data, type is WM_DRAG_... */ - int dragtype; + short dragtype; void *dragpoin; struct ImBuf *imb; float imb_scale; diff --git a/source/blender/editors/interface/interface_templates.c b/source/blender/editors/interface/interface_templates.c index dbe64bedbc6..261f83f9bbc 100644 --- a/source/blender/editors/interface/interface_templates.c +++ b/source/blender/editors/interface/interface_templates.c @@ -1949,11 +1949,12 @@ 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) +void uiTemplateColorWheel(uiLayout *layout, PointerRNA *ptr, char *propname, int value_slider, int lock, int lock_luminosity) { PropertyRNA *prop= RNA_struct_find_property(ptr, propname); uiBlock *block= uiLayoutGetBlock(layout); uiLayout *col, *row; + uiBut *but; float softmin, softmax, step, precision; if (!prop) { @@ -1966,8 +1967,15 @@ void uiTemplateColorWheel(uiLayout *layout, PointerRNA *ptr, char *propname, int col = uiLayoutColumn(layout, 0); row= uiLayoutRow(col, 1); - uiDefButR(block, HSVCIRCLE, 0, "", 0, 0, WHEEL_SIZE, WHEEL_SIZE, ptr, propname, -1, 0.0, 0.0, 0, lock, ""); - + but= uiDefButR(block, HSVCIRCLE, 0, "", 0, 0, WHEEL_SIZE, WHEEL_SIZE, ptr, propname, -1, 0.0, 0.0, 0, lock, ""); + + if(lock_luminosity) { + float color[4]; /* incase of alpha */ + but->flag |= UI_BUT_VEC_SIZE_LOCK; + RNA_property_float_get_array(ptr, prop, color); + but->color_lum= len_v3(color); /* abuse the soft-max though this is a kind of soft-max */ + } + uiItemS(row); if (value_slider) diff --git a/source/blender/editors/interface/interface_widgets.c b/source/blender/editors/interface/interface_widgets.c index 2cfdf2d5e04..b7a1874cd2b 100644 --- a/source/blender/editors/interface/interface_widgets.c +++ b/source/blender/editors/interface/interface_widgets.c @@ -1674,6 +1674,7 @@ void ui_draw_but_HSVCIRCLE(uiBut *but, uiWidgetColors *wcol, rcti *rect) float co= cos(ang); 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); @@ -1688,7 +1689,7 @@ void ui_draw_but_HSVCIRCLE(uiBut *but, uiWidgetColors *wcol, rcti *rect) glEnable(GL_BLEND); glEnable(GL_LINE_SMOOTH ); glColor3ubv((unsigned char*)wcol->outline); - glutil_draw_lined_arc(0.0f, M_PI*2.0, radius, tot); + glutil_draw_lined_arc(0.0f, M_PI*2.0, radius, tot + 1); glDisable(GL_BLEND); glDisable(GL_LINE_SMOOTH ); glPopMatrix(); diff --git a/source/blender/editors/space_node/drawnode.c b/source/blender/editors/space_node/drawnode.c index 629b1008aa0..7b4584da3ab 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); + uiTemplateColorWheel(col, &sockptr, "default_value", 1, 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); + uiTemplateColorWheel(col, ptr, "lift", 1, 1, 0); row = uiLayoutRow(col, 0); uiItemR(row, ptr, "lift", 0, NULL, 0); col = uiLayoutColumn(split, 0); - uiTemplateColorWheel(col, ptr, "gamma", 1, 1); + uiTemplateColorWheel(col, ptr, "gamma", 1, 1, 1); row = uiLayoutRow(col, 0); uiItemR(row, ptr, "gamma", 0, NULL, 0); col = uiLayoutColumn(split, 0); - uiTemplateColorWheel(col, ptr, "gain", 1, 1); + uiTemplateColorWheel(col, ptr, "gain", 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); + uiTemplateColorWheel(col, ptr, "offset", 1, 1, 0); row = uiLayoutRow(col, 0); uiItemR(row, ptr, "offset", 0, NULL, 0); col = uiLayoutColumn(split, 0); - uiTemplateColorWheel(col, ptr, "power", 1, 1); + uiTemplateColorWheel(col, ptr, "power", 1, 1, 0); row = uiLayoutRow(col, 0); uiItemR(row, ptr, "power", 0, NULL, 0); col = uiLayoutColumn(split, 0); - uiTemplateColorWheel(col, ptr, "slope", 1, 1); + uiTemplateColorWheel(col, ptr, "slope", 1, 1, 0); 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 16864985289..6cf0768b192 100644 --- a/source/blender/makesrna/intern/rna_ui_api.c +++ b/source/blender/makesrna/intern/rna_ui_api.c @@ -360,6 +360,7 @@ void RNA_api_ui_layout(StructRNA *srna) api_ui_item_rna_common(func); 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"); func= RNA_def_function(srna, "template_triColorSet", "uiTemplateTriColorSet"); api_ui_item_rna_common(func); |