diff options
author | Campbell Barton <ideasman42@gmail.com> | 2017-09-13 11:19:23 +0300 |
---|---|---|
committer | Campbell Barton <ideasman42@gmail.com> | 2017-09-13 11:20:37 +0300 |
commit | 77eaf5cd7a4db325e68dbe4161746ca92ebd6fb0 (patch) | |
tree | d2c7cf392a034b4ca86d45c7b92d2e1da6a76b11 /source/blender/editors | |
parent | a5c9f15a0e4a5f5a7ea8370828815d2f37ae036a (diff) |
Manipulator: Only allow negative scale w/ flag set
In most cases we don't want this by default
Diffstat (limited to 'source/blender/editors')
-rw-r--r-- | source/blender/editors/include/ED_manipulator_library.h | 9 | ||||
-rw-r--r-- | source/blender/editors/manipulator_library/manipulator_types/cage2d_manipulator.c | 8 |
2 files changed, 13 insertions, 4 deletions
diff --git a/source/blender/editors/include/ED_manipulator_library.h b/source/blender/editors/include/ED_manipulator_library.h index bde2a165ee6..f9f4e052e7c 100644 --- a/source/blender/editors/include/ED_manipulator_library.h +++ b/source/blender/editors/include/ED_manipulator_library.h @@ -90,10 +90,11 @@ void ED_manipulator_arrow3d_set_range_fac(struct wmManipulator *mpr, const float /* Cage Manipulator */ enum { - ED_MANIPULATOR_CAGE2D_XFORM_FLAG_TRANSLATE = (1 << 0), /* Manipulator translates */ - ED_MANIPULATOR_CAGE2D_XFORM_FLAG_ROTATE = (1 << 1), /* Manipulator rotates */ - ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE = (1 << 2), /* Manipulator scales */ - ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE_UNIFORM = (1 << 3), /* Manipulator scales uniformly */ + ED_MANIPULATOR_CAGE2D_XFORM_FLAG_TRANSLATE = (1 << 0), /* Translates */ + ED_MANIPULATOR_CAGE2D_XFORM_FLAG_ROTATE = (1 << 1), /* Rotates */ + ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE = (1 << 2), /* Scales */ + ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE_UNIFORM = (1 << 3), /* Scales uniformly */ + ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE_SIGNED = (1 << 4), /* Negative scale allowed */ }; /** #wmManipulator.highlight_part */ diff --git a/source/blender/editors/manipulator_library/manipulator_types/cage2d_manipulator.c b/source/blender/editors/manipulator_library/manipulator_types/cage2d_manipulator.c index 3d7195e016b..f8379c929db 100644 --- a/source/blender/editors/manipulator_library/manipulator_types/cage2d_manipulator.c +++ b/source/blender/editors/manipulator_library/manipulator_types/cage2d_manipulator.c @@ -760,7 +760,15 @@ static int manipulator_rect_transform_modal( delta_orig[i] *= -1.0f; delta_curr[i] *= -1.0f; } + const int sign = signum_i(scale[i]); + scale[i] = 1.0f + ((delta_curr[i] - delta_orig[i]) / len_v3(data->orig_matrix_offset[i])); + + if ((transform_flag & ED_MANIPULATOR_CAGE2D_XFORM_FLAG_SCALE_SIGNED) == 0) { + if (sign != signum_i(scale[i])) { + scale[i] = 0.0f; + } + } } } |