Commit: 072f3c5723be26a846458975302b4c0788184548
Author: Campbell Barton
Date:   Fri Jun 9 22:56:56 2017 +1000
Branches: custom-manipulators
https://developer.blender.org/rB072f3c5723be26a846458975302b4c0788184548

Replace array of properties with a named list

This is useful for Py/RNA access.

Add support for indexing arrays too.

===================================================================

M       source/blender/editors/include/ED_manipulator_library.h
M       source/blender/editors/manipulator_library/arrow3d_manipulator.c
M       source/blender/editors/manipulator_library/cage2d_manipulator.c
M       source/blender/editors/manipulator_library/manipulator_library_intern.h
M       source/blender/editors/manipulator_library/manipulator_library_utils.c
M       source/blender/editors/space_node/node_widgets.c
M       source/blender/editors/space_view3d/view3d_manipulators.c
M       source/blender/makesrna/intern/rna_wm_manipulator.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/wm_manipulator.c
M       source/blender/windowmanager/manipulators/wm_manipulator_fn.h

===================================================================

diff --git a/source/blender/editors/include/ED_manipulator_library.h 
b/source/blender/editors/include/ED_manipulator_library.h
index 39733e9248e..cb89551d052 100644
--- a/source/blender/editors/include/ED_manipulator_library.h
+++ b/source/blender/editors/include/ED_manipulator_library.h
@@ -75,11 +75,6 @@ enum {
        ED_MANIPULATOR_ARROW_STYLE_CONE          = (1 << 6),
 };
 
-/* slots for properties */
-enum {
-       ED_MANIPULATOR_ARROW_SLOT_OFS_WORLD_SPACE = 0
-};
-
 struct wmManipulator *ED_manipulator_arrow3d_new(
         struct wmManipulatorGroup *mgroup, const char *name, const int style);
 void ED_manipulator_arrow3d_set_direction(struct wmManipulator *manipulator, 
const float direction[3]);
@@ -108,11 +103,6 @@ enum {
        ED_MANIPULATOR_RECT_TRANSFORM_STYLE_SCALE_UNIFORM   = (1 << 3), /* 
Manipulator scales uniformly */
 };
 
-enum {
-       ED_MANIPULATOR_RECT_TX_SLOT_OFFSET = 0,
-       ED_MANIPULATOR_RECT_TX_SLOT_SCALE = 1
-};
-
 struct wmManipulator *ED_manipulator_rect_transform_new(
         struct wmManipulatorGroup *mgroup, const char *name, const int style);
 void ED_manipulator_rect_transform_set_dimensions(
diff --git a/source/blender/editors/manipulator_library/arrow3d_manipulator.c 
b/source/blender/editors/manipulator_library/arrow3d_manipulator.c
index 541a81bd38a..df3d386c11d 100644
--- a/source/blender/editors/manipulator_library/arrow3d_manipulator.c
+++ b/source/blender/editors/manipulator_library/arrow3d_manipulator.c
@@ -239,26 +239,26 @@ static void arrow_draw_intern(ArrowManipulator3D *arrow, 
const bool select, cons
 }
 
 static void manipulator_arrow_render_3d_intersect(
-        const bContext *UNUSED(C), wmManipulator *manipulator,
+        const bContext *UNUSED(C), wmManipulator *mpr,
         int selectionbase)
 {
        GPU_select_load_id(selectionbase);
-       arrow_draw_intern((ArrowManipulator3D *)manipulator, true, false);
+       arrow_draw_intern((ArrowManipulator3D *)mpr, true, false);
 }
 
-static void manipulator_arrow_draw(const bContext *UNUSED(C), wmManipulator 
*manipulator)
+static void manipulator_arrow_draw(const bContext *UNUSED(C), wmManipulator 
*mpr)
 {
-       arrow_draw_intern((ArrowManipulator3D *)manipulator, false, 
(manipulator->state & WM_MANIPULATOR_STATE_HIGHLIGHT) != 0);
+       arrow_draw_intern((ArrowManipulator3D *)mpr, false, (mpr->state & 
WM_MANIPULATOR_STATE_HIGHLIGHT) != 0);
 }
 
 /**
  * Calculate arrow offset independent from prop min value,
  * meaning the range will not be offset by min value first.
  */
-static void manipulator_arrow_modal(bContext *C, wmManipulator *manipulator, 
const wmEvent *event, const int flag)
+static void manipulator_arrow_modal(bContext *C, wmManipulator *mpr, const 
wmEvent *event, const int flag)
 {
-       ArrowManipulator3D *arrow = (ArrowManipulator3D *)manipulator;
-       ManipulatorInteraction *inter = manipulator->interaction_data;
+       ArrowManipulator3D *arrow = (ArrowManipulator3D *)mpr;
+       ManipulatorInteraction *inter = mpr->interaction_data;
        ARegion *ar = CTX_wm_region(C);
        RegionView3D *rv3d = ar->regiondata;
 
@@ -343,18 +343,19 @@ static void manipulator_arrow_modal(bContext *C, 
wmManipulator *manipulator, con
 
        ManipulatorCommonData *data = &arrow->data;
        const float ofs_new = facdir * len_v3(offset);
-       const int slot = ED_MANIPULATOR_ARROW_SLOT_OFS_WORLD_SPACE;
+
+       wmManipulatorProperty *mpr_prop = WM_manipulator_get_property(mpr, 
"offset");
 
        /* set the property for the operator and call its modal function */
-       if (manipulator->props[slot]) {
+       if (mpr_prop->prop != NULL) {
                const bool constrained = arrow->style & 
ED_MANIPULATOR_ARROW_STYLE_CONSTRAINED;
                const bool inverted = arrow->style & 
ED_MANIPULATOR_ARROW_STYLE_INVERTED;
                const bool use_precision = flag & WM_MANIPULATOR_TWEAK_PRECISE;
                float value = manipulator_value_from_offset(data, inter, 
ofs_new, constrained, inverted, use_precision);
 
-               manipulator_property_value_set(C, manipulator, slot, value);
+               manipulator_property_value_set(C, mpr, mpr_prop, value);
                /* get clamped value */
-               value = manipulator_property_value_get(manipulator, slot);
+               value = manipulator_property_value_get(mpr, mpr_prop);
 
                data->offset = manipulator_offset_from_value(data, value, 
constrained, inverted);
        }
@@ -369,15 +370,15 @@ static void manipulator_arrow_modal(bContext *C, 
wmManipulator *manipulator, con
 
 
 static void manipulator_arrow_invoke(
-        bContext *UNUSED(C), wmManipulator *manipulator, const wmEvent *event)
+        bContext *UNUSED(C), wmManipulator *mpr, const wmEvent *event)
 {
-       ArrowManipulator3D *arrow = (ArrowManipulator3D *)manipulator;
+       ArrowManipulator3D *arrow = (ArrowManipulator3D *)mpr;
        ManipulatorInteraction *inter = 
MEM_callocN(sizeof(ManipulatorInteraction), __func__);
-       PointerRNA ptr = 
manipulator->ptr[ED_MANIPULATOR_ARROW_SLOT_OFS_WORLD_SPACE];
-       PropertyRNA *prop = 
manipulator->props[ED_MANIPULATOR_ARROW_SLOT_OFS_WORLD_SPACE];
+       wmManipulatorProperty *mpr_prop = WM_manipulator_get_property(mpr, 
"offset");
 
-       if (prop) {
-               inter->init_value = RNA_property_float_get(&ptr, prop);
+       /* Some manipulators don't use properties. */
+       if (mpr_prop && mpr_prop->prop) {
+               inter->init_value = RNA_property_float_get(&mpr_prop->ptr, 
mpr_prop->prop);
        }
 
        inter->init_offset = arrow->data.offset;
@@ -385,32 +386,33 @@ static void manipulator_arrow_invoke(
        inter->init_mval[0] = event->mval[0];
        inter->init_mval[1] = event->mval[1];
 
-       inter->init_scale = manipulator->scale;
+       inter->init_scale = mpr->scale;
 
-       manipulator_arrow_get_final_pos(manipulator, inter->init_origin);
+       manipulator_arrow_get_final_pos(mpr, inter->init_origin);
 
-       manipulator->interaction_data = inter;
+       mpr->interaction_data = inter;
 }
 
-static void manipulator_arrow_prop_data_update(wmManipulator *manipulator, 
const int slot)
+static void manipulator_arrow_property_update(wmManipulator *mnp, 
wmManipulatorProperty *mpr_prop)
 {
-       ArrowManipulator3D *arrow = (ArrowManipulator3D *)manipulator;
+       ArrowManipulator3D *arrow = (ArrowManipulator3D *)mnp;
        manipulator_property_data_update(
-               manipulator, &arrow->data, slot,
+               mnp, &arrow->data, mpr_prop,
                (arrow->style & ED_MANIPULATOR_ARROW_STYLE_CONSTRAINED) != 0,
                (arrow->style & ED_MANIPULATOR_ARROW_STYLE_INVERTED) != 0);
 }
 
-static void manipulator_arrow_exit(bContext *C, wmManipulator *manipulator, 
const bool cancel)
+static void manipulator_arrow_exit(bContext *C, wmManipulator *mpr, const bool 
cancel)
 {
        if (!cancel)
                return;
 
-       ArrowManipulator3D *arrow = (ArrowManipulator3D *)manipulator;
+       ArrowManipulator3D *arrow = (ArrowManipulator3D *)mpr;
        ManipulatorCommonData *data = &arrow->data;
-       ManipulatorInteraction *inter = manipulator->interaction_data;
+       ManipulatorInteraction *inter = mpr->interaction_data;
 
-       manipulator_property_value_reset(C, manipulator, inter, 
ED_MANIPULATOR_ARROW_SLOT_OFS_WORLD_SPACE);
+       wmManipulatorProperty *mpr_prop = WM_manipulator_get_property(mpr, 
"offset");
+       manipulator_property_value_reset(C, mpr, inter, mpr_prop);
        data->offset = inter->init_offset;
 }
 
@@ -447,9 +449,9 @@ wmManipulator 
*ED_manipulator_arrow3d_new(wmManipulatorGroup *mgroup, const char
 /**
  * Define direction the arrow will point towards
  */
-void ED_manipulator_arrow3d_set_direction(wmManipulator *manipulator, const 
float direction[3])
+void ED_manipulator_arrow3d_set_direction(wmManipulator *mpr, const float 
direction[3])
 {
-       ArrowManipulator3D *arrow = (ArrowManipulator3D *)manipulator;
+       ArrowManipulator3D *arrow = (ArrowManipulator3D *)mpr;
 
        copy_v3_v3(arrow->direction, direction);
        normalize_v3(arrow->direction);
@@ -458,9 +460,9 @@ void ED_manipulator_arrow3d_set_direction(wmManipulator 
*manipulator, const floa
 /**
  * Define up-direction of the arrow manipulator
  */
-void ED_manipulator_arrow3d_set_up_vector(wmManipulator *manipulator, const 
float direction[3])
+void ED_manipulator_arrow3d_set_up_vector(wmManipulator *mpr, const float 
direction[3])
 {
-       ArrowManipulator3D *arrow = (ArrowManipulator3D *)manipulator;
+       ArrowManipulator3D *arrow = (ArrowManipulator3D *)mpr;
 
        if (direction) {
                copy_v3_v3(arrow->up, direction);
@@ -475,24 +477,24 @@ void ED_manipulator_arrow3d_set_up_vector(wmManipulator 
*manipulator, const floa
 /**
  * Define a custom arrow line length
  */
-void ED_manipulator_arrow3d_set_line_len(wmManipulator *manipulator, const 
float len)
+void ED_manipulator_arrow3d_set_line_len(wmManipulator *mpr, const float len)
 {
-       ArrowManipulator3D *arrow = (ArrowManipulator3D *)manipulator;
+       ArrowManipulator3D *arrow = (ArrowManipulator3D *)mpr;
        arrow->len = len;
 }
 
 /**
  * Define a custom property UI range
  *
- * \note Needs to be called before WM_manipulator_set_property!
+ * \note Needs to be called before WM_manipulator_def_property!
  */
-void ED_manipulator_arrow3d_set_ui_range(wmManipulator *manipulator, const 
float min, const float max)
+void ED_manipulator_arrow3d_set_ui_range(wmManipulator *mpr, const float min, 
const float max)
 {
-       ArrowManipulator3D *arrow = (ArrowManipulator3D *)manipulator;
+       ArrowManipulator3D *arrow = (ArrowManipulator3D *)mpr;
 
        BLI_assert(min < max);
-       BLI_assert(!(arrow->manipulator.props[0] && "Make sure this function "
-                  "is called before WM_manipulator_set_property"));
+       BLI_assert(!(WM_manipulator_get_property(mpr, "offset") && "Make sure 
this function "
+                  "is called before WM_manipulator_def_property"));
 
        arrow->data.range = max - min;
        arrow->data.min = min;
@@ -502,14 +504,13 @@ void ED_manipulator_arrow3d_set_ui_range(wmManipulator 
*manipulator, const float
 /**
  * Define a custom factor for arrow min/max distance
  *
- * \note Needs to be called before WM_manipulator_set_property!
+ * \note Needs to be called before WM_manipulator_def_property!
  */
-void ED_manipulator_arrow3d_set_range_fac(wmManipulator *manipulator, const 
float range_fac)
+void ED_manipulator_arrow3d_set_range_fac(wmManipulator *mpr, const float 
range_fac)
 {
-       ArrowManipulator3D *arrow = (ArrowManipulator3D *)manipulator;
-
-       BLI_assert(!(arrow->manipulator.props[0] && "Make sure this function "
-                  "is called before WM_manipulator_set_property"));
+       ArrowManipulator3D *arrow = (ArrowManipulator3D *)mpr;
+       BLI_assert(!(WM_ma

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to