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
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')
-rw-r--r--source/blender/blenloader/intern/versioning_300.c15
-rw-r--r--source/blender/editors/animation/anim_ops.c2
-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
-rw-r--r--source/blender/makesdna/DNA_scene_types.h16
-rw-r--r--source/blender/makesrna/intern/rna_scene.c26
7 files changed, 104 insertions, 37 deletions
diff --git a/source/blender/blenloader/intern/versioning_300.c b/source/blender/blenloader/intern/versioning_300.c
index 32dcb977110..37356e58132 100644
--- a/source/blender/blenloader/intern/versioning_300.c
+++ b/source/blender/blenloader/intern/versioning_300.c
@@ -1481,6 +1481,10 @@ static void version_liboverride_rnacollections_insertion_animdata(ID *id)
/* NOLINTNEXTLINE: readability-function-size */
void blo_do_versions_300(FileData *fd, Library *UNUSED(lib), Main *bmain)
{
+ /* The #SCE_SNAP_SEQ flag has been removed in favor of the #SCE_SNAP which can be used for each
+ * snap_flag member individually. */
+ const int SCE_SNAP_SEQ = (1 << 7);
+
if (!MAIN_VERSION_ATLEAST(bmain, 300, 1)) {
/* Set default value for the new bisect_threshold parameter in the mirror modifier. */
if (!DNA_struct_elem_find(fd->filesdna, "MirrorModifierData", "float", "bisect_threshold")) {
@@ -2585,5 +2589,16 @@ void blo_do_versions_300(FileData *fd, Library *UNUSED(lib), Main *bmain)
ts->uv_relax_method = UV_SCULPT_TOOL_RELAX_LAPLACIAN;
}
}
+ LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
+ ToolSettings *tool_settings = scene->toolsettings;
+ tool_settings->snap_flag_seq = tool_settings->snap_flag & ~(SCE_SNAP | SCE_SNAP_SEQ);
+ if (tool_settings->snap_flag & SCE_SNAP_SEQ) {
+ tool_settings->snap_flag_seq |= SCE_SNAP;
+ tool_settings->snap_flag &= ~SCE_SNAP_SEQ;
+ }
+
+ tool_settings->snap_flag_node = tool_settings->snap_flag;
+ tool_settings->snap_uv_flag |= tool_settings->snap_flag & SCE_SNAP;
+ }
}
}
diff --git a/source/blender/editors/animation/anim_ops.c b/source/blender/editors/animation/anim_ops.c
index 1e8f46fd490..5b0c5eac11b 100644
--- a/source/blender/editors/animation/anim_ops.c
+++ b/source/blender/editors/animation/anim_ops.c
@@ -233,7 +233,7 @@ static bool use_sequencer_snapping(bContext *C)
Scene *scene = CTX_data_scene(C);
short snap_flag = SEQ_tool_settings_snap_flag_get(scene);
- return (scene->toolsettings->snap_flag & SCE_SNAP_SEQ) &&
+ return (scene->toolsettings->snap_flag_seq & SCE_SNAP) &&
(snap_flag & SEQ_SNAP_CURRENT_FRAME_TO_STRIPS);
}
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;
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index 512be41ce2c..2f8d1c5eafe 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -1469,13 +1469,18 @@ typedef struct ToolSettings {
/* Transform */
char transform_pivot_point;
char transform_flag;
+ /** Snap elements (per spacetype). */
char snap_mode;
char snap_node_mode;
char snap_uv_mode;
+ /** Generic flags (per spacetype). */
char snap_flag;
- /** UV equivalent of `snap_flag`, limited to: #SCE_SNAP_ABS_GRID. */
+ char snap_flag_node;
+ char snap_flag_seq;
char snap_uv_flag;
+ /** Default snap source. */
char snap_target;
+ /** Snap mask for transform modes. */
char snap_transform_mode_flag;
char proportional_edit, prop_mode;
@@ -1505,16 +1510,14 @@ typedef struct ToolSettings {
char gpencil_selectmode_vertex;
/* UV painting */
- char _pad2[1];
char uv_sculpt_settings;
char uv_relax_method;
- /* XXX: these sculpt_paint_* fields are deprecated, use the
- * unified_paint_settings field instead! */
- short sculpt_paint_settings DNA_DEPRECATED;
char workspace_tool_type;
- char _pad5[1];
+ /* XXX: these sculpt_paint_* fields are deprecated, use the
+ * unified_paint_settings field instead! */
+ short sculpt_paint_settings DNA_DEPRECATED;
int sculpt_paint_unified_size DNA_DEPRECATED;
float sculpt_paint_unified_unprojected_radius DNA_DEPRECATED;
float sculpt_paint_unified_alpha DNA_DEPRECATED;
@@ -2055,7 +2058,6 @@ enum {
#define SCE_SNAP_NO_SELF (1 << 4)
#define SCE_SNAP_ABS_GRID (1 << 5)
#define SCE_SNAP_BACKFACE_CULLING (1 << 6)
-#define SCE_SNAP_SEQ (1 << 7)
/** #ToolSettings.snap_target */
#define SCE_SNAP_TARGET_CLOSEST 0
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 209331065ac..d398dadbec7 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -3149,6 +3149,25 @@ static void rna_def_tool_settings(BlenderRNA *brna)
RNA_def_property_ui_icon(prop, ICON_SNAP_OFF, 1);
RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); /* header redraw */
+ prop = RNA_def_property(srna, "use_snap_node", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "snap_flag_node", SCE_SNAP);
+ RNA_def_property_ui_text(prop, "Snap", "Snap Node during transform");
+ RNA_def_property_ui_icon(prop, ICON_SNAP_OFF, 1);
+ RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); /* header redraw */
+
+ prop = RNA_def_property(srna, "use_snap_sequencer", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "snap_flag_seq", SCE_SNAP);
+ RNA_def_property_ui_text(prop, "Use Snapping", "Snap to strip edges or current frame");
+ RNA_def_property_ui_icon(prop, ICON_SNAP_OFF, 1);
+ RNA_def_property_boolean_default(prop, true);
+ RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); /* Publish message-bus. */
+
+ prop = RNA_def_property(srna, "use_snap_uv", PROP_BOOLEAN, PROP_NONE);
+ RNA_def_property_boolean_sdna(prop, NULL, "snap_uv_flag", SCE_SNAP);
+ RNA_def_property_ui_text(prop, "Snap", "Snap UV during transform");
+ RNA_def_property_ui_icon(prop, ICON_SNAP_OFF, 1);
+ RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); /* header redraw */
+
prop = RNA_def_property(srna, "use_snap_align_rotation", PROP_BOOLEAN, PROP_NONE);
RNA_def_property_boolean_sdna(prop, NULL, "snap_flag", SCE_SNAP_ROTATE);
RNA_def_property_ui_text(
@@ -3163,13 +3182,6 @@ static void rna_def_tool_settings(BlenderRNA *brna)
"Absolute grid alignment while translating (based on the pivot center)");
RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); /* header redraw */
- prop = RNA_def_property(srna, "use_snap_sequencer", PROP_BOOLEAN, PROP_NONE);
- RNA_def_property_boolean_sdna(prop, NULL, "snap_flag", SCE_SNAP_SEQ);
- RNA_def_property_ui_text(prop, "Use Snapping", "Snap to strip edges or current frame");
- RNA_def_property_ui_icon(prop, ICON_SNAP_OFF, 1);
- RNA_def_property_boolean_default(prop, true);
- RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); /* Publish message-bus. */
-
prop = RNA_def_property(srna, "snap_elements", PROP_ENUM, PROP_NONE);
RNA_def_property_enum_bitflag_sdna(prop, NULL, "snap_mode");
RNA_def_property_enum_items(prop, rna_enum_snap_element_items);