Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/editors/space_sequencer/sequencer_edit.c')
-rw-r--r--source/blender/editors/space_sequencer/sequencer_edit.c624
1 files changed, 65 insertions, 559 deletions
diff --git a/source/blender/editors/space_sequencer/sequencer_edit.c b/source/blender/editors/space_sequencer/sequencer_edit.c
index 28ded81eeae..8be7c7b4fb6 100644
--- a/source/blender/editors/space_sequencer/sequencer_edit.c
+++ b/source/blender/editors/space_sequencer/sequencer_edit.c
@@ -50,17 +50,12 @@
#include "WM_types.h"
#include "RNA_define.h"
-#include "RNA_enum_types.h"
/* For menu, popup, icons, etc. */
-
-#include "ED_anim_api.h"
#include "ED_numinput.h"
#include "ED_outliner.h"
#include "ED_screen.h"
#include "ED_sequencer.h"
-#include "ED_space_api.h"
-#include "ED_transform.h"
#include "UI_interface.h"
#include "UI_view2d.h"
@@ -229,11 +224,11 @@ static void seq_proxy_build_job(const bContext *C, ReportList *reports)
selected = true;
if (!(seq->flag & SEQ_USE_PROXY)) {
- BKE_reportf(reports, RPT_WARNING, "Proxy is not enabled for %s, skipping.", seq->name);
+ BKE_reportf(reports, RPT_WARNING, "Proxy is not enabled for %s, skipping", seq->name);
continue;
}
- else if (seq->strip->proxy->build_size_flags == 0) {
- BKE_reportf(reports, RPT_WARNING, "Resolution is not selected for %s, skipping.", seq->name);
+ if (seq->strip->proxy->build_size_flags == 0) {
+ BKE_reportf(reports, RPT_WARNING, "Resolution is not selected for %s, skipping", seq->name);
continue;
}
@@ -241,13 +236,13 @@ static void seq_proxy_build_job(const bContext *C, ReportList *reports)
pj->main, pj->depsgraph, pj->scene, seq, file_list, &pj->queue);
if (!success && (seq->strip->proxy->build_flags & SEQ_PROXY_SKIP_EXISTING) != 0) {
- BKE_reportf(reports, RPT_WARNING, "Overwrite is not checked for %s, skipping.", seq->name);
+ BKE_reportf(reports, RPT_WARNING, "Overwrite is not checked for %s, skipping", seq->name);
}
}
SEQ_END;
if (!selected) {
- BKE_reportf(reports, RPT_WARNING, "Select movie or image strips.");
+ BKE_reportf(reports, RPT_WARNING, "Select movie or image strips");
return;
}
@@ -397,7 +392,7 @@ static Sequence *find_next_prev_sequence(Scene *scene, Sequence *test, int lr, i
best_seq = seq;
break;
}
- else if (dist < best_dist) {
+ if (dist < best_dist) {
best_dist = dist;
best_seq = seq;
}
@@ -472,30 +467,6 @@ static bool seq_is_parent(Sequence *par, Sequence *seq)
return ((par->seq1 == seq) || (par->seq2 == seq) || (par->seq3 == seq));
}
-static bool seq_is_predecessor(Sequence *pred, Sequence *seq)
-{
- if (!pred) {
- return 0;
- }
- if (pred == seq) {
- return 0;
- }
- else if (seq_is_parent(pred, seq)) {
- return 1;
- }
- else if (pred->seq1 && seq_is_predecessor(pred->seq1, seq)) {
- return 1;
- }
- else if (pred->seq2 && seq_is_predecessor(pred->seq2, seq)) {
- return 1;
- }
- else if (pred->seq3 && seq_is_predecessor(pred->seq3, seq)) {
- return 1;
- }
-
- return 0;
-}
-
/** \} */
/* -------------------------------------------------------------------- */
@@ -678,6 +649,14 @@ int seq_effect_find_selected(Scene *scene,
*r_selseq2 = seq2;
*r_selseq3 = seq3;
+ /* TODO(Richard): This function needs some refactoring, this is just quick hack for T73828. */
+ if (BKE_sequence_effect_get_num_inputs(type) < 3) {
+ *r_selseq3 = NULL;
+ }
+ if (BKE_sequence_effect_get_num_inputs(type) < 2) {
+ *r_selseq2 = NULL;
+ }
+
return 1;
}
@@ -687,78 +666,6 @@ int seq_effect_find_selected(Scene *scene,
/** \name Delete Utilities
* \{ */
-static Sequence *del_seq_find_replace_recurs(Scene *scene, Sequence *seq)
-{
- Sequence *seq1, *seq2, *seq3;
-
- /* Try to find a replacement input sequence, and flag for later deletion if
- * no replacement can be found. */
-
- if (!seq) {
- return NULL;
- }
- else if (!(seq->type & SEQ_TYPE_EFFECT)) {
- return ((seq->flag & SELECT) ? NULL : seq);
- }
- else if (!(seq->flag & SELECT)) {
- /* Try to find replacement for effect inputs. */
- seq1 = del_seq_find_replace_recurs(scene, seq->seq1);
- seq2 = del_seq_find_replace_recurs(scene, seq->seq2);
- seq3 = del_seq_find_replace_recurs(scene, seq->seq3);
-
- if (seq1 == seq->seq1 && seq2 == seq->seq2 && seq3 == seq->seq3) {
- /* Pass. */
- }
- else if (seq1 || seq2 || seq3) {
- seq->seq1 = (seq1) ? seq1 : (seq2) ? seq2 : seq3;
- seq->seq2 = (seq2) ? seq2 : (seq1) ? seq1 : seq3;
- seq->seq3 = (seq3) ? seq3 : (seq1) ? seq1 : seq2;
-
- BKE_sequencer_update_changed_seq_and_deps(scene, seq, 1, 1);
- }
- else {
- seq->flag |= SELECT; /* Mark for delete. */
- }
- }
-
- if (seq->flag & SELECT) {
- if ((seq1 = del_seq_find_replace_recurs(scene, seq->seq1))) {
- return seq1;
- }
- if ((seq2 = del_seq_find_replace_recurs(scene, seq->seq2))) {
- return seq2;
- }
- if ((seq3 = del_seq_find_replace_recurs(scene, seq->seq3))) {
- return seq3;
- }
- else {
- return NULL;
- }
- }
- else {
- return seq;
- }
-}
-
-static void del_seq_clear_modifiers_recurs(Scene *scene, Sequence *deleting_sequence)
-{
- Editing *ed = BKE_sequencer_editing_get(scene, false);
- Sequence *current_sequence;
-
- SEQP_BEGIN (ed, current_sequence) {
- if (!(current_sequence->flag & SELECT) && current_sequence != deleting_sequence) {
- SequenceModifierData *smd;
-
- for (smd = current_sequence->modifiers.first; smd; smd = smd->next) {
- if (smd->mask_sequence == deleting_sequence) {
- smd->mask_sequence = NULL;
- }
- }
- }
- }
- SEQ_END;
-}
-
static void recurs_del_seq_flag(Scene *scene, ListBase *lb, short flag, short deleteall)
{
Sequence *seq, *seqn;
@@ -1408,14 +1315,21 @@ static int sequencer_snap_exec(bContext *C, wmOperator *op)
BKE_sequence_base_shuffle(ed->seqbasep, seq, scene);
}
}
- else if (seq->type & SEQ_TYPE_EFFECT) {
+ }
+
+ /* Recalculate bounds of effect strips. */
+ for (seq = ed->seqbasep->first; seq; seq = seq->next) {
+ if (seq->type & SEQ_TYPE_EFFECT) {
if (seq->seq1 && (seq->seq1->flag & SELECT)) {
+ BKE_sequencer_offset_animdata(scene, seq, (snap_frame - seq->startdisp));
BKE_sequence_calc(scene, seq);
}
else if (seq->seq2 && (seq->seq2->flag & SELECT)) {
+ BKE_sequencer_offset_animdata(scene, seq, (snap_frame - seq->startdisp));
BKE_sequence_calc(scene, seq);
}
else if (seq->seq3 && (seq->seq3->flag & SELECT)) {
+ BKE_sequencer_offset_animdata(scene, seq, (snap_frame - seq->startdisp));
BKE_sequence_calc(scene, seq);
}
}
@@ -1734,9 +1648,7 @@ static int sequencer_slip_exec(bContext *C, wmOperator *op)
DEG_id_tag_update(&scene->id, ID_RECALC_SEQUENCER_STRIPS);
return OPERATOR_FINISHED;
}
- else {
- return OPERATOR_CANCELLED;
- }
+ return OPERATOR_CANCELLED;
}
static void sequencer_slip_update_header(Scene *scene, ScrArea *area, SlipData *data, int offset)
@@ -2223,15 +2135,22 @@ static int sequencer_reassign_inputs_exec(bContext *C, wmOperator *op)
Sequence *seq1, *seq2, *seq3, *last_seq = BKE_sequencer_active_get(scene);
const char *error_msg;
+ if (BKE_sequence_effect_get_num_inputs(last_seq->type) != 0) {
+ BKE_report(op->reports, RPT_ERROR, "Cannot reassign inputs: strip has no inputs");
+ return OPERATOR_CANCELLED;
+ }
+
if (!seq_effect_find_selected(
- scene, last_seq, last_seq->type, &seq1, &seq2, &seq3, &error_msg)) {
+ scene, last_seq, last_seq->type, &seq1, &seq2, &seq3, &error_msg) ||
+ BKE_sequence_effect_get_num_inputs(last_seq->type) == 0) {
BKE_report(op->reports, RPT_ERROR, error_msg);
return OPERATOR_CANCELLED;
}
/* Check if reassigning would create recursivity. */
- if (seq_is_predecessor(seq1, last_seq) || seq_is_predecessor(seq2, last_seq) ||
- seq_is_predecessor(seq3, last_seq)) {
- BKE_report(op->reports, RPT_ERROR, "Cannot reassign inputs: no cycles allowed");
+ if (BKE_sequencer_render_loop_check(seq1, last_seq) ||
+ BKE_sequencer_render_loop_check(seq2, last_seq) ||
+ BKE_sequencer_render_loop_check(seq3, last_seq)) {
+ BKE_report(op->reports, RPT_ERROR, "Cannot reassign inputs: recursion detected.");
return OPERATOR_CANCELLED;
}
@@ -2323,6 +2242,11 @@ void SEQUENCER_OT_swap_inputs(struct wmOperatorType *ot)
/** \name Split Strips Operator
* \{ */
+enum {
+ SEQ_SPLIT_SOFT,
+ SEQ_SPLIT_HARD,
+};
+
static const EnumPropertyItem prop_split_types[] = {
{SEQ_SPLIT_SOFT, "SOFT", 0, "Soft", ""},
{SEQ_SPLIT_HARD, "HARD", 0, "Hard", ""},
@@ -2345,6 +2269,8 @@ static int sequencer_split_exec(bContext *C, wmOperator *op)
split_side = RNA_enum_get(op->ptr, "side");
ignore_selection = RNA_boolean_get(op->ptr, "ignore_selection");
+ BKE_sequencer_prefetch_stop(scene);
+
if (split_hard == SEQ_SPLIT_HARD) {
changed = split_seq_list(bmain,
scene,
@@ -2413,10 +2339,9 @@ static int sequencer_split_exec(bContext *C, wmOperator *op)
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);
return OPERATOR_FINISHED;
}
- else {
- /* Passthrough to selection if used as tool. */
- return OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH;
- }
+
+ /* Passthrough to selection if used as tool. */
+ return OPERATOR_CANCELLED | OPERATOR_PASS_THROUGH;
}
static int sequencer_split_invoke(bContext *C, wmOperator *op, const wmEvent *event)
@@ -2591,59 +2516,18 @@ static int sequencer_delete_exec(bContext *C, wmOperator *UNUSED(op))
Scene *scene = CTX_data_scene(C);
Editing *ed = BKE_sequencer_editing_get(scene, false);
Sequence *seq;
- MetaStack *ms;
- bool nothing_selected = true;
-
- seq = BKE_sequencer_active_get(scene);
- if (seq && seq->flag & SELECT) { /* Avoid a loop since this is likely to be selected. */
- nothing_selected = false;
- }
- else {
- for (seq = ed->seqbasep->first; seq; seq = seq->next) {
- if (seq->flag & SELECT) {
- nothing_selected = false;
- break;
- }
- }
- }
- if (nothing_selected) {
- return OPERATOR_FINISHED;
- }
-
- /* For effects and modifiers, try to find a replacement input. */
- for (seq = ed->seqbasep->first; seq; seq = seq->next) {
- if (!(seq->flag & SELECT)) {
- if ((seq->type & SEQ_TYPE_EFFECT)) {
- del_seq_find_replace_recurs(scene, seq);
- }
- }
- else {
- del_seq_clear_modifiers_recurs(scene, seq);
+ SEQP_BEGIN (scene->ed, seq) {
+ if (seq->flag & SELECT) {
+ BKE_sequencer_flag_for_removal(scene, ed->seqbasep, seq);
}
}
-
- /* Delete all selected strips. */
- recurs_del_seq_flag(scene, ed->seqbasep, SELECT, 0);
-
- /* Update lengths, etc. */
- seq = ed->seqbasep->first;
- while (seq) {
- BKE_sequence_calc(scene, seq);
- seq = seq->next;
- }
-
- /* Free parent metas. */
- ms = ed->metastack.last;
- while (ms) {
- BKE_sequence_calc(scene, ms->parseq);
- ms = ms->prev;
- }
+ SEQ_END;
+ BKE_sequencer_remove_flagged_sequences(scene, ed->seqbasep);
DEG_id_tag_update(&scene->id, ID_RECALC_SEQUENCER_STRIPS);
DEG_relations_tag_update(bmain);
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);
-
return OPERATOR_FINISHED;
}
@@ -3010,18 +2894,16 @@ static int seq_depends_on_meta(Sequence *seq, Sequence *seqm)
if (seq == seqm) {
return 1;
}
- else if (seq->seq1 && seq_depends_on_meta(seq->seq1, seqm)) {
+ if (seq->seq1 && seq_depends_on_meta(seq->seq1, seqm)) {
return 1;
}
- else if (seq->seq2 && seq_depends_on_meta(seq->seq2, seqm)) {
+ if (seq->seq2 && seq_depends_on_meta(seq->seq2, seqm)) {
return 1;
}
- else if (seq->seq3 && seq_depends_on_meta(seq->seq3, seqm)) {
+ if (seq->seq3 && seq_depends_on_meta(seq->seq3, seqm)) {
return 1;
}
- else {
- return 0;
- }
+ return 0;
}
static int sequencer_meta_separate_exec(bContext *C, wmOperator *UNUSED(op))
@@ -3092,321 +2974,6 @@ void SEQUENCER_OT_meta_separate(wmOperatorType *ot)
/** \} */
/* -------------------------------------------------------------------- */
-/** \name Sequencer Frame All Operator
- * \{ */
-
-static int sequencer_view_all_exec(bContext *C, wmOperator *op)
-{
- ARegion *region = CTX_wm_region(C);
- rctf box;
-
- const int smooth_viewtx = WM_operator_smooth_viewtx_get(op);
-
- boundbox_seq(CTX_data_scene(C), &box);
- UI_view2d_smooth_view(C, region, &box, smooth_viewtx);
- return OPERATOR_FINISHED;
-}
-
-void SEQUENCER_OT_view_all(wmOperatorType *ot)
-{
- /* Identifiers. */
- ot->name = "Frame All";
- ot->idname = "SEQUENCER_OT_view_all";
- ot->description = "View all the strips in the sequencer";
-
- /* Api callbacks. */
- ot->exec = sequencer_view_all_exec;
- ot->poll = ED_operator_sequencer_active;
-
- /* Flags. */
- ot->flag = OPTYPE_REGISTER;
-}
-
-/** \} */
-
-/* -------------------------------------------------------------------- */
-/** \name Go to Current Frame Operator
- * \{ */
-
-static int sequencer_view_frame_exec(bContext *C, wmOperator *op)
-{
- const int smooth_viewtx = WM_operator_smooth_viewtx_get(op);
- ANIM_center_frame(C, smooth_viewtx);
-
- return OPERATOR_FINISHED;
-}
-
-void SEQUENCER_OT_view_frame(wmOperatorType *ot)
-{
- /* Identifiers. */
- ot->name = "Go to Current Frame";
- ot->idname = "SEQUENCER_OT_view_frame";
- ot->description = "Move the view to the current frame";
-
- /* Api callbacks. */
- ot->exec = sequencer_view_frame_exec;
- ot->poll = ED_operator_sequencer_active;
-
- /* Flags. */
- ot->flag = 0;
-}
-
-/** \} */
-
-/* -------------------------------------------------------------------- */
-/** \name Preview Frame All Operator
- * \{ */
-
-static int sequencer_view_all_preview_exec(bContext *C, wmOperator *UNUSED(op))
-{
- bScreen *screen = CTX_wm_screen(C);
- ScrArea *area = CTX_wm_area(C);
-#if 0
- ARegion *region = CTX_wm_region(C);
- SpaceSeq *sseq = area->spacedata.first;
- Scene *scene = CTX_data_scene(C);
-#endif
- View2D *v2d = UI_view2d_fromcontext(C);
-
- v2d->cur = v2d->tot;
- UI_view2d_curRect_validate(v2d);
- UI_view2d_sync(screen, area, v2d, V2D_LOCK_COPY);
-
-#if 0
- /* Like zooming on an image view. */
- float zoomX, zoomY;
- int width, height, imgwidth, imgheight;
-
- width = region->winx;
- height = region->winy;
-
- seq_reset_imageofs(sseq);
-
- imgwidth = (scene->r.size * scene->r.xsch) / 100;
- imgheight = (scene->r.size * scene->r.ysch) / 100;
-
- /* Apply aspect, doesn't need to be that accurate. */
- imgwidth = (int)(imgwidth * (scene->r.xasp / scene->r.yasp));
-
- if (((imgwidth >= width) || (imgheight >= height)) && ((width > 0) && (height > 0))) {
- /* Find the zoom value that will fit the image in the image space. */
- zoomX = ((float)width) / ((float)imgwidth);
- zoomY = ((float)height) / ((float)imgheight);
- sseq->zoom = (zoomX < zoomY) ? zoomX : zoomY;
-
- sseq->zoom = 1.0f / power_of_2(1 / min_ff(zoomX, zoomY));
- }
- else {
- sseq->zoom = 1.0f;
- }
-#endif
-
- ED_area_tag_redraw(CTX_wm_area(C));
- return OPERATOR_FINISHED;
-}
-
-void SEQUENCER_OT_view_all_preview(wmOperatorType *ot)
-{
- /* Identifiers. */
- ot->name = "Frame All";
- ot->idname = "SEQUENCER_OT_view_all_preview";
- ot->description = "Zoom preview to fit in the area";
-
- /* Api callbacks. */
- ot->exec = sequencer_view_all_preview_exec;
- ot->poll = ED_operator_sequencer_active;
-
- /* Flags. */
- ot->flag = OPTYPE_REGISTER;
-}
-
-/** \} */
-
-/* -------------------------------------------------------------------- */
-/** \name Sequencer View Zoom Ratio Operator
- * \{ */
-
-static int sequencer_view_zoom_ratio_exec(bContext *C, wmOperator *op)
-{
- RenderData *rd = &CTX_data_scene(C)->r;
- View2D *v2d = UI_view2d_fromcontext(C);
-
- float ratio = RNA_float_get(op->ptr, "ratio");
-
- float winx = (int)(rd->size * rd->xsch) / 100;
- float winy = (int)(rd->size * rd->ysch) / 100;
-
- float facx = BLI_rcti_size_x(&v2d->mask) / winx;
- float facy = BLI_rcti_size_y(&v2d->mask) / winy;
-
- BLI_rctf_resize(&v2d->cur, ceilf(winx * facx / ratio + 0.5f), ceilf(winy * facy / ratio + 0.5f));
-
- ED_region_tag_redraw(CTX_wm_region(C));
-
- return OPERATOR_FINISHED;
-}
-
-void SEQUENCER_OT_view_zoom_ratio(wmOperatorType *ot)
-{
- /* Identifiers. */
- ot->name = "Sequencer View Zoom Ratio";
- ot->idname = "SEQUENCER_OT_view_zoom_ratio";
- ot->description = "Change zoom ratio of sequencer preview";
-
- /* Api callbacks. */
- ot->exec = sequencer_view_zoom_ratio_exec;
- ot->poll = ED_operator_sequencer_active;
-
- /* Properties. */
- RNA_def_float(ot->srna,
- "ratio",
- 1.0f,
- -FLT_MAX,
- FLT_MAX,
- "Ratio",
- "Zoom ratio, 1.0 is 1:1, higher is zoomed in, lower is zoomed out",
- -FLT_MAX,
- FLT_MAX);
-}
-
-/** \} */
-
-/* -------------------------------------------------------------------- */
-/** \name View Toggle Operator
- * \{ */
-
-#if 0
-static const EnumPropertyItem view_type_items[] = {
- {SEQ_VIEW_SEQUENCE, "SEQUENCER", ICON_SEQ_SEQUENCER, "Sequencer", ""},
- {SEQ_VIEW_PREVIEW, "PREVIEW", ICON_SEQ_PREVIEW, "Image Preview", ""},
- {SEQ_VIEW_SEQUENCE_PREVIEW,
- "SEQUENCER_PREVIEW",
- ICON_SEQ_SEQUENCER,
- "Sequencer and Image Preview",
- ""},
- {0, NULL, 0, NULL, NULL},
-};
-#endif
-
-static int sequencer_view_toggle_exec(bContext *C, wmOperator *UNUSED(op))
-{
- SpaceSeq *sseq = (SpaceSeq *)CTX_wm_space_data(C);
-
- sseq->view++;
- if (sseq->view > SEQ_VIEW_SEQUENCE_PREVIEW) {
- sseq->view = SEQ_VIEW_SEQUENCE;
- }
-
- ED_area_tag_refresh(CTX_wm_area(C));
-
- return OPERATOR_FINISHED;
-}
-
-void SEQUENCER_OT_view_toggle(wmOperatorType *ot)
-{
- /* Identifiers. */
- ot->name = "View Toggle";
- ot->idname = "SEQUENCER_OT_view_toggle";
- ot->description = "Toggle between sequencer views (sequence, preview, both)";
-
- /* Api callbacks. */
- ot->exec = sequencer_view_toggle_exec;
- ot->poll = ED_operator_sequencer_active;
-
- /* Flags. */
- ot->flag = OPTYPE_REGISTER;
-}
-
-/** \} */
-
-/* -------------------------------------------------------------------- */
-/** \name Frame Selected Operator
- * \{ */
-
-static int sequencer_view_selected_exec(bContext *C, wmOperator *op)
-{
- Scene *scene = CTX_data_scene(C);
- View2D *v2d = UI_view2d_fromcontext(C);
- ARegion *region = CTX_wm_region(C);
- Editing *ed = BKE_sequencer_editing_get(scene, false);
- Sequence *last_seq = BKE_sequencer_active_get(scene);
- Sequence *seq;
- rctf cur_new = v2d->cur;
-
- int xmin = MAXFRAME * 2;
- int xmax = -MAXFRAME * 2;
- int ymin = MAXSEQ + 1;
- int ymax = 0;
- int orig_height;
- int ymid;
- int ymargin = 1;
- int xmargin = FPS;
-
- if (ed == NULL) {
- return OPERATOR_CANCELLED;
- }
-
- for (seq = ed->seqbasep->first; seq; seq = seq->next) {
- if ((seq->flag & SELECT) || (seq == last_seq)) {
- xmin = min_ii(xmin, seq->startdisp);
- xmax = max_ii(xmax, seq->enddisp);
-
- ymin = min_ii(ymin, seq->machine);
- ymax = max_ii(ymax, seq->machine);
- }
- }
-
- if (ymax != 0) {
- const int smooth_viewtx = WM_operator_smooth_viewtx_get(op);
-
- xmax += xmargin;
- xmin -= xmargin;
- ymax += ymargin;
- ymin -= ymargin;
-
- orig_height = BLI_rctf_size_y(&cur_new);
-
- cur_new.xmin = xmin;
- cur_new.xmax = xmax;
-
- cur_new.ymin = ymin;
- cur_new.ymax = ymax;
-
- /* Only zoom out vertically. */
- if (orig_height > BLI_rctf_size_y(&cur_new)) {
- ymid = BLI_rctf_cent_y(&cur_new);
-
- cur_new.ymin = ymid - (orig_height / 2);
- cur_new.ymax = ymid + (orig_height / 2);
- }
-
- UI_view2d_smooth_view(C, region, &cur_new, smooth_viewtx);
-
- return OPERATOR_FINISHED;
- }
- else {
- return OPERATOR_CANCELLED;
- }
-}
-
-void SEQUENCER_OT_view_selected(wmOperatorType *ot)
-{
- /* Identifiers. */
- ot->name = "Frame Selected";
- ot->idname = "SEQUENCER_OT_view_selected";
- ot->description = "Zoom the sequencer on the selected strips";
-
- /* Api callbacks. */
- ot->exec = sequencer_view_selected_exec;
- ot->poll = ED_operator_sequencer_active;
-
- /* Flags. */
- ot->flag = OPTYPE_REGISTER;
-}
-
-/** \} */
-
-/* -------------------------------------------------------------------- */
/** \name Jump to Strip Operator
* \{ */
@@ -3748,6 +3315,7 @@ static int sequencer_paste_exec(bContext *C, wmOperator *UNUSED(op))
* on the actual data-blocks. */
BKE_sequencer_base_clipboard_pointers_restore(&seqbase_clipboard, bmain);
BKE_sequence_base_dupli_recursive(scene, scene, &nseqbase, &seqbase_clipboard, 0, 0);
+ BKE_sequencer_base_clipboard_pointers_store(bmain, &seqbase_clipboard);
iseq_first = nseqbase.first;
@@ -3766,6 +3334,7 @@ static int sequencer_paste_exec(bContext *C, wmOperator *UNUSED(op))
}
DEG_id_tag_update(&scene->id, ID_RECALC_SEQUENCER_STRIPS);
+ DEG_relations_tag_update(bmain);
WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);
ED_outliner_select_sync_from_sequence_tag(C);
@@ -3857,67 +3426,6 @@ void SEQUENCER_OT_swap_data(wmOperatorType *ot)
/** \} */
/* -------------------------------------------------------------------- */
-/** \name Border Offset View Operator
- * \{ */
-
-static int view_ghost_border_exec(bContext *C, wmOperator *op)
-{
- Scene *scene = CTX_data_scene(C);
- View2D *v2d = UI_view2d_fromcontext(C);
-
- rctf rect;
-
- /* Convert coordinates of rect to 'tot' rect coordinates. */
- WM_operator_properties_border_to_rctf(op, &rect);
- UI_view2d_region_to_view_rctf(v2d, &rect, &rect);
-
- rect.xmin /= fabsf(BLI_rctf_size_x(&v2d->tot));
- rect.ymin /= fabsf(BLI_rctf_size_y(&v2d->tot));
-
- rect.xmax /= fabsf(BLI_rctf_size_x(&v2d->tot));
- rect.ymax /= fabsf(BLI_rctf_size_y(&v2d->tot));
-
- rect.xmin += 0.5f;
- rect.xmax += 0.5f;
- rect.ymin += 0.5f;
- rect.ymax += 0.5f;
-
- CLAMP(rect.xmin, 0.0f, 1.0f);
- CLAMP(rect.ymin, 0.0f, 1.0f);
- CLAMP(rect.xmax, 0.0f, 1.0f);
- CLAMP(rect.ymax, 0.0f, 1.0f);
-
- scene->ed->over_border = rect;
-
- WM_event_add_notifier(C, NC_SCENE | ND_SEQUENCER, scene);
-
- return OPERATOR_FINISHED;
-}
-
-void SEQUENCER_OT_view_ghost_border(wmOperatorType *ot)
-{
- /* Identifiers. */
- ot->name = "Border Offset View";
- ot->idname = "SEQUENCER_OT_view_ghost_border";
- ot->description = "Set the boundaries of the border used for offset-view";
-
- /* Api callbacks. */
- ot->invoke = WM_gesture_box_invoke;
- ot->exec = view_ghost_border_exec;
- ot->modal = WM_gesture_box_modal;
- ot->poll = sequencer_view_preview_poll;
- ot->cancel = WM_gesture_box_cancel;
-
- /* Flags. */
- ot->flag = 0;
-
- /* Properties. */
- WM_operator_properties_gesture_box(ot);
-}
-
-/** \} */
-
-/* -------------------------------------------------------------------- */
/** \name Rebuild Proxy and Timecode Indices Operator
* \{ */
@@ -4126,9 +3634,8 @@ static int sequencer_change_effect_input_exec(bContext *C, wmOperator *op)
BKE_report(op->reports, RPT_ERROR, "One of the effect inputs is unset, cannot swap");
return OPERATOR_CANCELLED;
}
- else {
- SWAP(Sequence *, *seq_1, *seq_2);
- }
+
+ SWAP(Sequence *, *seq_1, *seq_2);
BKE_sequencer_update_changed_seq_and_deps(scene, seq, 0, 1);
@@ -4183,15 +3690,14 @@ static int sequencer_change_effect_type_exec(bContext *C, wmOperator *op)
BKE_report(op->reports, RPT_ERROR, "New effect needs more input strips");
return OPERATOR_CANCELLED;
}
- else {
- sh = BKE_sequence_get_effect(seq);
- sh.free(seq, true);
- seq->type = new_type;
+ sh = BKE_sequence_get_effect(seq);
+ sh.free(seq, true);
- sh = BKE_sequence_get_effect(seq);
- sh.init(seq);
- }
+ seq->type = new_type;
+
+ sh = BKE_sequence_get_effect(seq);
+ sh.init(seq);
BKE_sequencer_update_changed_seq_and_deps(scene, seq, 0, 1);
/* Invalidate cache. */
@@ -4301,7 +3807,7 @@ static int sequencer_change_path_exec(bContext *C, wmOperator *op)
}
char filepath[FILE_MAX];
RNA_string_get(op->ptr, "filepath", filepath);
- BLI_strncpy(sound->name, filepath, sizeof(sound->name));
+ BLI_strncpy(sound->filepath, filepath, sizeof(sound->filepath));
BKE_sound_load(bmain, sound);
}
else {
@@ -4545,7 +4051,7 @@ static int sequencer_set_range_to_strips_exec(bContext *C, wmOperator *op)
BKE_report(op->reports, RPT_WARNING, "Select one or more strips");
return OPERATOR_CANCELLED;
}
- else if (efra < 0) {
+ if (efra < 0) {
BKE_report(op->reports, RPT_ERROR, "Can't set a negative range");
return OPERATOR_CANCELLED;
}