diff options
author | Richard Antalik <richardantalik@gmail.com> | 2021-06-29 21:12:19 +0300 |
---|---|---|
committer | Richard Antalik <richardantalik@gmail.com> | 2021-06-29 21:30:31 +0300 |
commit | fba9cd019f21f29bad1a6f3713370c5172dbc97f (patch) | |
tree | 5c42ca8e6f4d2f7051088306e99676d7e8b47b7b /source/blender/makesrna | |
parent | ea43ae4194e293599997f1d0d47430b462b4fd7f (diff) |
VSE: Improved Snapping
Change snapping behavior to snap strip edges when they are close to snap point.
Default behavior is, that each transformed strip is snapped to any other strip.
Implement snapping controls in sequencer tool settings. These controls include:
- Snapping on/off
- Ability to snap to playhead and strip hold offset points
- Filter snap points by excluding sound or muted strips
- Control snapping distance
Snapping controls are placed in timeline header similar to 3D viewport
Reviewed By: mano-wii
Differential Revision: https://developer.blender.org/D11646
Diffstat (limited to 'source/blender/makesrna')
-rw-r--r-- | source/blender/makesrna/intern/rna_scene.c | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c index ceeec13b09d..1b8fc692611 100644 --- a/source/blender/makesrna/intern/rna_scene.c +++ b/source/blender/makesrna/intern/rna_scene.c @@ -190,6 +190,12 @@ const EnumPropertyItem rna_enum_snap_node_element_items[] = { {0, NULL, 0, NULL, NULL}, }; +const EnumPropertyItem rna_enum_snap_seq_element_items[] = { + {SEQ_SNAP_TO_PLAYHEAD, "PLAYHEAD", ICON_NONE, "Playhead", "Snap to current frame"}, + {SEQ_SNAP_TO_STRIP_HOLD, "STRIP_HOLD", ICON_NONE, "Hold Offset", "Snap to strip hold offset"}, + {0, NULL, 0, NULL, NULL}, +}; + #ifndef RNA_RUNTIME static const EnumPropertyItem snap_uv_element_items[] = { {SCE_SNAP_MODE_INCREMENT, @@ -3111,6 +3117,12 @@ 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); + 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); @@ -3505,9 +3517,36 @@ static void rna_def_sequencer_tool_settings(BlenderRNA *brna) RNA_def_struct_path_func(srna, "rna_SequencerToolSettings_path"); RNA_def_struct_ui_text(srna, "Sequencer Tool Settings", ""); + /* Add strip settings. */ prop = RNA_def_property(srna, "fit_method", PROP_ENUM, PROP_NONE); RNA_def_property_enum_items(prop, scale_fit_methods); RNA_def_property_ui_text(prop, "Fit Method", "Scale fit method"); + + /* Transform snapping. */ + + /* Sequencer editor uses own set of snap modes */ + prop = RNA_def_property(srna, "snap_seq_element", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_bitflag_sdna(prop, NULL, "snap_mode"); + RNA_def_property_enum_items(prop, rna_enum_snap_seq_element_items); + RNA_def_property_ui_text(prop, "Snap To", "Type of element to snap to"); + RNA_def_property_flag(prop, PROP_ENUM_FLAG); + RNA_def_property_update(prop, NC_SCENE | ND_TOOLSETTINGS, NULL); /* header redraw */ + + prop = RNA_def_property(srna, "snap_ignore_muted", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "snap_flag", SEQ_SNAP_IGNORE_MUTED); + RNA_def_property_boolean_default(prop, true); + RNA_def_property_ui_text(prop, "Ignore Muted Strips", "Don't snap to hidden strips"); + + prop = RNA_def_property(srna, "snap_ignore_sound", PROP_BOOLEAN, PROP_NONE); + RNA_def_property_boolean_sdna(prop, NULL, "snap_flag", SEQ_SNAP_IGNORE_SOUND); + RNA_def_property_boolean_default(prop, true); + RNA_def_property_ui_text(prop, "Ignore Sound Strips", "Don't snap to sound strips"); + + prop = RNA_def_property(srna, "snap_distance", PROP_INT, PROP_PIXEL); + RNA_def_property_int_sdna(prop, NULL, "snap_distance"); + RNA_def_property_int_default(prop, 15); + RNA_def_property_ui_range(prop, 0, 50, 1, 1); + RNA_def_property_ui_text(prop, "Snapping Distance", "Maximum distance for snapping in pixels"); } static void rna_def_unified_paint_settings(BlenderRNA *brna) |