Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2017-06-05 11:10:52 +0300
committerCampbell Barton <ideasman42@gmail.com>2017-06-05 11:10:52 +0300
commitcb4f7594a04b5d4b1fa6b543ced93128aae140f7 (patch)
treed88cf1cead20d5b63f5a41f3b0f87170b0c7857a /source/blender
parent0d428c674ac69208639e0c251e434ecc3e9ec261 (diff)
WM: add WM_manipulatorgrouptype_append_ptr
Needed for PyAPI registration.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/windowmanager/manipulators/WM_manipulator_api.h9
-rw-r--r--source/blender/windowmanager/manipulators/intern/wm_manipulatorgroup.c47
2 files changed, 49 insertions, 7 deletions
diff --git a/source/blender/windowmanager/manipulators/WM_manipulator_api.h b/source/blender/windowmanager/manipulators/WM_manipulator_api.h
index c2d194c7c03..09d050b363e 100644
--- a/source/blender/windowmanager/manipulators/WM_manipulator_api.h
+++ b/source/blender/windowmanager/manipulators/WM_manipulator_api.h
@@ -78,9 +78,18 @@ void WM_manipulator_set_colors(struct wmManipulator *manipulator, const float co
struct wmManipulatorGroupType *WM_manipulatorgrouptype_append(
struct wmManipulatorMapType *mmaptype,
void (*mgrouptype_func)(struct wmManipulatorGroupType *));
+struct wmManipulatorGroupType *WM_manipulatorgrouptype_append_ptr(
+ struct wmManipulatorMapType *mmaptype,
+ void (*mgrouptype_func)(struct wmManipulatorGroupType *, void *),
+ void *userdata);
struct wmManipulatorGroupType *WM_manipulatorgrouptype_append_runtime(
const struct Main *main, struct wmManipulatorMapType *mmaptype,
void (*mgrouptype_func)(struct wmManipulatorGroupType *));
+struct wmManipulatorGroupType *WM_manipulatorgrouptype_append_ptr_runtime(
+ const struct Main *main, struct wmManipulatorMapType *mmaptype,
+ void (*mgrouptype_func)(struct wmManipulatorGroupType *, void *),
+ void *userdata);
+
void WM_manipulatorgrouptype_init_runtime(
const struct Main *bmain, struct wmManipulatorMapType *mmaptype,
struct wmManipulatorGroupType *mgrouptype);
diff --git a/source/blender/windowmanager/manipulators/intern/wm_manipulatorgroup.c b/source/blender/windowmanager/manipulators/intern/wm_manipulatorgroup.c
index 5074c6d0257..11fc1b32047 100644
--- a/source/blender/windowmanager/manipulators/intern/wm_manipulatorgroup.c
+++ b/source/blender/windowmanager/manipulators/intern/wm_manipulatorgroup.c
@@ -484,15 +484,14 @@ wmKeyMap *WM_manipulatorgroup_keymap_common_sel(const struct wmManipulatorGroupT
*
* \{ */
-/**
- * Use this for registering manipulators on startup. For runtime, use #WM_manipulatorgrouptype_append_runtime.
- */
-wmManipulatorGroupType *WM_manipulatorgrouptype_append(
- wmManipulatorMapType *mmaptype, void (*mgrouptype_func)(wmManipulatorGroupType *))
+static wmManipulatorGroupType *wm_manipulatorgrouptype_append__begin(void)
{
wmManipulatorGroupType *mgrouptype = MEM_callocN(sizeof(wmManipulatorGroupType), "manipulator-group");
-
- mgrouptype_func(mgrouptype);
+ return mgrouptype;
+}
+static void wm_manipulatorgrouptype_append__end(
+ wmManipulatorMapType *mmaptype, wmManipulatorGroupType *mgrouptype)
+{
mgrouptype->spaceid = mmaptype->spaceid;
mgrouptype->regionid = mmaptype->regionid;
BLI_strncpy(mgrouptype->mapidname, mmaptype->idname, MAX_NAME);
@@ -503,6 +502,27 @@ wmManipulatorGroupType *WM_manipulatorgrouptype_append(
/* add the type for future created areas of the same type */
BLI_addtail(&mmaptype->manipulator_grouptypes, mgrouptype);
+}
+
+/**
+ * Use this for registering manipulators on startup. For runtime, use #WM_manipulatorgrouptype_append_runtime.
+ */
+wmManipulatorGroupType *WM_manipulatorgrouptype_append(
+ wmManipulatorMapType *mmaptype, void (*mgrouptype_func)(wmManipulatorGroupType *))
+{
+ wmManipulatorGroupType *mgrouptype = wm_manipulatorgrouptype_append__begin();
+ mgrouptype_func(mgrouptype);
+ wm_manipulatorgrouptype_append__end(mmaptype, mgrouptype);
+ return mgrouptype;
+}
+
+wmManipulatorGroupType *WM_manipulatorgrouptype_append_ptr(
+ wmManipulatorMapType *mmaptype, void (*mgrouptype_func)(wmManipulatorGroupType *, void *),
+ void *userdata)
+{
+ wmManipulatorGroupType *mgrouptype = wm_manipulatorgrouptype_append__begin();
+ mgrouptype_func(mgrouptype, userdata);
+ wm_manipulatorgrouptype_append__end(mmaptype, mgrouptype);
return mgrouptype;
}
@@ -521,6 +541,19 @@ wmManipulatorGroupType *WM_manipulatorgrouptype_append_runtime(
return mgrouptype;
}
+wmManipulatorGroupType *WM_manipulatorgrouptype_append_ptr_runtime(
+ const Main *main, wmManipulatorMapType *mmaptype,
+ void (*mgrouptype_func)(wmManipulatorGroupType *, void *),
+ void *userdata)
+{
+ wmManipulatorGroupType *mgrouptype = WM_manipulatorgrouptype_append_ptr(mmaptype, mgrouptype_func, userdata);
+
+ /* Main is missing on startup when we create new areas.
+ * So this is only called for manipulators initialized on runtime */
+ WM_manipulatorgrouptype_init_runtime(main, mmaptype, mgrouptype);
+
+ return mgrouptype;
+}
void WM_manipulatorgrouptype_init_runtime(
const Main *bmain, wmManipulatorMapType *mmaptype,