Commit: 6021478f2189e5db6ec990d43a9223dbb81116cd
Author: Richard Antalik
Date: Wed Aug 11 16:26:25 2021 +0200
Branches: temp-vse-transform-overwrite
https://developer.blender.org/rB6021478f2189e5db6ec990d43a9223dbb81116cd
Merge functions describing overlap into single function.
===================================================================
M source/blender/editors/transform/transform_convert_sequencer.c
===================================================================
diff --git a/source/blender/editors/transform/transform_convert_sequencer.c
b/source/blender/editors/transform/transform_convert_sequencer.c
index 9f50bdc5d93..37a1d57e73f 100644
--- a/source/blender/editors/transform/transform_convert_sequencer.c
+++ b/source/blender/editors/transform/transform_convert_sequencer.c
@@ -407,46 +407,36 @@ static SeqCollection *query_overwrite_targets(TransInfo
*t, SeqCollection *trans
return collection;
}
-static bool is_same_channel(Sequence *transformed, Sequence *target)
-{
- if (transformed->machine == target->machine) {
- return true;
- }
- return false;
-}
-
-static bool is_full_overlap(Sequence *transformed, Sequence *target)
+typedef enum eOvelapDescrition {
+ STRIP_OVERLAP_NONE,
+ STRIP_OVERLAP_IS_FULL,
+ STRIP_OVERLAP_IS_INSIDE,
+ STRIP_OVERLAP_LEFT_SIDE,
+ STRIP_OVERLAP_RIGHT_SIDE,
+} eOvelapDescrition;
+
+static eOvelapDescrition overlap_description_get(Sequence *transformed,
Sequence *target)
{
+ eOvelapDescrition overlap = STRIP_OVERLAP_NONE;
+ /* Overlapping strip covers overlapped completely. */
if (transformed->startdisp <= target->startdisp && transformed->enddisp >=
target->enddisp) {
- return true;
+ overlap = STRIP_OVERLAP_IS_FULL;
}
- return false;
-}
-static bool is_inside_overlap(Sequence *transformed, Sequence *target)
-{
- if (transformed->startdisp > target->startdisp && transformed->enddisp <
target->enddisp) {
- return true;
+ /* Overlapping strip is inside overlapped. */
+ else if (transformed->startdisp > target->startdisp && transformed->enddisp
< target->enddisp) {
+ overlap = STRIP_OVERLAP_IS_INSIDE;
}
- return false;
-}
-
-typedef enum ePartialOvelapSide {
- LEFT_SIDE_OVERLAP,
- RIGHT_SIDE_OVERLAP,
-} ePartialOvelapSide;
-static bool is_partial_overlap(Sequence *transformed, Sequence *target,
ePartialOvelapSide *r_side)
-{
- if (transformed->startdisp <= target->startdisp && target->startdisp <=
transformed->enddisp) {
- *r_side = LEFT_SIDE_OVERLAP;
- return true;
+ /* Partial overlap between 2 strips. */
+ else if (transformed->startdisp <= target->startdisp &&
+ target->startdisp <= transformed->enddisp) {
+ overlap = STRIP_OVERLAP_LEFT_SIDE;
}
- if (transformed->startdisp <= target->enddisp && target->enddisp <=
transformed->enddisp) {
- *r_side = RIGHT_SIDE_OVERLAP;
- return true;
+ else if (transformed->startdisp <= target->enddisp && target->enddisp <=
transformed->enddisp) {
+ overlap = STRIP_OVERLAP_RIGHT_SIDE;
}
- return false;
+ return overlap;
}
static void seq_transform_handle_overwrite_split(TransInfo *t,
@@ -470,7 +460,7 @@ static void seq_transform_handle_overwrite_split(TransInfo
*t,
static void seq_transform_handle_overwrite_trim(TransInfo *t,
Sequence *transformed,
Sequence *target,
- ePartialOvelapSide
overlap_side)
+ eOvelapDescrition overlap)
{
SeqCollection *targets = SEQ_query_by_reference(
target, seqbase_active_get(t), SEQ_query_strip_effect_chain);
@@ -486,17 +476,14 @@ static void seq_transform_handle_overwrite_trim(TransInfo
*t,
if ((seq->type & SEQ_TYPE_EFFECT) != 0 &&
SEQ_effect_get_num_inputs(seq->type) > 0) {
continue;
}
- if (is_partial_overlap(transformed, seq, &overlap_side)) {
- if (overlap_side == LEFT_SIDE_OVERLAP) {
- SEQ_transform_set_left_handle_frame(seq, transformed->enddisp);
- }
- if (overlap_side == RIGHT_SIDE_OVERLAP) {
- SEQ_transform_set_right_handle_frame(seq, transformed->startdisp);
- }
+ if (overlap == STRIP_OVERLAP_LEFT_SIDE) {
+ SEQ_transform_set_left_handle_frame(seq, transformed->enddisp);
+ }
+ else if (overlap == STRIP_OVERLAP_RIGHT_SIDE) {
+ SEQ_transform_set_right_handle_frame(seq, transformed->startdisp);
}
SEQ_time_update_sequence(t->scene, seq);
}
-
SEQ_collection_free(targets);
}
@@ -504,29 +491,30 @@ static void seq_transform_handle_overwrite(TransInfo *t,
SeqCollection *transfor
{
SeqCollection *targets = query_overwrite_targets(t, transformed_strips);
- ePartialOvelapSide overlap_side;
bool strips_delete = false;
Sequence *target;
Sequence *transformed;
SEQ_ITERATOR_FOREACH (target, targets) {
SEQ_ITERATOR_FOREACH (transformed, transformed_strips) {
- if (!is_same_channel(transformed, target)) {
+ if (transformed->machine != target->machine) {
continue;
}
+ eOvelapDescrition overlap = overlap_description_get(transformed, target);
+
/* Remove covered strip. */
- if (is_full_overlap(transformed, target)) {
+ if (overlap == STRIP_OVERLAP_IS_FULL) {
SEQ_edit_flag_for_removal(t->scene, seqbase_active_get(t), target);
strips_delete = true;
}
/* Split strip in 3 parts, remove middle part and fit transformed
inside. */
- else if (is_inside_overlap(transformed, target)) {
+ else if (overlap == STRIP_OVERLAP_IS_INSIDE) {
seq_transform_handle_overwrite_split(t, transformed, target);
strips_delete = true;
}
/* Nove handle by amount of overlap. */
- else if (is_partial_overlap(transformed, target, &overlap_side)) {
- seq_transform_handle_overwrite_trim(t, transformed, target,
overlap_side);
+ else if (overlap == STRIP_OVERLAP_LEFT_SIDE || overlap ==
STRIP_OVERLAP_RIGHT_SIDE) {
+ seq_transform_handle_overwrite_trim(t, transformed, target, overlap);
}
}
}
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
List details, subscription details or unsubscribe:
https://lists.blender.org/mailman/listinfo/bf-blender-cvs