[Bf-blender-cvs] [ab46b5e] wiggly-widgets: Clamp during rectangle interaction to make sure widget stays big enough to interact with (also handles negative case). 15 pixels threshold was chosen.
Antony Riakiotakis
noreply at git.blender.org
Mon Dec 8 12:48:32 CET 2014
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);
More information about the Bf-blender-cvs
mailing list