From bc41d255cbe88875b1e5a6f32a135ba4dd89d3f7 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 12 Feb 2014 17:22:41 +1100 Subject: NDOF: minor color picker improvements - swap Z/Y axis so Z changes hue and X/Y change location. this way you can use ndof like a joystick and Z rotation like a dial for the hue. - change sensitivity when shift is held to be 1/5th --- source/blender/editors/interface/interface_handlers.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'source') diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c index 4665752b7b3..c3d83438968 100644 --- a/source/blender/editors/interface/interface_handlers.c +++ b/source/blender/editors/interface/interface_handlers.c @@ -4626,7 +4626,7 @@ static void ui_ndofedit_but_HSVCIRCLE(uiBut *but, uiHandleButtonData *data, float *hsv = ui_block_hsv_get(but->block); float rgb[3]; float phi, r /*, sqr */ /* UNUSED */, v[2]; - float sensitivity = (shift ? 0.15f : 0.3f) * ndof->dt; + float sensitivity = (shift ? 0.06f : 0.3f) * ndof->dt; ui_get_but_vectorf(but, rgb); rgb_to_hsv_compat_v(rgb, hsv); @@ -4641,20 +4641,18 @@ static void ui_ndofedit_but_HSVCIRCLE(uiBut *but, uiHandleButtonData *data, v[1] = r * sinf(phi); /* Use ndof device y and x rotation to move the vector in 2d space */ - v[0] += ndof->ry * sensitivity; + v[0] += ndof->rz * sensitivity; v[1] += ndof->rx * sensitivity; /* convert back to polar coords on circle */ phi = atan2f(v[0], v[1]) / (2.0f * (float)M_PI) + 0.5f; /* use ndof z rotation to additionally rotate hue */ - phi -= ndof->rz * sensitivity * 0.5f; - + phi += ndof->ry * sensitivity * 0.5f; r = len_v2(v); - CLAMP(r, 0.0f, 1.0f); - + /* convert back to hsv values, in range [0,1] */ - hsv[0] = fmodf(phi, 1.0f); + hsv[0] = phi; hsv[1] = r; /* exception, when using color wheel in 'locked' value state: @@ -4667,6 +4665,8 @@ static void ui_ndofedit_but_HSVCIRCLE(uiBut *but, uiHandleButtonData *data, ui_color_snap_hue(snap, &hsv[0]); } + hsv_clamp_v(hsv, FLT_MAX); + hsv_to_rgb_v(hsv, data->vec); if ((but->flag & UI_BUT_VEC_SIZE_LOCK) && (data->vec[0] || data->vec[1] || data->vec[2])) { -- cgit v1.2.3