Commit: 6968547b803d3857c77108a5d2dce1a6ce75b59a
Author: Antony Riakiotakis
Date:   Mon Nov 10 14:55:07 2014 +0100
Branches: wiggly-widgets
https://developer.blender.org/rB6968547b803d3857c77108a5d2dce1a6ce75b59a

Bound properties/operators to widgets at draw time. This fits our design
much better (is the same as the way panels work) and will help avoiding
some crashes on undo.

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

M       source/blender/editors/include/ED_transform.h
M       source/blender/editors/object/object_lamp.c
M       source/blender/editors/space_view3d/space_view3d.c
M       source/blender/editors/transform/transform_manipulator.c
M       source/blender/windowmanager/WM_api.h
M       source/blender/windowmanager/intern/wm_generic_widgets.c
M       source/blender/windowmanager/intern/wm_widgets.c

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

diff --git a/source/blender/editors/include/ED_transform.h 
b/source/blender/editors/include/ED_transform.h
index c66e04d..ee88000 100644
--- a/source/blender/editors/include/ED_transform.h
+++ b/source/blender/editors/include/ED_transform.h
@@ -165,7 +165,7 @@ typedef struct ManipulatorGroup {
        struct wmWidget *rotate_z;
 } ManipulatorGroup;
 
-int WIDGET_manipulator_handler(struct bContext *C, const struct wmEvent 
*event, struct wmWidget *widget, struct PointerRNA *ptr);
+int WIDGET_manipulator_handler(struct bContext *C, const struct wmEvent 
*event, struct wmWidget *widget, struct wmOperator *ptr);
 
 int WIDGET_manipulator_handler_trans(struct bContext *C, const struct wmEvent 
*event, struct wmWidget *widget, struct PointerRNA *ptr);
 int WIDGET_manipulator_handler_rot(struct bContext *C, const struct wmEvent 
*event, struct wmWidget *widget, struct PointerRNA *ptr);
diff --git a/source/blender/editors/object/object_lamp.c 
b/source/blender/editors/object/object_lamp.c
index a17299b..11db061 100644
--- a/source/blender/editors/object/object_lamp.c
+++ b/source/blender/editors/object/object_lamp.c
@@ -223,7 +223,7 @@ void WIDGETGROUP_lamp_update(struct wmWidgetGroup *wgroup, 
const struct bContext
 
        RNA_pointer_create(&ob->id, &RNA_Lamp, ob->data, data->lamp);
        WM_widget_set_origin(lamp, ob->obmat[3]);
-       WM_widget_bind_to_prop(lamp, data->lamp, "spot_size");
+       WM_widget_property(lamp, data->lamp, "spot_size");
        negate_v3_v3(dir, ob->obmat[2]);
        WIDGET_arrow_set_direction(lamp, dir);
 }
diff --git a/source/blender/editors/space_view3d/space_view3d.c 
b/source/blender/editors/space_view3d/space_view3d.c
index 6bea2ed..122f2ad 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -705,31 +705,31 @@ static void WIDGETGROUP_manipulator_create(struct 
wmWidgetGroup *wgroup)
                               WIDGET_manipulator_render_3d_intersect,
                               NULL,
                               WIDGET_manipulator_handler,
-                              NULL, NULL, false, NULL, NULL);
+                              NULL, false);
 
        WM_widget_register(wgroup, widget);
 
-       manipulator->translate_x = WIDGET_arrow_new(0, 
WIDGET_manipulator_handler_trans, "TRANSFORM_OT_translate", NULL, NULL);
+       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, 
WIDGET_manipulator_handler_trans, "TRANSFORM_OT_translate", NULL, 
SET_INT_IN_POINTER(1));
+       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, 
WIDGET_manipulator_handler_trans, "TRANSFORM_OT_translate", NULL, 
SET_INT_IN_POINTER(2));
+       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, 
WIDGET_manipulator_handler_rot, "TRANSFORM_OT_rotate", NULL, NULL);
+       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, 
WIDGET_manipulator_handler_rot, "TRANSFORM_OT_rotate", NULL, 
SET_INT_IN_POINTER(1));
+       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, 
WIDGET_manipulator_handler_rot, "TRANSFORM_OT_rotate", NULL, 
SET_INT_IN_POINTER(2));
+       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);
 
@@ -744,7 +744,7 @@ static void WIDGETGROUP_lamp_create(struct wmWidgetGroup 
*wgroup)
 
        lampgroup->lamp = MEM_callocN(sizeof(PointerRNA), "lampwidgetptr");
 
-       widget = WIDGET_arrow_new(UI_ARROW_STYLE_INVERTED, NULL, NULL, NULL, 
NULL);
+       widget = WIDGET_arrow_new(UI_ARROW_STYLE_INVERTED, NULL);
        WM_widget_register(wgroup, widget);
        WIDGET_arrow_set_color(widget, color_lamp);
 
diff --git a/source/blender/editors/transform/transform_manipulator.c 
b/source/blender/editors/transform/transform_manipulator.c
index 68311b8..20340be 100644
--- a/source/blender/editors/transform/transform_manipulator.c
+++ b/source/blender/editors/transform/transform_manipulator.c
@@ -1759,6 +1759,13 @@ void WIDGETGROUP_manipulator_update(struct wmWidgetGroup 
*wgroup, const struct b
        test_manipulator_axis(C);
        drawflags = rv3d->twdrawflag;    /* set in calc_manipulator_stats */    
 
+       WM_widget_operator(manipulator->translate_x, 
WIDGET_manipulator_handler_trans, "TRANSFORM_OT_translate", NULL);
+       WM_widget_operator(manipulator->translate_y, 
WIDGET_manipulator_handler_trans, "TRANSFORM_OT_translate", NULL);
+       WM_widget_operator(manipulator->translate_z, 
WIDGET_manipulator_handler_trans, "TRANSFORM_OT_translate", NULL);
+       WM_widget_operator(manipulator->rotate_x, 
WIDGET_manipulator_handler_rot, "TRANSFORM_OT_rotate", NULL);
+       WM_widget_operator(manipulator->rotate_y, 
WIDGET_manipulator_handler_rot, "TRANSFORM_OT_rotate", NULL);
+       WM_widget_operator(manipulator->rotate_z, 
WIDGET_manipulator_handler_rot, "TRANSFORM_OT_rotate", NULL);
+
        if (v3d->twtype & V3D_MANIP_TRANSLATE) {
                /* should be added according to the order of axis */
                WM_widget_set_origin(manipulator->translate_x, rv3d->twmat[3]);
@@ -1832,7 +1839,7 @@ void WIDGET_manipulator_render_3d_intersect(const 
bContext *C, wmWidget *UNUSED(
 }
 
 /* return 0; nothing happened */
-int WIDGET_manipulator_handler(bContext *C, const struct wmEvent *event, 
wmWidget *UNUSED(widget), struct PointerRNA *UNUSED(opptr))
+int WIDGET_manipulator_handler(bContext *C, const struct wmEvent *event, 
wmWidget *UNUSED(widget), wmOperator *op)
 {
        ScrArea *sa = CTX_wm_area(C);
        View3D *v3d = sa->spacedata.first;
diff --git a/source/blender/windowmanager/WM_api.h 
b/source/blender/windowmanager/WM_api.h
index 45508f5..c73d1de 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -476,11 +476,14 @@ struct wmWidgetGroupType *WM_widgetgrouptype_new(void 
(*create)(struct wmWidgetG
 struct wmWidget *WM_widget_new(void (*draw)(struct wmWidget *, const struct 
bContext *),
                                void (*render_3d_intersection)(const struct 
bContext *, struct wmWidget *, int),
                                int  (*intersect)(struct bContext *C, const 
struct wmEvent *event, struct wmWidget *customdata),
-                               int  (*initialize_op)(struct bContext *, const 
struct wmEvent *, struct wmWidget *, struct PointerRNA *),
                                int  (*handler)(struct bContext *, const struct 
wmEvent *, struct wmWidget *, struct wmOperator *op),
-                               void *customdata, bool free_data, char *opname, 
char *prop);
+                               void *customdata, bool free_data);
 
-void WM_widget_bind_to_prop(struct wmWidget *, struct PointerRNA *ptr, const 
char *propname);
+void WM_widget_property(struct wmWidget *, struct PointerRNA *ptr, const char 
*propname);
+void WM_widget_operator(struct wmWidget *,
+                        int  (*initialize_op)(struct bContext *, const struct 
wmEvent *, struct wmWidget *, struct PointerRNA *),
+                        const char *opname,
+                        const char *propname);
 void WM_widgets_draw(const struct bContext *C, struct ARegion *ar);
 void WM_event_add_widget_handler(struct ARegion *ar);
 
@@ -519,18 +522,11 @@ enum {
        UI_DIAL_STYLE_RING_CLIPPED = 1,
 };
 
-struct wmWidget *WIDGET_arrow_new(int style,
-                                  int (*initialize_op)(struct bContext *C, 
const struct wmEvent *event, struct wmWidget *widget, struct PointerRNA *ptr),
-                                  const char *opname,
-                                  const char *prop,
-                                  void *customdata);
+struct wmWidget *WIDGET_arrow_new(int style, void *customdata);
 void WIDGET_arrow_set_color(struct wmWidget *widget, float color[4]);
 void WIDGET_arrow_set_direction(struct wmWidget *widget, float direction[3]);
 
 struct wmWidget *WIDGET_dial_new(int style,
-                                 int (*initialize_op)(struct bContext *C, 
const struct wmEvent *event, struct wmWidget *widget, struct PointerRNA *ptr),
-                                 const char *opname,
-                                 const char *prop,
                                  void *customdata);
 void WIDGET_dial_set_color(struct wmWidget *widget, float color[4]);
 void WIDGET_dial_set_direction(struct wmWidget *widget, float direction[3]);
diff --git a/source/blender/windowmanager/intern/wm_generic_widgets.c 
b/source/blender/windowmanager/intern/wm_generic_widgets.c
index f7fca23..b3fc761 100644
--- a/source/blender/windowmanager/intern/wm_generic_widgets.c
+++ b/source/blender/windowmanager/intern/wm_generic_widgets.c
@@ -326,9 +326,7 @@ static int widget_arrow_activate(struct bContext 
*UNUSED(C), const struct wmEven
 }
 
 
-wmWidget *WIDGET_arrow_new(int style,
-                           int (*initialize_op)(struct bContext *C, const 
struct wmEvent *event, struct wmWidget *widget, struct PointerRNA *ptr),
-                           const char *opname, const char *prop, void 
*customdata)
+wmWidget *WIDGET_arrow_new(int style, void *customdata)
 {
        float dir_default[3] = {0.0f, 0.0f, 1.0f};
        ArrowWidget *arrow;
@@ -345,13 +343,10 @@ wmWidget *WIDGET_arrow_new(int style,
        arrow = MEM_callocN(sizeof(ArrowWidget), "arrowwidget");
        
        arrow->widget.draw = widget_arrow_draw;
-       arrow->widget.initialize_op = initialize_op;
        arrow->widget.intersect = NULL;
        arrow->widget.handler = widget_arrow_

@@ Diff output truncated at 10240 characters. @@

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

Reply via email to