Commit: 97f023fb2ddf4a2df5ba334b6a6ba986b926132b Author: Campbell Barton Date: Tue Jun 6 16:53:12 2017 +1000 Branches: custom-manipulators https://developer.blender.org/rB97f023fb2ddf4a2df5ba334b6a6ba986b926132b
WM: functions for assigning all manipulator callbacks - move callbacks into type struct - rename render_3d_intersection -> draw_select - add header for function signatures (needed for types and api headers). =================================================================== M source/blender/editors/space_view3d/view3d_widgets.c M source/blender/editors/transform/transform_manipulator.c M source/blender/editors/transform/transform_manipulator2d.c M source/blender/windowmanager/manipulators/WM_manipulator_api.h M source/blender/windowmanager/manipulators/WM_manipulator_types.h M source/blender/windowmanager/manipulators/intern/manipulator_library/arrow2d_manipulator.c M source/blender/windowmanager/manipulators/intern/manipulator_library/arrow_manipulator.c M source/blender/windowmanager/manipulators/intern/manipulator_library/cage_manipulator.c M source/blender/windowmanager/manipulators/intern/manipulator_library/dial_manipulator.c M source/blender/windowmanager/manipulators/intern/manipulator_library/facemap_manipulator.c M source/blender/windowmanager/manipulators/intern/manipulator_library/primitive_manipulator.c M source/blender/windowmanager/manipulators/intern/wm_manipulator.c M source/blender/windowmanager/manipulators/intern/wm_manipulator_intern.h M source/blender/windowmanager/manipulators/intern/wm_manipulatorgroup.c M source/blender/windowmanager/manipulators/intern/wm_manipulatormap.c A source/blender/windowmanager/manipulators/wm_manipulator_fn.h M source/blender/windowmanager/manipulators/wm_manipulator_wmapi.h =================================================================== diff --git a/source/blender/editors/space_view3d/view3d_widgets.c b/source/blender/editors/space_view3d/view3d_widgets.c index e320a397486..1fb0f0701cc 100644 --- a/source/blender/editors/space_view3d/view3d_widgets.c +++ b/source/blender/editors/space_view3d/view3d_widgets.c @@ -403,7 +403,7 @@ static wmManipulator *armature_facemap_widget_create(wmManipulatorGroup *wgroup, WM_manipulator_set_operator(widget, "TRANSFORM_OT_translate"); WM_manipulator_set_flag(widget, WM_MANIPULATOR_DRAW_HOVER, true); - WM_manipulator_set_func_select(widget, WIDGET_armature_facemaps_select); + WM_manipulator_set_fn_select(widget, WIDGET_armature_facemaps_select); PointerRNA *opptr = WM_manipulator_set_operator(widget, "TRANSFORM_OT_translate"); RNA_boolean_set(opptr, "release_confirm", true); diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c index df529b0054d..c652e2e0324 100644 --- a/source/blender/editors/transform/transform_manipulator.c +++ b/source/blender/editors/transform/transform_manipulator.c @@ -1150,7 +1150,7 @@ static void WIDGETGROUP_manipulator_init(const bContext *UNUSED(C), wmManipulato manipulator_get_axis_constraint(axis_idx, constraint_axis); /* custom handler! */ - WM_manipulator_set_custom_handler(axis, manipulator_handler); + WM_manipulator_set_fn_handler(axis, manipulator_handler); switch(axis_idx) { case MAN_AXIS_TRANS_X: diff --git a/source/blender/editors/transform/transform_manipulator2d.c b/source/blender/editors/transform/transform_manipulator2d.c index b0ed816bd3f..5a2997a111e 100644 --- a/source/blender/editors/transform/transform_manipulator2d.c +++ b/source/blender/editors/transform/transform_manipulator2d.c @@ -192,7 +192,7 @@ void WIDGETGROUP_manipulator2d_init(const bContext *UNUSED(C), wmManipulatorGrou manipulator2d_get_axis_color(axis_idx, col, col_hi); /* custom handler! */ - WM_manipulator_set_custom_handler(axis, manipulator2d_handler); + WM_manipulator_set_fn_handler(axis, manipulator2d_handler); /* set up widget data */ MANIPULATOR_arrow2d_set_angle(axis, -M_PI_2 * axis_idx); MANIPULATOR_arrow2d_set_line_len(axis, 0.8f); diff --git a/source/blender/windowmanager/manipulators/WM_manipulator_api.h b/source/blender/windowmanager/manipulators/WM_manipulator_api.h index 1b504a9772c..76053ed48e0 100644 --- a/source/blender/windowmanager/manipulators/WM_manipulator_api.h +++ b/source/blender/windowmanager/manipulators/WM_manipulator_api.h @@ -39,31 +39,40 @@ struct ARegion; struct Main; struct wmKeyConfig; +struct wmManipulator; +struct wmManipulatorGroup; struct wmManipulatorGroupType; struct wmManipulatorMap; struct wmManipulatorMapType; struct wmManipulatorMapType_Params; +#include "wm_manipulator_fn.h" + /* -------------------------------------------------------------------- */ /* wmManipulator */ struct wmManipulator *WM_manipulator_new( - void (*draw)(const struct bContext *, struct wmManipulator *), - void (*render_3d_intersection)(const struct bContext *, struct wmManipulator *, int), - int (*intersect)(struct bContext *, const struct wmEvent *, struct wmManipulator *), - int (*handler)(struct bContext *, const struct wmEvent *, struct wmManipulator *, const int)); + struct wmManipulatorGroup *mgroup, const char *name); void WM_manipulator_delete( ListBase *manipulatorlist, struct wmManipulatorMap *mmap, struct wmManipulator *manipulator, struct bContext *C); +struct wmManipulatorGroup *WM_manipulator_get_parent_group(struct wmManipulator *manipulator); void WM_manipulator_set_property(struct wmManipulator *, int slot, struct PointerRNA *ptr, const char *propname); struct PointerRNA *WM_manipulator_set_operator(struct wmManipulator *, const char *opname); -void WM_manipulator_set_custom_handler( - struct wmManipulator *manipulator, - int (*handler)(struct bContext *, const struct wmEvent *, struct wmManipulator *, const int)); -void WM_manipulator_set_func_select( - struct wmManipulator *manipulator, - void (*select)(struct bContext *, struct wmManipulator *, const int action)); /* wmManipulatorSelectFunc */ + +/* callbacks */ +void WM_manipulator_set_fn_draw(struct wmManipulator *manipulator, wmManipulatorFnDraw fn); +void WM_manipulator_set_fn_draw_select(struct wmManipulator *manipulator, wmManipulatorFnDrawSelect fn); +void WM_manipulator_set_fn_intersect(struct wmManipulator *manipulator, wmManipulatorFnIntersect fn); +void WM_manipulator_set_fn_handler(struct wmManipulator *manipulator, wmManipulatorFnHandler fn); +void WM_manipulator_set_fn_prop_data_update(struct wmManipulator *mpr, wmManipulatorFnPropDataUpdate fn); +void WM_manipulator_set_fn_final_position_get(struct wmManipulator *mpr, wmManipulatorFnFinalPositionGet fn); +void WM_manipulator_set_fn_invoke(struct wmManipulator *mpr, wmManipulatorFnInvoke fn); +void WM_manipulator_set_fn_exit(struct wmManipulator *mpr, wmManipulatorFnExit fn); +void WM_manipulator_set_fn_cursor_get(struct wmManipulator *mpr, wmManipulatorFnCursorGet fn); +void WM_manipulator_set_fn_select(struct wmManipulator *manipulator, wmManipulatorFnSelect fn); + void WM_manipulator_set_origin(struct wmManipulator *manipulator, const float origin[3]); void WM_manipulator_set_offset(struct wmManipulator *manipulator, const float offset[3]); void WM_manipulator_set_flag(struct wmManipulator *manipulator, const int flag, const bool enable); diff --git a/source/blender/windowmanager/manipulators/WM_manipulator_types.h b/source/blender/windowmanager/manipulators/WM_manipulator_types.h index 9eeb5550ca2..5fb909b06cf 100644 --- a/source/blender/windowmanager/manipulators/WM_manipulator_types.h +++ b/source/blender/windowmanager/manipulators/WM_manipulator_types.h @@ -40,13 +40,10 @@ struct wmManipulatorGroupType; struct wmManipulatorGroup; +struct wmManipulator; struct wmKeyConfig; -typedef bool (*wmManipulatorGroupPollFunc)(const struct bContext *, struct wmManipulatorGroupType *) ATTR_WARN_UNUSED_RESULT; -typedef void (*wmManipulatorGroupInitFunc)(const struct bContext *, struct wmManipulatorGroup *); -typedef void (*wmManipulatorGroupRefreshFunc)(const struct bContext *, struct wmManipulatorGroup *); -typedef void (*wmManipulatorGroupDrawPrepareFunc)(const struct bContext *, struct wmManipulatorGroup *); - +#include "wm_manipulator_fn.h" /* -------------------------------------------------------------------- */ /* wmManipulator */ @@ -79,13 +76,13 @@ typedef struct wmManipulatorGroupType { const char *name; /* manipulator-group name - displayed in UI (keymap editor) */ /* poll if manipulator-map should be visible */ - wmManipulatorGroupPollFunc poll; + wmManipulatorGroupFnPoll poll; /* initially create manipulators and set permanent data - stuff you only need to do once */ - wmManipulatorGroupInitFunc init; + wmManipulatorGroupFnInit init; /* refresh data, only called if recreate flag is set (WM_manipulatormap_tag_refresh) */ - wmManipulatorGroupRefreshFunc refresh; + wmManipulatorGroupFnRefresh refresh; /* refresh data for drawing, called before each redraw */ - wmManipulatorGroupDrawPrepareFunc draw_prepare; + wmManipulatorGroupFnDrawPrepare draw_prepare; /* keymap init callback for this manipulator-group */ struct wmKeyMap *(*keymap_init)(const struct wmManipulatorGroupType *, struct wmKeyConfig *); @@ -103,6 +100,9 @@ typedef struct wmManipulatorGroupType { int flag; + /* Weak, but needed to store which functions we have. */ + int rna_func_flag; + /* if type is spawned from operator this is set here */ void *op; diff --git a/source/blender/windowmanager/manipulators/intern/manipulator_library/arrow2d_manipulator.c b/source/blender/windowmanager/manipulators/intern/manipulator_library/arrow2d_manipulator.c index ad5f2f6251b..842e66656a2 100644 --- a/source/blender/windowmanager/manipulators/intern/manipulator_library/arrow2d_manipulator.c +++ b/source/blender/windowmanager/manipulators/intern/manipulator_library/arrow2d_manipulator.c @@ -193,12 +193,12 @@ struct wmManipulator *MANIPULATOR_arrow2d_new(wmManipulatorGroup *mgroup, const { ArrowManipulator2D *arrow = MEM_callocN(sizeof(ArrowManipulator2D), __func__); - arrow->manipulator.draw = manipulator_arrow2d_draw; - arrow->manipulator.invoke = manipulator_arrow2d_invoke; -// arrow->manipulator.bind_to_prop = manipulator_arrow2d_bind_to_prop; -// arrow->manipulator.handler = manipulator_arrow2d_handler; - arrow->manipulator.intersect = manipulator_arrow2d_intersect; -// arrow->manipulator.exit = manipulator_arrow2d_exit; + arrow->manipulator.type.draw = manipulator_arrow2d_draw; + arrow->manipulator.type.invoke = manipulator_arrow2d_invoke; +// arrow->manipulator.type.bind_to_prop = manipulator_arrow2d_bind_to_prop; +// arrow->manipulator.type.handler = manipulator_arrow2d_handler; + arrow->manipulator.type.intersect = manipulator_arrow2d_intersect; +// arrow->manipulator.type.exit = manipulator_arrow2d_exit; arrow->manipulator.flag |= WM_MANIPULATOR_DRAW_ACTIVE; arrow->line_len = 1.0f; diff --git a/source/blender/windowmanager/manipulators/intern/manipulator_library/arrow_manipulator.c b/source/blender/windowmanager/manipulators/intern/manipulator_library/arrow_manipulator.c index b2e04849c34..6e9abb9137e 100644 --- a/source/blender/windowmanager/manipulators/intern/manipulator_library/arrow_manipulator.c +++ b/source/blender/windowmanager/manipulators/intern/manipulator_library/arrow_manipulator.c @@ -437,14 +437,14 @@ wmManipulator *MANIPULATOR_arrow_new(wmManipulatorGroup *mgroup, const char *nam ArrowManipulator *arrow = MEM_callocN(sizeof(ArrowManipulator), name); const float dir_default[3] = {0.0f, 0.0f, 1.0f}; - arrow->manipulator.draw = manipulator_arrow_draw; - arrow->manipulator.get_final_position = manipulator_arrow_get_final_pos; - arrow->manipulator.intersect = NULL; - arrow->manipulator.handler = manipulator_arrow_handler; - arrow->manipulator.invoke = manipulator_arrow_invoke; - arrow->manipulator.render_3d_intersection = manipulator_arrow_render_3d_intersect; - arrow->manipulator.prop_data_update = manipulator_arrow_prop_data_upda @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs