[Bf-blender-cvs] [2dd9e41] wiggly-widgets: Merge branch 'master' into wiggly-widgets

Antony Riakiotakis noreply at git.blender.org
Mon Nov 17 16:31:32 CET 2014


Commit: 2dd9e41d939509c02673c56d44ee1c4cb7aa978c
Author: Antony Riakiotakis
Date:   Mon Nov 17 16:30:52 2014 +0100
Branches: wiggly-widgets
https://developer.blender.org/rB2dd9e41d939509c02673c56d44ee1c4cb7aa978c

Merge branch 'master' into wiggly-widgets

Conflicts:
	source/blender/editors/transform/transform_manipulator.c

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



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

diff --cc source/blender/editors/transform/transform_manipulator.c
index f04edd4,f2869843..c7a4aa8
--- a/source/blender/editors/transform/transform_manipulator.c
+++ b/source/blender/editors/transform/transform_manipulator.c
@@@ -1889,16 -1848,11 +1889,15 @@@ int WIDGET_manipulator_handler(bContex
  						constraint_axis[2] = 1;
  					break;
  			}
 -			RNA_boolean_set_array(op->ptr, "constraint_axis", constraint_axis);
 -			WM_operator_name_call(C, "TRANSFORM_OT_translate", WM_OP_INVOKE_DEFAULT, op->ptr);
 +			WM_operator_properties_alloc(&ptr, &properties, "TRANSFORM_OT_translate");
 +			/* Force orientation */
 +			RNA_boolean_set(ptr, "release_confirm", true);
 +			RNA_enum_set(ptr, "constraint_orientation", v3d->twmode);
 +			RNA_boolean_set_array(ptr, "constraint_axis", constraint_axis);
 +			WM_operator_name_call(C, "TRANSFORM_OT_translate", WM_OP_INVOKE_DEFAULT, ptr);
- 			//wm_operator_invoke(C, WM_operatortype_find("TRANSFORM_OT_translate", 0), event, op->ptr, NULL, false);
  		}
 -		else if (drawflags & MAN_SCALE_C) {
 -			switch (drawflags) {
 +		else if (val & MAN_SCALE_C) {
 +			switch (val) {
  				case MAN_SCALE_X:
  					if (shift) {
  						constraint_axis[1] = 1;
@@@ -1924,28 -1878,25 +1923,26 @@@
  						constraint_axis[2] = 1;
  					break;
  			}
 -			RNA_boolean_set_array(op->ptr, "constraint_axis", constraint_axis);
 -			WM_operator_name_call(C, "TRANSFORM_OT_resize", WM_OP_INVOKE_DEFAULT, op->ptr);
 +			WM_operator_properties_alloc(&ptr, &properties, "TRANSFORM_OT_resize");
 +			/* Force orientation */
 +			RNA_boolean_set(ptr, "release_confirm", true);
 +			RNA_enum_set(ptr, "constraint_orientation", v3d->twmode);
 +			RNA_boolean_set_array(ptr, "constraint_axis", constraint_axis);
 +			WM_operator_name_call(C, "TRANSFORM_OT_resize", WM_OP_INVOKE_DEFAULT, ptr);
- 			//wm_operator_invoke(C, WM_operatortype_find("TRANSFORM_OT_resize", 0), event, op->ptr, NULL, false);
  		}
 -		else if (drawflags == MAN_ROT_T) { /* trackball need special case, init is different */
 +		else if (val == MAN_ROT_T) { /* trackball need special case, init is different */
  			/* Do not pass op->ptr!!! trackball has no "constraint" properties!
  			 * See [#34621], it's a miracle it did not cause more problems!!! */
  			/* However, we need to copy the "release_confirm" property, but only if defined, see T41112. */
  			PointerRNA props_ptr;
 -			PropertyRNA *prop;
  			wmOperatorType *ot = WM_operatortype_find("TRANSFORM_OT_trackball", true);
  			WM_operator_properties_create_ptr(&props_ptr, ot);
 -			if ((prop = RNA_struct_find_property(op->ptr, "release_confirm")) && RNA_property_is_set(op->ptr, prop)) {
 -				RNA_property_boolean_set(&props_ptr, prop, RNA_property_boolean_get(op->ptr, prop));
 -			}
 +			RNA_boolean_set(&props_ptr, "release_confirm", true);
- 			WM_operator_name_call(C, ot->idname, WM_OP_INVOKE_DEFAULT, &props_ptr);
- 			//wm_operator_invoke(C, WM_operatortype_find(ot->idname, 0), event, NULL, NULL, false);
+ 			WM_operator_name_call_ptr(C, ot, WM_OP_INVOKE_DEFAULT, &props_ptr);
  			WM_operator_properties_free(&props_ptr);
  		}
 -		else if (drawflags & MAN_ROT_C) {
 -			switch (drawflags) {
 +		else if (val & MAN_ROT_C) {
 +			switch (val) {
  				case MAN_ROT_X:
  					constraint_axis[0] = 1;
  					break;
@@@ -1956,130 -1907,13 +1953,129 @@@
  					constraint_axis[2] = 1;
  					break;
  			}
 -			RNA_boolean_set_array(op->ptr, "constraint_axis", constraint_axis);
 -			WM_operator_name_call(C, "TRANSFORM_OT_rotate", WM_OP_INVOKE_DEFAULT, op->ptr);
 +			WM_operator_properties_alloc(&ptr, &properties, "TRANSFORM_OT_rotate");
 +			/* Force orientation */
 +			RNA_boolean_set(ptr, "release_confirm", true);
 +			RNA_enum_set(ptr, "constraint_orientation", v3d->twmode);
 +			RNA_boolean_set_array(ptr, "constraint_axis", constraint_axis);
 +			WM_operator_name_call(C, "TRANSFORM_OT_rotate", WM_OP_INVOKE_DEFAULT, ptr);
- 			//wm_operator_invoke(C, WM_operatortype_find("TRANSFORM_OT_rotate", 0), event, op->ptr, NULL, false);
  		}
  	}
 -	/* after transform, restore drawflags */
 -	drawflags = 0xFFFF;
 +	
 +	if (ptr) {
 +		WM_operator_properties_free(ptr);
 +		MEM_freeN(ptr);
 +	}
  
 -	return val;
 +	return (val) ? OPERATOR_FINISHED : OPERATOR_PASS_THROUGH;
  }
  
 +/* return 0; nothing happened */
 +int WIDGET_manipulator_handler_trans(bContext *C, const struct wmEvent *event, wmWidget *widget, struct PointerRNA *ptr)
 +{
 +	ScrArea *sa = CTX_wm_area(C);
 +	View3D *v3d = sa->spacedata.first;
 +	int constraint_axis[3] = {0, 0, 0};
 +	int shift = event->shift;
 +	int direction = GET_INT_FROM_POINTER(WM_widget_customdata(widget));
 +
 +	if (!((v3d->twflag & V3D_USE_MANIPULATOR) && (v3d->twflag & V3D_DRAW_MANIPULATOR)) ||
 +	    !(event->keymodifier == 0 || event->keymodifier == KM_SHIFT))
 +	{
 +		;//return OPERATOR_PASS_THROUGH;
 +	}
 +	
 +	if (shift) {
 +		int d = 0;
 +		for (; d < 3; d++) {
 +			if (d != direction)
 +				constraint_axis[d] = 1;
 +		}
 +	}
 +	else
 +		constraint_axis[direction] = 1;
 +	
 +	/* Force orientation */
 +	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);
 +
 +	return OPERATOR_FINISHED;
 +}
 +
 +/* return 0; nothing happened */
 +int WIDGET_manipulator_handler_rot(bContext *C, const struct wmEvent *UNUSED(event), wmWidget *widget, struct PointerRNA *ptr)
 +{
 +	ScrArea *sa = CTX_wm_area(C);
 +	View3D *v3d = sa->spacedata.first;
 +	int constraint_axis[3] = {0, 0, 0};
 +	int direction = GET_INT_FROM_POINTER(WM_widget_customdata(widget));
 +
 +	if (!(v3d->twflag & V3D_USE_MANIPULATOR) && (v3d->twflag & V3D_DRAW_MANIPULATOR))
 +	{
 +		;//return OPERATOR_PASS_THROUGH;
 +	}
 +
 +	constraint_axis[direction] = 1;
 +
 +	/* Force orientation */
 +	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);
 +
 +	return OPERATOR_FINISHED;
 +}
 +
 +void WIDGETGROUP_manipulator_free(struct wmWidgetGroup *wgroup)
 +{
 +	ManipulatorGroup *manipulator = WM_widgetgroup_customdata(wgroup);
 +
 +	MEM_freeN(manipulator);
 +}
 +
 +void WIDGETGROUP_manipulator_create(struct wmWidgetGroup *wgroup)
 +{
 +	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");
 +
 +	widget = WM_widget_new(WIDGET_manipulator_draw,
 +	                       WIDGET_manipulator_render_3d_intersect,
 +	                       NULL,
 +	                       WIDGET_manipulator_handler,
 +	                       NULL, false);
 +
 +	WM_widget_register(wgroup, widget);
 +
 +	manipulator->translate_x = WIDGET_arrow_new(0, NULL);
 +	WIDGET_arrow_set_color(manipulator->translate_x, color_red);
 +	WM_widget_register(wgroup, manipulator->translate_x);
 +
 +	manipulator->translate_y = WIDGET_arrow_new(0, SET_INT_IN_POINTER(1));
 +	WIDGET_arrow_set_color(manipulator->translate_y, color_green);
 +	WM_widget_register(wgroup, manipulator->translate_y);
 +
 +	manipulator->translate_z = WIDGET_arrow_new(0, SET_INT_IN_POINTER(2));
 +	WIDGET_arrow_set_color(manipulator->translate_z, color_blue);
 +	WM_widget_register(wgroup, manipulator->translate_z);
 +
 +	manipulator->rotate_x = WIDGET_dial_new(UI_DIAL_STYLE_RING_CLIPPED, NULL);
 +	WIDGET_dial_set_color(manipulator->rotate_x, color_red);
 +	WM_widget_register(wgroup, manipulator->rotate_x);
 +
 +	manipulator->rotate_y = WIDGET_dial_new(UI_DIAL_STYLE_RING_CLIPPED, SET_INT_IN_POINTER(1));
 +	WIDGET_dial_set_color(manipulator->rotate_y, color_green);
 +	WM_widget_register(wgroup, manipulator->rotate_y);
 +
 +	manipulator->rotate_z = WIDGET_dial_new(UI_DIAL_STYLE_RING_CLIPPED, SET_INT_IN_POINTER(2));
 +	WIDGET_dial_set_color(manipulator->rotate_z, color_blue);
 +	WM_widget_register(wgroup, manipulator->rotate_z);
 +
 +	WM_widgetgroup_customdata_set(wgroup, manipulator);
 +}




More information about the Bf-blender-cvs mailing list