2022-02-11 09:07:11 +11:00
|
|
|
/* SPDX-License-Identifier: GPL-2.0-or-later
|
|
|
|
* Copyright 2004 Blender Foundation. All rights reserved. */
|
2020-12-19 06:44:57 +01:00
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
/** \file
|
|
|
|
* \ingroup sequencer
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifdef __cplusplus
|
|
|
|
extern "C" {
|
|
|
|
#endif
|
|
|
|
|
2021-01-04 12:03:34 +11:00
|
|
|
struct ListBase;
|
2020-12-19 06:44:57 +01:00
|
|
|
struct Scene;
|
2021-06-19 05:04:16 +02:00
|
|
|
struct SeqCollection;
|
2021-07-16 11:48:54 +10:00
|
|
|
struct Sequence;
|
2020-12-19 06:44:57 +01:00
|
|
|
|
2021-06-06 03:03:01 +02:00
|
|
|
int SEQ_transform_get_left_handle_frame(struct Sequence *seq);
|
|
|
|
int SEQ_transform_get_right_handle_frame(struct Sequence *seq);
|
2020-12-19 06:44:57 +01:00
|
|
|
void SEQ_transform_set_left_handle_frame(struct Sequence *seq, int val);
|
|
|
|
void SEQ_transform_set_right_handle_frame(struct Sequence *seq, int val);
|
2021-12-08 21:02:29 +11:00
|
|
|
/**
|
|
|
|
* Use to impose limits when dragging/extending - so impossible situations don't happen.
|
|
|
|
* Can't use the #SEQ_LEFTSEL and #SEQ_LEFTSEL directly because the strip may be in a meta-strip.
|
|
|
|
*/
|
2020-12-19 06:44:57 +01:00
|
|
|
void SEQ_transform_handle_xlimits(struct Sequence *seq, int leftflag, int rightflag);
|
|
|
|
bool SEQ_transform_sequence_can_be_translated(struct Sequence *seq);
|
2021-12-08 21:02:29 +11:00
|
|
|
/**
|
|
|
|
* 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).
|
|
|
|
*/
|
2020-12-19 06:44:57 +01:00
|
|
|
bool SEQ_transform_single_image_check(struct Sequence *seq);
|
|
|
|
void SEQ_transform_fix_single_image_seq_offsets(struct Sequence *seq);
|
|
|
|
bool SEQ_transform_test_overlap(struct ListBase *seqbasep, struct Sequence *test);
|
2021-08-27 12:59:46 +02:00
|
|
|
bool SEQ_transform_test_overlap_seq_seq(struct Sequence *seq1, struct Sequence *seq2);
|
2020-12-19 06:44:57 +01:00
|
|
|
void SEQ_transform_translate_sequence(struct Scene *scene, struct Sequence *seq, int delta);
|
2021-12-08 21:02:29 +11:00
|
|
|
/**
|
|
|
|
* \return 0 if there weren't enough space.
|
|
|
|
*/
|
2020-12-19 06:44:57 +01:00
|
|
|
bool SEQ_transform_seqbase_shuffle_ex(struct ListBase *seqbasep,
|
|
|
|
struct Sequence *test,
|
|
|
|
struct Scene *evil_scene,
|
|
|
|
int channel_delta);
|
|
|
|
bool SEQ_transform_seqbase_shuffle(struct ListBase *seqbasep,
|
|
|
|
struct Sequence *test,
|
|
|
|
struct Scene *evil_scene);
|
2021-06-19 05:04:16 +02:00
|
|
|
bool SEQ_transform_seqbase_shuffle_time(struct SeqCollection *strips_to_shuffle,
|
|
|
|
struct ListBase *seqbasep,
|
2020-12-19 06:44:57 +01:00
|
|
|
struct Scene *evil_scene,
|
|
|
|
struct ListBase *markers,
|
2022-01-07 11:38:08 +11:00
|
|
|
bool use_sync_markers);
|
2021-12-08 21:02:29 +11:00
|
|
|
/**
|
|
|
|
* Check if the selected seq's reference unselected seq's.
|
|
|
|
*/
|
2020-12-19 06:44:57 +01:00
|
|
|
bool SEQ_transform_seqbase_isolated_sel_check(struct ListBase *seqbase);
|
2021-12-08 21:02:29 +11:00
|
|
|
/**
|
|
|
|
* Move strips and markers (if not locked) that start after timeline_frame by delta frames
|
|
|
|
*
|
|
|
|
* \param scene: Scene in which strips are located
|
|
|
|
* \param seqbase: ListBase in which strips are located
|
|
|
|
* \param delta: offset in frames to be applied
|
|
|
|
* \param timeline_frame: frame on timeline from where strips are moved
|
|
|
|
*/
|
2020-12-19 06:44:57 +01:00
|
|
|
void SEQ_transform_offset_after_frame(struct Scene *scene,
|
|
|
|
struct ListBase *seqbase,
|
2022-01-07 11:38:08 +11:00
|
|
|
int delta,
|
|
|
|
int timeline_frame);
|
2020-12-19 06:44:57 +01:00
|
|
|
|
2021-09-21 09:38:30 +02:00
|
|
|
/* Image transformation. */
|
2021-12-08 21:02:29 +11:00
|
|
|
|
2021-09-21 09:38:30 +02:00
|
|
|
void SEQ_image_transform_mirror_factor_get(const struct Sequence *seq, float r_mirror[2]);
|
2021-12-08 21:02:29 +11:00
|
|
|
/**
|
|
|
|
* Get strip transform origin offset from image center
|
|
|
|
* NOTE: This function does not apply axis mirror.
|
|
|
|
*
|
|
|
|
* \param scene: Scene in which strips are located
|
|
|
|
* \param seq: Sequence to calculate image transform origin
|
|
|
|
* \param r_origin: return value
|
|
|
|
*/
|
2021-09-21 09:38:30 +02:00
|
|
|
void SEQ_image_transform_origin_offset_pixelspace_get(const struct Scene *scene,
|
|
|
|
const struct Sequence *seq,
|
|
|
|
float r_origin[2]);
|
2021-12-08 21:02:29 +11:00
|
|
|
/**
|
|
|
|
* Get 4 corner points of strip image, optionally without rotation component applied.
|
|
|
|
* Corner vectors are in viewport space.
|
|
|
|
*
|
|
|
|
* \param scene: Scene in which strips are located
|
|
|
|
* \param seq: Sequence to calculate transformed image quad
|
|
|
|
* \param apply_rotation: Apply sequence rotation transform to the quad
|
|
|
|
* \param r_quad: array of 4 2D vectors
|
|
|
|
*/
|
2021-10-08 12:09:27 +02:00
|
|
|
void SEQ_image_transform_quad_get(const struct Scene *scene,
|
|
|
|
const struct Sequence *seq,
|
|
|
|
bool apply_rotation,
|
|
|
|
float r_quad[4][2]);
|
2021-12-08 21:02:29 +11:00
|
|
|
/**
|
|
|
|
* Get 4 corner points of strip image. Corner vectors are in viewport space.
|
|
|
|
*
|
|
|
|
* \param scene: Scene in which strips are located
|
|
|
|
* \param seq: Sequence to calculate transformed image quad
|
|
|
|
* \param r_quad: array of 4 2D vectors
|
|
|
|
*/
|
2021-09-21 09:38:30 +02:00
|
|
|
void SEQ_image_transform_final_quad_get(const struct Scene *scene,
|
|
|
|
const struct Sequence *seq,
|
|
|
|
float r_quad[4][2]);
|
|
|
|
|
2021-10-07 12:32:04 +11:00
|
|
|
void SEQ_image_preview_unit_to_px(const struct Scene *scene,
|
|
|
|
const float co_src[2],
|
|
|
|
float co_dst[2]);
|
|
|
|
void SEQ_image_preview_unit_from_px(const struct Scene *scene,
|
|
|
|
const float co_src[2],
|
|
|
|
float co_dst[2]);
|
|
|
|
|
2020-12-19 06:44:57 +01:00
|
|
|
#ifdef __cplusplus
|
|
|
|
}
|
|
|
|
#endif
|