Commit: ab46b5ed627602ab6a0cb4d93cc023ca99664e55
Author: Antony Riakiotakis
Date:   Mon Dec 8 12:48:26 2014 +0100
Branches: wiggly-widgets
https://developer.blender.org/rBab46b5ed627602ab6a0cb4d93cc023ca99664e55

Clamp during rectangle interaction to make sure widget stays big enough
to interact with (also handles negative case). 15 pixels threshold was
chosen.

===================================================================

M       source/blender/windowmanager/intern/wm_generic_widgets.c

===================================================================

diff --git a/source/blender/windowmanager/intern/wm_generic_widgets.c 
b/source/blender/windowmanager/intern/wm_generic_widgets.c
index d88669c..0427fbe 100644
--- a/source/blender/windowmanager/intern/wm_generic_widgets.c
+++ b/source/blender/windowmanager/intern/wm_generic_widgets.c
@@ -628,6 +628,8 @@ void WIDGET_dial_set_direction(struct wmWidget *widget, 
float direction[3])
 #define WIDGET_RECT_TRANSFORM_INTERSECT_SCALEY_UP      4
 #define WIDGET_RECT_TRANSFORM_INTERSECT_SCALEY_DOWN    5
 
+#define WIDGET_RECT_MIN_WIDTH 15.0f
+
 typedef struct RectTransformWidget {
        wmWidget widget;
        wmRectTransformWidget transform;
@@ -901,6 +903,8 @@ static int widget_rect_transform_handler(struct bContext 
*C, const struct wmEven
        RectTransformInteraction *data = widget->interaction_data;
        ARegion *ar = CTX_wm_region(C);
        float valuex, valuey;
+       /* needed here as well in case clamping occurs */
+       float orig_ofx = cage->transform.ofx, orig_ofy = cage->transform.ofy;
        
        valuex = (event->mval[0] - data->orig_mouse[0]);
        valuey = (event->mval[1] - data->orig_mouse[1]);
@@ -938,6 +942,27 @@ static int widget_rect_transform_handler(struct bContext 
*C, const struct wmEven
                }
        }
        
+       /* clamping - make sure widget is at least 5 pixels wide */
+       if (cage->style & WIDGET_RECT_TRANSFORM_STYLE_SCALE_UNIFORM) {
+               if (cage->transform.scalex < WIDGET_RECT_MIN_WIDTH / 
data->orig_tw.h || 
+                   cage->transform.scalex < WIDGET_RECT_MIN_WIDTH / 
data->orig_tw.w) 
+               {
+                       cage->transform.scalex = max_ff(WIDGET_RECT_MIN_WIDTH / 
data->orig_tw.h, WIDGET_RECT_MIN_WIDTH / data->orig_tw.w);
+                       cage->transform.ofx = orig_ofx;
+                       cage->transform.ofy = orig_ofy;
+               }
+       }
+       else {
+               if (cage->transform.scalex < WIDGET_RECT_MIN_WIDTH / 
data->orig_tw.w) {
+                       cage->transform.scalex = WIDGET_RECT_MIN_WIDTH / 
data->orig_tw.w;
+                       cage->transform.ofx = orig_ofx;
+               }
+               if (cage->transform.scaley < WIDGET_RECT_MIN_WIDTH / 
data->orig_tw.h) {
+                       cage->transform.scaley = WIDGET_RECT_MIN_WIDTH / 
data->orig_tw.h;
+                       cage->transform.ofy = orig_ofy;
+               }
+       }
+       
        if (widget->prop) {
                *data->tw = cage->transform;
                RNA_property_update(C, &widget->ptr, widget->prop);

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to