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-09-13 11:19:23 +0300
committerCampbell Barton <ideasman42@gmail.com>2017-09-13 11:20:37 +0300
commit77eaf5cd7a4db325e68dbe4161746ca92ebd6fb0 (patch)
treed2c7cf392a034b4ca86d45c7b92d2e1da6a76b11 /source/blender/editors
parenta5c9f15a0e4a5f5a7ea8370828815d2f37ae036a (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.h9
-rw-r--r--source/blender/editors/manipulator_library/manipulator_types/cage2d_manipulator.c8
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;
+ }
+ }
}
}