[Bf-blender-cvs] [443904f1f4f] blender2.8: WM: functions for assigning all manipulator callbacks
Campbell Barton
noreply at git.blender.org
Tue Jun 6 09:08:56 CEST 2017
Commit: 443904f1f4f9f0b45e4ef10ec4b5c9392559ada0
Author: Campbell Barton
Date: Tue Jun 6 17:07:26 2017 +1000
Branches: blender2.8
https://developer.blender.org/rB443904f1f4f9f0b45e4ef10ec4b5c9392559ada0
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).
- Add WM_manipulatormaptype_find
===================================================================
M source/blender/editors/transform/transform_manipulator.c
M source/blender/windowmanager/CMakeLists.txt
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/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
M source/blenderplayer/bad_level_call_stubs/stubs.c
===================================================================
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/windowmanager/CMakeLists.txt b/source/blender/windowmanager/CMakeLists.txt
index ffdc0a59dee..b61b4472c4a 100644
--- a/source/blender/windowmanager/CMakeLists.txt
+++ b/source/blender/windowmanager/CMakeLists.txt
@@ -97,6 +97,7 @@ set(SRC
manipulators/WM_manipulator_api.h
manipulators/WM_manipulator_types.h
manipulators/WM_manipulator_library.h
+ manipulators/wm_manipulator_fn.h
manipulators/wm_manipulator_wmapi.h
manipulators/intern/wm_manipulator_intern.h
manipulators/intern/manipulator_library/manipulator_geometry.h
diff --git a/source/blender/windowmanager/manipulators/WM_manipulator_api.h b/source/blender/windowmanager/manipulators/WM_manipulator_api.h
index 09d050b363e..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);
@@ -75,6 +84,9 @@ void WM_manipulator_set_colors(struct wmManipulator *manipulator, const float co
/* -------------------------------------------------------------------- */
/* wmManipulatorGroup */
+struct wmManipulatorGroupType *WM_manipulatorgrouptype_find(
+ struct wmManipulatorMapType *mmaptype,
+ const char *idname);
struct wmManipulatorGroupType *WM_manipulatorgrouptype_append(
struct wmManipulatorMapType *mmaptype,
void (*mgrouptype_func)(struct wmManipulatorGroupType *));
diff --git a/source/blender/windowmanager/manipulators/WM_manipulator_types.h b/source/blender/windowmanager/manipulators/WM_manipulator_types.h
index 8de33ca923e..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,27 +76,33 @@ 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 *);
/* keymap created with callback from above */
struct wmKeyMap *keymap;
+ /* Disable for now, maybe some day we want properties. */
+#if 0
/* rna for properties */
struct StructRNA *srna;
+#endif
/* RNA integration */
ExtensionRNA ext;
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_update;
- arrow->manipulator.exit = manipulator_arrow_exit;
+ arrow->manipulator.type.draw = manipulator_arrow_draw;
+ arrow->manipulator.type.draw_select = manipulator_arrow_render_3d_intersect;
+ arrow->manipulator.type.final_position_get = manipulator_arrow_get_final_pos;
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list