61 if ((seq->seq1 && (seq->seq1->flag &
SELECT) == 0) ||
62 (seq->seq2 && (seq->seq2->flag &
SELECT) == 0))
68 if ((seq->seq1 && (seq->seq1->flag &
SELECT)) || (seq->seq2 && (seq->seq2->flag &
SELECT))) {
122 else if (seq->
seq1 ==
nullptr && seq->
seq2 ==
nullptr) {
140 const int orig_machine = test->
machine;
143 test->
machine += channel_delta;
149 test->
machine += channel_delta;
159 if (seq->machine == orig_machine) {
198 bool all_conflicts_resolved =
false;
200 while (!all_conflicts_resolved) {
201 all_conflicts_resolved =
true;
202 for (
Sequence *seq : strips_to_shuffle) {
204 if (strips_to_shuffle.
contains(seq_other)) {
214 all_conflicts_resolved =
false;
237 const bool use_sync_markers)
241 strips_to_shuffle, empty_set, seqbasep, evil_scene,
markers, use_sync_markers);
249 const bool use_sync_markers)
253 int offset = (-offset_l < offset_r) ? offset_l : offset_r;
256 for (
Sequence *seq : strips_to_shuffle) {
258 seq->flag &= ~SEQ_OVERLAP;
261 if (!time_dependent_strips.
is_empty()) {
262 for (
Sequence *seq : time_dependent_strips) {
270 if (marker->flag &
SELECT) {
271 marker->frame += offset;
277 return offset ?
false :
true;
285 for (
Sequence *seq : transformed_strips) {
287 standalone_strips.
add(seq);
290 return standalone_strips;
302 for (
Sequence *seq : transformed_strips) {
309 if (!time_dependent_strips.
is_empty() && time_dependent_strips.
contains(seq)) {
312 if (transformed_strips.
contains(seq)) {
317 right_side_strips.
add(seq);
320 return right_side_strips;
329 bool use_sync_markers)
334 scene, seqbasep, transformed_strips, time_dependent_strips);
337 for (
Sequence *seq : right_side_strips) {
345 standalone_strips, time_dependent_strips, seqbasep, scene,
markers, use_sync_markers);
348 for (
Sequence *seq : right_side_strips) {
354 right_side_strips, seqbasep, scene,
markers, use_sync_markers);
365 bool does_overlap =
false;
366 for (
Sequence *seq_transformed : transformed_strips) {
372 return !does_overlap;
375 return overwrite_targets;
433 Main *bmain =
nullptr;
494 for (
Sequence *transformed : transformed_strips) {
495 if (transformed->machine != target->machine) {
502 strips_to_delete.
add(target);
516 for (
Sequence *seq : strips_to_delete) {
527 bool use_sync_markers)
534 standalone_strips, time_dependent_strips, seqbasep, scene,
markers, use_sync_markers);
540 bool use_sync_markers)
550 bool use_sync_markers)
554 switch (overlap_mode) {
557 scene, seqbasep, transformed_strips, time_dependent_strips, use_sync_markers);
564 scene, seqbasep, transformed_strips, time_dependent_strips, use_sync_markers);
570 for (
Sequence *seq : transformed_strips) {
574 seq->flag &= ~SEQ_OVERLAP;
581 const int timeline_frame)
590 if (!scene->toolsettings->lock_markers) {
592 if (marker->frame >= timeline_frame) {
593 marker->frame += delta;
625 if (strip_elem ==
nullptr) {
626 image_size[0] = scene->r.xsch;
627 image_size[1] = scene->r.ysch;
635 r_origin[0] = (image_size[0] * transform->origin[0]) - (image_size[0] * 0.5f) + transform->
xofs;
636 r_origin[1] = (image_size[1] * transform->origin[1]) - (image_size[1] * 0.5f) + transform->yofs;
638 const float viewport_pixel_aspect[2] = {scene->r.xasp / scene->r.yasp, 1.0f};
642 mul_v2_v2(r_origin, viewport_pixel_aspect);
653 float image_size[2] = {
float(scene->r.xsch),
float(scene->r.ysch)};
659 float transform_matrix[4][4];
660 float rotation_matrix[3][3];
666 const float origin[2] = {image_size[0] * transform->origin[0],
667 image_size[1] * transform->origin[1]};
668 const float pivot[3] = {origin[0] - (image_size[0] / 2), origin[1] - (image_size[1] / 2), 0.0f};
671 float quad_temp[4][3];
672 for (
int i = 0; i < 4; i++) {
676 quad_temp[0][0] = (image_size[0] / 2) - crop->
right;
677 quad_temp[0][1] = (image_size[1] / 2) - crop->
top;
678 quad_temp[1][0] = (image_size[0] / 2) - crop->
right;
679 quad_temp[1][1] = (-image_size[1] / 2) + crop->
bottom;
680 quad_temp[2][0] = (-image_size[0] / 2) + crop->
left;
681 quad_temp[2][1] = (-image_size[1] / 2) + crop->
bottom;
682 quad_temp[3][0] = (-image_size[0] / 2) + crop->
left;
683 quad_temp[3][1] = (image_size[1] / 2) - crop->
top;
688 const float viewport_pixel_aspect[2] = {scene->r.xasp / scene->r.yasp, 1.0f};
690 for (
int i = 0; i < 4; i++) {
691 mul_m4_v3(transform_matrix, quad_temp[i]);
693 mul_v2_v2(quad_temp[i], viewport_pixel_aspect);
715 co_dst[0] = co_src[0] * scene->r.xsch;
716 co_dst[1] = co_src[1] * scene->r.ysch;
721 co_dst[0] = co_src[0] / scene->r.xsch;
722 co_dst[1] = co_src[1] / scene->r.ysch;
735 for (
int i = 0; i < 4; i++) {
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
#define LISTBASE_FOREACH(type, var, list)
MINLINE int min_ii(int a, int b)
MINLINE int max_ii(int a, int b)
void loc_rot_size_to_mat4(float R[4][4], const float loc[3], const float rot[3][3], const float size[3])
void transform_pivot_set_m4(float mat[4][4], const float pivot[3])
void mul_m4_v3(const float M[4][4], float r[3])
void axis_angle_to_mat3_single(float R[3][3], char axis, float angle)
MINLINE void mul_v2_v2(float r[2], const float a[2])
MINLINE void copy_v2_v2(float r[2], const float a[2])
void minmax_v2v2_v2(float min[2], float max[2], const float vec[2])
MINLINE void zero_v3(float r[3])
#define INIT_MINMAX2(min, max)
@ SEQ_SINGLE_FRAME_CONTENT
@ SEQ_IGNORE_CHANNEL_LOCK
constexpr int SEQ_MAX_CHANNELS
void SEQ_offset_animdata(Scene *scene, Sequence *seq, int ofs)
SeqTimelineChannel * SEQ_channel_get_by_index(const ListBase *channels, const int channel_index)
bool SEQ_channel_is_locked(const SeqTimelineChannel *channel)
constexpr bool is_empty() const
constexpr bool contains(const T &value) const
int64_t remove_if(Predicate &&predicate)
draw_view in_light_buf[] float
int SEQ_effect_get_num_inputs(int seq_type)
blender::gpu::Batch * quad
const vector< Marker > & markers
VectorSet< Sequence * > SEQ_query_unselected_strips(ListBase *seqbase)
void SEQ_iterator_set_expand(const Scene *scene, ListBase *seqbase, VectorSet< Sequence * > &strips, void seq_query_func(const Scene *scene, Sequence *seq_reference, ListBase *seqbase, VectorSet< Sequence * > &strips))
void SEQ_query_strip_effect_chain(const Scene *scene, Sequence *reference_strip, ListBase *seqbase, VectorSet< Sequence * > &strips)
VectorSet< Sequence * > SEQ_query_by_reference(Sequence *seq_reference, const Scene *scene, ListBase *seqbase, void seq_query_func(const Scene *scene, Sequence *seq_reference, ListBase *seqbase, VectorSet< Sequence * > &strips))
Sequence * seq_sequence_lookup_meta_by_seq(const Scene *scene, const Sequence *key)
blender::Span< Sequence * > seq_sequence_lookup_effects_by_seq(const Scene *scene, const Sequence *key)
eSeqOverlapMode SEQ_tool_settings_overlap_mode_get(Scene *scene)
bool SEQ_is_valid_strip_channel(const Sequence *seq)
void SEQ_edit_flag_for_removal(Scene *scene, ListBase *seqbase, Sequence *seq)
Sequence * SEQ_edit_strip_split(Main *bmain, Scene *scene, ListBase *seqbase, Sequence *seq, const int timeline_frame, const eSeqSplitMethod method, const char **r_error)
void SEQ_edit_remove_flagged_sequences(Scene *scene, ListBase *seqbase)
bool SEQ_relation_is_effect_of_strip(const Sequence *effect, const Sequence *input)
void SEQ_relations_invalidate_cache_preprocessed(Scene *scene, Sequence *seq)
void SEQ_time_right_handle_frame_set(const Scene *scene, Sequence *seq, int timeline_frame)
void SEQ_time_update_meta_strip_range(const Scene *scene, Sequence *seq_meta)
void SEQ_time_left_handle_frame_set(const Scene *scene, Sequence *seq, int timeline_frame)
int SEQ_time_left_handle_frame_get(const Scene *, const Sequence *seq)
void seq_time_translate_handles(const Scene *scene, Sequence *seq, const int offset)
void seq_time_update_effects_strip_range(const Scene *scene, const blender::Span< Sequence * > effects)
int SEQ_time_right_handle_frame_get(const Scene *scene, const Sequence *seq)
struct ToolSettings * toolsettings
StripTransform * transform