Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2011-10-15 13:43:42 +0400
committerCampbell Barton <ideasman42@gmail.com>2011-10-15 13:43:42 +0400
commitf8317ed450e8e1649b4b23215417ad3e5b8d607c (patch)
treec8aa22b22c4be408c1b403722ab5126b877b8580
parentfebcb91b82c03a2ec0fc36f989b5dddeca5f4373 (diff)
fix UI jump in normal buttons for buttons which didnt start out normalized.
-rw-r--r--source/blender/editors/interface/interface.c12
-rw-r--r--source/blender/editors/interface/interface_handlers.c9
-rw-r--r--source/blender/editors/interface/interface_intern.h4
3 files changed, 16 insertions, 9 deletions
diff --git a/source/blender/editors/interface/interface.c b/source/blender/editors/interface/interface.c
index a816c1612a1..a62658349c1 100644
--- a/source/blender/editors/interface/interface.c
+++ b/source/blender/editors/interface/interface.c
@@ -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);
}
}
diff --git a/source/blender/editors/interface/interface_handlers.c b/source/blender/editors/interface/interface_handlers.c
index 9af9b2f55ad..6699e8f8701 100644
--- a/source/blender/editors/interface/interface_handlers.c
+++ b/source/blender/editors/interface/interface_handlers.c
@@ -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;
diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h
index 6fb7677da6e..12e9d39e896 100644
--- a/source/blender/editors/interface/interface_intern.h
+++ b/source/blender/editors/interface/interface_intern.h
@@ -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);