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-10 03:42:35 +0300
committerCampbell Barton <ideasman42@gmail.com>2017-06-10 03:42:35 +0300
commit11d90f0f3b65abb6689ca66731ab54f2f38e905f (patch)
tree2799562c86e924d70ce400db910292829abf54a9 /source/blender/editors
parent0a5e9e2f56f5d738b1128b46ecadd9713bd42dec (diff)
Manipulator Update/Refactor
Sync with custom-manipulators branch - Use identifiers for properties. - Property array index access. - Remove operator from manipulators (wasn't used and will likely add in a different way).
Diffstat (limited to 'source/blender/editors')
-rw-r--r--source/blender/editors/include/ED_manipulator_library.h55
-rw-r--r--source/blender/editors/include/ED_view3d.h2
-rw-r--r--source/blender/editors/manipulator_library/CMakeLists.txt1
-rw-r--r--source/blender/editors/manipulator_library/arrow2d_manipulator.c46
-rw-r--r--source/blender/editors/manipulator_library/arrow3d_manipulator.c108
-rw-r--r--source/blender/editors/manipulator_library/cage2d_manipulator.c195
-rw-r--r--source/blender/editors/manipulator_library/dial3d_manipulator.c30
-rw-r--r--source/blender/editors/manipulator_library/manipulator_geometry.h3
-rw-r--r--source/blender/editors/manipulator_library/manipulator_library_intern.h12
-rw-r--r--source/blender/editors/manipulator_library/manipulator_library_utils.c53
-rw-r--r--source/blender/editors/manipulator_library/primitive3d_manipulator.c32
-rw-r--r--source/blender/editors/space_node/node_widgets.c19
-rw-r--r--source/blender/editors/space_view3d/drawobject.c122
-rw-r--r--source/blender/editors/space_view3d/view3d_manipulators.c68
-rw-r--r--source/blender/editors/transform/transform_manipulator.c85
15 files changed, 492 insertions, 339 deletions
diff --git a/source/blender/editors/include/ED_manipulator_library.h b/source/blender/editors/include/ED_manipulator_library.h
index a9c04c8e004..1c3cbcf3294 100644
--- a/source/blender/editors/include/ED_manipulator_library.h
+++ b/source/blender/editors/include/ED_manipulator_library.h
@@ -38,8 +38,27 @@ void ED_manipulatortypes_dial_3d(void);
void ED_manipulatortypes_facemap_3d(void);
void ED_manipulatortypes_primitive_3d(void);
+struct wmManipulator;
struct wmManipulatorGroup;
+
+/* -------------------------------------------------------------------- */
+/* Shape Presets
+ *
+ * Intended to be called by custom draw functions.
+ */
+
+/* manipulator_library_presets.c */
+void ED_manipulator_draw_preset_box(
+ const struct wmManipulator *mpr, float mat[4][4], int select_id);
+void ED_manipulator_draw_preset_arrow(
+ const struct wmManipulator *mpr, float mat[4][4], int axis, int select_id);
+void ED_manipulator_draw_preset_circle(
+ const struct wmManipulator *mpr, float mat[4][4], int axis, int select_id);
+void ED_manipulator_draw_preset_facemap(
+ const struct wmManipulator *mpr, struct Scene *scene, struct Object *ob, const int facemap, int select_id);
+
+
/* -------------------------------------------------------------------- */
/* 3D Arrow Manipulator */
@@ -56,27 +75,22 @@ 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]);
-void ED_manipulator_arrow3d_set_up_vector(struct wmManipulator *manipulator, const float direction[3]);
-void ED_manipulator_arrow3d_set_line_len(struct wmManipulator *manipulator, const float len);
-void ED_manipulator_arrow3d_set_ui_range(struct wmManipulator *manipulator, const float min, const float max);
-void ED_manipulator_arrow3d_set_range_fac(struct wmManipulator *manipulator, const float range_fac);
-void ED_manipulator_arrow3d_cone_set_aspect(struct wmManipulator *manipulator, const float aspect[2]);
+void ED_manipulator_arrow3d_set_direction(struct wmManipulator *mpr, const float direction[3]);
+void ED_manipulator_arrow3d_set_up_vector(struct wmManipulator *mpr, const float direction[3]);
+void ED_manipulator_arrow3d_set_line_len(struct wmManipulator *mpr, const float len);
+void ED_manipulator_arrow3d_set_ui_range(struct wmManipulator *mpr, const float min, const float max);
+void ED_manipulator_arrow3d_set_range_fac(struct wmManipulator *mpr, const float range_fac);
+void ED_manipulator_arrow3d_cone_set_aspect(struct wmManipulator *mpr, const float aspect[2]);
/* -------------------------------------------------------------------- */
/* 2D Arrow Manipulator */
struct wmManipulator *ED_manipulator_arrow2d_new(struct wmManipulatorGroup *mgroup, const char *name);
-void ED_manipulator_arrow2d_set_angle(struct wmManipulator *manipulator, const float rot_fac);
-void ED_manipulator_arrow2d_set_line_len(struct wmManipulator *manipulator, const float len);
+void ED_manipulator_arrow2d_set_angle(struct wmManipulator *mpr, const float rot_fac);
+void ED_manipulator_arrow2d_set_line_len(struct wmManipulator *mpr, const float len);
/* -------------------------------------------------------------------- */
@@ -89,15 +103,10 @@ 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(
- struct wmManipulator *manipulator, const float width, const float height);
+ struct wmManipulator *mpr, const float width, const float height);
/* -------------------------------------------------------------------- */
@@ -112,7 +121,7 @@ enum {
struct wmManipulator *ED_manipulator_dial3d_new(
struct wmManipulatorGroup *mgroup, const char *name, const int style);
void ED_manipulator_dial3d_set_up_vector(
- struct wmManipulator *manipulator, const float direction[3]);
+ struct wmManipulator *mpr, const float direction[3]);
/* -------------------------------------------------------------------- */
@@ -121,7 +130,7 @@ void ED_manipulator_dial3d_set_up_vector(
struct wmManipulator *ED_manipulator_facemap_new(
struct wmManipulatorGroup *mgroup, const char *name, const int style,
struct Object *ob, const int facemap);
-struct bFaceMap *ED_manipulator_facemap_get_fmap(struct wmManipulator *manipulator);
+struct bFaceMap *ED_manipulator_facemap_get_fmap(struct wmManipulator *mpr);
/* -------------------------------------------------------------------- */
@@ -133,7 +142,7 @@ enum {
struct wmManipulator *ED_manipulator_primitive3d_new(
struct wmManipulatorGroup *mgroup, const char *name, const int style);
-void ED_manipulator_primitive3d_set_direction(struct wmManipulator *manipulator, const float direction[3]);
-void ED_manipulator_primitive3d_set_up_vector(struct wmManipulator *manipulator, const float direction[3]);
+void ED_manipulator_primitive3d_set_direction(struct wmManipulator *mpr, const float direction[3]);
+void ED_manipulator_primitive3d_set_up_vector(struct wmManipulator *mpr, const float direction[3]);
#endif /* __ED_MANIPULATOR_LIBRARY_H__ */
diff --git a/source/blender/editors/include/ED_view3d.h b/source/blender/editors/include/ED_view3d.h
index 667ca099305..69d27e30b1f 100644
--- a/source/blender/editors/include/ED_view3d.h
+++ b/source/blender/editors/include/ED_view3d.h
@@ -355,6 +355,8 @@ int ED_view3d_scene_layer_set(int lay, const int *values, int *active);
struct RV3DMatrixStore *ED_view3d_mats_rv3d_backup(struct RegionView3D *rv3d);
void ED_view3d_mats_rv3d_restore(struct RegionView3D *rv3d, struct RV3DMatrixStore *rv3dmat);
+void ED_draw_object_facemap(struct Scene *scene, struct Object *ob, const float col[4], const int facemap);
+
bool ED_view3d_context_activate(struct bContext *C);
void ED_view3d_draw_offscreen_init(struct Scene *scene, struct SceneLayer *sl, struct View3D *v3d);
void ED_view3d_draw_offscreen(
diff --git a/source/blender/editors/manipulator_library/CMakeLists.txt b/source/blender/editors/manipulator_library/CMakeLists.txt
index bcb814e963f..1d1dcf8b725 100644
--- a/source/blender/editors/manipulator_library/CMakeLists.txt
+++ b/source/blender/editors/manipulator_library/CMakeLists.txt
@@ -44,6 +44,7 @@ set(SRC
geom_arrow_manipulator.c
geom_cube_manipulator.c
manipulator_draw_utils.c
+ manipulator_library_presets.c
manipulator_library_utils.c
primitive3d_manipulator.c
diff --git a/source/blender/editors/manipulator_library/arrow2d_manipulator.c b/source/blender/editors/manipulator_library/arrow2d_manipulator.c
index 61827723752..1273710ff69 100644
--- a/source/blender/editors/manipulator_library/arrow2d_manipulator.c
+++ b/source/blender/editors/manipulator_library/arrow2d_manipulator.c
@@ -105,19 +105,19 @@ static void arrow2d_draw_geom(ArrowManipulator2D *arrow, const float origin[2],
gpuPopMatrix();
}
-static void manipulator_arrow2d_draw(const bContext *UNUSED(C), struct wmManipulator *manipulator)
+static void manipulator_arrow2d_draw(const bContext *UNUSED(C), struct wmManipulator *mpr)
{
- ArrowManipulator2D *arrow = (ArrowManipulator2D *)manipulator;
+ ArrowManipulator2D *arrow = (ArrowManipulator2D *)mpr;
float col[4];
- manipulator_color_get(manipulator, manipulator->state & WM_MANIPULATOR_STATE_HIGHLIGHT, col);
+ manipulator_color_get(mpr, mpr->state & WM_MANIPULATOR_STATE_HIGHLIGHT, col);
- glLineWidth(manipulator->line_width);
+ glLineWidth(mpr->line_width);
glEnable(GL_BLEND);
- arrow2d_draw_geom(arrow, manipulator->origin, col);
+ arrow2d_draw_geom(arrow, mpr->origin, col);
glDisable(GL_BLEND);
- if (arrow->manipulator.interaction_data) {
+ if (mpr->interaction_data) {
ManipulatorInteraction *inter = arrow->manipulator.interaction_data;
glEnable(GL_BLEND);
@@ -127,24 +127,24 @@ static void manipulator_arrow2d_draw(const bContext *UNUSED(C), struct wmManipul
}
static void manipulator_arrow2d_invoke(
- bContext *UNUSED(C), struct wmManipulator *manipulator, const wmEvent *UNUSED(event))
+ bContext *UNUSED(C), struct wmManipulator *mpr, const wmEvent *UNUSED(event))
{
ManipulatorInteraction *inter = MEM_callocN(sizeof(ManipulatorInteraction), __func__);
- copy_v2_v2(inter->init_origin, manipulator->origin);
- manipulator->interaction_data = inter;
+ copy_v2_v2(inter->init_origin, mpr->origin);
+ mpr->interaction_data = inter;
}
-static int manipulator_arrow2d_intersect(
- bContext *UNUSED(C), struct wmManipulator *manipulator, const wmEvent *event)
+static int manipulator_arrow2d_test_select(
+ bContext *UNUSED(C), struct wmManipulator *mpr, const wmEvent *event)
{
- ArrowManipulator2D *arrow = (ArrowManipulator2D *)manipulator;
+ ArrowManipulator2D *arrow = (ArrowManipulator2D *)mpr;
const float mval[2] = {event->mval[0], event->mval[1]};
- const float line_len = arrow->line_len * manipulator->scale;
+ const float line_len = arrow->line_len * mpr->scale;
float mval_local[2];
copy_v2_v2(mval_local, mval);
- sub_v2_v2(mval_local, manipulator->origin);
+ sub_v2_v2(mval_local, mpr->origin);
float line[2][2];
line[0][0] = line[0][1] = line[1][0] = 0.0f;
@@ -160,7 +160,7 @@ static int manipulator_arrow2d_intersect(
/* arrow line intersection check */
float isect_1[2], isect_2[2];
const int isect = isect_line_sphere_v2(
- line[0], line[1], mval_local, MANIPULATOR_HOTSPOT + manipulator->line_width * 0.5f,
+ line[0], line[1], mval_local, MANIPULATOR_HOTSPOT + mpr->line_width * 0.5f,
isect_1, isect_2);
if (isect > 0) {
@@ -190,8 +190,8 @@ static int manipulator_arrow2d_intersect(
struct wmManipulator *ED_manipulator_arrow2d_new(wmManipulatorGroup *mgroup, const char *name)
{
- const wmManipulatorType *mpt = WM_manipulatortype_find("MANIPULATOR_WT_arrow_2d", false);
- ArrowManipulator2D *arrow = (ArrowManipulator2D *)WM_manipulator_new(mpt, mgroup, name);
+ ArrowManipulator2D *arrow = (ArrowManipulator2D *)WM_manipulator_new(
+ "MANIPULATOR_WT_arrow_2d", mgroup, name);
arrow->manipulator.flag |= WM_MANIPULATOR_DRAW_ACTIVE;
@@ -200,15 +200,15 @@ struct wmManipulator *ED_manipulator_arrow2d_new(wmManipulatorGroup *mgroup, con
return &arrow->manipulator;
}
-void ED_manipulator_arrow2d_set_angle(struct wmManipulator *manipulator, const float angle)
+void ED_manipulator_arrow2d_set_angle(struct wmManipulator *mpr, const float angle)
{
- ArrowManipulator2D *arrow = (ArrowManipulator2D *)manipulator;
+ ArrowManipulator2D *arrow = (ArrowManipulator2D *)mpr;
arrow->angle = angle;
}
-void ED_manipulator_arrow2d_set_line_len(struct wmManipulator *manipulator, const float len)
+void ED_manipulator_arrow2d_set_line_len(struct wmManipulator *mpr, const float len)
{
- ArrowManipulator2D *arrow = (ArrowManipulator2D *)manipulator;
+ ArrowManipulator2D *arrow = (ArrowManipulator2D *)mpr;
arrow->line_len = len;
}
@@ -220,9 +220,9 @@ static void MANIPULATOR_WT_arrow_2d(wmManipulatorType *wt)
/* api callbacks */
wt->draw = manipulator_arrow2d_draw;
wt->invoke = manipulator_arrow2d_invoke;
- wt->intersect = manipulator_arrow2d_intersect;
+ wt->test_select = manipulator_arrow2d_test_select;
- wt->size = sizeof(ArrowManipulator2D);
+ wt->struct_size = sizeof(ArrowManipulator2D);
}
void ED_manipulatortypes_arrow_2d(void)
diff --git a/source/blender/editors/manipulator_library/arrow3d_manipulator.c b/source/blender/editors/manipulator_library/arrow3d_manipulator.c
index 87e26aeba66..a2a2feb811c 100644
--- a/source/blender/editors/manipulator_library/arrow3d_manipulator.c
+++ b/source/blender/editors/manipulator_library/arrow3d_manipulator.c
@@ -90,9 +90,9 @@ typedef struct ArrowManipulator3D {
/* -------------------------------------------------------------------- */
-static void manipulator_arrow_get_final_pos(wmManipulator *manipulator, float r_pos[3])
+static void manipulator_arrow_get_final_pos(wmManipulator *mpr, float r_pos[3])
{
- ArrowManipulator3D *arrow = (ArrowManipulator3D *)manipulator;
+ ArrowManipulator3D *arrow = (ArrowManipulator3D *)mpr;
mul_v3_v3fl(r_pos, arrow->direction, arrow->data.offset);
add_v3_v3(r_pos, arrow->manipulator.origin);
@@ -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_handler(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_handler(bContext *C, wmManipulator *manipulator, c
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_handler(bContext *C, wmManipulator *manipulator, c
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;
}
@@ -422,8 +424,8 @@ static void manipulator_arrow_exit(bContext *C, wmManipulator *manipulator, cons
wmManipulator *ED_manipulator_arrow3d_new(wmManipulatorGroup *mgroup, const char *name, const int style)
{
- const wmManipulatorType *mpt = WM_manipulatortype_find("MANIPULATOR_WT_arrow_3d", false);
- ArrowManipulator3D *arrow = (ArrowManipulator3D *)WM_manipulator_new(mpt, mgroup, name);
+ ArrowManipulator3D *arrow = (ArrowManipulator3D *)WM_manipulator_new(
+ "MANIPULATOR_WT_arrow_3d", mgroup, name);
int real_style = style;
@@ -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_manipulator_get_property(mpr, "offset") && "Make sure this function "
+ "is called before WM_manipulator_def_property"));
arrow->data.range_fac = range_fac;
}
@@ -517,9 +518,9 @@ void ED_manipulator_arrow3d_set_range_fac(wmManipulator *manipulator, const floa
/**
* Define xy-aspect for arrow cone
*/
-void ED_manipulator_arrow3d_cone_set_aspect(wmManipulator *manipulator, const float aspect[2])
+void ED_manipulator_arrow3d_cone_set_aspect(wmManipulator *mpr, const float aspect[2])
{
- ArrowManipulator3D *arrow = (ArrowManipulator3D *)manipulator;
+ ArrowManipulator3D *arrow = (ArrowManipulator3D *)mpr;
copy_v2_v2(arrow->aspect, aspect);
}
@@ -533,13 +534,12 @@ static void MANIPULATOR_WT_arrow_3d(wmManipulatorType *wt)
wt->draw = manipulator_arrow_draw;
wt->draw_select = manipulator_arrow_render_3d_intersect;
wt->position_get = manipulator_arrow_get_final_pos;
- wt->intersect = NULL;
- wt->handler = manipulator_arrow_handler;
+ wt->modal = manipulator_arrow_modal;
wt->invoke = manipulator_arrow_invoke;
- wt->prop_data_update = manipulator_arrow_prop_data_update;
+ wt->property_update = manipulator_arrow_property_update;
wt->exit = manipulator_arrow_exit;
- wt->size = sizeof(ArrowManipulator3D);
+ wt->struct_size = sizeof(ArrowManipulator3D);
}
void ED_manipulatortypes_arrow_3d(void)
diff --git a/source/blender/editors/manipulator_library/cage2d_manipulator.c b/source/blender/editors/manipulator_library/cage2d_manipulator.c
index 97b4e451bc7..6bfa81e056b 100644
--- a/source/blender/editors/manipulator_library/cage2d_manipulator.c
+++ b/source/blender/editors/manipulator_library/cage2d_manipulator.c
@@ -62,7 +62,7 @@
//#include "wm_manipulator_intern.h"
-/* wmManipulator->highlighted_part */
+/* wmManipulator->highlight_part */
enum {
ED_MANIPULATOR_RECT_TRANSFORM_INTERSECT_TRANSLATE = 1,
ED_MANIPULATOR_RECT_TRANSFORM_INTERSECT_SCALEX_LEFT = 2,
@@ -203,9 +203,9 @@ static void rect_transform_draw_interaction(
immUnbindProgram();
}
-static void manipulator_rect_transform_draw(const bContext *UNUSED(C), wmManipulator *manipulator)
+static void manipulator_rect_transform_draw(const bContext *UNUSED(C), wmManipulator *mpr)
{
- RectTransformManipulator *cage = (RectTransformManipulator *)manipulator;
+ RectTransformManipulator *cage = (RectTransformManipulator *)mpr;
rctf r;
float w = cage->w;
float h = cage->h;
@@ -219,8 +219,8 @@ static void manipulator_rect_transform_draw(const bContext *UNUSED(C), wmManipul
r.ymax = half_h;
gpuPushMatrix();
- gpuTranslate2f(manipulator->origin[0] + manipulator->offset[0],
- manipulator->origin[1] + manipulator->offset[1]);
+ gpuTranslate2f(mpr->origin[0] + mpr->offset[0],
+ mpr->origin[1] + mpr->offset[1]);
if (cage->style & ED_MANIPULATOR_RECT_TRANSFORM_STYLE_SCALE_UNIFORM)
gpuScaleUniform(cage->scale[0]);
else
@@ -235,24 +235,25 @@ static void manipulator_rect_transform_draw(const bContext *UNUSED(C), wmManipul
((cage->style & ED_MANIPULATOR_RECT_TRANSFORM_STYLE_SCALE_UNIFORM) ? cage->scale[0] : cage->scale[1]));
/* corner manipulators */
- glLineWidth(cage->manipulator.line_width + 3.0f);
+ glLineWidth(mpr->line_width + 3.0f);
rect_transform_draw_corners(&r, w, h, (const float[3]){0, 0, 0});
/* corner manipulators */
- glLineWidth(cage->manipulator.line_width);
- rect_transform_draw_corners(&r, w, h, manipulator->col);
+ glLineWidth(mpr->line_width);
+ rect_transform_draw_corners(&r, w, h, mpr->color);
- rect_transform_draw_interaction(manipulator->col, manipulator->highlighted_part, half_w, half_h,
- w, h, cage->manipulator.line_width);
+ rect_transform_draw_interaction(
+ mpr->color, mpr->highlight_part, half_w, half_h,
+ w, h, mpr->line_width);
glLineWidth(1.0);
gpuPopMatrix();
}
-static int manipulator_rect_transform_get_cursor(wmManipulator *manipulator)
+static int manipulator_rect_transform_get_cursor(wmManipulator *mpr)
{
- switch (manipulator->highlighted_part) {
+ switch (mpr->highlight_part) {
case ED_MANIPULATOR_RECT_TRANSFORM_INTERSECT_TRANSLATE:
return BC_HANDCURSOR;
case ED_MANIPULATOR_RECT_TRANSFORM_INTERSECT_SCALEX_LEFT:
@@ -266,10 +267,10 @@ static int manipulator_rect_transform_get_cursor(wmManipulator *manipulator)
}
}
-static int manipulator_rect_transform_intersect(
- bContext *UNUSED(C), wmManipulator *manipulator, const wmEvent *event)
+static int manipulator_rect_transform_test_select(
+ bContext *UNUSED(C), wmManipulator *mpr, const wmEvent *event)
{
- RectTransformManipulator *cage = (RectTransformManipulator *)manipulator;
+ RectTransformManipulator *cage = (RectTransformManipulator *)mpr;
const float mouse[2] = {event->mval[0], event->mval[1]};
//float matrot[2][2];
float point_local[2];
@@ -280,9 +281,9 @@ static int manipulator_rect_transform_intersect(
float aspx = 1.0f, aspy = 1.0f;
/* rotate mouse in relation to the center and relocate it */
- sub_v2_v2v2(point_local, mouse, manipulator->origin);
- point_local[0] -= manipulator->offset[0];
- point_local[1] -= manipulator->offset[1];
+ sub_v2_v2v2(point_local, mouse, mpr->origin);
+ point_local[0] -= mpr->offset[0];
+ point_local[1] -= mpr->offset[1];
//rotate_m2(matrot, -cage->transform.rotation);
if (cage->style & ED_MANIPULATOR_RECT_TRANSFORM_STYLE_SCALE_UNIFORM)
@@ -365,82 +366,86 @@ typedef struct RectTransformInteraction {
float orig_scale[2];
} RectTransformInteraction;
-static bool manipulator_rect_transform_get_prop_value(wmManipulator *manipulator, const int slot, float *value)
+static bool manipulator_rect_transform_get_prop_value(
+ wmManipulator *mnp, wmManipulatorProperty *mpr_prop, float *value)
{
- PropertyType type = RNA_property_type(manipulator->props[slot]);
+ PropertyType type = RNA_property_type(mpr_prop->prop);
if (type != PROP_FLOAT) {
fprintf(stderr, "Rect Transform manipulator can only be bound to float properties");
return false;
}
else {
- if (slot == ED_MANIPULATOR_RECT_TX_SLOT_OFFSET) {
- if (RNA_property_array_length(&manipulator->ptr[slot], manipulator->props[slot]) != 2) {
+ if (STREQ(mpr_prop->idname, "offset")) {
+ if (RNA_property_array_length(&mpr_prop->ptr, mpr_prop->prop) != 2) {
fprintf(stderr, "Rect Transform manipulator offset not only be bound to array float property");
return false;
}
- RNA_property_float_get_array(&manipulator->ptr[slot], manipulator->props[slot], value);
+ RNA_property_float_get_array(&mpr_prop->ptr, mpr_prop->prop, value);
}
- else if (slot == ED_MANIPULATOR_RECT_TX_SLOT_SCALE) {
- RectTransformManipulator *cage = (RectTransformManipulator *)manipulator;
+ else if (STREQ(mpr_prop->idname, "scale")) {
+ RectTransformManipulator *cage = (RectTransformManipulator *)mnp;
if (cage->style & ED_MANIPULATOR_RECT_TRANSFORM_STYLE_SCALE_UNIFORM) {
- *value = RNA_property_float_get(&manipulator->ptr[slot], manipulator->props[slot]);
+ *value = RNA_property_float_get(&mpr_prop->ptr, mpr_prop->prop);
}
else {
- if (RNA_property_array_length(&manipulator->ptr[slot], manipulator->props[slot]) != 2) {
+ if (RNA_property_array_length(&mpr_prop->ptr, mpr_prop->prop) != 2) {
fprintf(stderr, "Rect Transform manipulator scale not only be bound to array float property");
return false;
}
- RNA_property_float_get_array(&manipulator->ptr[slot], manipulator->props[slot], value);
+ RNA_property_float_get_array(&mpr_prop->ptr, mpr_prop->prop, value);
}
}
+ else {
+ BLI_assert(0);
+ }
}
return true;
}
static void manipulator_rect_transform_invoke(
- bContext *UNUSED(C), wmManipulator *manipulator, const wmEvent *event)
+ bContext *UNUSED(C), wmManipulator *mpr, const wmEvent *event)
{
- RectTransformManipulator *cage = (RectTransformManipulator *)manipulator;
+ RectTransformManipulator *cage = (RectTransformManipulator *)mpr;
RectTransformInteraction *data = MEM_callocN(sizeof(RectTransformInteraction), "cage_interaction");
- copy_v2_v2(data->orig_offset, manipulator->offset);
+ copy_v2_v2(data->orig_offset, mpr->offset);
copy_v2_v2(data->orig_scale, cage->scale);
data->orig_mouse[0] = event->mval[0];
data->orig_mouse[1] = event->mval[1];
- manipulator->interaction_data = data;
+ mpr->interaction_data = data;
}
-static void manipulator_rect_transform_handler(
- bContext *C, wmManipulator *manipulator, const wmEvent *event,
+static void manipulator_rect_transform_modal(
+ bContext *C, wmManipulator *mpr, const wmEvent *event,
const int UNUSED(flag))
{
- RectTransformManipulator *cage = (RectTransformManipulator *)manipulator;
- RectTransformInteraction *data = manipulator->interaction_data;
+ RectTransformManipulator *cage = (RectTransformManipulator *)mpr;
+ RectTransformInteraction *data = mpr->interaction_data;
/* needed here as well in case clamping occurs */
- const float orig_ofx = manipulator->offset[0], orig_ofy = manipulator->offset[1];
+ const float orig_ofx = mpr->offset[0], orig_ofy = mpr->offset[1];
const float valuex = (event->mval[0] - data->orig_mouse[0]);
const float valuey = (event->mval[1] - data->orig_mouse[1]);
- if (manipulator->highlighted_part == ED_MANIPULATOR_RECT_TRANSFORM_INTERSECT_TRANSLATE) {
- manipulator->offset[0] = data->orig_offset[0] + valuex;
- manipulator->offset[1] = data->orig_offset[1] + valuey;
+ if (mpr->highlight_part == ED_MANIPULATOR_RECT_TRANSFORM_INTERSECT_TRANSLATE) {
+ mpr->offset[0] = data->orig_offset[0] + valuex;
+ mpr->offset[1] = data->orig_offset[1] + valuey;
}
- else if (manipulator->highlighted_part == ED_MANIPULATOR_RECT_TRANSFORM_INTERSECT_SCALEX_LEFT) {
- manipulator->offset[0] = data->orig_offset[0] + valuex / 2.0;
+ else if (mpr->highlight_part == ED_MANIPULATOR_RECT_TRANSFORM_INTERSECT_SCALEX_LEFT) {
+ mpr->offset[0] = data->orig_offset[0] + valuex / 2.0;
cage->scale[0] = (cage->w * data->orig_scale[0] - valuex) / cage->w;
}
- else if (manipulator->highlighted_part == ED_MANIPULATOR_RECT_TRANSFORM_INTERSECT_SCALEX_RIGHT) {
- manipulator->offset[0] = data->orig_offset[0] + valuex / 2.0;
+ else if (mpr->highlight_part == ED_MANIPULATOR_RECT_TRANSFORM_INTERSECT_SCALEX_RIGHT) {
+ mpr->offset[0] = data->orig_offset[0] + valuex / 2.0;
cage->scale[0] = (cage->w * data->orig_scale[0] + valuex) / cage->w;
}
- else if (manipulator->highlighted_part == ED_MANIPULATOR_RECT_TRANSFORM_INTERSECT_SCALEY_DOWN) {
- manipulator->offset[1] = data->orig_offset[1] + valuey / 2.0;
+ else if (mpr->highlight_part == ED_MANIPULATOR_RECT_TRANSFORM_INTERSECT_SCALEY_DOWN) {
+ mpr->offset[1] = data->orig_offset[1] + valuey / 2.0;
if (cage->style & ED_MANIPULATOR_RECT_TRANSFORM_STYLE_SCALE_UNIFORM) {
cage->scale[0] = (cage->h * data->orig_scale[0] - valuey) / cage->h;
@@ -449,8 +454,8 @@ static void manipulator_rect_transform_handler(
cage->scale[1] = (cage->h * data->orig_scale[1] - valuey) / cage->h;
}
}
- else if (manipulator->highlighted_part == ED_MANIPULATOR_RECT_TRANSFORM_INTERSECT_SCALEY_UP) {
- manipulator->offset[1] = data->orig_offset[1] + valuey / 2.0;
+ else if (mpr->highlight_part == ED_MANIPULATOR_RECT_TRANSFORM_INTERSECT_SCALEY_UP) {
+ mpr->offset[1] = data->orig_offset[1] + valuey / 2.0;
if (cage->style & ED_MANIPULATOR_RECT_TRANSFORM_STYLE_SCALE_UNIFORM) {
cage->scale[0] = (cage->h * data->orig_scale[0] + valuey) / cage->h;
@@ -466,83 +471,85 @@ static void manipulator_rect_transform_handler(
cage->scale[0] < MANIPULATOR_RECT_MIN_WIDTH / cage->w)
{
cage->scale[0] = max_ff(MANIPULATOR_RECT_MIN_WIDTH / cage->h, MANIPULATOR_RECT_MIN_WIDTH / cage->w);
- manipulator->offset[0] = orig_ofx;
- manipulator->offset[1] = orig_ofy;
+ mpr->offset[0] = orig_ofx;
+ mpr->offset[1] = orig_ofy;
}
}
else {
if (cage->scale[0] < MANIPULATOR_RECT_MIN_WIDTH / cage->w) {
cage->scale[0] = MANIPULATOR_RECT_MIN_WIDTH / cage->w;
- manipulator->offset[0] = orig_ofx;
+ mpr->offset[0] = orig_ofx;
}
if (cage->scale[1] < MANIPULATOR_RECT_MIN_WIDTH / cage->h) {
cage->scale[1] = MANIPULATOR_RECT_MIN_WIDTH / cage->h;
- manipulator->offset[1] = orig_ofy;
+ mpr->offset[1] = orig_ofy;
}
}
- if (manipulator->props[ED_MANIPULATOR_RECT_TX_SLOT_OFFSET]) {
- PointerRNA ptr = manipulator->ptr[ED_MANIPULATOR_RECT_TX_SLOT_OFFSET];
- PropertyRNA *prop = manipulator->props[ED_MANIPULATOR_RECT_TX_SLOT_OFFSET];
+ wmManipulatorProperty *mpr_prop;
- RNA_property_float_set_array(&ptr, prop, manipulator->offset);
- RNA_property_update(C, &ptr, prop);
+ mpr_prop = WM_manipulator_get_property(mpr, "offset");
+ if (mpr_prop->prop != NULL) {
+ RNA_property_float_set_array(&mpr_prop->ptr, mpr_prop->prop, mpr->offset);
+ RNA_property_update(C, &mpr_prop->ptr, mpr_prop->prop);
}
- if (manipulator->props[ED_MANIPULATOR_RECT_TX_SLOT_SCALE]) {
- PointerRNA ptr = manipulator->ptr[ED_MANIPULATOR_RECT_TX_SLOT_SCALE];
- PropertyRNA *prop = manipulator->props[ED_MANIPULATOR_RECT_TX_SLOT_SCALE];
-
+ mpr_prop = WM_manipulator_get_property(mpr, "scale");
+ if (mpr_prop->prop != NULL) {
if (cage->style & ED_MANIPULATOR_RECT_TRANSFORM_STYLE_SCALE_UNIFORM) {
- RNA_property_float_set(&ptr, prop, cage->scale[0]);
+ RNA_property_float_set(&mpr_prop->ptr, mpr_prop->prop, cage->scale[0]);
}
else {
- RNA_property_float_set_array(&ptr, prop, cage->scale);
+ RNA_property_float_set_array(&mpr_prop->ptr, mpr_prop->prop, cage->scale);
}
- RNA_property_update(C, &ptr, prop);
+ RNA_property_update(C, &mpr_prop->ptr, mpr_prop->prop);
}
/* tag the region for redraw */
ED_region_tag_redraw(CTX_wm_region(C));
}
-static void manipulator_rect_transform_prop_data_update(wmManipulator *manipulator, const int slot)
+static void manipulator_rect_transform_property_update(wmManipulator *mnp, wmManipulatorProperty *mpr_prop)
{
- RectTransformManipulator *cage = (RectTransformManipulator *)manipulator;
+ RectTransformManipulator *cage = (RectTransformManipulator *)mnp;
- if (slot == ED_MANIPULATOR_RECT_TX_SLOT_OFFSET)
- manipulator_rect_transform_get_prop_value(manipulator, ED_MANIPULATOR_RECT_TX_SLOT_OFFSET, manipulator->offset);
- if (slot == ED_MANIPULATOR_RECT_TX_SLOT_SCALE)
- manipulator_rect_transform_get_prop_value(manipulator, ED_MANIPULATOR_RECT_TX_SLOT_SCALE, cage->scale);
+ if (STREQ(mpr_prop->idname, "offset")) {
+ manipulator_rect_transform_get_prop_value(mnp, mpr_prop, mnp->offset);
+ }
+ else if (STREQ(mpr_prop->idname, "scale")) {
+ manipulator_rect_transform_get_prop_value(mnp, mpr_prop, cage->scale);
+ }
+ else {
+ BLI_assert(0);
+ }
}
-static void manipulator_rect_transform_exit(bContext *C, wmManipulator *manipulator, const bool cancel)
+static void manipulator_rect_transform_exit(bContext *C, wmManipulator *mpr, const bool cancel)
{
- RectTransformManipulator *cage = (RectTransformManipulator *)manipulator;
- RectTransformInteraction *data = manipulator->interaction_data;
+ RectTransformManipulator *cage = (RectTransformManipulator *)mpr;
+ RectTransformInteraction *data = mpr->interaction_data;
if (!cancel)
return;
- /* reset properties */
- if (manipulator->props[ED_MANIPULATOR_RECT_TX_SLOT_OFFSET]) {
- PointerRNA ptr = manipulator->ptr[ED_MANIPULATOR_RECT_TX_SLOT_OFFSET];
- PropertyRNA *prop = manipulator->props[ED_MANIPULATOR_RECT_TX_SLOT_OFFSET];
+ wmManipulatorProperty *mpr_prop;
- RNA_property_float_set_array(&ptr, prop, data->orig_offset);
- RNA_property_update(C, &ptr, prop);
+ /* reset properties */
+ mpr_prop = WM_manipulator_get_property(mpr, "offset");
+ if (mpr_prop->prop != NULL) {
+ RNA_property_float_set_array(&mpr_prop->ptr, mpr_prop->prop, data->orig_offset);
+ RNA_property_update(C, &mpr_prop->ptr, mpr_prop->prop);
}
- if (manipulator->props[ED_MANIPULATOR_RECT_TX_SLOT_SCALE]) {
- PointerRNA ptr = manipulator->ptr[ED_MANIPULATOR_RECT_TX_SLOT_SCALE];
- PropertyRNA *prop = manipulator->props[ED_MANIPULATOR_RECT_TX_SLOT_SCALE];
+ mpr_prop = WM_manipulator_get_property(mpr, "scale");
+ if (mpr_prop->prop != NULL) {
if (cage->style & ED_MANIPULATOR_RECT_TRANSFORM_STYLE_SCALE_UNIFORM) {
- RNA_property_float_set(&ptr, prop, data->orig_scale[0]);
+ RNA_property_float_set(&mpr_prop->ptr, mpr_prop->prop, data->orig_scale[0]);
}
else {
- RNA_property_float_set_array(&ptr, prop, data->orig_scale);
+ RNA_property_float_set_array(&mpr_prop->ptr, mpr_prop->prop, data->orig_scale);
}
- RNA_property_update(C, &ptr, prop);
+ RNA_property_update(C, &mpr_prop->ptr, mpr_prop->prop);
}
}
@@ -554,8 +561,8 @@ static void manipulator_rect_transform_exit(bContext *C, wmManipulator *manipula
wmManipulator *ED_manipulator_rect_transform_new(wmManipulatorGroup *mgroup, const char *name, const int style)
{
- const wmManipulatorType *mpt = WM_manipulatortype_find("MANIPULATOR_WT_cage", false);
- RectTransformManipulator *cage = (RectTransformManipulator *)WM_manipulator_new(mpt, mgroup, name);
+ RectTransformManipulator *cage = (RectTransformManipulator *)WM_manipulator_new(
+ "MANIPULATOR_WT_cage", mgroup, name);
cage->manipulator.flag |= WM_MANIPULATOR_DRAW_ACTIVE;
cage->scale[0] = cage->scale[1] = 1.0f;
@@ -564,9 +571,9 @@ wmManipulator *ED_manipulator_rect_transform_new(wmManipulatorGroup *mgroup, con
return &cage->manipulator;
}
-void ED_manipulator_rect_transform_set_dimensions(wmManipulator *manipulator, const float width, const float height)
+void ED_manipulator_rect_transform_set_dimensions(wmManipulator *mpr, const float width, const float height)
{
- RectTransformManipulator *cage = (RectTransformManipulator *)manipulator;
+ RectTransformManipulator *cage = (RectTransformManipulator *)mpr;
cage->w = width;
cage->h = height;
}
@@ -579,15 +586,13 @@ static void MANIPULATOR_WT_cage(wmManipulatorType *wt)
/* api callbacks */
wt->draw = manipulator_rect_transform_draw;
wt->invoke = manipulator_rect_transform_invoke;
- wt->prop_data_update = manipulator_rect_transform_prop_data_update;
- wt->handler = manipulator_rect_transform_handler;
- wt->intersect = manipulator_rect_transform_intersect;
+ wt->property_update = manipulator_rect_transform_property_update;
+ wt->modal = manipulator_rect_transform_modal;
+ wt->test_select = manipulator_rect_transform_test_select;
wt->exit = manipulator_rect_transform_exit;
wt->cursor_get = manipulator_rect_transform_get_cursor;
- wt->prop_len_max = 2;
-
- wt->size = sizeof(RectTransformManipulator);
+ wt->struct_size = sizeof(RectTransformManipulator);
}
void ED_manipulatortypes_cage_2d(void)
diff --git a/source/blender/editors/manipulator_library/dial3d_manipulator.c b/source/blender/editors/manipulator_library/dial3d_manipulator.c
index 5097c8cab6f..2d5266647e0 100644
--- a/source/blender/editors/manipulator_library/dial3d_manipulator.c
+++ b/source/blender/editors/manipulator_library/dial3d_manipulator.c
@@ -259,9 +259,9 @@ static void dial_draw_intern(
gpuPopMatrix();
}
-static void manipulator_dial_render_3d_intersect(const bContext *C, wmManipulator *manipulator, int selectionbase)
+static void manipulator_dial_render_3d_intersect(const bContext *C, wmManipulator *mpr, int selectionbase)
{
- DialManipulator *dial = (DialManipulator *)manipulator;
+ DialManipulator *dial = (DialManipulator *)mpr;
float clip_plane_buf[4];
float *clip_plane = (dial->style == ED_MANIPULATOR_DIAL_STYLE_RING_CLIPPED) ? clip_plane_buf : NULL;
@@ -271,7 +271,7 @@ static void manipulator_dial_render_3d_intersect(const bContext *C, wmManipulato
RegionView3D *rv3d = ar->regiondata;
copy_v3_v3(clip_plane, rv3d->viewinv[2]);
- clip_plane[3] = -dot_v3v3(rv3d->viewinv[2], manipulator->origin);
+ clip_plane[3] = -dot_v3v3(rv3d->viewinv[2], mpr->origin);
glEnable(GL_CLIP_DISTANCE0);
}
@@ -283,11 +283,11 @@ static void manipulator_dial_render_3d_intersect(const bContext *C, wmManipulato
}
}
-static void manipulator_dial_draw(const bContext *C, wmManipulator *manipulator)
+static void manipulator_dial_draw(const bContext *C, wmManipulator *mpr)
{
- DialManipulator *dial = (DialManipulator *)manipulator;
- const bool active = manipulator->state & WM_MANIPULATOR_STATE_ACTIVE;
- const bool highlight = (manipulator->state & WM_MANIPULATOR_STATE_HIGHLIGHT) != 0;
+ DialManipulator *dial = (DialManipulator *)mpr;
+ const bool active = mpr->state & WM_MANIPULATOR_STATE_ACTIVE;
+ const bool highlight = (mpr->state & WM_MANIPULATOR_STATE_HIGHLIGHT) != 0;
float clip_plane_buf[4];
float *clip_plane = (!active && dial->style == ED_MANIPULATOR_DIAL_STYLE_RING_CLIPPED) ? clip_plane_buf : NULL;
@@ -297,7 +297,7 @@ static void manipulator_dial_draw(const bContext *C, wmManipulator *manipulator)
RegionView3D *rv3d = ar->regiondata;
copy_v3_v3(clip_plane, rv3d->viewinv[2]);
- clip_plane[3] = -dot_v3v3(rv3d->viewinv[2], manipulator->origin);
+ clip_plane[3] = -dot_v3v3(rv3d->viewinv[2], mpr->origin);
clip_plane[3] -= 0.02 * dial->manipulator.scale;
glEnable(GL_CLIP_DISTANCE0);
@@ -313,14 +313,14 @@ static void manipulator_dial_draw(const bContext *C, wmManipulator *manipulator)
}
static void manipulator_dial_invoke(
- bContext *UNUSED(C), wmManipulator *manipulator, const wmEvent *event)
+ bContext *UNUSED(C), wmManipulator *mpr, const wmEvent *event)
{
DialInteraction *inter = MEM_callocN(sizeof(DialInteraction), __func__);
inter->init_mval[0] = event->mval[0];
inter->init_mval[1] = event->mval[1];
- manipulator->interaction_data = inter;
+ mpr->interaction_data = inter;
}
@@ -331,8 +331,8 @@ static void manipulator_dial_invoke(
wmManipulator *ED_manipulator_dial3d_new(wmManipulatorGroup *mgroup, const char *name, const int style)
{
- const wmManipulatorType *mpt = WM_manipulatortype_find("MANIPULATOR_WT_dial", false);
- DialManipulator *dial = (DialManipulator *)WM_manipulator_new(mpt, mgroup, name);
+ DialManipulator *dial = (DialManipulator *)WM_manipulator_new(
+ "MANIPULATOR_WT_dial", mgroup, name);
const float dir_default[3] = {0.0f, 0.0f, 1.0f};
@@ -347,9 +347,9 @@ wmManipulator *ED_manipulator_dial3d_new(wmManipulatorGroup *mgroup, const char
/**
* Define up-direction of the dial manipulator
*/
-void ED_manipulator_dial3d_set_up_vector(wmManipulator *manipulator, const float direction[3])
+void ED_manipulator_dial3d_set_up_vector(wmManipulator *mpr, const float direction[3])
{
- DialManipulator *dial = (DialManipulator *)manipulator;
+ DialManipulator *dial = (DialManipulator *)mpr;
copy_v3_v3(dial->direction, direction);
normalize_v3(dial->direction);
@@ -365,7 +365,7 @@ static void MANIPULATOR_WT_dial_3d(wmManipulatorType *wt)
wt->draw_select = manipulator_dial_render_3d_intersect;
wt->invoke = manipulator_dial_invoke;
- wt->size = sizeof(DialManipulator);
+ wt->struct_size = sizeof(DialManipulator);
}
void ED_manipulatortypes_dial_3d(void)
diff --git a/source/blender/editors/manipulator_library/manipulator_geometry.h b/source/blender/editors/manipulator_library/manipulator_geometry.h
index 0eff1ca89d8..2083f9d4d31 100644
--- a/source/blender/editors/manipulator_library/manipulator_geometry.h
+++ b/source/blender/editors/manipulator_library/manipulator_geometry.h
@@ -48,4 +48,7 @@ extern ManipulatorGeomInfo wm_manipulator_geom_data_arrow;
/* cube manipulator */
extern ManipulatorGeomInfo wm_manipulator_geom_data_cube;
+/* dial manipulator */
+extern ManipulatorGeomInfo wm_manipulator_geom_data_dial;
+
#endif /* __MANIPULATOR_GEOMETRY_H__ */
diff --git a/source/blender/editors/manipulator_library/manipulator_library_intern.h b/source/blender/editors/manipulator_library/manipulator_library_intern.h
index c2d750deee0..8a187f5f9ba 100644
--- a/source/blender/editors/manipulator_library/manipulator_library_intern.h
+++ b/source/blender/editors/manipulator_library/manipulator_library_intern.h
@@ -76,23 +76,21 @@ float manipulator_value_from_offset(
const bool constrained, const bool inverted, const bool use_precision);
void manipulator_property_data_update(
- struct wmManipulator *manipulator, ManipulatorCommonData *data, const int slot,
+ struct wmManipulator *mnp, ManipulatorCommonData *data, wmManipulatorProperty *mpr_prop,
const bool constrained, const bool inverted);
void manipulator_property_value_set(
- bContext *C, const struct wmManipulator *manipulator,
- const int slot, const float value);
+ bContext *C, const struct wmManipulator *mnp, wmManipulatorProperty *mpr_prop, const float value);
float manipulator_property_value_get(
- const struct wmManipulator *manipulator, const int slot);
+ const struct wmManipulator *mnp, wmManipulatorProperty *mpr_prop);
void manipulator_property_value_reset(
- bContext *C, const struct wmManipulator *manipulator, ManipulatorInteraction *inter,
- const int slot);
+ bContext *C, const struct wmManipulator *mnp, ManipulatorInteraction *inter, wmManipulatorProperty *mpr_prop);
/* -------------------------------------------------------------------- */
void manipulator_color_get(
- const struct wmManipulator *manipulator, const bool highlight,
+ const struct wmManipulator *mpr, const bool highlight,
float r_col[]);
diff --git a/source/blender/editors/manipulator_library/manipulator_library_utils.c b/source/blender/editors/manipulator_library/manipulator_library_utils.c
index 0950f27213d..be437c0acc1 100644
--- a/source/blender/editors/manipulator_library/manipulator_library_utils.c
+++ b/source/blender/editors/manipulator_library/manipulator_library_utils.c
@@ -34,6 +34,7 @@
#include "BKE_context.h"
#include "BLI_math.h"
+#include "BLI_listbase.h"
#include "RNA_access.h"
@@ -101,23 +102,21 @@ float manipulator_value_from_offset(
}
void manipulator_property_data_update(
- wmManipulator *manipulator, ManipulatorCommonData *data, const int slot,
+ wmManipulator *mpr, ManipulatorCommonData *data, wmManipulatorProperty *mpr_prop,
const bool constrained, const bool inverted)
{
- if (!manipulator->props[slot]) {
+ if (mpr_prop->prop == NULL) {
data->offset = 0.0f;
return;
}
- PointerRNA ptr = manipulator->ptr[slot];
- PropertyRNA *prop = manipulator->props[slot];
- float value = manipulator_property_value_get(manipulator, slot);
+ float value = manipulator_property_value_get(mpr, mpr_prop);
if (constrained) {
if ((data->flag & MANIPULATOR_CUSTOM_RANGE_SET) == 0) {
float step, precision;
float min, max;
- RNA_property_float_ui_range(&ptr, prop, &min, &max, &step, &precision);
+ RNA_property_float_ui_range(&mpr_prop->ptr, mpr_prop->prop, &min, &max, &step, &precision);
data->range = max - min;
data->min = min;
}
@@ -129,41 +128,49 @@ void manipulator_property_data_update(
}
void manipulator_property_value_set(
- bContext *C, const wmManipulator *manipulator,
- const int slot, const float value)
+ bContext *C, const wmManipulator *UNUSED(mnp),
+ wmManipulatorProperty *mpr_prop, const float value)
{
- PointerRNA ptr = manipulator->ptr[slot];
- PropertyRNA *prop = manipulator->props[slot];
-
/* reset property */
- RNA_property_float_set(&ptr, prop, value);
- RNA_property_update(C, &ptr, prop);
+ if (mpr_prop->index == -1) {
+ RNA_property_float_set(&mpr_prop->ptr, mpr_prop->prop, value);
+ }
+ else {
+ RNA_property_float_set_index(&mpr_prop->ptr, mpr_prop->prop, mpr_prop->index, value);
+ }
+ RNA_property_update(C, &mpr_prop->ptr, mpr_prop->prop);
}
-float manipulator_property_value_get(const wmManipulator *manipulator, const int slot)
+float manipulator_property_value_get(
+ const wmManipulator *UNUSED(mnp),
+ wmManipulatorProperty *mpr_prop)
{
- BLI_assert(RNA_property_type(manipulator->props[slot]) == PROP_FLOAT);
- return RNA_property_float_get(&manipulator->ptr[slot], manipulator->props[slot]);
+ if (mpr_prop->index == -1) {
+ return RNA_property_float_get(&mpr_prop->ptr, mpr_prop->prop);
+ }
+ else {
+ return RNA_property_float_get_index(&mpr_prop->ptr, mpr_prop->prop, mpr_prop->index);
+ }
}
void manipulator_property_value_reset(
- bContext *C, const wmManipulator *manipulator, ManipulatorInteraction *inter,
- const int slot)
+ bContext *C, const wmManipulator *mnp, ManipulatorInteraction *inter,
+ wmManipulatorProperty *mpr_prop)
{
- manipulator_property_value_set(C, manipulator, slot, inter->init_value);
+ manipulator_property_value_set(C, mnp, mpr_prop, inter->init_value);
}
/* -------------------------------------------------------------------- */
void manipulator_color_get(
- const wmManipulator *manipulator, const bool highlight,
+ const wmManipulator *mpr, const bool highlight,
float r_col[4])
{
- if (highlight && !(manipulator->flag & WM_MANIPULATOR_DRAW_HOVER)) {
- copy_v4_v4(r_col, manipulator->col_hi);
+ if (highlight && !(mpr->flag & WM_MANIPULATOR_DRAW_HOVER)) {
+ copy_v4_v4(r_col, mpr->color_hi);
}
else {
- copy_v4_v4(r_col, manipulator->col);
+ copy_v4_v4(r_col, mpr->color);
}
}
diff --git a/source/blender/editors/manipulator_library/primitive3d_manipulator.c b/source/blender/editors/manipulator_library/primitive3d_manipulator.c
index cc8fbeb17d2..63ed4ddf6b8 100644
--- a/source/blender/editors/manipulator_library/primitive3d_manipulator.c
+++ b/source/blender/editors/manipulator_library/primitive3d_manipulator.c
@@ -158,29 +158,29 @@ static void manipulator_primitive_draw_intern(
}
static void manipulator_primitive_render_3d_intersect(
- const bContext *UNUSED(C), wmManipulator *manipulator,
+ const bContext *UNUSED(C), wmManipulator *mpr,
int selectionbase)
{
GPU_select_load_id(selectionbase);
- manipulator_primitive_draw_intern((PrimitiveManipulator *)manipulator, true, false);
+ manipulator_primitive_draw_intern((PrimitiveManipulator *)mpr, true, false);
}
-static void manipulator_primitive_draw(const bContext *UNUSED(C), wmManipulator *manipulator)
+static void manipulator_primitive_draw(const bContext *UNUSED(C), wmManipulator *mpr)
{
manipulator_primitive_draw_intern(
- (PrimitiveManipulator *)manipulator, false,
- (manipulator->state & WM_MANIPULATOR_STATE_HIGHLIGHT));
+ (PrimitiveManipulator *)mpr, false,
+ (mpr->state & WM_MANIPULATOR_STATE_HIGHLIGHT));
}
static void manipulator_primitive_invoke(
- bContext *UNUSED(C), wmManipulator *manipulator, const wmEvent *UNUSED(event))
+ bContext *UNUSED(C), wmManipulator *mpr, const wmEvent *UNUSED(event))
{
ManipulatorInteraction *inter = MEM_callocN(sizeof(ManipulatorInteraction), __func__);
- copy_v3_v3(inter->init_origin, manipulator->origin);
- inter->init_scale = manipulator->scale;
+ copy_v3_v3(inter->init_origin, mpr->origin);
+ inter->init_scale = mpr->scale;
- manipulator->interaction_data = inter;
+ mpr->interaction_data = inter;
}
@@ -191,8 +191,8 @@ static void manipulator_primitive_invoke(
wmManipulator *ED_manipulator_primitive3d_new(wmManipulatorGroup *mgroup, const char *name, const int style)
{
- const wmManipulatorType *mpt = WM_manipulatortype_find("MANIPULATOR_WT_primitive3d", false);
- PrimitiveManipulator *prim = (PrimitiveManipulator *)WM_manipulator_new(mpt, mgroup, name);
+ PrimitiveManipulator *prim = (PrimitiveManipulator *)WM_manipulator_new(
+ "MANIPULATOR_WT_primitive3d", mgroup, name);
const float dir_default[3] = {0.0f, 0.0f, 1.0f};
@@ -208,9 +208,9 @@ wmManipulator *ED_manipulator_primitive3d_new(wmManipulatorGroup *mgroup, const
/**
* Define direction the primitive will point towards
*/
-void ED_manipulator_primitive3d_set_direction(wmManipulator *manipulator, const float direction[3])
+void ED_manipulator_primitive3d_set_direction(wmManipulator *mpr, const float direction[3])
{
- PrimitiveManipulator *prim = (PrimitiveManipulator *)manipulator;
+ PrimitiveManipulator *prim = (PrimitiveManipulator *)mpr;
normalize_v3_v3(prim->direction, direction);
}
@@ -218,9 +218,9 @@ void ED_manipulator_primitive3d_set_direction(wmManipulator *manipulator, const
/**
* Define up-direction of the primitive manipulator
*/
-void ED_manipulator_primitive3d_set_up_vector(wmManipulator *manipulator, const float direction[3])
+void ED_manipulator_primitive3d_set_up_vector(wmManipulator *mpr, const float direction[3])
{
- PrimitiveManipulator *prim = (PrimitiveManipulator *)manipulator;
+ PrimitiveManipulator *prim = (PrimitiveManipulator *)mpr;
if (direction) {
normalize_v3_v3(prim->up, direction);
@@ -241,7 +241,7 @@ static void MANIPULATOR_WT_primitive3d(wmManipulatorType *wt)
wt->draw_select = manipulator_primitive_render_3d_intersect;
wt->invoke = manipulator_primitive_invoke;
- wt->size = sizeof(PrimitiveManipulator);
+ wt->struct_size = sizeof(PrimitiveManipulator);
}
void ED_manipulatortypes_primitive_3d(void)
diff --git a/source/blender/editors/space_node/node_widgets.c b/source/blender/editors/space_node/node_widgets.c
index 2ff6472f8d0..0d0b17f1978 100644
--- a/source/blender/editors/space_node/node_widgets.c
+++ b/source/blender/editors/space_node/node_widgets.c
@@ -42,7 +42,7 @@
#include "node_intern.h"
-static bool WIDGETGROUP_node_transform_poll(const bContext *C, wmManipulatorGroupType *UNUSED(wgrouptype))
+static bool WIDGETGROUP_node_transform_poll(const bContext *C, wmManipulatorGroupType *UNUSED(wgt))
{
SpaceNode *snode = CTX_wm_space_node(C);
@@ -61,20 +61,20 @@ static bool WIDGETGROUP_node_transform_poll(const bContext *C, wmManipulatorGrou
return false;
}
-static void WIDGETGROUP_node_transform_init(const bContext *UNUSED(C), wmManipulatorGroup *wgroup)
+static void WIDGETGROUP_node_transform_setup(const bContext *UNUSED(C), wmManipulatorGroup *mgroup)
{
wmManipulatorWrapper *wwrapper = MEM_mallocN(sizeof(wmManipulatorWrapper), __func__);
wwrapper->manipulator = ED_manipulator_rect_transform_new(
- wgroup, "backdrop_cage",
+ mgroup, "backdrop_cage",
ED_MANIPULATOR_RECT_TRANSFORM_STYLE_TRANSLATE | ED_MANIPULATOR_RECT_TRANSFORM_STYLE_SCALE_UNIFORM);
- wgroup->customdata = wwrapper;
+ mgroup->customdata = wwrapper;
}
-static void WIDGETGROUP_node_transform_refresh(const bContext *C, wmManipulatorGroup *wgroup)
+static void WIDGETGROUP_node_transform_refresh(const bContext *C, wmManipulatorGroup *mgroup)
{
- wmManipulator *cage = ((wmManipulatorWrapper *)wgroup->customdata)->manipulator;
+ wmManipulator *cage = ((wmManipulatorWrapper *)mgroup->customdata)->manipulator;
const ARegion *ar = CTX_wm_region(C);
/* center is always at the origin */
const float origin[3] = {ar->winx / 2, ar->winy / 2};
@@ -95,8 +95,8 @@ static void WIDGETGROUP_node_transform_refresh(const bContext *C, wmManipulatorG
SpaceNode *snode = CTX_wm_space_node(C);
PointerRNA nodeptr;
RNA_pointer_create(snode->id, &RNA_SpaceNodeEditor, snode, &nodeptr);
- WM_manipulator_set_property(cage, ED_MANIPULATOR_RECT_TX_SLOT_OFFSET, &nodeptr, "backdrop_offset");
- WM_manipulator_set_property(cage, ED_MANIPULATOR_RECT_TX_SLOT_SCALE, &nodeptr, "backdrop_zoom");
+ WM_manipulator_def_property(cage, "offset", &nodeptr, "backdrop_offset", -1);
+ WM_manipulator_def_property(cage, "scale", &nodeptr, "backdrop_zoom", -1);
}
else {
WM_manipulator_set_flag(cage, WM_MANIPULATOR_HIDDEN, true);
@@ -108,8 +108,9 @@ static void WIDGETGROUP_node_transform_refresh(const bContext *C, wmManipulatorG
void NODE_WGT_backdrop_transform(wmManipulatorGroupType *wgt)
{
wgt->name = "Backdrop Transform Widgets";
+ wgt->idname = "NODE_WGT_backdrop_transform";
wgt->poll = WIDGETGROUP_node_transform_poll;
- wgt->init = WIDGETGROUP_node_transform_init;
+ wgt->setup = WIDGETGROUP_node_transform_setup;
wgt->refresh = WIDGETGROUP_node_transform_refresh;
}
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index a86614c52fd..126217057e5 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -9766,3 +9766,125 @@ void draw_object_instance(Scene *scene, SceneLayer *sl, View3D *v3d, RegionView3
break;
}
}
+
+void ED_draw_object_facemap(Scene *scene, Object *ob, const float col[4], const int facemap)
+{
+ DerivedMesh *dm = NULL;
+
+ /* happens on undo */
+ if (ob->type != OB_MESH || !ob->data)
+ return;
+
+ dm = mesh_get_derived_final(scene, ob, CD_MASK_BAREMESH);
+ if (!dm || !CustomData_has_layer(&dm->polyData, CD_FACEMAP))
+ return;
+
+
+ glFrontFace((ob->transflag & OB_NEG_SCALE) ? GL_CW : GL_CCW);
+
+#if 0
+ DM_update_materials(dm, ob);
+
+ /* add polygon offset so we draw above the original surface */
+ glPolygonOffset(1.0, 1.0);
+
+ GPU_facemap_setup(dm);
+
+ glColor4fv(col);
+
+ gpuPushAttrib(GL_ENABLE_BIT);
+ glEnable(GL_BLEND);
+ glDisable(GL_LIGHTING);
+
+ /* always draw using backface culling */
+ glEnable(GL_CULL_FACE);
+ glCullFace(GL_BACK);
+
+ if (dm->drawObject->facemapindices) {
+ glDrawElements(GL_TRIANGLES, dm->drawObject->facemap_count[facemap] * 3, GL_UNSIGNED_INT,
+ (int *)NULL + dm->drawObject->facemap_start[facemap] * 3);
+ }
+ gpuPopAttrib();
+
+ GPU_buffers_unbind();
+
+ glPolygonOffset(0.0, 0.0);
+
+#else
+
+ /* Just to create the data to pass to immediate mode, grr! */
+ Mesh *me = ob->data;
+ const int *facemap_data = CustomData_get_layer(&me->pdata, CD_FACEMAP);
+ if (facemap_data) {
+ VertexFormat *format = immVertexFormat();
+ unsigned int pos = VertexFormat_add_attrib(format, "pos", COMP_F32, 3, KEEP_FLOAT);
+
+ immBindBuiltinProgram(GPU_SHADER_3D_UNIFORM_COLOR);
+ immUniformColor4fv(col);
+
+ /* XXX, alpha isn't working yet, not sure why. */
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+ glEnable(GL_BLEND);
+
+ MVert *mvert;
+
+ MPoly *mpoly;
+ int mpoly_len;
+
+ MLoop *mloop;
+ int mloop_len;
+
+ if (dm && CustomData_has_layer(&dm->polyData, CD_FACEMAP)) {
+ mvert = dm->getVertArray(dm);
+ mpoly = dm->getPolyArray(dm);
+ mloop = dm->getLoopArray(dm);
+
+ mpoly_len = dm->getNumPolys(dm);
+ mloop_len = dm->getNumLoops(dm);
+
+ facemap_data = CustomData_get_layer(&dm->polyData, CD_FACEMAP);
+ }
+ else {
+ mvert = me->mvert;
+ mpoly = me->mpoly;
+ mloop = me->mloop;
+
+ mpoly_len = me->totpoly;
+ mloop_len = me->totloop;
+
+ facemap_data = CustomData_get_layer(&me->pdata, CD_FACEMAP);
+ }
+
+ /* use gawain immediate mode fore now */
+ const int looptris_len = poly_to_tri_count(mpoly_len, mloop_len);
+ immBeginAtMost(PRIM_TRIANGLES, looptris_len * 3);
+
+ MPoly *mp;
+ int i;
+ for (mp = mpoly, i = 0; i < mpoly_len; i++, mp++) {
+ if (facemap_data[i] == facemap) {
+ /* Weak, fan-fill, use until we have derived-mesh replaced. */
+ const MLoop *ml_start = &mloop[mp->loopstart];
+ const MLoop *ml_a = ml_start + 1;
+ const MLoop *ml_b = ml_start + 2;
+ for (int j = 2; j < mp->totloop; j++) {
+ immVertex3fv(pos, mvert[ml_start->v].co);
+ immVertex3fv(pos, mvert[ml_a->v].co);
+ immVertex3fv(pos, mvert[ml_b->v].co);
+
+ ml_a++;
+ ml_b++;
+ }
+ }
+ }
+ immEnd();
+
+ immUnbindProgram();
+
+ glDisable(GL_BLEND);
+ }
+#endif
+
+ dm->release(dm);
+}
+
diff --git a/source/blender/editors/space_view3d/view3d_manipulators.c b/source/blender/editors/space_view3d/view3d_manipulators.c
index 87513a6294b..7d8c855013b 100644
--- a/source/blender/editors/space_view3d/view3d_manipulators.c
+++ b/source/blender/editors/space_view3d/view3d_manipulators.c
@@ -59,7 +59,7 @@
/** \name Lamp Manipulators
* \{ */
-static bool WIDGETGROUP_lamp_poll(const bContext *C, wmManipulatorGroupType *UNUSED(wgrouptype))
+static bool WIDGETGROUP_lamp_poll(const bContext *C, wmManipulatorGroupType *UNUSED(wgt))
{
Object *ob = CTX_data_active_object(C);
@@ -70,7 +70,7 @@ static bool WIDGETGROUP_lamp_poll(const bContext *C, wmManipulatorGroupType *UNU
return false;
}
-static void WIDGETGROUP_lamp_init(const bContext *UNUSED(C), wmManipulatorGroup *wgroup)
+static void WIDGETGROUP_lamp_setup(const bContext *UNUSED(C), wmManipulatorGroup *mgroup)
{
const char *propname = "spot_size";
@@ -79,17 +79,17 @@ static void WIDGETGROUP_lamp_init(const bContext *UNUSED(C), wmManipulatorGroup
wmManipulatorWrapper *wwrapper = MEM_mallocN(sizeof(wmManipulatorWrapper), __func__);
- wwrapper->manipulator = ED_manipulator_arrow3d_new(wgroup, propname, ED_MANIPULATOR_ARROW_STYLE_INVERTED);
- wgroup->customdata = wwrapper;
+ wwrapper->manipulator = ED_manipulator_arrow3d_new(mgroup, propname, ED_MANIPULATOR_ARROW_STYLE_INVERTED);
+ mgroup->customdata = wwrapper;
ED_manipulator_arrow3d_set_range_fac(wwrapper->manipulator, 4.0f);
WM_manipulator_set_color(wwrapper->manipulator, color);
WM_manipulator_set_color_highlight(wwrapper->manipulator, color_hi);
}
-static void WIDGETGROUP_lamp_refresh(const bContext *C, wmManipulatorGroup *wgroup)
+static void WIDGETGROUP_lamp_refresh(const bContext *C, wmManipulatorGroup *mgroup)
{
- wmManipulatorWrapper *wwrapper = wgroup->customdata;
+ wmManipulatorWrapper *wwrapper = mgroup->customdata;
Object *ob = CTX_data_active_object(C);
Lamp *la = ob->data;
float dir[3];
@@ -103,18 +103,19 @@ static void WIDGETGROUP_lamp_refresh(const bContext *C, wmManipulatorGroup *wgro
PointerRNA lamp_ptr;
const char *propname = "spot_size";
RNA_pointer_create(&la->id, &RNA_Lamp, la, &lamp_ptr);
- WM_manipulator_set_property(wwrapper->manipulator, ED_MANIPULATOR_ARROW_SLOT_OFS_WORLD_SPACE, &lamp_ptr, propname);
+ WM_manipulator_def_property(wwrapper->manipulator, "offset", &lamp_ptr, propname, -1);
}
void VIEW3D_WGT_lamp(wmManipulatorGroupType *wgt)
{
wgt->name = "Lamp Widgets";
+ wgt->idname = "VIEW3D_WGT_lamp";
wgt->poll = WIDGETGROUP_lamp_poll;
- wgt->init = WIDGETGROUP_lamp_init;
+ wgt->setup = WIDGETGROUP_lamp_setup;
wgt->refresh = WIDGETGROUP_lamp_refresh;
- wgt->flag |= (WM_MANIPULATORGROUPTYPE_IS_3D | WM_MANIPULATORGROUPTYPE_SCALE_3D);
+ wgt->flag |= (WM_MANIPULATORGROUPTYPE_3D | WM_MANIPULATORGROUPTYPE_SCALE_3D);
}
/** \} */
@@ -131,7 +132,7 @@ struct CameraWidgetGroup {
wmManipulator *ortho_scale;
};
-static bool WIDGETGROUP_camera_poll(const bContext *C, wmManipulatorGroupType *UNUSED(wgrouptype))
+static bool WIDGETGROUP_camera_poll(const bContext *C, wmManipulatorGroupType *UNUSED(wgt))
{
Object *ob = CTX_data_active_object(C);
@@ -162,14 +163,14 @@ static void cameragroup_property_setup(wmManipulator *widget, Object *ob, Camera
ED_manipulator_arrow3d_set_range_fac(widget, is_ortho ? (scale_fac * range) : (drawsize * range / half_sensor));
}
-static void WIDGETGROUP_camera_init(const bContext *C, wmManipulatorGroup *wgroup)
+static void WIDGETGROUP_camera_setup(const bContext *C, wmManipulatorGroup *mgroup)
{
Object *ob = CTX_data_active_object(C);
Camera *ca = ob->data;
float dir[3];
struct CameraWidgetGroup *camgroup = MEM_callocN(sizeof(struct CameraWidgetGroup), __func__);
- wgroup->customdata = camgroup;
+ mgroup->customdata = camgroup;
negate_v3_v3(dir, ob->obmat[2]);
@@ -178,7 +179,7 @@ static void WIDGETGROUP_camera_init(const bContext *C, wmManipulatorGroup *wgrou
const float color[4] = {1.0f, 0.3f, 0.0f, 1.0f};
const float color_hi[4] = {1.0f, 0.3f, 0.0f, 1.0f};
- camgroup->dop_dist = ED_manipulator_arrow3d_new(wgroup, "dof_distance", ED_MANIPULATOR_ARROW_STYLE_CROSS);
+ camgroup->dop_dist = ED_manipulator_arrow3d_new(mgroup, "dof_distance", ED_MANIPULATOR_ARROW_STYLE_CROSS);
WM_manipulator_set_flag(camgroup->dop_dist, WM_MANIPULATOR_DRAW_HOVER, true);
WM_manipulator_set_color(camgroup->dop_dist, color);
WM_manipulator_set_color_highlight(camgroup->dop_dist, color_hi);
@@ -191,14 +192,14 @@ static void WIDGETGROUP_camera_init(const bContext *C, wmManipulatorGroup *wgrou
const float color_hi[4] = {1.0f, 1.0, 0.27f, 1.0f};
camgroup->focal_len = ED_manipulator_arrow3d_new(
- wgroup, "focal_len",
+ mgroup, "focal_len",
(ED_MANIPULATOR_ARROW_STYLE_CONE | ED_MANIPULATOR_ARROW_STYLE_CONSTRAINED));
WM_manipulator_set_color(camgroup->focal_len, color);
WM_manipulator_set_color_highlight(camgroup->focal_len, color_hi);
cameragroup_property_setup(camgroup->focal_len, ob, ca, false);
camgroup->ortho_scale = ED_manipulator_arrow3d_new(
- wgroup, "ortho_scale",
+ mgroup, "ortho_scale",
(ED_MANIPULATOR_ARROW_STYLE_CONE | ED_MANIPULATOR_ARROW_STYLE_CONSTRAINED));
WM_manipulator_set_color(camgroup->ortho_scale, color);
WM_manipulator_set_color_highlight(camgroup->ortho_scale, color_hi);
@@ -206,12 +207,12 @@ static void WIDGETGROUP_camera_init(const bContext *C, wmManipulatorGroup *wgrou
}
}
-static void WIDGETGROUP_camera_refresh(const bContext *C, wmManipulatorGroup *wgroup)
+static void WIDGETGROUP_camera_refresh(const bContext *C, wmManipulatorGroup *mgroup)
{
- if (!wgroup->customdata)
+ if (!mgroup->customdata)
return;
- struct CameraWidgetGroup *camgroup = wgroup->customdata;
+ struct CameraWidgetGroup *camgroup = mgroup->customdata;
Object *ob = CTX_data_active_object(C);
Camera *ca = ob->data;
PointerRNA camera_ptr;
@@ -229,7 +230,7 @@ static void WIDGETGROUP_camera_refresh(const bContext *C, wmManipulatorGroup *wg
WM_manipulator_set_flag(camgroup->dop_dist, WM_MANIPULATOR_HIDDEN, false);
/* need to set property here for undo. TODO would prefer to do this in _init */
- WM_manipulator_set_property(camgroup->dop_dist, ED_MANIPULATOR_ARROW_SLOT_OFS_WORLD_SPACE, &camera_ptr, "dof_distance");
+ WM_manipulator_def_property(camgroup->dop_dist, "offset", &camera_ptr, "dof_distance", -1);
}
else {
WM_manipulator_set_flag(camgroup->dop_dist, WM_MANIPULATOR_HIDDEN, true);
@@ -272,20 +273,21 @@ static void WIDGETGROUP_camera_refresh(const bContext *C, wmManipulatorGroup *wg
WM_manipulator_set_scale(widget, drawsize);
/* need to set property here for undo. TODO would prefer to do this in _init */
- WM_manipulator_set_property(camgroup->focal_len, ED_MANIPULATOR_ARROW_SLOT_OFS_WORLD_SPACE, &camera_ptr, "lens");
- WM_manipulator_set_property(camgroup->ortho_scale, ED_MANIPULATOR_ARROW_SLOT_OFS_WORLD_SPACE, &camera_ptr, "ortho_scale");
+ WM_manipulator_def_property(camgroup->focal_len, "offset", &camera_ptr, "lens", -1);
+ WM_manipulator_def_property(camgroup->ortho_scale, "offset", &camera_ptr, "ortho_scale", -1);
}
}
void VIEW3D_WGT_camera(wmManipulatorGroupType *wgt)
{
wgt->name = "Camera Widgets";
+ wgt->idname = "VIEW3D_WGT_camera";
wgt->poll = WIDGETGROUP_camera_poll;
- wgt->init = WIDGETGROUP_camera_init;
+ wgt->setup = WIDGETGROUP_camera_setup;
wgt->refresh = WIDGETGROUP_camera_refresh;
- wgt->flag |= WM_MANIPULATORGROUPTYPE_IS_3D;
+ wgt->flag |= WM_MANIPULATORGROUPTYPE_3D;
}
/** \} */
@@ -296,23 +298,23 @@ void VIEW3D_WGT_camera(wmManipulatorGroupType *wgt)
/** \name Force Field Manipulators
* \{ */
-static bool WIDGETGROUP_forcefield_poll(const bContext *C, wmManipulatorGroupType *UNUSED(wgrouptype))
+static bool WIDGETGROUP_forcefield_poll(const bContext *C, wmManipulatorGroupType *UNUSED(wgt))
{
Object *ob = CTX_data_active_object(C);
return (ob && ob->pd && ob->pd->forcefield);
}
-static void WIDGETGROUP_forcefield_init(const bContext *UNUSED(C), wmManipulatorGroup *wgroup)
+static void WIDGETGROUP_forcefield_init(const bContext *UNUSED(C), wmManipulatorGroup *mgroup)
{
const float col[4] = {0.8f, 0.8f, 0.45f, 0.5f};
const float col_hi[4] = {0.8f, 0.8f, 0.45f, 1.0f};
/* only wind effector for now */
wmManipulatorWrapper *wwrapper = MEM_mallocN(sizeof(wmManipulatorWrapper), __func__);
- wgroup->customdata = wwrapper;
+ mgroup->customdata = wwrapper;
- wwrapper->manipulator = ED_manipulator_arrow3d_new(wgroup, "field_strength", ED_MANIPULATOR_ARROW_STYLE_CONSTRAINED);
+ wwrapper->manipulator = ED_manipulator_arrow3d_new(mgroup, "field_strength", ED_MANIPULATOR_ARROW_STYLE_CONSTRAINED);
ED_manipulator_arrow3d_set_ui_range(wwrapper->manipulator, -200.0f, 200.0f);
ED_manipulator_arrow3d_set_range_fac(wwrapper->manipulator, 6.0f);
@@ -320,9 +322,9 @@ static void WIDGETGROUP_forcefield_init(const bContext *UNUSED(C), wmManipulator
WM_manipulator_set_color_highlight(wwrapper->manipulator, col_hi);
}
-static void WIDGETGROUP_forcefield_refresh(const bContext *C, wmManipulatorGroup *wgroup)
+static void WIDGETGROUP_forcefield_refresh(const bContext *C, wmManipulatorGroup *mgroup)
{
- wmManipulatorWrapper *wwrapper = wgroup->customdata;
+ wmManipulatorWrapper *wwrapper = mgroup->customdata;
Object *ob = CTX_data_active_object(C);
PartDeflect *pd = ob->pd;
@@ -337,7 +339,7 @@ static void WIDGETGROUP_forcefield_refresh(const bContext *C, wmManipulatorGroup
WM_manipulator_set_origin(wwrapper->manipulator, ob->obmat[3]);
WM_manipulator_set_offset(wwrapper->manipulator, ofs);
WM_manipulator_set_flag(wwrapper->manipulator, WM_MANIPULATOR_HIDDEN, false);
- WM_manipulator_set_property(wwrapper->manipulator, ED_MANIPULATOR_ARROW_SLOT_OFS_WORLD_SPACE, &field_ptr, "strength");
+ WM_manipulator_def_property(wwrapper->manipulator, "offset", &field_ptr, "strength", -1);
}
else {
WM_manipulator_set_flag(wwrapper->manipulator, WM_MANIPULATOR_HIDDEN, true);
@@ -347,12 +349,14 @@ static void WIDGETGROUP_forcefield_refresh(const bContext *C, wmManipulatorGroup
void VIEW3D_WGT_force_field(wmManipulatorGroupType *wgt)
{
wgt->name = "Force Field Widgets";
+ wgt->idname = "VIEW3D_WGT_force_field";
wgt->poll = WIDGETGROUP_forcefield_poll;
- wgt->init = WIDGETGROUP_forcefield_init;
+ wgt->setup = WIDGETGROUP_forcefield_init;
wgt->refresh = WIDGETGROUP_forcefield_refresh;
- wgt->flag |= WM_MANIPULATORGROUPTYPE_IS_3D;
+ wgt->flag |= WM_MANIPULATORGROUPTYPE_3D;
}
/** \} */
+
diff --git a/source/blender/editors/transform/transform_manipulator.c b/source/blender/editors/transform/transform_manipulator.c
index 2b06eb34bcb..eee9919efd4 100644
--- a/source/blender/editors/transform/transform_manipulator.c
+++ b/source/blender/editors/transform/transform_manipulator.c
@@ -1081,36 +1081,36 @@ static void manipulator_line_range(const View3D *v3d, const short axis_type, flo
/* **************** Actual Widget Stuff **************** */
-static ManipulatorGroup *manipulatorgroup_init(wmManipulatorGroup *wgroup)
+static ManipulatorGroup *manipulatorgroup_init(wmManipulatorGroup *mgroup)
{
ManipulatorGroup *man;
man = MEM_callocN(sizeof(ManipulatorGroup), "manipulator_data");
/* add/init widgets - order matters! */
- man->rotate_t = ED_manipulator_dial3d_new(wgroup, "rotate_t", ED_MANIPULATOR_DIAL_STYLE_RING_FILLED);
-
- man->scale_c = ED_manipulator_dial3d_new(wgroup, "scale_c", ED_MANIPULATOR_DIAL_STYLE_RING);
- man->scale_x = ED_manipulator_arrow3d_new(wgroup, "scale_x", ED_MANIPULATOR_ARROW_STYLE_BOX);
- man->scale_y = ED_manipulator_arrow3d_new(wgroup, "scale_y", ED_MANIPULATOR_ARROW_STYLE_BOX);
- man->scale_z = ED_manipulator_arrow3d_new(wgroup, "scale_z", ED_MANIPULATOR_ARROW_STYLE_BOX);
- man->scale_xy = ED_manipulator_primitive3d_new(wgroup, "scale_xy", ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE);
- man->scale_yz = ED_manipulator_primitive3d_new(wgroup, "scale_yz", ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE);
- man->scale_zx = ED_manipulator_primitive3d_new(wgroup, "scale_zx", ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE);
-
- man->rotate_x = ED_manipulator_dial3d_new(wgroup, "rotate_x", ED_MANIPULATOR_DIAL_STYLE_RING_CLIPPED);
- man->rotate_y = ED_manipulator_dial3d_new(wgroup, "rotate_y", ED_MANIPULATOR_DIAL_STYLE_RING_CLIPPED);
- man->rotate_z = ED_manipulator_dial3d_new(wgroup, "rotate_z", ED_MANIPULATOR_DIAL_STYLE_RING_CLIPPED);
+ man->rotate_t = ED_manipulator_dial3d_new(mgroup, "rotate_t", ED_MANIPULATOR_DIAL_STYLE_RING_FILLED);
+
+ man->scale_c = ED_manipulator_dial3d_new(mgroup, "scale_c", ED_MANIPULATOR_DIAL_STYLE_RING);
+ man->scale_x = ED_manipulator_arrow3d_new(mgroup, "scale_x", ED_MANIPULATOR_ARROW_STYLE_BOX);
+ man->scale_y = ED_manipulator_arrow3d_new(mgroup, "scale_y", ED_MANIPULATOR_ARROW_STYLE_BOX);
+ man->scale_z = ED_manipulator_arrow3d_new(mgroup, "scale_z", ED_MANIPULATOR_ARROW_STYLE_BOX);
+ man->scale_xy = ED_manipulator_primitive3d_new(mgroup, "scale_xy", ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE);
+ man->scale_yz = ED_manipulator_primitive3d_new(mgroup, "scale_yz", ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE);
+ man->scale_zx = ED_manipulator_primitive3d_new(mgroup, "scale_zx", ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE);
+
+ man->rotate_x = ED_manipulator_dial3d_new(mgroup, "rotate_x", ED_MANIPULATOR_DIAL_STYLE_RING_CLIPPED);
+ man->rotate_y = ED_manipulator_dial3d_new(mgroup, "rotate_y", ED_MANIPULATOR_DIAL_STYLE_RING_CLIPPED);
+ man->rotate_z = ED_manipulator_dial3d_new(mgroup, "rotate_z", ED_MANIPULATOR_DIAL_STYLE_RING_CLIPPED);
/* init screen aligned widget last here, looks better, behaves better */
- man->rotate_c = ED_manipulator_dial3d_new(wgroup, "rotate_c", ED_MANIPULATOR_DIAL_STYLE_RING);
+ man->rotate_c = ED_manipulator_dial3d_new(mgroup, "rotate_c", ED_MANIPULATOR_DIAL_STYLE_RING);
- man->translate_c = ED_manipulator_dial3d_new(wgroup, "translate_c", ED_MANIPULATOR_DIAL_STYLE_RING);
- man->translate_x = ED_manipulator_arrow3d_new(wgroup, "translate_x", ED_MANIPULATOR_ARROW_STYLE_NORMAL);
- man->translate_y = ED_manipulator_arrow3d_new(wgroup, "translate_y", ED_MANIPULATOR_ARROW_STYLE_NORMAL);
- man->translate_z = ED_manipulator_arrow3d_new(wgroup, "translate_z", ED_MANIPULATOR_ARROW_STYLE_NORMAL);
- man->translate_xy = ED_manipulator_primitive3d_new(wgroup, "translate_xy", ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE);
- man->translate_yz = ED_manipulator_primitive3d_new(wgroup, "translate_yz", ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE);
- man->translate_zx = ED_manipulator_primitive3d_new(wgroup, "translate_zx", ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE);
+ man->translate_c = ED_manipulator_dial3d_new(mgroup, "translate_c", ED_MANIPULATOR_DIAL_STYLE_RING);
+ man->translate_x = ED_manipulator_arrow3d_new(mgroup, "translate_x", ED_MANIPULATOR_ARROW_STYLE_NORMAL);
+ man->translate_y = ED_manipulator_arrow3d_new(mgroup, "translate_y", ED_MANIPULATOR_ARROW_STYLE_NORMAL);
+ man->translate_z = ED_manipulator_arrow3d_new(mgroup, "translate_z", ED_MANIPULATOR_ARROW_STYLE_NORMAL);
+ man->translate_xy = ED_manipulator_primitive3d_new(mgroup, "translate_xy", ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE);
+ man->translate_yz = ED_manipulator_primitive3d_new(mgroup, "translate_yz", ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE);
+ man->translate_zx = ED_manipulator_primitive3d_new(mgroup, "translate_zx", ED_MANIPULATOR_PRIMITIVE_STYLE_PLANE);
return man;
}
@@ -1118,7 +1118,7 @@ static ManipulatorGroup *manipulatorgroup_init(wmManipulatorGroup *wgroup)
/**
* Custom handler for manipulator widgets
*/
-static void manipulator_handler(
+static void manipulator_modal(
bContext *C, wmManipulator *widget, const wmEvent *UNUSED(event), const int UNUSED(flag))
{
const ScrArea *sa = CTX_wm_area(C);
@@ -1134,10 +1134,10 @@ static void manipulator_handler(
ED_region_tag_redraw(ar);
}
-static void WIDGETGROUP_manipulator_init(const bContext *UNUSED(C), wmManipulatorGroup *wgroup)
+static void WIDGETGROUP_manipulator_init(const bContext *UNUSED(C), wmManipulatorGroup *mgroup)
{
- ManipulatorGroup *man = manipulatorgroup_init(wgroup);
- wgroup->customdata = man;
+ ManipulatorGroup *man = manipulatorgroup_init(mgroup);
+ mgroup->customdata = man;
/* *** set properties for axes *** */
@@ -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_fn_custom_handler(axis, manipulator_handler);
+ WM_manipulator_set_fn_custom_modal(axis, manipulator_modal);
switch(axis_idx) {
case MAN_AXIS_TRANS_X:
@@ -1218,9 +1218,9 @@ static void WIDGETGROUP_manipulator_init(const bContext *UNUSED(C), wmManipulato
MAN_ITER_AXES_END;
}
-static void WIDGETGROUP_manipulator_refresh(const bContext *C, wmManipulatorGroup *wgroup)
+static void WIDGETGROUP_manipulator_refresh(const bContext *C, wmManipulatorGroup *mgroup)
{
- ManipulatorGroup *man = wgroup->customdata;
+ ManipulatorGroup *man = mgroup->customdata;
ScrArea *sa = CTX_wm_area(C);
ARegion *ar = CTX_wm_region(C);
View3D *v3d = sa->spacedata.first;
@@ -1278,9 +1278,9 @@ static void WIDGETGROUP_manipulator_refresh(const bContext *C, wmManipulatorGrou
MAN_ITER_AXES_END;
}
-static void WIDGETGROUP_manipulator_draw_prepare(const bContext *C, wmManipulatorGroup *wgroup)
+static void WIDGETGROUP_manipulator_draw_prepare(const bContext *C, wmManipulatorGroup *mgroup)
{
- ManipulatorGroup *man = wgroup->customdata;
+ ManipulatorGroup *man = mgroup->customdata;
ScrArea *sa = CTX_wm_area(C);
ARegion *ar = CTX_wm_region(C);
View3D *v3d = sa->spacedata.first;
@@ -1330,7 +1330,7 @@ static void WIDGETGROUP_manipulator_draw_prepare(const bContext *C, wmManipulato
MAN_ITER_AXES_END;
}
-static bool WIDGETGROUP_manipulator_poll(const struct bContext *C, struct wmManipulatorGroupType *UNUSED(wgrouptype))
+static bool WIDGETGROUP_manipulator_poll(const struct bContext *C, struct wmManipulatorGroupType *UNUSED(wgt))
{
/* it's a given we only use this in 3D view */
const ScrArea *sa = CTX_wm_area(C);
@@ -1343,36 +1343,37 @@ static bool WIDGETGROUP_manipulator_poll(const struct bContext *C, struct wmMani
void TRANSFORM_WGT_manipulator(wmManipulatorGroupType *wgt)
{
wgt->name = "Transform Manipulator";
+ wgt->idname = "TRANSFORM_WGT_manipulator";
wgt->poll = WIDGETGROUP_manipulator_poll;
- wgt->init = WIDGETGROUP_manipulator_init;
+ wgt->setup = WIDGETGROUP_manipulator_init;
wgt->refresh = WIDGETGROUP_manipulator_refresh;
wgt->draw_prepare = WIDGETGROUP_manipulator_draw_prepare;
- wgt->flag |= (WM_MANIPULATORGROUPTYPE_IS_3D | WM_MANIPULATORGROUPTYPE_SCALE_3D);
+ wgt->flag |= (WM_MANIPULATORGROUPTYPE_3D | WM_MANIPULATORGROUPTYPE_SCALE_3D);
}
/* -------------------------------------------------------------------- */
/* Custom Object Manipulator (unfinished - unsure if this will stay) */
#if 0
-static void WIDGETGROUP_object_manipulator_init(const bContext *C, wmManipulatorGroup *wgroup)
+static void WIDGETGROUP_object_manipulator_init(const bContext *C, wmManipulatorGroup *mgroup)
{
Object *ob = ED_object_active_context((bContext *)C);
- if (ob->wgroup == NULL) {
- ob->wgroup = wgroup;
+ if (ob->mgroup == NULL) {
+ ob->mgroup = mgroup;
}
- WIDGETGROUP_manipulator_init(C, wgroup);
+ WIDGETGROUP_manipulator_init(C, mgroup);
}
-static bool WIDGETGROUP_object_manipulator_poll(const bContext *C, wmManipulatorGroupType *wgrouptype)
+static bool WIDGETGROUP_object_manipulator_poll(const bContext *C, wmManipulatorGroupType *wgt)
{
Object *ob = ED_object_active_context((bContext *)C);
if (ED_operator_object_active((bContext *)C)) {
- if (STREQ(wgrouptype->idname, ob->id.name)) {
+ if (STREQ(wgt->idname, ob->id.name)) {
return true;
}
}
@@ -1385,10 +1386,10 @@ void TRANSFORM_WGT_object(wmManipulatorGroupType *wgt)
wgt->name = "Object Widgets";
wgt->poll = WIDGETGROUP_object_manipulator_poll;
- wgt->init = WIDGETGROUP_object_manipulator_init;
+ wgt->setup = WIDGETGROUP_object_manipulator_init;
wgt->refresh = WIDGETGROUP_manipulator_refresh;
wgt->draw_prepare = WIDGETGROUP_manipulator_draw_prepare;
- wgt->flag |= (WM_MANIPULATORGROUPTYPE_IS_3D | WM_MANIPULATORGROUPTYPE_SCALE_3D);
+ wgt->flag |= (WM_MANIPULATORGROUPTYPE_3D | WM_MANIPULATORGROUPTYPE_SCALE_3D);
}
#endif