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 <mano-wii>2022-03-11 00:33:04 +0300
committerGermano Cavalcante <germano.costa@ig.com.br>2022-03-11 00:47:38 +0300
commite3de755ae31503284277681b52947c02aef5d411 (patch)
tree481eb60ba38e1a2fe3522501e162cb599c5468f6 /source/blender/editors/transform
parentedcb2ad7b3a07f9cd09243cc5fbf5e563e853964 (diff)
Transform/UI: individualize the option to use snap per editor type
`3DView`'s `use_snap` option has little or nothing to do with using snapping in `UV`, `Nodes` or `Sequencer`. So there are no real advantages to keeping these options in sync. Therefore, individualize the option to use snap for each "spacetype". Reviewed By: brecht Differential Revision: https://developer.blender.org/D13310
Diffstat (limited to 'source/blender/editors/transform')
-rw-r--r--source/blender/editors/transform/transform.c36
-rw-r--r--source/blender/editors/transform/transform.h3
-rw-r--r--source/blender/editors/transform/transform_snap.c43
3 files changed, 60 insertions, 22 deletions
diff --git a/source/blender/editors/transform/transform.c b/source/blender/editors/transform/transform.c
index bb80109d8c9..92d312cebce 100644
--- a/source/blender/editors/transform/transform.c
+++ b/source/blender/editors/transform/transform.c
@@ -1513,14 +1513,42 @@ 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) != !(ts->snap_flag & SCE_SNAP)) {
+ if (!(t->modifiers & MOD_SNAP) != !(t->tsnap.flag & SCE_SNAP)) {
+ char *snap_flag_ptr;
+
+ wmMsgParams_RNA msg_key_params = {{0}};
+ RNA_pointer_create(&t->scene->id, &RNA_ToolSettings, ts, &msg_key_params.ptr);
+
+ _WM_MESSAGE_EXTERN_BEGIN;
+ extern PropertyRNA rna_ToolSettings_use_snap;
+ extern PropertyRNA rna_ToolSettings_use_snap_node;
+ extern PropertyRNA rna_ToolSettings_use_snap_sequencer;
+ extern PropertyRNA rna_ToolSettings_use_snap_uv;
+ _WM_MESSAGE_EXTERN_END;
+ 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) {
- ts->snap_flag |= SCE_SNAP;
+ *snap_flag_ptr |= SCE_SNAP;
}
else {
- ts->snap_flag &= ~SCE_SNAP;
+ *snap_flag_ptr &= ~SCE_SNAP;
}
- WM_msg_publish_rna_prop(t->mbus, &t->scene->id, ts, ToolSettings, use_snap);
+ WM_msg_publish_rna_params(t->mbus, &msg_key_params);
}
}
}
diff --git a/source/blender/editors/transform/transform.h b/source/blender/editors/transform/transform.h
index 21592032af2..713cf487ac7 100644
--- a/source/blender/editors/transform/transform.h
+++ b/source/blender/editors/transform/transform.h
@@ -295,7 +295,8 @@ typedef struct TransSnapPoint {
} TransSnapPoint;
typedef struct TransSnap {
- short mode;
+ char flag;
+ char mode;
short target;
short modePoint;
short modeSelect;
diff --git a/source/blender/editors/transform/transform_snap.c b/source/blender/editors/transform/transform_snap.c
index 2f3c021ba38..7ace6343985 100644
--- a/source/blender/editors/transform/transform_snap.c
+++ b/source/blender/editors/transform/transform_snap.c
@@ -561,7 +561,22 @@ static bool bm_face_is_snap_target(BMFace *f, void *UNUSED(user_data))
return true;
}
-static short snap_mode_from_scene(TransInfo *t)
+static char snap_flag_from_spacetype(TransInfo *t)
+{
+ ToolSettings *ts = t->settings;
+ if (t->spacetype == SPACE_NODE) {
+ return ts->snap_flag_node;
+ }
+ else if (t->spacetype == SPACE_IMAGE) {
+ return ts->snap_uv_flag;
+ }
+ else if (t->spacetype == SPACE_SEQ) {
+ return ts->snap_flag_seq;
+ }
+ return ts->snap_flag;
+}
+
+static short snap_mode_from_spacetype(TransInfo *t)
{
ToolSettings *ts = t->settings;
short r_snap_mode = SCE_SNAP_MODE_INCREMENT;
@@ -580,7 +595,7 @@ static short snap_mode_from_scene(TransInfo *t)
else if (t->spacetype == SPACE_SEQ) {
r_snap_mode = SEQ_tool_settings_snap_mode_get(t->scene);
}
- else if (ELEM(t->spacetype, SPACE_VIEW3D, SPACE_IMAGE) && !(t->options & CTX_CAMERA)) {
+ else if ((t->spacetype == SPACE_VIEW3D) && !(t->options & CTX_CAMERA)) {
/* All obedit types will match. */
const int obedit_type = t->obedit_type;
if ((t->options & (CTX_GPENCIL_STROKES | CTX_CURSOR | CTX_OBMODE_XFORM_OBDATA)) ||
@@ -652,7 +667,7 @@ static short snap_select_type_get(TransInfo *t)
static void initSnappingMode(TransInfo *t)
{
ToolSettings *ts = t->settings;
- t->tsnap.mode = snap_mode_from_scene(t);
+ t->tsnap.mode = snap_mode_from_spacetype(t);
t->tsnap.modeSelect = snap_select_type_get(t);
if ((t->spacetype != SPACE_VIEW3D) || !(ts->snap_mode & SCE_SNAP_MODE_FACE)) {
@@ -701,10 +716,9 @@ static void initSnappingMode(TransInfo *t)
void initSnapping(TransInfo *t, wmOperator *op)
{
- ToolSettings *ts = t->settings;
- short snap_target = t->settings->snap_target;
-
resetSnapping(t);
+ t->tsnap.flag = snap_flag_from_spacetype(t);
+ short snap_target = t->settings->snap_target;
/* if snap property exists */
PropertyRNA *prop;
@@ -745,19 +759,14 @@ void initSnapping(TransInfo *t, wmOperator *op)
}
/* use scene defaults only when transform is modal */
else if (t->flag & T_MODAL) {
- if (ELEM(t->spacetype, SPACE_VIEW3D, SPACE_IMAGE, SPACE_NODE)) {
- if (transformModeUseSnap(t) && (ts->snap_flag & SCE_SNAP)) {
- t->modifiers |= MOD_SNAP;
- }
-
- t->tsnap.align = ((t->settings->snap_flag & SCE_SNAP_ROTATE) != 0);
- t->tsnap.project = ((t->settings->snap_flag & SCE_SNAP_PROJECT) != 0);
- t->tsnap.snap_self = !((t->settings->snap_flag & SCE_SNAP_NO_SELF) != 0);
- t->tsnap.peel = ((t->settings->snap_flag & SCE_SNAP_PROJECT) != 0);
- }
- else if ((t->spacetype == SPACE_SEQ) && (ts->snap_flag & SCE_SNAP_SEQ)) {
+ if (transformModeUseSnap(t) && (t->tsnap.flag & SCE_SNAP)) {
t->modifiers |= MOD_SNAP;
}
+
+ t->tsnap.align = ((t->tsnap.flag & SCE_SNAP_ROTATE) != 0);
+ t->tsnap.project = ((t->tsnap.flag & SCE_SNAP_PROJECT) != 0);
+ t->tsnap.snap_self = !((t->tsnap.flag & SCE_SNAP_NO_SELF) != 0);
+ t->tsnap.peel = ((t->tsnap.flag & SCE_SNAP_PROJECT) != 0);
}
t->tsnap.target = snap_target;