[Bf-blender-cvs] [ebfad36] wiggly-widgets: Use a property to make the transform operator widget driven.

Antony Riakiotakis noreply at git.blender.org
Tue Oct 14 16:20:35 CEST 2014


Commit: ebfad36a22ebc0b87be01431bc696e7d89eb3c79
Author: Antony Riakiotakis
Date:   Tue Oct 14 16:20:20 2014 +0200
Branches: wiggly-widgets
https://developer.blender.org/rBebfad36a22ebc0b87be01431bc696e7d89eb3c79

Use a property to make the transform operator widget driven.

Design is still pending here, but for now just use to not remove widget
display.

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

M	source/blender/editors/include/ED_transform.h
M	source/blender/editors/space_view3d/space_view3d.c
M	source/blender/editors/transform/transform.h
M	source/blender/editors/transform/transform_generics.c
M	source/blender/editors/transform/transform_manipulator.c
M	source/blender/editors/transform/transform_ops.c

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

diff --git a/source/blender/editors/include/ED_transform.h b/source/blender/editors/include/ED_transform.h
index b2b0404..978163e 100644
--- a/source/blender/editors/include/ED_transform.h
+++ b/source/blender/editors/include/ED_transform.h
@@ -148,6 +148,7 @@ int BIF_countTransformOrientation(const struct bContext *C);
 #define P_CORRECT_UV    (1 << 8)
 #define P_NO_DEFAULTS   (1 << 10)
 #define P_NO_TEXSPACE   (1 << 11)
+#define P_WIDGET_DRIVEN (1 << 12)
 
 void Transform_Properties(struct wmOperatorType *ot, int flags);
 
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index 4acd116..b3a7287 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -691,6 +691,10 @@ static void view3d_dropboxes(void)
 
 static void view3d_widgets(void)
 {
+	float color_green[4] = {0.0f, 1.0f, 0.0f, 1.0f};
+	float color_red[4] = {1.0f, 0.0f, 0.0f, 1.0f};
+	float color_blue[4] = {0.0f, 0.0f, 1.0f, 1.0f};
+
 	wmWidget *widget = NULL;
 	ManipulatorGroup *manipulator = MEM_callocN(sizeof(ManipulatorGroup), "manipulator_data");
 	struct wmWidgetMap *wmap = WM_widgetmap_find("View3D", SPACE_VIEW3D, RGN_TYPE_WINDOW, true);
@@ -707,16 +711,33 @@ static void view3d_widgets(void)
 	WM_widget_register(wgroup_manipulator, widget);
 
 	manipulator->translate_x = WIDGET_arrow_new(0, WIDGET_manipulator_handler_trans);
+	WIDGET_dial_set_color(manipulator->translate_x, color_red);
+	WM_widget_register(wgroup_manipulator, manipulator->translate_x);
+
 	manipulator->translate_y = WIDGET_arrow_new(0, WIDGET_manipulator_handler_trans);
 	manipulator->translate_y->customdata = SET_INT_IN_POINTER(1);
+	WIDGET_dial_set_color(manipulator->translate_y, color_green);
+	WM_widget_register(wgroup_manipulator, manipulator->translate_y);
+
 	manipulator->translate_z = WIDGET_arrow_new(0, WIDGET_manipulator_handler_trans);
 	manipulator->translate_z->customdata = SET_INT_IN_POINTER(2);
+	WIDGET_dial_set_color(manipulator->translate_z, color_blue);
+	WM_widget_register(wgroup_manipulator, manipulator->translate_z);
 
 	manipulator->rotate_x = WIDGET_dial_new(0, WIDGET_manipulator_handler_rot);
+	WIDGET_dial_set_color(manipulator->rotate_x, color_red);
+	WM_widget_register(wgroup_manipulator, manipulator->rotate_x);
+
 	manipulator->rotate_y = WIDGET_dial_new(0, WIDGET_manipulator_handler_rot);
 	manipulator->rotate_y->customdata = SET_INT_IN_POINTER(1);
+	WIDGET_dial_set_color(manipulator->rotate_y, color_green);
+	WM_widget_register(wgroup_manipulator, manipulator->rotate_y);
+
 	manipulator->rotate_z = WIDGET_dial_new(0, WIDGET_manipulator_handler_rot);
 	manipulator->rotate_z->customdata = SET_INT_IN_POINTER(2);
+	WIDGET_dial_set_color(manipulator->rotate_z, color_blue);
+	WM_widget_register(wgroup_manipulator, manipulator->rotate_z);
+
 
 	widget = WM_widget_new(WIDGET_lamp_draw,
 	                       WIDGET_lamp_render_3d_intersect, 
diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h
index 67d5563..9d143d2 100644
--- a/source/blender/editors/transform/transform.h
+++ b/source/blender/editors/transform/transform.h
@@ -439,6 +439,8 @@ typedef struct TransInfo {
 	/* alternative transformation. used to add offset to tracking markers */
 #define T_ALT_TRANSFORM		(1 << 24)
 
+#define T_USE_WIDGET		(1 << 24)
+
 /* TransInfo->modifiers */
 #define	MOD_CONSTRAINT_SELECT	0x01
 #define	MOD_PRECISION			0x02
diff --git a/source/blender/editors/transform/transform_generics.c b/source/blender/editors/transform/transform_generics.c
index 24dc6f6..e5868aa 100644
--- a/source/blender/editors/transform/transform_generics.c
+++ b/source/blender/editors/transform/transform_generics.c
@@ -1172,10 +1172,16 @@ void initTransInfo(bContext *C, TransInfo *t, wmOperator *op, const wmEvent *eve
 		
 		t->view = v3d;
 		t->animtimer = (animscreen) ? animscreen->animtimer : NULL;
-		
+
+		if (op && ((prop = RNA_struct_find_property(op->ptr, "use_widget_input")) &&
+		    RNA_property_is_set(op->ptr, prop)))
+		{
+			if (RNA_property_boolean_get(op->ptr, prop))
+				t->flag |= T_USE_WIDGET;
+		}
+
 		/* turn manipulator off during transform */
-		// FIXME: but don't do this when USING the manipulator...
-		if (t->flag & T_MODAL) {
+		if ((t->flag & T_MODAL) && !(t->flag & T_USE_WIDGET)) {
 			t->twtype = v3d->twtype;
 			v3d->twtype = 0;
 		}
@@ -1442,7 +1448,7 @@ void postTrans(bContext *C, TransInfo *t)
 	else if (t->spacetype == SPACE_VIEW3D) {
 		View3D *v3d = t->sa->spacedata.first;
 		/* restore manipulator */
-		if (t->flag & T_MODAL) {
+		if ((t->flag & T_MODAL) && !(t->flag & T_USE_WIDGET)) {
 			v3d->twtype = t->twtype;
 		}
 	}
diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c
index 2168d83..78425c3 100644
--- a/source/blender/editors/transform/transform_manipulator.c
+++ b/source/blender/editors/transform/transform_manipulator.c
@@ -1690,23 +1690,8 @@ void WIDGET_manipulator_draw(wmWidget *UNUSED(widget), const bContext *C, float
 	}
 }
 
-static void manipulator_unregister(wmWidgetGroup *wgroup, ManipulatorGroup *manipulator)
-{
-	WM_widget_unregister(wgroup, manipulator->translate_x);	
-	WM_widget_unregister(wgroup, manipulator->translate_y);	
-	WM_widget_unregister(wgroup, manipulator->translate_z);	
-
-	WM_widget_unregister(wgroup, manipulator->rotate_x);
-	WM_widget_unregister(wgroup, manipulator->rotate_y);
-	WM_widget_unregister(wgroup, manipulator->rotate_z);
-}
-
 void WIDGETGROUP_manipulator_update(struct wmWidgetGroup *wgroup, const struct bContext *C)
 {
-	float color_green[4] = {0.0f, 1.0f, 0.0f, 1.0f};
-	float color_red[4] = {1.0f, 0.0f, 0.0f, 1.0f};
-	float color_blue[4] = {0.0f, 0.0f, 1.0f, 1.0f};
-	
 	ScrArea *sa = CTX_wm_area(C);
 	ARegion *ar = CTX_wm_region(C);
 	Scene *scene = CTX_data_scene(C);
@@ -1715,9 +1700,7 @@ void WIDGETGROUP_manipulator_update(struct wmWidgetGroup *wgroup, const struct b
 	ManipulatorGroup *manipulator = WM_widgetgroup_customdata(wgroup);
 
 	int totsel;
-	
-	manipulator_unregister(wgroup, manipulator);
-	
+		
 	v3d->twflag &= ~V3D_DRAW_MANIPULATOR;
 	
 	totsel = calc_manipulator_stats(C);
@@ -1762,54 +1745,46 @@ void WIDGETGROUP_manipulator_update(struct wmWidgetGroup *wgroup, const struct b
 
 	if (v3d->twtype & V3D_MANIP_TRANSLATE) {
 		/* should be added according to the order of axis */
+		copy_v3_v3(manipulator->translate_x->origin, rv3d->twmat[3]);
+		WIDGET_arrow_set_direction(manipulator->translate_x, rv3d->twmat[0]);
 		
-		if (drawflags & MAN_TRANS_X) {
-			WM_widget_register(wgroup, manipulator->translate_x);
-			copy_v3_v3(manipulator->translate_x->origin, rv3d->twmat[3]);
-			WIDGET_arrow_set_direction(manipulator->translate_x, rv3d->twmat[0]);
-			WIDGET_arrow_set_color(manipulator->translate_x, color_red);			
-		}
-		
-		if (drawflags & MAN_TRANS_Y) {
-			WM_widget_register(wgroup, manipulator->translate_y);
-			copy_v3_v3(manipulator->translate_y->origin, rv3d->twmat[3]);
-			WIDGET_arrow_set_direction(manipulator->translate_y, rv3d->twmat[1]);
-			WIDGET_arrow_set_color(manipulator->translate_y, color_green);			
-		}
-		
-		if (drawflags & MAN_TRANS_Z) {
-			WM_widget_register(wgroup, manipulator->translate_z);
-			copy_v3_v3(manipulator->translate_z->origin, rv3d->twmat[3]);
-			WIDGET_arrow_set_direction(manipulator->translate_z, rv3d->twmat[2]);
-			WIDGET_arrow_set_color(manipulator->translate_z, color_blue);			
-		}
+		copy_v3_v3(manipulator->translate_y->origin, rv3d->twmat[3]);
+		WIDGET_arrow_set_direction(manipulator->translate_y, rv3d->twmat[1]);
+
+		copy_v3_v3(manipulator->translate_z->origin, rv3d->twmat[3]);
+		WIDGET_arrow_set_direction(manipulator->translate_z, rv3d->twmat[2]);
+
+		manipulator->translate_x->flag &= ~WM_WIDGET_SKIP_DRAW;
+		manipulator->translate_y->flag &= ~WM_WIDGET_SKIP_DRAW;
+		manipulator->translate_z->flag &= ~WM_WIDGET_SKIP_DRAW;
+	}
+	else {
+		manipulator->translate_x->flag |= WM_WIDGET_SKIP_DRAW;
+		manipulator->translate_y->flag |= WM_WIDGET_SKIP_DRAW;
+		manipulator->translate_z->flag |= WM_WIDGET_SKIP_DRAW;
 	}
 
 	if (v3d->twtype & V3D_MANIP_ROTATE) {
 		/* should be added according to the order of axis */
 
-		if (drawflags & MAN_ROT_X) {
-			WM_widget_register(wgroup, manipulator->rotate_x);
-			copy_v3_v3(manipulator->rotate_x->origin, rv3d->twmat[3]);
-			WIDGET_dial_set_direction(manipulator->rotate_x, rv3d->twmat[0]);
-			WIDGET_dial_set_color(manipulator->rotate_x, color_red);
-		}
+		copy_v3_v3(manipulator->rotate_x->origin, rv3d->twmat[3]);
+		WIDGET_dial_set_direction(manipulator->rotate_x, rv3d->twmat[0]);
 
-		if (drawflags & MAN_ROT_Y) {
-			WM_widget_register(wgroup, manipulator->rotate_y);
-			copy_v3_v3(manipulator->rotate_y->origin, rv3d->twmat[3]);
-			WIDGET_dial_set_direction(manipulator->rotate_y, rv3d->twmat[1]);
-			WIDGET_dial_set_color(manipulator->rotate_y, color_green);
-		}
+		copy_v3_v3(manipulator->rotate_y->origin, rv3d->twmat[3]);
+		WIDGET_dial_set_direction(manipulator->rotate_y, rv3d->twmat[1]);
 
-		if (drawflags & MAN_ROT_Z) {
-			WM_widget_register(wgroup, manipulator->rotate_z);
-			copy_v3_v3(manipulator->rotate_z->origin, rv3d->twmat[3]);
-			WIDGET_dial_set_direction(manipulator->rotate_z, rv3d->twmat[2]);
-			WIDGET_dial_set_color(manipulator->rotate_z, color_blue);
-		}
-	}
+		copy_v3_v3(manipulator->rotate_z->origin, rv3d->twmat[3]);
+		WIDGET_dial_set_direction(manipulator->rotate_z, rv3d->twmat[2]);
 
+		manipulator->rotate_x->flag &= ~WM_WIDGET_SKIP_DRAW;
+		manipulator->rotate_y->flag &= ~WM_WIDGET_SKIP_DRAW;
+		manipulator->rotate_z->flag &= ~WM_WIDGET_SKIP_DRAW;
+	}
+	else {
+		manipulator->rotate_x->flag |= WM_WIDGET_SKIP_DRAW;
+		manipulator->rotate_y->flag |= WM_WIDGET_SKIP_DRAW;
+		manipulator->rotate_z->flag |= WM_WIDGET_SKIP_DRAW;
+	}
 }
 
 
@@ -2010,6 +1985,8 @@ int WIDGET_manipulator_handler_trans(bContext *C, const struct wmEvent *event, w
 	RNA_boolean_set(ptr, "release_confirm", true);
 	RNA_enum_set(ptr, "constraint_orientation", v3d->twmode);
 	RNA_boolean_set_array(ptr, "constraint_axis", constraint_axis);
+	RNA_boolean_set(ptr, "use_widget_input", true);
+
 	WM_ope

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list