[Bf-blender-cvs] [6968547] wiggly-widgets: 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.

Antony Riakiotakis noreply at git.blender.org
Mon Nov 10 14:55:17 CET 2014


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. @@




More information about the Bf-blender-cvs mailing list