fix UI jump in normal buttons for buttons which didnt start out normalized.
authorCampbell Barton <ideasman42@gmail.com>
Sat, 15 Oct 2011 09:43:42 +0000 (09:43 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Sat, 15 Oct 2011 09:43:42 +0000 (09:43 +0000)
source/blender/editors/interface/interface.c
source/blender/editors/interface/interface_handlers.c
source/blender/editors/interface/interface_intern.h

index a816c1612a1bac521703a950351d2c6b86281e2f..a62658349c1359acaf00b82403d62a6b6b5bc91e 100644 (file)
@@ -1211,7 +1211,7 @@ void ui_delete_linkline(uiLinkLine *line, uiBut *but)
  * an edit override pointer while dragging for example */
 
 /* for buttons pointing to color for example */
-void ui_get_but_vectorf(uiBut *but, float *vec)
+void ui_get_but_vectorf(uiBut *but, float vec[3])
 {
        PropertyRNA *prop;
        int a, tot;
@@ -1249,16 +1249,20 @@ void ui_get_but_vectorf(uiBut *but, float *vec)
                        vec[0]= vec[1]= vec[2]= 0.0f;
                }
        }
+
+       if (but->type == BUT_NORMAL) {
+               normalize_v3(vec);
+       }
 }
 
 /* for buttons pointing to color for example */
-void ui_set_but_vectorf(uiBut *but, float *vec)
+void ui_set_but_vectorf(uiBut *but, const float vec[3])
 {
        PropertyRNA *prop;
        int a, tot;
 
        if(but->editvec) {
-               VECCOPY(but->editvec, vec);
+               copy_v3_v3(but->editvec, vec);
        }
 
        if(but->rnaprop) {
@@ -1280,7 +1284,7 @@ void ui_set_but_vectorf(uiBut *but, float *vec)
        }
        else if(but->pointype == FLO) {
                float *fp= (float *)but->poin;
-               VECCOPY(fp, vec);
+               copy_v3_v3(fp, vec);
        }
 }
 
index 9af9b2f55ad2e905cb0551983b5c56a5f90cabd5..6699e8f8701e6e52fb7d8f9c5dc6afdc159ea194 100644 (file)
@@ -1966,8 +1966,6 @@ static void ui_do_but_textedit_select(bContext *C, uiBlock *block, uiBut *but, u
 
 static void ui_numedit_begin(uiBut *but, uiHandleButtonData *data)
 {
-       float softrange, softmin, softmax;
-
        if(but->type == BUT_CURVE) {
                but->editcumap= (CurveMapping*)but->poin;
        }
@@ -1977,10 +1975,12 @@ static void ui_numedit_begin(uiBut *but, uiHandleButtonData *data)
        }
        else if(ELEM3(but->type, BUT_NORMAL, HSVCUBE, HSVCIRCLE)) {
                ui_get_but_vectorf(but, data->origvec);
-               VECCOPY(data->vec, data->origvec);
+               copy_v3_v3(data->vec, data->origvec);
                but->editvec= data->vec;
        }
        else {
+               float softrange, softmin, softmax;
+
                data->startvalue= ui_get_but_val(but);
                data->origvalue= data->startvalue;
                data->value= data->origvalue;
@@ -3004,6 +3004,9 @@ static int ui_numedit_but_NORMAL(uiBut *but, uiHandleButtonData *data, int mx, i
        /* button is presumed square */
        /* if mouse moves outside of sphere, it does negative normal */
 
+       /* note that both data->vec and data->origvec should be normalized
+        * else we'll get a hamrless but annoying jump when first clicking */
+
        fp= data->origvec;
        rad= (but->x2 - but->x1);
        radsq= rad*rad;
index 6fb7677da6e0b7aabee85a1b6863f0340bbde8ab..12e9d39e89697f280c073dda1ad475e08e6d728a 100644 (file)
@@ -350,8 +350,8 @@ extern void ui_window_to_region(const ARegion *ar, int *x, int *y);
 extern double ui_get_but_val(uiBut *but);
 extern void ui_set_but_val(uiBut *but, double value);
 extern void ui_set_but_hsv(uiBut *but);
-extern void ui_get_but_vectorf(uiBut *but, float *vec);
-extern void ui_set_but_vectorf(uiBut *but, float *vec);
+extern void ui_get_but_vectorf(uiBut *but, float vec[3]);
+extern void ui_set_but_vectorf(uiBut *but, const float vec[3]);
 
 extern void ui_hsvcircle_vals_from_pos(float *valrad, float *valdist, rcti *rect, float mx, float my);