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:
authorGermano Cavalcante <germano.costa@ig.com.br>2022-09-26 20:18:29 +0300
committerGermano Cavalcante <germano.costa@ig.com.br>2022-09-26 20:18:39 +0300
commit236fda7faf58921f9f4b6d0d0300313b0ab1976a (patch)
tree194d1ee9dc13740332672f18b0cb92ff98d68be6 /source/blender/editors/transform/transform.c
parent125ac1f91433344e5b3948ee4c9b3c95ddaaf8a0 (diff)
Fix T101343: useless Snapping menu in transform operators
Changes: - Use the "snap_elements" property only for operators that support snapping to geometry. - Remove unused properties: - "use_snap_to_same_target", - "snap_face_nearest_steps"). - Fix property with wrong name "use_snap_selectable_only" -> "use_snap_selectable" - Fix use of dependent property flags. - Remove redundant initialization of variables - Simplify `poll_propety`. Only the "use_snap_project" is not hidden. >>! In rBc484599687ba it's said: > These options are needed for Python tools to control snapping without requiring the tool settings to be adjusted. If that's the case, there doesn't seem to be any need to display them in the redo panel. Therefore: - Hide snapping properties in redo panel. Many properties have been added that can be independent of ToolSettings. Therefore: - Save snapping properties in the operator itself. For Redo.
Diffstat (limited to 'source/blender/editors/transform/transform.c')
-rw-r--r--source/blender/editors/transform/transform.c79
1 files changed, 49 insertions, 30 deletions
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index 85bb8c1b31a..6ca33a591cc 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -1578,40 +1578,59 @@ void saveTransform(bContext *C, TransInfo *t, wmOperator *op)
}
}
- if (t->flag & T_MODAL) {
- /* do we check for parameter? */
- if (transformModeUseSnap(t)) {
- if (!(t->modifiers & MOD_SNAP) != !(t->tsnap.flag & SCE_SNAP)) {
- /* Type is #eSnapFlag, but type must match various snap attributes in #ToolSettings. */
- short *snap_flag_ptr;
+ /* Save sanpping settings. */
+ if (prop = RNA_struct_find_property(op->ptr, "snap")) {
+ RNA_property_boolean_set(op->ptr, prop, (t->modifiers & MOD_SNAP) != 0);
- wmMsgParams_RNA msg_key_params = {{0}};
- RNA_pointer_create(&t->scene->id, &RNA_ToolSettings, ts, &msg_key_params.ptr);
+ if (prop = RNA_struct_find_property(op->ptr, "snap_elements")) {
+ RNA_property_enum_set(op->ptr, prop, t->tsnap.mode);
+ RNA_boolean_set(op->ptr, "use_snap_project", t->tsnap.project);
+ RNA_enum_set(op->ptr, "snap_target", t->tsnap.source_select);
- if (t->spacetype == SPACE_NODE) {
- snap_flag_ptr = &ts->snap_flag_node;
- msg_key_params.prop = &rna_ToolSettings_use_snap_node;
- }
- else if (t->spacetype == SPACE_IMAGE) {
- snap_flag_ptr = &ts->snap_uv_flag;
- msg_key_params.prop = &rna_ToolSettings_use_snap_uv;
- }
- else if (t->spacetype == SPACE_SEQ) {
- snap_flag_ptr = &ts->snap_flag_seq;
- msg_key_params.prop = &rna_ToolSettings_use_snap_sequencer;
- }
- else {
- snap_flag_ptr = &ts->snap_flag;
- msg_key_params.prop = &rna_ToolSettings_use_snap;
- }
+ eSnapTargetSelect target = t->tsnap.target_select;
+ RNA_boolean_set(op->ptr, "use_snap_self", (target & SCE_SNAP_TARGET_NOT_ACTIVE) != 0);
+ RNA_boolean_set(op->ptr, "use_snap_edit", (target & SCE_SNAP_TARGET_NOT_EDITED) != 0);
+ RNA_boolean_set(op->ptr, "use_snap_nonedit", (target & SCE_SNAP_TARGET_NOT_NONEDITED) != 0);
+ RNA_boolean_set(
+ op->ptr, "use_snap_selectable", (target & SCE_SNAP_TARGET_ONLY_SELECTABLE) != 0);
+ }
- if (t->modifiers & MOD_SNAP) {
- *snap_flag_ptr |= SCE_SNAP;
- }
- else {
- *snap_flag_ptr &= ~SCE_SNAP;
+ /* Update `ToolSettings` for properties that change during modal. */
+ if (t->flag & T_MODAL) {
+ /* Do we check for parameter? */
+ if (transformModeUseSnap(t)) {
+ if (!(t->modifiers & MOD_SNAP) != !(t->tsnap.flag & SCE_SNAP)) {
+ /* Type is #eSnapFlag, but type must match various snap attributes in #ToolSettings. */
+ short *snap_flag_ptr;
+
+ wmMsgParams_RNA msg_key_params = {{0}};
+ RNA_pointer_create(&t->scene->id, &RNA_ToolSettings, ts, &msg_key_params.ptr);
+
+ if (t->spacetype == SPACE_NODE) {
+ snap_flag_ptr = &ts->snap_flag_node;
+ msg_key_params.prop = &rna_ToolSettings_use_snap_node;
+ }
+ else if (t->spacetype == SPACE_IMAGE) {
+ snap_flag_ptr = &ts->snap_uv_flag;
+ msg_key_params.prop = &rna_ToolSettings_use_snap_uv;
+ }
+ else if (t->spacetype == SPACE_SEQ) {
+ snap_flag_ptr = &ts->snap_flag_seq;
+ msg_key_params.prop = &rna_ToolSettings_use_snap_sequencer;
+ }
+ else {
+ snap_flag_ptr = &ts->snap_flag;
+ msg_key_params.prop = &rna_ToolSettings_use_snap;
+ }
+
+ if (t->modifiers & MOD_SNAP) {
+ *snap_flag_ptr |= SCE_SNAP;
+ }
+ else {
+ *snap_flag_ptr &= ~SCE_SNAP;
+ }
+ WM_msg_publish_rna_params(t->mbus, &msg_key_params);
}
- WM_msg_publish_rna_params(t->mbus, &msg_key_params);
}
}
}