54#include "RNA_prototypes.hh"
192 return (ed && (ed->
act_seq !=
nullptr));
206 if (sseq ==
nullptr) {
228 if (sseq ==
nullptr) {
248 if (sseq ==
nullptr) {
284 ot->name =
"Remove Gaps";
285 ot->idname =
"SEQUENCER_OT_gap_remove";
287 "Remove gap at current frame to first strip at the right, independent of selection or "
288 "locked state of strips";
298 RNA_def_boolean(
ot->srna,
"all",
false,
"All Gaps",
"Do all gaps to right of current frame");
322 ot->name =
"Insert Gaps";
323 ot->idname =
"SEQUENCER_OT_gap_insert";
325 "Insert gap at current frame to first strips at the right, independent of selection or "
326 "locked state of strips";
342 "Frames to insert after current strip",
399 if (seq->seq1 && (seq->seq1->flag &
SELECT)) {
400 if (!either_handle_selected) {
405 else if (seq->seq2 && (seq->seq2->flag &
SELECT)) {
406 if (!either_handle_selected) {
426 snap_frame = scene->
r.
cfra;
435 ot->name =
"Snap Strips to the Current Frame";
436 ot->idname =
"SEQUENCER_OT_snap";
437 ot->description =
"Frame where selected strips will be snapped";
453 "Frame where selected strips will be snapped",
490 int trimmed_sequences = 0;
498 return trimmed_sequences;
517 data = MEM_cnew<SlipData>(
"trimdata");
519 data->seq_array = MEM_cnew_array<Sequence *>(num_seq,
"trimdata_sequences");
520 data->num_seq = num_seq;
521 data->previous_offset = 0;
524 data->num_input.idx_max = 0;
526 data->num_input.unit_type[0] = 0;
546 for (
int i =
data->num_seq - 1; i >= 0; i--) {
557 for (
int i =
data->num_seq - 1; i >= 0; i--) {
567 int delta_offset = *offset -
data->previous_offset;
569 for (
int i = 0; i <
data->num_seq; i++) {
583 delta_offset +=
diff;
585 data->previous_offset = *offset;
604 data->seq_array = MEM_cnew_array<Sequence *>(num_seq,
"trimdata_sequences");
605 data->num_seq = num_seq;
612 float subframe_delta = 0.0f;
613 if (std::trunc(offset_fl) != offset_fl) {
615 subframe_delta = offset_fl - offset;
631 if (area ==
nullptr) {
660 float subframe_delta = 0.0f;
661 if (
data->subframe_restore != 0.0f) {
665 subframe_delta = -
data->subframe_restore;
666 data->subframe_restore = 0.0f;
668 if (std::trunc(offset_fl) != offset_fl) {
670 subframe_delta = offset_fl -
data->previous_subframe_offset - delta_offset;
671 data->subframe_restore += subframe_delta;
673 data->previous_subframe_offset = offset_fl;
693 switch (event->
type) {
702 mouse_x =
event->mval[0] -
data->slow_offset;
704 mouse_x +=
data->slow_offset;
707 mouse_x =
event->mval[0];
712 float offset_fl = mouseloc[0] -
data->init_mouseloc[0];
721 float subframe_delta = 0.0f;
724 subframe_delta = offset_fl -
data->previous_subframe_offset - delta_offset;
725 data->subframe_restore += subframe_delta;
727 else if (
data->subframe_restore != 0.0f) {
729 subframe_delta = -
data->subframe_restore;
730 data->subframe_restore = 0.0f;
732 data->previous_subframe_offset = offset_fl;
756 int offset =
data->previous_offset;
757 float subframe_delta =
data->subframe_restore;
778 data->slow_offset =
event->mval[0];
802 ot->name =
"Slip Strips";
803 ot->idname =
"SEQUENCER_OT_slip";
804 ot->description =
"Slip the contents of selected strips";
824 "Offset to the data of the strip",
855 if ((seq->flag &
SELECT) == 0) {
872 ot->name =
"Mute Strips";
873 ot->idname =
"SEQUENCER_OT_mute";
874 ot->description =
"Mute (un)selected strips";
884 ot->srna,
"unselected",
false,
"Unselected",
"Mute unselected rather than selected strips");
911 if ((seq->flag &
SELECT) == 0) {
928 ot->name =
"Unmute Strips";
929 ot->idname =
"SEQUENCER_OT_unmute";
930 ot->description =
"Unmute (un)selected strips";
943 "Unmute unselected rather than selected strips");
971 ot->name =
"Lock Strips";
972 ot->idname =
"SEQUENCER_OT_lock";
973 ot->description =
"Lock strips so they can't be transformed";
1008 ot->name =
"Unlock Strips";
1009 ot->idname =
"SEQUENCER_OT_unlock";
1010 ot->description =
"Unlock strips so they can be transformed";
1052 ot->name =
"Connect Strips";
1053 ot->idname =
"SEQUENCER_OT_connect";
1054 ot->description =
"Link selected strips together for simplified group selection";
1061 RNA_def_boolean(
ot->srna,
"toggle",
true,
"Toggle",
"Toggle strip connections");
1089 ot->name =
"Disconnect Strips";
1090 ot->idname =
"SEQUENCER_OT_disconnect";
1091 ot->description =
"Unlink selected strips so that they can be selected individually";
1113 if (seq->flag &
SELECT) {
1117 if (adjust_length) {
1135 ot->name =
"Reload Strips";
1136 ot->idname =
"SEQUENCER_OT_reload";
1137 ot->description =
"Reload strips in the sequencer";
1150 "Adjust length of strips to their data length");
1162 if (
G.is_rendering) {
1185 ot->name =
"Refresh Sequencer";
1186 ot->idname =
"SEQUENCER_OT_refresh_all";
1187 ot->description =
"Refresh the sequencer editor";
1205 const char **r_error_str)
1208 Sequence *seq1 =
nullptr, *seq2 =
nullptr;
1210 *r_error_str =
nullptr;
1217 *r_selseq1 = *r_selseq2 =
nullptr;
1222 if (seq->flag &
SELECT) {
1224 *r_error_str =
N_(
"Cannot apply effects to audio sequence strips");
1227 if (!
ELEM(seq, activeseq, seq2)) {
1228 if (seq2 ==
nullptr) {
1231 else if (seq1 ==
nullptr) {
1235 *r_error_str =
N_(
"Cannot apply effect to more than 2 sequence strips");
1244 if (seq2 ==
nullptr) {
1245 *r_error_str =
N_(
"At least one selected sequence strip is needed");
1248 if (seq1 ==
nullptr) {
1253 if (seq1 ==
nullptr || seq2 ==
nullptr) {
1254 *r_error_str =
N_(
"2 selected sequence strips are needed");
1260 if (seq1 ==
nullptr && seq2 ==
nullptr) {
1261 *r_error_str =
N_(
"TODO: in what cases does this happen?");
1270 *r_selseq2 =
nullptr;
1280 const char *error_msg;
1301 last_seq->
seq1 = seq1;
1302 last_seq->
seq2 = seq2;
1304 int old_start = last_seq->
start;
1338 ot->name =
"Reassign Inputs";
1339 ot->idname =
"SEQUENCER_OT_reassign_inputs";
1340 ot->description =
"Reassign the inputs for the effect strip";
1361 if (last_seq->
seq1 ==
nullptr || last_seq->
seq2 ==
nullptr) {
1366 seq = last_seq->
seq1;
1368 last_seq->
seq2 = seq;
1379 ot->name =
"Swap Inputs";
1380 ot->idname =
"SEQUENCER_OT_swap_inputs";
1381 ot->description =
"Swap the two inputs of the effect strip";
1414 {0,
nullptr, 0,
nullptr,
nullptr},
1423 {0,
nullptr, 0,
nullptr,
nullptr},
1448 bool changed =
false;
1449 bool seq_selected =
false;
1469 if (use_cursor_position && seq->machine != split_channel) {
1473 if (ignore_selection || seq->flag &
SELECT) {
1474 const char *error_msg =
nullptr;
1480 if (error_msg !=
nullptr) {
1487 if (ignore_selection) {
1488 if (use_cursor_position) {
1491 seq->machine == split_channel)
1496 if (!seq_selected) {
1499 seq->machine == split_channel)
1539 int split_frame = scene->
r.
cfra;
1553 split_frame = mouseloc[0];
1586 ot->name =
"Split Strips";
1587 ot->idname =
"SEQUENCER_OT_split";
1588 ot->description =
"Split the selected strips in two";
1606 "Frame where selected strips will be split",
1615 "Channel in which strip will be cut",
1623 "The type of split operation to perform on strips");
1626 "use_cursor_position",
1628 "Use Cursor Position",
1629 "Split at position of the cursor instead of current frame");
1636 "The side that remains selected after splitting");
1645 "Make cut even if strip is not selected preserving selection state after cut");
1661 if (ed ==
nullptr) {
1666 ListBase duplicated_strips = {
nullptr,
nullptr};
1671 if (duplicated_strips.
first ==
nullptr) {
1691 for (; seq; seq = seq->
next) {
1692 if (active_seq !=
nullptr &&
STREQ(seq->
name, active_seq->
name)) {
1713 ot->name =
"Duplicate Strips";
1714 ot->idname =
"SEQUENCER_OT_duplicate";
1715 ot->description =
"Duplicate the selected strips";
1782 if (event->
mval[1] <= 30) {
1795 ot->name =
"Delete Strips";
1796 ot->idname =
"SEQUENCER_OT_delete";
1797 ot->description =
"Delete selected strips from the sequencer";
1812 "After removing the Strip, delete the associated data also");
1868 ot->name =
"Clear Strip Offset";
1869 ot->idname =
"SEQUENCER_OT_offset_clear";
1870 ot->description =
"Clear strip offsets from the start and end frames";
1895 int start_ofs, timeline_frame, frame_end;
1912 while (timeline_frame < frame_end) {
1918 seq_new->
start = start_ofs;
1922 seq_new->
endofs = 1 - step;
1925 strip_new = seq_new->
strip;
1966 C, op, event,
IFACE_(
"Separate Sequence Images"),
IFACE_(
"Separate"));
1972 ot->name =
"Separate Images";
1973 ot->idname =
"SEQUENCER_OT_images_separate";
1974 ot->description =
"On image sequence strips, it returns a strip for each image";
1984 RNA_def_int(
ot->srna,
"length", 1, 1, INT_MAX,
"Length",
"Length of each frame", 1, 1000);
2026 ot->name =
"Toggle Meta Strip";
2027 ot->idname =
"SEQUENCER_OT_meta_toggle";
2028 ot->description =
"Toggle a meta-strip (to edit enclosed strips)";
2058 int channel_max = 1, channel_min = INT_MAX, meta_start_frame =
MAXFRAME,
2067 strips_to_move.
add(seq);
2072 for (
Sequence *seq : strips_to_move) {
2076 channel_max =
max_ii(seq->machine, channel_max);
2077 channel_min =
min_ii(seq->machine, channel_min);
2084 for (
int i = channel_min; i <= channel_max; i++) {
2088 channel_meta->
flag = channel_cur->
flag;
2094 seqm->
start = meta_start_frame;
2095 seqm->
len = meta_end_frame - meta_start_frame;
2111 ot->name =
"Make Meta Strip";
2112 ot->idname =
"SEQUENCER_OT_meta_make";
2113 ot->description =
"Group selected strips into a meta-strip";
2156 if (seq->flag &
SELECT) {
2173 ot->name =
"UnMeta Strip";
2174 ot->idname =
"SEQUENCER_OT_meta_separate";
2175 ot->description =
"Put the contents of a meta-strip back in the sequencer";
2193 const bool do_skip_mute,
2194 const bool do_center)
2196 bool changed =
false;
2197 int timeline_frame = scene->
r.
cfra;
2199 scene, timeline_frame, side, do_skip_mute, do_center,
false);
2201 if (next_frame != timeline_frame) {
2202 scene->
r.
cfra = next_frame;
2212 if (
G.is_rendering) {
2239 ot->name =
"Jump to Strip";
2240 ot->idname =
"SEQUENCER_OT_strip_jump";
2241 ot->description =
"Move frame to previous edit point";
2264 {0,
nullptr, 0,
nullptr,
nullptr},
2288 Sequence *seq, *best_seq =
nullptr;
2291 int dist, best_dist;
2294 if (ed ==
nullptr) {
2301 ((sel == -1) || (sel == (seq->
flag &
SELECT))))
2328 if (dist < best_dist) {
2340 return ((par->
seq1 == seq) || (par->
seq2 == seq));
2352 if (active_seq ==
nullptr) {
2406 ot->name =
"Swap Strip";
2407 ot->idname =
"SEQUENCER_OT_swap";
2408 ot->description =
"Swap active strip with strip to the right or left";
2434 if (active_seq ==
nullptr || active_seq->
strip ==
nullptr) {
2438 switch (active_seq->
type) {
2449 if (se ==
nullptr) {
2474 ot->name =
"Set Render Size";
2475 ot->idname =
"SEQUENCER_OT_rendersize";
2476 ot->description =
"Set render size and aspect from active sequence";
2496 ot->idname =
"SEQUENCER_OT_copy";
2497 ot->description =
"Copy the selected strips to the internal clipboard";
2516 bool changed =
false;
2518 if (ed ==
nullptr) {
2535 ot->idname =
"SEQUENCER_OT_paste";
2536 ot->description =
"Paste strips from the internal clipboard";
2551 "Keep strip offset relative to the current frame when pasting");
2566 const char *error_msg;
2589 if (seq_act->
sound) {
2592 if (seq_other->
sound) {
2607 ot->name =
"Sequencer Swap Data";
2608 ot->idname =
"SEQUENCER_OT_swap_data";
2609 ot->description =
"Swap 2 sequencer strips";
2632 if (*seq_1 ==
nullptr || *seq_2 ==
nullptr) {
2637 std::swap(*seq_1, *seq_2);
2648 ot->name =
"Change Effect Input";
2649 ot->idname =
"SEQUENCER_OT_change_effect_input";
2666 {
SEQ_TYPE_CROSS,
"CROSS", 0,
"Crossfade",
"Crossfade effect strip type"},
2667 {
SEQ_TYPE_ADD,
"ADD", 0,
"Add",
"Add effect strip type"},
2668 {
SEQ_TYPE_SUB,
"SUBTRACT", 0,
"Subtract",
"Subtract effect strip type"},
2671 {
SEQ_TYPE_GAMCROSS,
"GAMMA_CROSS", 0,
"Gamma Cross",
"Gamma Cross effect strip type"},
2672 {
SEQ_TYPE_MUL,
"MULTIPLY", 0,
"Multiply",
"Multiply effect strip type"},
2673 {
SEQ_TYPE_OVERDROP,
"OVER_DROP", 0,
"Alpha Over Drop",
"Alpha Over Drop effect strip type"},
2674 {
SEQ_TYPE_WIPE,
"WIPE", 0,
"Wipe",
"Wipe effect strip type"},
2675 {
SEQ_TYPE_GLOW,
"GLOW", 0,
"Glow",
"Glow effect strip type"},
2677 {
SEQ_TYPE_COLOR,
"COLOR", 0,
"Color",
"Color effect strip type"},
2678 {
SEQ_TYPE_SPEED,
"SPEED", 0,
"Speed",
"Color effect strip type"},
2684 {0,
nullptr, 0,
nullptr,
nullptr},
2710 seq->
type = new_type;
2724 ot->name =
"Change Effect Type";
2725 ot->idname =
"SEQUENCER_OT_change_effect_type";
2739 "Sequencer effect type");
2756 int minext_frameme, numdigits;
2764 if (use_placeholders) {
2775 if (is_relative_path) {
2788 if (use_placeholders) {
2817 if (sound ==
nullptr) {
2872 ot->name =
"Change Data/Files";
2873 ot->idname =
"SEQUENCER_OT_change_path";
2895 "Use placeholders for missing frames of the strip");
2907 if (ed ==
nullptr) {
2920 if (scene_seq ==
nullptr) {
2928 seq->
scene = scene_seq;
2955 ot->name =
"Change Scene";
2956 ot->idname =
"SEQUENCER_OT_change_scene";
2957 ot->description =
"Change Scene assigned to Strip";
2983 const Scene *scene =
static_cast<Scene *
>(thunk);
2991 if (seq_a_start == seq_b_start) {
2995 return (seq_a_start > seq_b_start);
3059 if (ed !=
nullptr) {
3074 for (seq =
static_cast<Sequence *
>(text_seq.
first); seq; seq = seq_next) {
3076 char timecode_str_start[32];
3077 char timecode_str_end[32];
3082 sizeof(timecode_str_start),
3089 sizeof(timecode_str_end),
3096 file,
"%d\n%s --> %s\n%s\n\n", iter++, timecode_str_start, timecode_str_end,
data->text);
3118 ot->name =
"Export Subtitles";
3119 ot->idname =
"SEQUENCER_OT_export_subtitles";
3120 ot->description =
"Export .srt file containing text strips";
3152 bool selected =
false;
3156 if (seq->flag &
SELECT) {
3183 scene->
r.
efra = efra;
3196 ot->name =
"Set Range to Strips";
3197 ot->idname =
"SEQUENCER_OT_set_range_to_strips";
3198 ot->description =
"Set the frame range to the selected strips start and end";
3207 prop =
RNA_def_boolean(
ot->srna,
"preview",
false,
"Preview",
"Set the preview range instead");
3228 {
STRIP_TRANSFORM_ALL,
"ALL", 0,
"All",
"Reset strip transform location, scale and rotation"},
3229 {0,
nullptr, 0,
nullptr,
nullptr},
3272 ot->name =
"Clear Strip Transform";
3273 ot->idname =
"SEQUENCER_OT_strip_transform_clear";
3274 ot->description =
"Reset image transformation to default value";
3288 "Strip transform property to be reset");
3298 {
SEQ_SCALE_TO_FIT,
"FIT", 0,
"Scale to Fit",
"Scale image so fits in preview"},
3299 {
SEQ_SCALE_TO_FILL,
"FILL", 0,
"Scale to Fill",
"Scale image so it fills preview completely"},
3300 {
SEQ_STRETCH_TO_FILL,
"STRETCH", 0,
"Stretch to Fill",
"Stretch image so it fills preview"},
3301 {0,
nullptr, 0,
nullptr,
nullptr},
3312 const int timeline_frame = scene->
r.
cfra;
3315 if (strip_elem ==
nullptr) {
3336 ot->name =
"Strip Transform Set Fit";
3337 ot->idname =
"SEQUENCER_OT_strip_transform_fit";
3351 "Scale fit fit_method");
3361 if (seq->flag &
SELECT) {
3362 seq->color_tag = color_tag;
3373 if (scene ==
nullptr) {
3378 if (ed ==
nullptr) {
3383 return act_seq !=
nullptr;
3389 ot->name =
"Set Color Tag";
3390 ot->idname =
"SEQUENCER_OT_strip_color_tag_set";
3391 ot->description =
"Set a color tag for the selected strips";
3415 float cursor_pixel[2];
3429 float cursor_pixel[2];
3431 ®ion->
v2d, event->
mval[0], event->
mval[1], &cursor_pixel[0], &cursor_pixel[1]);
3441 ot->name =
"Set 2D Cursor";
3442 ot->description =
"Set 2D cursor location";
3443 ot->idname =
"SEQUENCER_OT_cursor_set";
3461 "Cursor location in normalized preview coordinates",
3502 ot->name =
"Update Scene Frame Range";
3503 ot->description =
"Update frame range of scene strip";
3504 ot->idname =
"SEQUENCER_OT_scene_frame_range_update";
Functions for backward compatibility with the legacy Action API.
ScrArea * CTX_wm_area(const bContext *C)
Scene * CTX_data_scene(const bContext *C)
SpaceSeq * CTX_wm_space_seq(const bContext *C)
Main * CTX_data_main(const bContext *C)
ARegion * CTX_wm_region(const bContext *C)
const char * BKE_main_blendfile_path(const Main *bmain) ATTR_NONNULL()
void BKE_report(ReportList *reports, eReportType type, const char *message)
void BKE_sound_load(struct Main *bmain, struct bSound *sound)
void * BKE_sound_add_scene_sound_defaults(struct Scene *scene, struct Sequence *sequence)
void BKE_sound_remove_scene_sound(struct Scene *scene, void *handle)
File and directory operations.
bool BLI_file_touch(const char *filepath) ATTR_NONNULL(1)
int BLI_exists(const char *path) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
bool BLI_file_is_writable(const char *filepath) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
FILE * BLI_fopen(const char *filepath, const char *mode) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
bool BLI_file_ensure_parent_dir_exists(const char *filepath) ATTR_NONNULL(1)
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
#define LISTBASE_FOREACH(type, var, list)
#define LISTBASE_FOREACH_BACKWARD(type, var, list)
BLI_INLINE void BLI_listbase_clear(struct ListBase *lb)
void * BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
void void void BLI_movelisttolist(struct ListBase *dst, struct ListBase *src) ATTR_NONNULL(1
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
void void void BLI_listbase_sort_r(ListBase *listbase, int(*cmp)(void *, const void *, const void *), void *thunk) ATTR_NONNULL(1
MINLINE int round_fl_to_int(float a)
MINLINE int min_ii(int a, int b)
MINLINE int max_ii(int a, int b)
MINLINE void copy_v2_v2(float r[2], const float a[2])
#define BLI_path_join(...)
bool BLI_path_extension_ensure(char *path, size_t path_maxncpy, const char *ext) ATTR_NONNULL(1
bool void BLI_path_rel(char path[FILE_MAX], const char *basepath) ATTR_NONNULL(1)
int bool BLI_str_startswith(const char *__restrict str, const char *__restrict start) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1
#define STRNCPY(dst, src)
#define SNPRINTF(dst, format,...)
int bool bool BLI_str_endswith(const char *__restrict str, const char *__restrict end) ATTR_NONNULL(1
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
size_t BLI_timecode_string_from_time(char *str, size_t maxncpy, int brevity_level, float time_seconds, double fps, short timecode_style) ATTR_NONNULL()
#define BLT_I18NCONTEXT_ID_SEQUENCE
void DEG_id_tag_update(ID *id, unsigned int flags)
void DEG_relations_tag_update(Main *bmain)
@ ID_RECALC_SEQUENCER_STRIPS
#define ID_IS_EDITABLE(_id)
#define SEQ_HAS_PATH(_seq)
@ SEQ_SINGLE_FRAME_CONTENT
@ SEQ_IGNORE_CHANNEL_LOCK
@ SEQ_VIEW_SEQUENCE_PREVIEW
void ED_fileselect_ensure_default_filepath(bContext *C, wmOperator *op, const char *extension)
bool ED_scene_delete(bContext *C, Main *bmain, Scene *scene) ATTR_NONNULL()
void ED_area_status_text(ScrArea *area, const char *str)
bool ED_operator_sequencer_active(bContext *C)
blender::VectorSet< Sequence * > ED_sequencer_selected_strips_from_context(bContext *C)
Read Guarded memory(de)allocation.
#define MEM_reallocN(vmemh, len)
Group Output data from inside of a node group A color picker Mix two input colors RGB to Convert a color s luminance to a grayscale value Generate a normal vector and a dot product Brightness Control the brightness and contrast of the input color Vector Map input vector components with curves Camera Retrieve information about the camera and how it relates to the current shading point s position Clamp a value between a minimum and a maximum Vector Perform vector math operation Invert Invert a producing a negative Combine Generate a color from its and blue channels(Deprecated)") DefNode(ShaderNode
#define RNA_BEGIN(sptr, itemptr, propname)
const EnumPropertyItem * RNA_scene_without_active_itemf(bContext *C, PointerRNA *ptr, PropertyRNA *prop, bool *r_free)
#define SEQ_DUPE_UNIQUE_NAME
uiLayout * uiLayoutRow(uiLayout *layout, bool align)
void uiLayoutSetPropSep(uiLayout *layout, bool is_sep)
void uiItemS(uiLayout *layout)
void uiLayoutSetPropDecorate(uiLayout *layout, bool is_sep)
void uiItemR(uiLayout *layout, PointerRNA *ptr, const char *propname, eUI_Item_Flag flag, const char *name, int icon)
View2D * UI_view2d_fromcontext(const bContext *C)
void UI_view2d_region_to_view(const View2D *v2d, float x, float y, float *r_view_x, float *r_view_y) ATTR_NONNULL()
#define ND_SPACE_SEQUENCER
#define ND_RENDER_OPTIONS
void SEQ_animation_backup_original(Scene *scene, SeqAnimationBackup *backup)
void SEQ_offset_animdata(Scene *scene, Sequence *seq, int ofs)
void SEQ_animation_duplicate_backup_to_scene(Scene *scene, Sequence *seq, SeqAnimationBackup *backup)
void SEQ_animation_restore_original(Scene *scene, SeqAnimationBackup *backup)
SIMD_FORCE_INLINE btVector3 transform(const btVector3 &point) const
SeqTimelineChannel * SEQ_channel_get_by_index(const ListBase *channels, const int channel_index)
ListBase * SEQ_channels_displayed_get(Editing *ed)
void add_multiple(Span< Key > keys)
local_group_size(16, 16) .push_constant(Type b
SeqEffectHandle SEQ_effect_handle_get(Sequence *seq)
int SEQ_effect_get_num_inputs(int seq_type)
IMETHOD Vector diff(const Vector &a, const Vector &b, double dt)
VectorSet< Sequence * > SEQ_query_selected_strips(ListBase *seqbase)
void SEQ_for_each_callback(ListBase *seqbase, SeqForEachFunc callback, void *user_data)
void MEM_freeN(void *vmemh)
void *(* MEM_dupallocN)(const void *vmemh)
Vector< FCurve * > fcurves_for_assigned_action(AnimData *adt)
void thumbnail_cache_invalidate_strip(Scene *scene, const Sequence *seq)
void media_presence_free(Scene *scene)
void thumbnail_cache_clear(Scene *scene)
void SEQ_prefetch_stop(Scene *scene)
bool SEQ_render_is_muted(const ListBase *channels, const Sequence *seq)
StripElem * SEQ_render_give_stripelem(const Scene *scene, const Sequence *seq, int timeline_frame)
void RNA_string_set(PointerRNA *ptr, const char *name, const char *value)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
void RNA_boolean_set(PointerRNA *ptr, const char *name, bool value)
bool RNA_struct_property_is_set_ex(PointerRNA *ptr, const char *identifier, bool use_ghost)
void RNA_int_set(PointerRNA *ptr, const char *name, int value)
void RNA_float_get_array(PointerRNA *ptr, const char *name, float *values)
void RNA_property_update(bContext *C, PointerRNA *ptr, PropertyRNA *prop)
void RNA_string_get(PointerRNA *ptr, const char *name, char *value)
int RNA_int_get(PointerRNA *ptr, const char *name)
char * RNA_string_get_alloc(PointerRNA *ptr, const char *name, char *fixedbuf, int fixedlen, int *r_len)
float RNA_float_get(PointerRNA *ptr, const char *name)
void RNA_float_set(PointerRNA *ptr, const char *name, float value)
bool RNA_struct_property_is_set(PointerRNA *ptr, const char *identifier)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
void RNA_enum_set(PointerRNA *ptr, const char *name, int value)
void RNA_float_set_array(PointerRNA *ptr, const char *name, const float *values)
PointerRNA RNA_pointer_create(ID *id, StructRNA *type, void *data)
int RNA_enum_get(PointerRNA *ptr, const char *name)
int RNA_property_collection_length(PointerRNA *ptr, PropertyRNA *prop)
void RNA_property_string_set(PointerRNA *ptr, PropertyRNA *prop, const char *value)
PropertyRNA * RNA_def_float(StructOrFunctionRNA *cont_, const char *identifier, const float default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
PropertyRNA * RNA_def_float_vector(StructOrFunctionRNA *cont_, const char *identifier, const int len, const float *default_value, const float hardmin, const float hardmax, const char *ui_name, const char *ui_description, const float softmin, const float softmax)
PropertyRNA * RNA_def_enum(StructOrFunctionRNA *cont_, const char *identifier, const EnumPropertyItem *items, const int default_value, const char *ui_name, const char *ui_description)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, const bool default_value, const char *ui_name, const char *ui_description)
void RNA_def_property_translation_context(PropertyRNA *prop, const char *context)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_enum_funcs(PropertyRNA *prop, EnumPropertyItemFunc itemfunc)
void RNA_def_property_ui_range(PropertyRNA *prop, double min, double max, double step, int precision)
PropertyRNA * RNA_def_int(StructOrFunctionRNA *cont_, const char *identifier, const int default_value, const int hardmin, const int hardmax, const char *ui_name, const char *ui_description, const int softmin, const int softmax)
const EnumPropertyItem rna_enum_dummy_NULL_items[]
const EnumPropertyItem rna_enum_strip_color_items[]
void SEQ_sequence_lookup_invalidate(const Scene *scene)
void SEQ_sequence_base_unique_name_recursive(Scene *scene, ListBase *seqbasep, Sequence *seq)
void SEQ_set_scale_to_fit(const Sequence *seq, const int image_width, const int image_height, const int preview_width, const int preview_height, const eSeqImageFitMethod fit_method)
void SEQ_ensure_unique_name(Sequence *seq, Scene *scene)
Mask * SEQ_active_mask_get(Scene *scene)
void SEQ_sequence_base_dupli_recursive(const Scene *scene_src, Scene *scene_dst, ListBase *nseqbase, const ListBase *seqbase, int dupe_flag, const int flag)
ListBase * SEQ_active_seqbase_get(const Editing *ed)
Sequence * SEQ_meta_stack_pop(Editing *ed)
Sequence * SEQ_sequence_dupli_recursive(const Scene *scene_src, Scene *scene_dst, ListBase *new_seq_list, Sequence *seq, int dupe_flag)
void SEQ_meta_stack_set(const Scene *scene, Sequence *dst_seq)
Sequence * SEQ_sequence_alloc(ListBase *lb, int timeline_frame, int machine, int type)
Editing * SEQ_editing_get(const Scene *scene)
static const EnumPropertyItem scale_fit_methods[]
void sequencer_image_seq_reserve_frames(wmOperator *op, StripElem *se, int len, int minframe, int numdigits)
int sequencer_image_seq_get_minmax_frame(wmOperator *op, int sfra, int *r_minframe, int *r_numdigits)
int sequencer_clipboard_paste_exec(bContext *C, wmOperator *op)
int sequencer_clipboard_copy_exec(bContext *C, wmOperator *op)
bool sequencer_view_preview_only_poll(const bContext *C)
bool ED_space_sequencer_check_show_strip(SpaceSeq *sseq)
static bool sequencer_strip_color_tag_set_poll(bContext *C)
void SEQUENCER_OT_change_effect_input(wmOperatorType *ot)
static void sequencer_slip_strips(Scene *scene, SlipData *data, int delta, float subframe_delta)
void SEQUENCER_OT_strip_transform_fit(wmOperatorType *ot)
static int sequencer_snap_exec(bContext *C, wmOperator *op)
static int sequencer_reassign_inputs_exec(bContext *C, wmOperator *op)
bool sequencer_strip_has_path_poll(bContext *C)
static int sequencer_change_scene_exec(bContext *C, wmOperator *op)
static int sequencer_mute_exec(bContext *C, wmOperator *op)
void SEQUENCER_OT_mute(wmOperatorType *ot)
static int sequencer_separate_images_invoke(bContext *C, wmOperator *op, const wmEvent *event)
@ STRIP_TRANSFORM_POSITION
@ STRIP_TRANSFORM_ROTATION
void SEQUENCER_OT_copy(wmOperatorType *ot)
static int sequencer_lock_exec(bContext *C, wmOperator *)
void SEQUENCER_OT_delete(wmOperatorType *ot)
bool ED_space_sequencer_check_show_imbuf(SpaceSeq *sseq)
void SEQUENCER_OT_rendersize(wmOperatorType *ot)
static int sequencer_separate_images_exec(bContext *C, wmOperator *op)
static int sequencer_meta_make_exec(bContext *C, wmOperator *op)
static int sequencer_delete_invoke(bContext *C, wmOperator *op, const wmEvent *event)
void SEQUENCER_OT_set_range_to_strips(wmOperatorType *ot)
int seq_effect_find_selected(Scene *scene, Sequence *activeseq, int type, Sequence **r_selseq1, Sequence **r_selseq2, const char **r_error_str)
static int sequencer_connect_exec(bContext *C, wmOperator *op)
static int sequencer_reload_exec(bContext *C, wmOperator *op)
static void sequencer_split_ui(bContext *, wmOperator *op)
static bool sequencer_scene_frame_range_update_poll(bContext *C)
bool ED_space_sequencer_maskedit_poll(bContext *C)
bool sequencer_view_has_preview_poll(bContext *C)
void SEQUENCER_OT_change_effect_type(wmOperatorType *ot)
static int sequencer_slip_exec(bContext *C, wmOperator *op)
static void handle_number_input(bContext *C, wmOperator *op, ScrArea *area, SlipData *data, Scene *scene)
void SEQUENCER_OT_scene_frame_range_update(wmOperatorType *ot)
bool ED_space_sequencer_maskedit_mask_poll(bContext *C)
static int sequencer_slip_modal(bContext *C, wmOperator *op, const wmEvent *event)
static int sequencer_meta_separate_exec(bContext *C, wmOperator *)
void SEQUENCER_OT_reload(wmOperatorType *ot)
static void sequencer_delete_strip_data(bContext *C, Sequence *seq)
static int sequencer_strip_transform_clear_exec(bContext *C, wmOperator *op)
void SEQUENCER_OT_swap_data(wmOperatorType *ot)
static bool seq_is_parent(const Sequence *par, const Sequence *seq)
static int slip_count_sequences(ListBase *seqbasep)
void SEQUENCER_OT_strip_transform_clear(wmOperatorType *ot)
static bool sequencer_refresh_all_poll(bContext *C)
void SEQUENCER_OT_lock(wmOperatorType *ot)
static bool sequencer_strip_change_scene_poll(bContext *C)
static int sequencer_swap_data_exec(bContext *C, wmOperator *op)
static int sequencer_slip_invoke(bContext *C, wmOperator *op, const wmEvent *event)
void SEQUENCER_OT_disconnect(wmOperatorType *ot)
void SEQUENCER_OT_connect(wmOperatorType *ot)
void SEQUENCER_OT_strip_color_tag_set(wmOperatorType *ot)
void SEQUENCER_OT_images_separate(wmOperatorType *ot)
static int sequencer_unmute_exec(bContext *C, wmOperator *op)
static bool sequencer_fcurves_targets_color_strip(const FCurve *fcurve)
static int sequencer_offset_clear_exec(bContext *C, wmOperator *)
static int seq_cmp_time_startdisp_channel(void *thunk, const void *a, const void *b)
void SEQUENCER_OT_reassign_inputs(wmOperatorType *ot)
static bool sequencer_strip_is_text_poll(bContext *C)
static int sequence_split_side_for_exec_get(wmOperator *op)
static int sequencer_set_2d_cursor_exec(bContext *C, wmOperator *op)
void SEQUENCER_OT_change_path(wmOperatorType *ot)
static bool seq_get_text_strip_cb(Sequence *seq, void *user_data)
static int sequencer_snap_invoke(bContext *C, wmOperator *op, const wmEvent *)
void SEQUENCER_OT_refresh_all(wmOperatorType *ot)
void SEQUENCER_OT_offset_clear(wmOperatorType *ot)
static int sequencer_gap_insert_exec(bContext *C, wmOperator *op)
static int sequencer_strip_jump_exec(bContext *C, wmOperator *op)
static bool strip_jump_internal(Scene *scene, const short side, const bool do_skip_mute, const bool do_center)
void SEQUENCER_OT_meta_make(wmOperatorType *ot)
bool sequencer_edit_with_channel_region_poll(bContext *C)
void SEQUENCER_OT_unmute(wmOperatorType *ot)
static int sequencer_change_effect_type_exec(bContext *C, wmOperator *op)
void SEQUENCER_OT_gap_insert(wmOperatorType *ot)
const EnumPropertyItem sequencer_prop_effect_types[]
static int sequencer_set_2d_cursor_invoke(bContext *C, wmOperator *op, const wmEvent *event)
bool ED_space_sequencer_has_playback_animation(const SpaceSeq *sseq, const Scene *scene)
static int sequencer_export_subtitles_exec(bContext *C, wmOperator *op)
const EnumPropertyItem prop_side_types[]
static int sequencer_change_scene_invoke(bContext *C, wmOperator *op, const wmEvent *event)
static int sequencer_refresh_all_exec(bContext *C, wmOperator *)
void SEQUENCER_OT_duplicate(wmOperatorType *ot)
static bool sequencer_effect_poll(bContext *C)
static void slip_add_sequences(ListBase *seqbasep, Sequence **seq_array)
static int mouse_frame_side(View2D *v2d, short mouse_x, int frame)
static int sequencer_slip_apply_limits(const Scene *scene, SlipData *data, int *offset)
static int sequencer_add_duplicate_exec(bContext *C, wmOperator *)
bool sequencer_edit_poll(bContext *C)
static int sequencer_disconnect_exec(bContext *C, wmOperator *)
static bool sequencer_strip_jump_poll(bContext *C)
static int sequencer_strip_color_tag_set_exec(bContext *C, wmOperator *op)
bool sequencer_view_strips_poll(bContext *C)
static int sequencer_scene_frame_range_update_exec(bContext *C, wmOperator *)
static void sequencer_slip_update_header(Scene *scene, ScrArea *area, SlipData *data, int offset)
void SEQUENCER_OT_slip(wmOperatorType *ot)
bool sequencer_editing_initialized_and_active(bContext *C)
void SEQUENCER_OT_swap(wmOperatorType *ot)
static int sequencer_split_exec(bContext *C, wmOperator *op)
static int sequencer_rendersize_exec(bContext *C, wmOperator *)
void SEQUENCER_OT_gap_remove(wmOperatorType *ot)
void SEQUENCER_OT_snap(wmOperatorType *ot)
static int sequencer_change_path_exec(bContext *C, wmOperator *op)
static int sequencer_gap_remove_exec(bContext *C, wmOperator *op)
bool sequencer_strip_editable_poll(bContext *C)
static int sequencer_unlock_exec(bContext *C, wmOperator *)
bool ED_sequencer_deselect_all(Scene *scene)
void SEQUENCER_OT_paste(wmOperatorType *ot)
void SEQUENCER_OT_swap_inputs(wmOperatorType *ot)
static int sequencer_set_range_to_strips_exec(bContext *C, wmOperator *op)
static int sequencer_meta_toggle_exec(bContext *C, wmOperator *)
void SEQUENCER_OT_meta_toggle(wmOperatorType *ot)
static const EnumPropertyItem prop_split_types[]
void SEQUENCER_OT_export_subtitles(wmOperatorType *ot)
void SEQUENCER_OT_change_scene(wmOperatorType *ot)
static int sequencer_change_effect_input_exec(bContext *C, wmOperator *op)
static const EnumPropertyItem prop_side_lr_types[]
void SEQUENCER_OT_split(wmOperatorType *ot)
bool ED_space_sequencer_check_show_maskedit(SpaceSeq *sseq, Scene *scene)
void SEQUENCER_OT_unlock(wmOperatorType *ot)
static int sequencer_swap_inputs_exec(bContext *C, wmOperator *op)
void SEQUENCER_OT_cursor_set(wmOperatorType *ot)
static int sequencer_change_path_invoke(bContext *C, wmOperator *op, const wmEvent *)
static int sequencer_swap_exec(bContext *C, wmOperator *op)
static int sequencer_delete_exec(bContext *C, wmOperator *op)
static int sequencer_strip_transform_fit_exec(bContext *C, wmOperator *op)
void SEQUENCER_OT_strip_jump(wmOperatorType *ot)
static int sequencer_export_subtitles_invoke(bContext *C, wmOperator *op, const wmEvent *)
void SEQUENCER_OT_meta_separate(wmOperatorType *ot)
static void swap_sequence(Scene *scene, Sequence *seqa, Sequence *seqb)
static const EnumPropertyItem transform_reset_properties[]
static Sequence * find_next_prev_sequence(Scene *scene, Sequence *test, int lr, int sel)
static int sequencer_split_invoke(bContext *C, wmOperator *op, const wmEvent *event)
void SEQ_add_reload_new_file(Main *bmain, Scene *scene, Sequence *seq, const bool lock_range)
bool SEQ_disconnect(Sequence *seq)
void SEQ_connect(Sequence *seq1, Sequence *seq2)
blender::VectorSet< Sequence * > SEQ_get_connected_strips(const Sequence *seq)
bool SEQ_are_strips_connected_together(blender::VectorSet< Sequence * > &seq_list)
bool SEQ_edit_remove_gaps(Scene *scene, ListBase *seqbase, const int initial_frame, const bool remove_all_gaps)
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)
bool SEQ_edit_sequence_swap(Scene *scene, Sequence *seq_a, Sequence *seq_b, const char **r_error_str)
void SEQ_edit_remove_flagged_sequences(Scene *scene, ListBase *seqbase)
bool SEQ_relations_render_loop_check(Sequence *seq_main, Sequence *seq)
void SEQ_relations_invalidate_cache_raw(Scene *scene, Sequence *seq)
void SEQ_relations_sequence_free_anim(Sequence *seq)
void SEQ_relations_invalidate_dependent(Scene *scene, Sequence *seq)
void SEQ_relations_free_imbuf(Scene *scene, ListBase *seqbase, bool for_render)
void SEQ_relations_invalidate_cache_preprocessed(Scene *scene, Sequence *seq)
void SEQ_relations_invalidate_cache_composite(Scene *scene, Sequence *seq)
bool SEQ_select_active_get_pair(Scene *scene, Sequence **r_seq_act, Sequence **r_seq_other)
void SEQ_select_active_set(Scene *scene, Sequence *seq)
Sequence * SEQ_select_active_get(const Scene *scene)
void SEQ_time_right_handle_frame_set(const Scene *scene, Sequence *seq, int timeline_frame)
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_slip_strip(const Scene *scene, Sequence *seq, int delta, float subframe_delta)
int SEQ_time_find_next_prev_edit(Scene *scene, int timeline_frame, const short side, const bool do_skip_mute, const bool do_center, const bool do_unselected)
float SEQ_time_start_frame_get(const Sequence *seq)
int SEQ_time_right_handle_frame_get(const Scene *scene, const Sequence *seq)
void(* free)(Sequence *seq, bool do_id_user)
void(* init)(Sequence *seq)
float previous_subframe_offset
StripTransform * transform
struct ReportList * reports
void WM_event_add_fileselect(bContext *C, wmOperator *op)
wmEventHandler_Op * WM_event_add_modal_handler(bContext *C, wmOperator *op)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
void WM_operator_properties_filesel(wmOperatorType *ot, const int filter, const short type, const eFileSel_Action action, const eFileSel_Flag flag, const short display, const short sort)
int WM_operator_props_popup_confirm_ex(bContext *C, wmOperator *op, const wmEvent *, std::optional< std::string > title, std::optional< std::string > confirm_text, const bool cancel_default)
int WM_enum_search_invoke(bContext *C, wmOperator *op, const wmEvent *)