[Bf-blender-cvs] [ce8490b404f] temp-vse-transform-overwrite: Add overlap handling mode to header
Richard Antalik
noreply at git.blender.org
Sat Jul 17 03:25:36 CEST 2021
Commit: ce8490b404faf21179279ef15c813e266b9a6c6f
Author: Richard Antalik
Date: Sat Jul 17 03:01:52 2021 +0200
Branches: temp-vse-transform-overwrite
https://developer.blender.org/rBce8490b404faf21179279ef15c813e266b9a6c6f
Add overlap handling mode to header
===================================================================
M release/scripts/startup/bl_ui/space_sequencer.py
M source/blender/blenloader/intern/versioning_300.c
M source/blender/editors/transform/transform_convert_sequencer.c
M source/blender/makesdna/DNA_scene_types.h
M source/blender/makesrna/intern/rna_scene.c
M source/blender/sequencer/SEQ_sequencer.h
M source/blender/sequencer/intern/sequencer.c
===================================================================
diff --git a/release/scripts/startup/bl_ui/space_sequencer.py b/release/scripts/startup/bl_ui/space_sequencer.py
index 55714e0b0a5..6ce080da949 100644
--- a/release/scripts/startup/bl_ui/space_sequencer.py
+++ b/release/scripts/startup/bl_ui/space_sequencer.py
@@ -164,6 +164,9 @@ class SEQUENCER_HT_header(Header):
if st.view_type in {'SEQUENCER', 'SEQUENCER_PREVIEW'}:
tool_settings = context.tool_settings
+ sequencer_tool_settings = tool_settings.sequencer_tool_settings
+ row = layout.row(align=True)
+ row.prop(sequencer_tool_settings, "overlap_mode", text="")
row = layout.row(align=True)
row.prop(tool_settings, "use_snap_sequencer", text="")
sub = row.row(align=True)
diff --git a/source/blender/blenloader/intern/versioning_300.c b/source/blender/blenloader/intern/versioning_300.c
index 313ce734bbc..30fca9bb99a 100644
--- a/source/blender/blenloader/intern/versioning_300.c
+++ b/source/blender/blenloader/intern/versioning_300.c
@@ -571,4 +571,9 @@ void blo_do_versions_300(FileData *fd, Library *UNUSED(lib), Main *bmain)
}
}
}
+
+ LISTBASE_FOREACH (Scene *, scene, &bmain->scenes) {
+ SequencerToolSettings *sequencer_tool_settings = SEQ_tool_settings_ensure(scene);
+ sequencer_tool_settings->overlap_mode = SEQ_OVERLAP_SHUFFLE;
+ }
}
diff --git a/source/blender/editors/transform/transform_convert_sequencer.c b/source/blender/editors/transform/transform_convert_sequencer.c
index 4f8ac7d75da..d0c0db9caef 100644
--- a/source/blender/editors/transform/transform_convert_sequencer.c
+++ b/source/blender/editors/transform/transform_convert_sequencer.c
@@ -513,7 +513,8 @@ static void seq_transform_handle_overwrite_trim(TransInfo *t,
SEQ_collection_free(targets);
/* Recalculate all effects influenced by target. */
- SeqCollection *effects = SEQ_query_by_reference(target, seqbase_from_trans_info(t), SEQ_query_strip_effect_chain);
+ SeqCollection *effects = SEQ_query_by_reference(
+ target, seqbase_from_trans_info(t), SEQ_query_strip_effect_chain);
SEQ_ITERATOR_FOREACH (seq, effects) {
SEQ_time_update_sequence(t->scene, seq);
}
@@ -558,30 +559,34 @@ static void seq_transform_handle_overwrite(TransInfo *t, SeqCollection *transfor
}
}
+static void seq_transform_handle_overlap_shuffle(TransInfo *t, SeqCollection *transformed_strips)
+{
+ ListBase *seqbase = seqbase_from_trans_info(t);
+ ListBase *markers = &t->scene->markers;
+ const bool use_sync_markers = (((SpaceSeq *)t->area->spacedata.first)->flag &
+ SEQ_MARKER_TRANS) != 0;
+ /* Shuffle non strips with no effects attached. */
+ SeqCollection *standalone_strips = extract_standalone_strips(transformed_strips);
+ SEQ_transform_seqbase_shuffle_time(
+ standalone_strips, seqbase, t->scene, markers, use_sync_markers);
+ SEQ_collection_free(standalone_strips);
+}
+
static void seq_transform_handle_overlap(TransInfo *t, SeqCollection *transformed_strips)
{
ListBase *seqbasep = seqbase_from_trans_info(t);
+ const eSeqOverlapMode overlap_mode = SEQ_tool_settings_overlap_mode_get(t->scene);
- /* Modes */
- const bool overwrite = true;
- const bool default_mode = false;
- const bool expand = t->flag & T_ALT_TRANSFORM;
-
- if (expand) {
- seq_transform_handle_expand_to_fit(t, transformed_strips);
- }
- else if (overwrite) {
- seq_transform_handle_overwrite(t, transformed_strips);
- }
- else if (default_mode) {
- ListBase *markers = &t->scene->markers;
- const bool use_sync_markers = (((SpaceSeq *)t->area->spacedata.first)->flag &
- SEQ_MARKER_TRANS) != 0;
- /* Shuffle non strips with no effects attached. */
- SeqCollection *standalone_strips = extract_standalone_strips(transformed_strips);
- SEQ_transform_seqbase_shuffle_time(
- standalone_strips, seqbasep, t->scene, markers, use_sync_markers);
- SEQ_collection_free(standalone_strips);
+ switch (overlap_mode) {
+ case SEQ_OVERLAP_EXPAND:
+ seq_transform_handle_expand_to_fit(t, transformed_strips);
+ break;
+ case SEQ_OVERLAP_OVERWRITE:
+ seq_transform_handle_overwrite(t, transformed_strips);
+ break;
+ case SEQ_OVERLAP_SHUFFLE:
+ seq_transform_handle_overlap_shuffle(t, transformed_strips);
+ break;
}
if (seq_transform_check_strip_effects(transformed_strips)) {
diff --git a/source/blender/makesdna/DNA_scene_types.h b/source/blender/makesdna/DNA_scene_types.h
index cd752b220a3..89361e6f127 100644
--- a/source/blender/makesdna/DNA_scene_types.h
+++ b/source/blender/makesdna/DNA_scene_types.h
@@ -1338,12 +1338,19 @@ typedef struct SequencerToolSettings {
int fit_method;
short snap_mode;
short snap_flag;
- int _pad0;
+ /* eSeqOverlapMode */
+ int overlap_mode;
/** When there are many snap points, 0-1 range corresponds to resolution from boundbox to all
* possible snap points. */
int snap_distance;
} SequencerToolSettings;
+typedef enum eSeqOverlapMode {
+ SEQ_OVERLAP_EXPAND,
+ SEQ_OVERLAP_OVERWRITE,
+ SEQ_OVERLAP_SHUFFLE,
+} eSeqOverlapMode;
+
typedef enum eSeqImageFitMethod {
SEQ_SCALE_TO_FIT,
SEQ_SCALE_TO_FILL,
diff --git a/source/blender/makesrna/intern/rna_scene.c b/source/blender/makesrna/intern/rna_scene.c
index 5c9c7b50339..a79aea04b63 100644
--- a/source/blender/makesrna/intern/rna_scene.c
+++ b/source/blender/makesrna/intern/rna_scene.c
@@ -3508,6 +3508,21 @@ static void rna_def_sequencer_tool_settings(BlenderRNA *brna)
{0, NULL, 0, NULL, NULL},
};
+ static const EnumPropertyItem scale_overlap_modes[] = {
+ {SEQ_OVERLAP_EXPAND, "EXPAND", 0, "Expand", "Move strips so transformed strips fits"},
+ {SEQ_OVERLAP_OVERWRITE,
+ "OVERWRITE",
+ 0,
+ "Overwrite",
+ "Trim or split strips to resolve overlap"},
+ {SEQ_OVERLAP_SHUFFLE,
+ "SHUFFLE",
+ 0,
+ "Shuffle",
+ "Move transformed strips to nearest free space to resolve overlap"},
+ {0, NULL, 0, NULL, NULL},
+ };
+
srna = RNA_def_struct(brna, "SequencerToolSettings", NULL);
RNA_def_struct_path_func(srna, "rna_SequencerToolSettings_path");
RNA_def_struct_ui_text(srna, "Sequencer Tool Settings", "");
@@ -3546,6 +3561,11 @@ static void rna_def_sequencer_tool_settings(BlenderRNA *brna)
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");
+
+ /* Transform overlap handling. */
+ prop = RNA_def_property(srna, "overlap_mode", PROP_ENUM, PROP_NONE);
+ RNA_def_property_enum_items(prop, scale_overlap_modes);
+ RNA_def_property_ui_text(prop, "Overlap Mode", "How to resolve overlap after transformation");
}
static void rna_def_unified_paint_settings(BlenderRNA *brna)
diff --git a/source/blender/sequencer/SEQ_sequencer.h b/source/blender/sequencer/SEQ_sequencer.h
index f4338d13c8f..f65294812b5 100644
--- a/source/blender/sequencer/SEQ_sequencer.h
+++ b/source/blender/sequencer/SEQ_sequencer.h
@@ -58,6 +58,7 @@ void SEQ_tool_settings_fit_method_set(struct Scene *scene, eSeqImageFitMethod fi
short SEQ_tool_settings_snap_flag_get(struct Scene *scene);
short SEQ_tool_settings_snap_mode_get(struct Scene *scene);
int SEQ_tool_settings_snap_distance_get(struct Scene *scene);
+eSeqOverlapMode SEQ_tool_settings_overlap_mode_get(struct Scene *scene);
struct SequencerToolSettings *SEQ_tool_settings_copy(struct SequencerToolSettings *tool_settings);
struct Editing *SEQ_editing_get(struct Scene *scene, bool alloc);
struct Editing *SEQ_editing_ensure(struct Scene *scene);
diff --git a/source/blender/sequencer/intern/sequencer.c b/source/blender/sequencer/intern/sequencer.c
index 7dc19cf39a6..00f6ebc203a 100644
--- a/source/blender/sequencer/intern/sequencer.c
+++ b/source/blender/sequencer/intern/sequencer.c
@@ -314,6 +314,8 @@ SequencerToolSettings *SEQ_tool_settings_init(void)
tool_settings->snap_mode = SEQ_SNAP_TO_STRIPS | SEQ_SNAP_TO_CURRENT_FRAME |
SEQ_SNAP_TO_STRIP_HOLD;
tool_settings->snap_distance = 15;
+ tool_settings->overlap_mode = SEQ_OVERLAP_SHUFFLE;
+
return tool_settings;
}
@@ -363,6 +365,12 @@ void SEQ_tool_settings_fit_method_set(Scene *scene, eSeqImageFitMethod fit_metho
tool_settings->fit_method = fit_method;
}
+eSeqOverlapMode SEQ_tool_settings_overlap_mode_get(Scene *scene)
+{
+ const SequencerToolSettings *tool_settings = SEQ_tool_settings_ensure(scene);
+ return tool_settings->overlap_mode;
+}
+
/**
* Get seqbase that is being viewed currently. This can be main seqbase or meta strip seqbase
*
More information about the Bf-blender-cvs
mailing list