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