Cleanup: VSE: Replace STRIP_DUPE macros with enum

This removes the `STRIP_DUPE_UNIQUE_NAME` and `STRIP_DUPE_ALL` macros
and replaces them with an `enum StripDuplicate`.

A flag with a value of 0 was implicitly used as "duplicate selected strips" so the
enum uses `Selected = 0` to document this behavior better.

Pull Request: https://projects.blender.org/blender/blender/pulls/144125
This commit is contained in:
Falk David
2025-08-08 08:33:35 +02:00
committed by Falk David
parent 1c0b17fb3d
commit 1d6a0b7070
7 changed files with 40 additions and 23 deletions

View File

@@ -338,7 +338,7 @@ static void scene_copy_data(Main *bmain,
scene_dst,
&scene_dst->ed->seqbase,
&scene_src->ed->seqbase,
STRIP_DUPE_ALL,
blender::seq::StripDuplicate::All,
flag_subdata);
BLI_duplicatelist(&scene_dst->ed->channels, &scene_src->ed->channels);
scene_dst->ed->displayed_channels = &scene_dst->ed->channels;

View File

@@ -168,8 +168,12 @@ static bool sequencer_write_copy_paste_file(Main *bmain_src,
/* Create an empty sequence editor data to store all copied strips. */
scene_dst->ed = MEM_callocN<Editing>(__func__);
scene_dst->ed->seqbasep = &scene_dst->ed->seqbase;
seq::seqbase_duplicate_recursive(
scene_src, scene_dst, &scene_dst->ed->seqbase, scene_src->ed->seqbasep, 0, 0);
seq::seqbase_duplicate_recursive(scene_src,
scene_dst,
&scene_dst->ed->seqbase,
scene_src->ed->seqbasep,
seq::StripDuplicate::Selected,
0);
BLI_duplicatelist(&scene_dst->ed->channels, &scene_src->ed->channels);
scene_dst->ed->displayed_channels = &scene_dst->ed->channels;
@@ -476,7 +480,8 @@ wmOperatorStatus sequencer_clipboard_paste_exec(bContext *C, wmOperator *op)
ListBase nseqbase = {nullptr, nullptr};
/* NOTE: seq::seqbase_duplicate_recursive() takes care of generating
* new UIDs for sequences in the new list. */
seq::seqbase_duplicate_recursive(scene_src, scene_dst, &nseqbase, &scene_src->ed->seqbase, 0, 0);
seq::seqbase_duplicate_recursive(
scene_src, scene_dst, &nseqbase, &scene_src->ed->seqbase, seq::StripDuplicate::Selected, 0);
/* BKE_main_merge will copy the scene_src and its action into bmain_dst. Remove them as
* we merge the data from these manually.

View File

@@ -1755,7 +1755,8 @@ static wmOperatorStatus sequencer_add_duplicate_exec(bContext *C, wmOperator * /
}
}
seq::seqbase_duplicate_recursive(scene, scene, &duplicated_strips, ed->seqbasep, 0, 0);
seq::seqbase_duplicate_recursive(
scene, scene, &duplicated_strips, ed->seqbasep, seq::StripDuplicate::Selected, 0);
deselect_all_strips(scene);
if (duplicated_strips.first == nullptr) {
@@ -2018,7 +2019,7 @@ static wmOperatorStatus sequencer_separate_images_exec(bContext *C, wmOperator *
se = seq::render_give_stripelem(scene, strip, timeline_frame);
strip_new = seq::strip_duplicate_recursive(
scene, scene, seqbase, strip, STRIP_DUPE_UNIQUE_NAME);
scene, scene, seqbase, strip, seq::StripDuplicate::UniqueName);
strip_new->start = start_ofs;
strip_new->type = STRIP_TYPE_IMAGE;

View File

@@ -36,8 +36,13 @@ enum {
};
/* strip_duplicate' flags */
#define STRIP_DUPE_UNIQUE_NAME (1 << 0)
#define STRIP_DUPE_ALL (1 << 3) /* otherwise only selected are copied */
enum class StripDuplicate : uint8_t {
/* Note: Technically, the selected strips are duplicated when `All` is not set. */
Selected = 0,
UniqueName = (1 << 0),
All = (1 << 3),
};
ENUM_OPERATORS(StripDuplicate, StripDuplicate::All);
SequencerToolSettings *tool_settings_init();
SequencerToolSettings *tool_settings_ensure(Scene *scene);
@@ -88,13 +93,16 @@ void meta_stack_set(const Scene *scene, Strip *dst);
* \param ed: sequence editor data
*/
Strip *meta_stack_pop(Editing *ed);
Strip *strip_duplicate_recursive(
const Scene *scene_src, Scene *scene_dst, ListBase *new_seq_list, Strip *strip, int dupe_flag);
Strip *strip_duplicate_recursive(const Scene *scene_src,
Scene *scene_dst,
ListBase *new_seq_list,
Strip *strip,
StripDuplicate dupe_flag);
void seqbase_duplicate_recursive(const Scene *scene_src,
Scene *scene_dst,
ListBase *nseqbase,
const ListBase *seqbase,
int dupe_flag,
StripDuplicate dupe_flag,
int flag);
bool is_valid_strip_channel(const Strip *strip);

View File

@@ -469,7 +469,7 @@ bool proxy_rebuild_context(Main *bmain,
context = MEM_callocN<IndexBuildContext>("strip proxy rebuild context");
strip_new = strip_duplicate_recursive(scene, scene, nullptr, strip, 0);
strip_new = strip_duplicate_recursive(scene, scene, nullptr, strip, StripDuplicate::Selected);
context->tc_flags = strip_new->data->proxy->build_tc_flags;
context->size_flags = strip_new->data->proxy->build_size_flags;

View File

@@ -505,7 +505,7 @@ static Strip *strip_duplicate(const Scene *scene_src,
Scene *scene_dst,
ListBase *new_seq_list,
Strip *strip,
int dupe_flag,
const StripDuplicate dupe_flag,
const int flag,
blender::Map<Strip *, Strip *> &strip_map)
{
@@ -603,7 +603,7 @@ static Strip *strip_duplicate(const Scene *scene_src,
BLI_assert_unreachable();
}
/* When using #STRIP_DUPE_UNIQUE_NAME, it is mandatory to add new strips in relevant container
/* When using StripDuplicate::UniqueName, it is mandatory to add new strips in relevant container
* (scene or meta's one), *before* checking for unique names. Otherwise the meta's list is empty
* and hence we miss all sequencer strips in that meta that have already been duplicated,
* (see #55668). Note that unique name check itself could be done at a later step in calling
@@ -614,7 +614,7 @@ static Strip *strip_duplicate(const Scene *scene_src,
}
if (scene_src == scene_dst) {
if (dupe_flag & STRIP_DUPE_UNIQUE_NAME) {
if (int(dupe_flag & StripDuplicate::UniqueName) != 0) {
strip_unique_name_set(scene_dst, &scene_dst->ed->seqbase, strip_new);
}
}
@@ -631,7 +631,7 @@ static Strip *strip_duplicate_recursive_impl(const Scene *scene_src,
Scene *scene_dst,
ListBase *new_seq_list,
Strip *strip,
const int dupe_flag,
const StripDuplicate dupe_flag,
blender::Map<Strip *, Strip *> &strip_map)
{
Strip *strip_new = strip_duplicate(
@@ -645,8 +645,11 @@ static Strip *strip_duplicate_recursive_impl(const Scene *scene_src,
return strip_new;
}
Strip *strip_duplicate_recursive(
const Scene *scene_src, Scene *scene_dst, ListBase *new_seq_list, Strip *strip, int dupe_flag)
Strip *strip_duplicate_recursive(const Scene *scene_src,
Scene *scene_dst,
ListBase *new_seq_list,
Strip *strip,
const StripDuplicate dupe_flag)
{
blender::Map<Strip *, Strip *> strip_map;
@@ -665,12 +668,12 @@ static void seqbase_dupli_recursive(const Scene *scene_src,
Scene *scene_dst,
ListBase *nseqbase,
const ListBase *seqbase,
int dupe_flag,
const StripDuplicate dupe_flag,
const int flag,
blender::Map<Strip *, Strip *> &strip_map)
{
LISTBASE_FOREACH (Strip *, strip, seqbase) {
if ((strip->flag & SELECT) == 0 && (dupe_flag & STRIP_DUPE_ALL) == 0) {
if ((strip->flag & SELECT) == 0 && int(dupe_flag & StripDuplicate::All) == 0) {
continue;
}
@@ -680,7 +683,7 @@ static void seqbase_dupli_recursive(const Scene *scene_src,
if (strip->type == STRIP_TYPE_META) {
/* Always include meta all strip children. */
int dupe_flag_recursive = dupe_flag | STRIP_DUPE_ALL;
const StripDuplicate dupe_flag_recursive = dupe_flag | StripDuplicate::All;
seqbase_dupli_recursive(scene_src,
scene_dst,
&strip_new->seqbase,
@@ -696,7 +699,7 @@ void seqbase_duplicate_recursive(const Scene *scene_src,
Scene *scene_dst,
ListBase *nseqbase,
const ListBase *seqbase,
int dupe_flag,
const StripDuplicate dupe_flag,
const int flag)
{
blender::Map<Strip *, Strip *> strip_map;

View File

@@ -454,7 +454,7 @@ Strip *edit_strip_split(Main *bmain,
/* Duplicate ListBase. */
ListBase right_strips = {nullptr, nullptr};
seqbase_duplicate_recursive(scene, scene, &right_strips, &left_strips, STRIP_DUPE_ALL, 0);
seqbase_duplicate_recursive(scene, scene, &right_strips, &left_strips, StripDuplicate::All, 0);
Strip *left_strip = static_cast<Strip *>(left_strips.first);
Strip *right_strip = static_cast<Strip *>(right_strips.first);