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);
 +}

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

Reply via email to