Commit: e3de755ae31503284277681b52947c02aef5d411 Author: Germano Cavalcante Date: Thu Mar 10 18:33:04 2022 -0300 Branches: master https://developer.blender.org/rBe3de755ae31503284277681b52947c02aef5d411
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 =================================================================== M release/scripts/presets/keyconfig/keymap_data/blender_default.py M release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py M release/scripts/startup/bl_ui/space_image.py M release/scripts/startup/bl_ui/space_node.py M source/blender/blenloader/intern/versioning_300.c M source/blender/editors/animation/anim_ops.c M source/blender/editors/transform/transform.c M source/blender/editors/transform/transform.h M source/blender/editors/transform/transform_snap.c M source/blender/makesdna/DNA_scene_types.h M source/blender/makesrna/intern/rna_scene.c =================================================================== diff --git a/release/scripts/presets/keyconfig/keymap_data/blender_default.py b/release/scripts/presets/keyconfig/keymap_data/blender_default.py index 94454ad50e8..5a12d5c79f9 100644 --- a/release/scripts/presets/keyconfig/keymap_data/blender_default.py +++ b/release/scripts/presets/keyconfig/keymap_data/blender_default.py @@ -1224,7 +1224,7 @@ def km_uv_editor(params): ("transform.shear", {"type": 'S', "value": 'PRESS', "shift": True, "ctrl": True, "alt": True}, None), ("transform.mirror", {"type": 'M', "value": 'PRESS', "ctrl": True}, None), ("wm.context_toggle", {"type": 'TAB', "value": 'PRESS', "shift": True}, - {"properties": [("data_path", 'tool_settings.use_snap')]}), + {"properties": [("data_path", 'tool_settings.use_snap_uv')]}), ("wm.context_menu_enum", {"type": 'TAB', "value": 'PRESS', "shift": True, "ctrl": True}, {"properties": [("data_path", 'tool_settings.snap_uv_element')]}), *_template_items_context_menu("IMAGE_MT_uvs_context_menu", params.context_menu_event), @@ -2089,7 +2089,7 @@ def km_node_editor(params): {"type": params.select_mouse, "value": 'CLICK_DRAG', "alt": True}, {"properties": [("TRANSFORM_OT_translate", [("view2d_edge_pan", True)])]}), ("wm.context_toggle", {"type": 'TAB', "value": 'PRESS', "shift": True}, - {"properties": [("data_path", 'tool_settings.use_snap')]}), + {"properties": [("data_path", 'tool_settings.use_snap_node')]}), ("wm.context_menu_enum", {"type": 'TAB', "value": 'PRESS', "shift": True, "ctrl": True}, {"properties": [("data_path", 'tool_settings.snap_node_element')]}), ("wm.context_toggle", {"type": 'Z', "value": 'PRESS', "alt": True, "shift": True}, diff --git a/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py b/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py index 3469dbdc175..55ee91af7cd 100644 --- a/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py +++ b/release/scripts/presets/keyconfig/keymap_data/industry_compatible_data.py @@ -1152,7 +1152,7 @@ def km_node_editor(params): ("node.move_detach_links_release", {"type": params.action_mouse, "value": 'CLICK_DRAG', "alt": True}, None), ("node.move_detach_links", {"type": 'LEFTMOUSE', "value": 'CLICK_DRAG', "alt": True}, None), ("wm.context_toggle", {"type": 'X', "value": 'PRESS'}, - {"properties": [("data_path", 'tool_settings.use_snap')]}), + {"properties": [("data_path", 'tool_settings.use_snap_node')]}), ]) return keymap diff --git a/release/scripts/startup/bl_ui/space_image.py b/release/scripts/startup/bl_ui/space_image.py index 65d624a253d..785a841a0e6 100644 --- a/release/scripts/startup/bl_ui/space_image.py +++ b/release/scripts/startup/bl_ui/space_image.py @@ -724,7 +724,7 @@ class IMAGE_HT_header(Header): act_snap_uv_element = tool_settings.bl_rna.properties['snap_uv_element'].enum_items[snap_uv_element] row = layout.row(align=True) - row.prop(tool_settings, "use_snap", text="") + row.prop(tool_settings, "use_snap_uv", text="") sub = row.row(align=True) sub.popover( diff --git a/release/scripts/startup/bl_ui/space_node.py b/release/scripts/startup/bl_ui/space_node.py index a89b201d648..7c88006a4d6 100644 --- a/release/scripts/startup/bl_ui/space_node.py +++ b/release/scripts/startup/bl_ui/space_node.py @@ -185,7 +185,7 @@ class NODE_HT_header(Header): # Snap row = layout.row(align=True) - row.prop(tool_settings, "use_snap", text="") + row.prop(tool_settings, "use_snap_node", text="") row.prop(tool_settings, "snap_node_element", icon_only=True) if tool_settings.snap_node_element != 'GRID': row.prop(tool_settings, "snap_target", text="") 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) { ToolSet @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list [email protected] List details, subscription details or unsubscribe: https://lists.blender.org/mailman/listinfo/bf-blender-cvs
