Changeset View
Changeset View
Standalone View
Standalone View
source/blender/sequencer/intern/strip_transform.c
| Show All 37 Lines | |||||
| #include "SEQ_sequencer.h" | #include "SEQ_sequencer.h" | ||||
| #include "SEQ_time.h" | #include "SEQ_time.h" | ||||
| #include "SEQ_transform.h" | #include "SEQ_transform.h" | ||||
| static int seq_tx_get_start(Sequence *seq) | static int seq_tx_get_start(Sequence *seq) | ||||
| { | { | ||||
| return seq->start; | return seq->start; | ||||
| } | } | ||||
| static int seq_tx_get_end(Sequence *seq) | static int seq_tx_get_end(Scene *scene, Sequence *seq) | ||||
| { | { | ||||
| return seq->start + seq->len; | return seq->start + SEQ_time_strip_length_get(scene, seq); | ||||
| } | } | ||||
| int SEQ_transform_get_left_handle_frame(Sequence *seq, bool metaclip) | int SEQ_transform_get_left_handle_frame(Scene *scene, Sequence *seq, bool metaclip) | ||||
| { | { | ||||
| if (metaclip && seq->tmp) { | if (metaclip && seq->tmp) { | ||||
| /* return the range clipped by the parents range */ | /* return the range clipped by the parents range */ | ||||
| return max_ii(SEQ_transform_get_left_handle_frame(seq, false), | return max_ii(SEQ_transform_get_left_handle_frame(scene, seq, false), | ||||
| SEQ_transform_get_left_handle_frame((Sequence *)seq->tmp, true)); | SEQ_transform_get_left_handle_frame(scene, (Sequence *)seq->tmp, true)); | ||||
| } | } | ||||
| return (seq->start - seq->startstill) + seq->startofs; | return (seq->start - seq->startstill) + seq->startofs; | ||||
| } | } | ||||
| int SEQ_transform_get_right_handle_frame(Sequence *seq, bool metaclip) | int SEQ_transform_get_right_handle_frame(Scene *scene, Sequence *seq, bool metaclip) | ||||
| { | { | ||||
| if (metaclip && seq->tmp) { | if (metaclip && seq->tmp) { | ||||
| /* return the range clipped by the parents range */ | /* return the range clipped by the parents range */ | ||||
| return min_ii(SEQ_transform_get_right_handle_frame(seq, false), | return min_ii(SEQ_transform_get_right_handle_frame(scene, seq, false), | ||||
| SEQ_transform_get_right_handle_frame((Sequence *)seq->tmp, true)); | SEQ_transform_get_right_handle_frame(scene, (Sequence *)seq->tmp, true)); | ||||
| } | } | ||||
| return ((seq->start + seq->len) + seq->endstill) - seq->endofs; | return ((seq->start + SEQ_time_strip_length_get(scene, seq)) + seq->endstill) - seq->endofs; | ||||
| } | } | ||||
| void SEQ_transform_set_left_handle_frame(Sequence *seq, int val) | void SEQ_transform_set_left_handle_frame(Scene *UNUSED(scene), Sequence *seq, int val) | ||||
| { | { | ||||
| if (val < (seq)->start) { | if (val < (seq)->start) { | ||||
| seq->startstill = abs(val - (seq)->start); | seq->startstill = abs(val - (seq)->start); | ||||
| seq->startofs = 0; | seq->startofs = 0; | ||||
| } | } | ||||
| else { | else { | ||||
| seq->startofs = abs(val - (seq)->start); | seq->startofs = abs(val - (seq)->start); | ||||
| seq->startstill = 0; | seq->startstill = 0; | ||||
| } | } | ||||
| } | } | ||||
| void SEQ_transform_set_right_handle_frame(Sequence *seq, int val) | void SEQ_transform_set_right_handle_frame(Scene *scene, Sequence *seq, int val) | ||||
| { | { | ||||
| if (val > (seq)->start + (seq)->len) { | if (val > seq->start + SEQ_time_strip_length_get(scene, seq)) { | ||||
| seq->endstill = abs(val - (seq->start + (seq)->len)); | seq->endstill = abs(val - (seq->start + SEQ_time_strip_length_get(scene, seq))); | ||||
| seq->endofs = 0; | seq->endofs = 0; | ||||
| } | } | ||||
| else { | else { | ||||
| seq->endofs = abs(val - ((seq)->start + (seq)->len)); | seq->endofs = abs(val - (seq->start + SEQ_time_strip_length_get(scene, seq))); | ||||
| seq->endstill = 0; | seq->endstill = 0; | ||||
| } | } | ||||
| } | } | ||||
| /* used so we can do a quick check for single image seq | /* used so we can do a quick check for single image seq | ||||
| * since they work a bit differently to normal image seq's (during transform) */ | * since they work a bit differently to normal image seq's (during transform) */ | ||||
| bool SEQ_transform_single_image_check(Sequence *seq) | bool SEQ_transform_single_image_check(Sequence *seq) | ||||
| { | { | ||||
| ▲ Show 20 Lines • Show All 43 Lines • ▼ Show 20 Lines | bool SEQ_transform_seqbase_isolated_sel_check(ListBase *seqbase) | ||||
| return true; | return true; | ||||
| } | } | ||||
| /** | /** | ||||
| * Use to impose limits when dragging/extending - so impossible situations don't happen. | * Use to impose limits when dragging/extending - so impossible situations don't happen. | ||||
| * Cant use the #SEQ_LEFTSEL and #SEQ_LEFTSEL directly because the strip may be in a meta-strip. | * Cant use the #SEQ_LEFTSEL and #SEQ_LEFTSEL directly because the strip may be in a meta-strip. | ||||
| */ | */ | ||||
| void SEQ_transform_handle_xlimits(Sequence *seq, int leftflag, int rightflag) | void SEQ_transform_handle_xlimits(Scene *scene, Sequence *seq, int leftflag, int rightflag) | ||||
| { | { | ||||
| if (leftflag) { | if (leftflag) { | ||||
| if (SEQ_transform_get_left_handle_frame(seq, false) >= | if (SEQ_transform_get_left_handle_frame(scene, seq, false) >= | ||||
| SEQ_transform_get_right_handle_frame(seq, false)) { | SEQ_transform_get_right_handle_frame(scene, seq, false)) { | ||||
| SEQ_transform_set_left_handle_frame(seq, | SEQ_transform_set_left_handle_frame( | ||||
| SEQ_transform_get_right_handle_frame(seq, false) - 1); | scene, seq, SEQ_transform_get_right_handle_frame(scene, seq, false) - 1); | ||||
| } | } | ||||
| if (SEQ_transform_single_image_check(seq) == 0) { | if (SEQ_transform_single_image_check(seq) == 0) { | ||||
| if (SEQ_transform_get_left_handle_frame(seq, false) >= seq_tx_get_end(seq)) { | if (SEQ_transform_get_left_handle_frame(scene, seq, false) >= seq_tx_get_end(scene, seq)) { | ||||
| SEQ_transform_set_left_handle_frame(seq, seq_tx_get_end(seq) - 1); | SEQ_transform_set_left_handle_frame(scene, seq, seq_tx_get_end(scene, seq) - 1); | ||||
| } | } | ||||
| /* doesn't work now - TODO */ | /* doesn't work now - TODO */ | ||||
| #if 0 | #if 0 | ||||
| if (seq_tx_get_start(seq) >= seq_tx_get_final_right(seq, 0)) { | if (seq_tx_get_start(seq) >= seq_tx_get_final_right(seq, 0)) { | ||||
| int ofs; | int ofs; | ||||
| ofs = seq_tx_get_start(seq) - seq_tx_get_final_right(seq, 0); | ofs = seq_tx_get_start(seq) - seq_tx_get_final_right(seq, 0); | ||||
| seq->start -= ofs; | seq->start -= ofs; | ||||
| seq_tx_set_final_left(seq, seq_tx_get_final_left(seq, 0) + ofs); | seq_tx_set_final_left(seq, seq_tx_get_final_left(seq, 0) + ofs); | ||||
| } | } | ||||
| #endif | #endif | ||||
| } | } | ||||
| } | } | ||||
| if (rightflag) { | if (rightflag) { | ||||
| if (SEQ_transform_get_right_handle_frame(seq, false) <= | if (SEQ_transform_get_right_handle_frame(scene, seq, false) <= | ||||
| SEQ_transform_get_left_handle_frame(seq, false)) { | SEQ_transform_get_left_handle_frame(scene, seq, false)) { | ||||
| SEQ_transform_set_right_handle_frame(seq, | SEQ_transform_set_right_handle_frame( | ||||
| SEQ_transform_get_left_handle_frame(seq, false) + 1); | scene, seq, SEQ_transform_get_left_handle_frame(scene, seq, false) + 1); | ||||
| } | } | ||||
| if (SEQ_transform_single_image_check(seq) == 0) { | if (SEQ_transform_single_image_check(seq) == 0) { | ||||
| if (SEQ_transform_get_right_handle_frame(seq, false) <= seq_tx_get_start(seq)) { | if (SEQ_transform_get_right_handle_frame(scene, seq, false) <= seq_tx_get_start(seq)) { | ||||
| SEQ_transform_set_right_handle_frame(seq, seq_tx_get_start(seq) + 1); | SEQ_transform_set_right_handle_frame(scene, seq, seq_tx_get_start(seq) + 1); | ||||
| } | } | ||||
| } | } | ||||
| } | } | ||||
| /* sounds cannot be extended past their endpoints */ | /* sounds cannot be extended past their endpoints */ | ||||
| if (seq->type == SEQ_TYPE_SOUND_RAM) { | if (seq->type == SEQ_TYPE_SOUND_RAM) { | ||||
| seq->startstill = 0; | seq->startstill = 0; | ||||
| seq->endstill = 0; | seq->endstill = 0; | ||||
| } | } | ||||
| } | } | ||||
| void SEQ_transform_fix_single_image_seq_offsets(Sequence *seq) | void SEQ_transform_fix_single_image_seq_offsets(Scene *scene, Sequence *seq) | ||||
| { | { | ||||
| int left, start, offset; | int left, start, offset; | ||||
| if (!SEQ_transform_single_image_check(seq)) { | if (!SEQ_transform_single_image_check(seq)) { | ||||
| return; | return; | ||||
| } | } | ||||
| /* make sure the image is always at the start since there is only one, | /* make sure the image is always at the start since there is only one, | ||||
| * adjusting its start should be ok */ | * adjusting its start should be ok */ | ||||
| left = SEQ_transform_get_left_handle_frame(seq, false); | left = SEQ_transform_get_left_handle_frame(scene, seq, false); | ||||
| start = seq->start; | start = seq->start; | ||||
| if (start != left) { | if (start != left) { | ||||
| offset = left - start; | offset = left - start; | ||||
| SEQ_transform_set_left_handle_frame(seq, | SEQ_transform_set_left_handle_frame( | ||||
| SEQ_transform_get_left_handle_frame(seq, false) - offset); | scene, seq, SEQ_transform_get_left_handle_frame(scene, seq, false) - offset); | ||||
| SEQ_transform_set_right_handle_frame( | SEQ_transform_set_right_handle_frame( | ||||
| seq, SEQ_transform_get_right_handle_frame(seq, false) - offset); | scene, seq, SEQ_transform_get_right_handle_frame(scene, seq, false) - offset); | ||||
| seq->start += offset; | seq->start += offset; | ||||
| } | } | ||||
| } | } | ||||
| bool SEQ_transform_sequence_can_be_translated(Sequence *seq) | bool SEQ_transform_sequence_can_be_translated(Sequence *seq) | ||||
| { | { | ||||
| return !(seq->type & SEQ_TYPE_EFFECT) || (SEQ_effect_get_num_inputs(seq->type) == 0); | return !(seq->type & SEQ_TYPE_EFFECT) || (SEQ_effect_get_num_inputs(seq->type) == 0); | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 204 Lines • Show Last 20 Lines | |||||