[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