48#include "RNA_prototypes.hh"
105 if (strip->channel + 1.0f < v2d->
cur.
ymin) {
108 if (strip->channel > v2d->
cur.
ymax) {
137 ctx.
quads = quads_batch;
153 if (strip_is_valid && overlays_enabled && ovelay_option) {
217 strip_ctx.
strip = strip;
228 scene->frames_per_second();
252 strip_ctx.
missing_media = media_presence_is_missing(scene, strip);
257 if (!strip_has_valid_data(sub)) {
260 if (media_presence_is_missing(scene, sub)) {
274 strip_ctx.
curve =
nullptr;
281 strip_ctx.
curve =
nullptr;
289 if (showing_curve_overlay || showing_waveform) {
293 &ctx->
scene->
id, strip_ctx.
strip, &RNA_Strip, prop_name, 0,
nullptr);
295 strip_ctx.
curve =
nullptr;
302 const bool show_strip_color_tag,
323 switch (strip->
type) {
347 if (strip->
scene == curscene) {
423 blendcol[0] = blendcol[1] = blendcol[2] = 128;
465 return round_fl_to_int(frame_coord / frames_per_pixel) * frames_per_pixel;
486 const float samples_per_pixel = samples_per_frame * frames_per_pixel;
487 const float bottom = strip_ctx->
bottom + timeline_ctx->
pixely * 2.0f;
490 const float y_zero = half_style ? bottom : (bottom +
top) / 2.0f;
492 const float y_scale = half_style ?
top - bottom : (
top - bottom) / 2.0f;
498 const float draw_start_frame =
max_ff(v2d->
cur.
xmin, strip_start_aligned);
503 scene->frames_per_second();
505 const int pixels_to_draw =
round_fl_to_int((draw_end_frame - draw_start_frame) /
508 if (pixels_to_draw < 2) {
515 if (waveform ==
nullptr || waveform->
length == 0) {
521 uchar color_clip[4] = {255, 0, 0, 127};
522 uchar color_rms[4] = {255, 255, 255, 204};
523 timeline_ctx->
quads->
add_line(draw_start_frame, y_zero, draw_end_frame, y_zero,
color);
525 float prev_y_mid = y_zero;
526 for (
int i = 0;
i < pixels_to_draw;
i++) {
527 float timeline_frame = sample_start_frame +
i * frames_per_pixel;
529 float sample = frame_index * samples_per_frame;
532 if (sample_index < 0) {
536 if (sample_index >= waveform->
length) {
540 float value_min = waveform->
data[sample_index * 3];
541 float value_max = waveform->
data[sample_index * 3 + 1];
542 float rms = waveform->
data[sample_index * 3 + 2];
544 if (samples_per_pixel > 1.0f) {
546 float next_pos =
sample + samples_per_pixel;
549 for (
int j = sample_index + 1; (j < waveform->
length) && (j < end_idx); j++) {
550 value_min =
min_ff(value_min, waveform->
data[j * 3]);
551 value_max =
max_ff(value_max, waveform->
data[j * 3 + 1]);
556 float volume = strip->
volume;
557 if (strip_ctx->
curve !=
nullptr) {
558 float evaltime = draw_start_frame + (
i * frames_per_pixel);
567 bool is_clipping =
false;
568 float clamped_min =
clamp_f(value_min, -1.0f, 1.0f);
569 float clamped_max =
clamp_f(value_max, -1.0f, 1.0f);
570 if (clamped_min != value_min || clamped_max != value_max) {
573 value_min = clamped_min;
574 value_max = clamped_max;
581 bool pos_min = value_min > 0.0f;
582 bool pos_max = value_max > 0.0f;
583 float abs_min = std::abs(value_min);
584 float abs_max = std::abs(value_max);
585 if (pos_min == pos_max) {
586 value_min = std::min(abs_min, abs_max);
587 value_max = std::max(abs_min, abs_max);
591 value_max = std::max(abs_min, abs_max);
595 float x1 = draw_start_frame +
i * frames_per_pixel;
596 float x2 = draw_start_frame + (
i + 1) * frames_per_pixel;
597 float y_min = y_zero + value_min * y_scale;
598 float y_max = y_zero + value_max * y_scale;
599 float y_mid = (y_max + y_min) * 0.5f;
602 if (y_max - y_min < timeline_ctx->pixely * 2) {
605 if (std::abs(y_mid - prev_y_mid) > timeline_ctx->
pixely) {
606 float x0 = draw_start_frame + (
i - 1) * frames_per_pixel;
607 timeline_ctx->
quads->
add_line(x0, prev_y_mid, x1, y_mid, is_clipping ? color_clip :
color);
609 timeline_ctx->
quads->
add_line(x1, y_mid, x2, y_mid, is_clipping ? color_clip :
color);
612 float rms_min = y_zero +
max_ff(-rms, value_min) * y_scale;
613 float rms_max = y_zero +
min_ff(rms, value_max) * y_scale;
616 x1, rms_min, x2, rms_max, is_clipping ? color_clip : color_rms);
618 timeline_ctx->
quads->
add_quad(x1, y_min, x2, y_max, is_clipping ? color_clip :
color);
650 const float bottom = strip_ctx->
bottom + corner_radius * 0.8f * timeline_ctx->
pixely;
652 const float draw_range =
top - bottom;
653 if (draw_range < timeline_ctx->pixely) {
669 offset = strip_meta->
start - offset;
676 chan_min =
min_ii(chan_min, strip->channel);
677 chan_max =
max_ii(chan_max, strip->channel);
680 chan_range = (chan_max - chan_min) + 1;
681 draw_height = draw_range / chan_range;
692 if (x1_chan <= meta_x2 && x2_chan >= meta_x1) {
693 float y_chan = (strip->channel - chan_min) /
float(chan_range) * draw_range;
694 float y1_chan, y2_chan;
705 if (strip_ctx->
is_muted || render_is_muted(meta_channels, strip)) {
712 const bool missing_data = !strip_has_valid_data(strip);
713 const bool missing_media = media_presence_is_missing(scene, strip);
714 if (missing_data || missing_media) {
721 x1_chan =
max_ff(x1_chan, meta_x1);
722 x2_chan =
min_ff(x2_chan, meta_x2);
725 y2_chan = bottom + y_chan + (draw_height *
STRIP_OFSTOP);
757 const uchar col[4] = {255, 255, 255, 255};
758 const float text_margin = 1.2f * strip_ctx->
handle_width;
759 const float text_y = strip_ctx->
bottom + 0.09f;
764 text_x += text_margin;
776 const float handle_size = pixelx * (5.0f *
U.pixelsize);
779 return min_ff(handle_size,
788 if (
name[0] ==
'\0') {
799 switch (strip->
type) {
807 if (strip->
sound !=
nullptr) {
822 if (strip->
scene !=
nullptr) {
837 if (strip->
clip !=
nullptr) {
843 if (strip->
mask !=
nullptr) {
853 char *r_overlay_string,
854 size_t overlay_string_len)
858 const char *text_sep =
" | ";
859 const char *text_array[5];
869 if (source[0] !=
'\0') {
871 text_array[
i++] = text_sep;
873 text_array[
i++] = source;
877 char strip_duration_text[16];
881 text_array[
i++] = text_sep;
883 text_array[
i++] = strip_duration_text;
897 r_col[0] = r_col[1] = r_col[2] = r_col[3] = 255;
900 if (!active_or_selected) {
901 r_col[0] = r_col[1] = r_col[2] = 0;
905 r_col[0] = r_col[1] = r_col[2] = 192;
931 const float x_offset = (right -
left - icon_size) * 0.5f;
932 const float y_offset = (
top - bottom - icon_size) * 0.5f;
956 const bool missing_data = strip.missing_data_block;
957 const bool missing_media = strip.missing_media;
958 const bool is_connected = strip.is_connected;
959 if (!missing_data && !missing_media && !is_connected) {
968 float icon_indent = 2.0f * strip.handle_width - 4 * timeline_ctx->
pixelx *
UI_SCALE_FAC;
971 rect.
ymax = strip.top;
974 rect.
xmax =
min_ff(strip.right_handle - strip.handle_width, rect.
xmin + icon_size_x);
979 rect.
xmax =
min_ff(strip.right_handle - strip.handle_width, rect.
xmin + icon_size_x);
984 rect.
xmax =
min_ff(strip.right_handle - strip.handle_width, rect.
xmin + icon_size_x);
990 if (strip.can_draw_strip_content && strip.strip->type !=
STRIP_TYPE_META) {
992 rect.
xmin = strip.left_handle + strip.handle_width;
993 rect.
xmax = strip.right_handle - strip.handle_width;
994 rect.
ymin = strip.bottom;
995 rect.
ymax = strip.strip_content_top;
1000 if (missing_media) {
1023 timeline_ctx, strip_ctx, overlay_string,
sizeof(overlay_string));
1025 if (overlay_string_len == 0) {
1060 timeline_ctx->
v2d, &rect, overlay_string, overlay_string_len,
col);
1130 if (strip_ctx->
curve ==
nullptr) {
1140 if (eval_start >= eval_end) {
1144 const float y_height = strip_ctx->
top - strip_ctx->
bottom;
1145 float prev_x = eval_start;
1147 CLAMP(prev_val, 0.0f, 1.0f);
1150 for (
int timeline_frame = eval_start + eval_step; timeline_frame <= eval_end;
1151 timeline_frame += eval_step)
1154 CLAMP(curve_val, 0.0f, 1.0f);
1157 if (curve_val == prev_val && timeline_frame < eval_end - eval_step) {
1165 (prev_val * y_height) + strip_ctx->
bottom,
1168 timeline_frame - eval_step,
1169 (prev_val * y_height) + strip_ctx->
bottom,
1170 timeline_frame - eval_step,
1174 prev_x = timeline_frame - eval_step;
1178 (prev_val * y_height) + strip_ctx->
bottom,
1182 (curve_val * y_height) + strip_ctx->
bottom,
1186 prev_x = timeline_frame;
1187 prev_val = curve_val;
1197 if (strip_ctx->
strip != act_strip || act_strip ==
nullptr) {
1254 r_bottom_layer.
clear();
1255 r_top_layer.
clear();
1260 for (
Strip *strip : strips) {
1263 r_bottom_layer.
append(strip_ctx);
1266 r_top_layer.
append(strip_ctx);
1273 for (int64_t index : range) {
1274 strip_draw_context_curve_get(timeline_ctx, r_bottom_layer[index]);
1278 for (int64_t index : range) {
1279 strip_draw_context_curve_get(timeline_ctx, r_top_layer[index]);
1300 strip.strip_content_top,
1304 strip.is_single_image);
1312 if (strip.is_muted) {
1313 uchar muted_color[3] = {128, 128, 128};
1327 if (show_overlay && strip.can_draw_strip_content &&
1351 if (input1->
type == input2->
type) {
1408 if (!selected && !
active) {
1425 if ((translating && overlaps && !use_overwrite) || clamped_l || clamped_r) {
1430 else if (translating && selected) {
1444 if (act_strip !=
nullptr && (act_strip->
flag &
SELECT) != 0) {
1449 if (special_preview == strip.
strip) {
1488 strip.strip_content_top,
1492 strip.is_single_image);
1573 if (timeline_ctx->
ed ==
nullptr) {
1601 const int frame_sta = scene->
r.
sfra;
1602 const int frame_end = scene->
r.
efra + 1;
1613 if (frame_sta < frame_end) {
1687 drawdata->
quads->
add_quad(timeline_frame, stripe_bot, timeline_frame + 1, stripe_top,
col);
1697 float stripe_top = stripe_bot + drawdata->
stripe_ht;
1698 drawdata->
quads->
add_quad(timeline_frame, stripe_bot, timeline_frame + 1, stripe_top,
col);
1704 const float stripe_bot,
1705 const float stripe_ht,
1711 stripe_bot + stripe_ht,
1724 const uchar4 bg_final{78, 78, 145, 255};
1725 const uchar4 bg_raw{255, 25, 5, 25};
1746 for (
const Strip *strip : strips) {
1776 userdata.
quads = &quads;
1802 float viewport_size[4];
1804 immUniform2f(
"viewport_size", viewport_size[2], viewport_size[3]);
1828 if (scene ==
nullptr) {
1842 if (ctx->
scene ==
nullptr) {
1913 if (scene->
ed !=
nullptr) {
ScrArea * CTX_wm_area(const bContext *C)
SpaceSeq * CTX_wm_space_seq(const bContext *C)
ARegion * CTX_wm_region(const bContext *C)
Scene * CTX_data_sequencer_scene(const bContext *C)
bool BKE_fcurve_is_empty(const FCurve *fcu)
float evaluate_fcurve(const FCurve *fcu, float evaltime)
FCurve * id_data_find_fcurve(ID *id, void *data, StructRNA *type, const char *prop_name, int index, bool *r_driven)
#define SOUND_WAVE_SAMPLES_PER_SECOND
float BLF_width(int fontid, const char *str, size_t str_len, ResultBLF *r_info=nullptr) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(2)
#define LISTBASE_FOREACH(type, var, list)
BLI_INLINE bool BLI_listbase_is_empty(const ListBase *lb)
MINLINE int round_fl_to_int(float a)
MINLINE float max_ff(float a, float b)
MINLINE int min_ii(int a, int b)
MINLINE float clamp_f(float value, float min, float max)
MINLINE float min_ff(float a, float b)
MINLINE int max_ii(int a, int b)
MINLINE int round_db_to_int(double a)
MINLINE void rgb_float_to_uchar(unsigned char r_col[3], const float col_f[3])
void rgb_byte_set_hue_float_offset(unsigned char rgb[3], float hue_offset)
MINLINE void copy_v3_v3_uchar(unsigned char r[3], const unsigned char a[3])
#define BLI_path_join(...)
BLI_INLINE int BLI_rcti_size_y(const struct rcti *rct)
BLI_INLINE int BLI_rcti_size_x(const struct rcti *rct)
BLI_INLINE float BLI_rctf_size_x(const struct rctf *rct)
BLI_INLINE float BLI_rctf_size_y(const struct rctf *rct)
size_t size_t size_t BLI_snprintf_utf8(char *__restrict dst, size_t dst_maxncpy, const char *__restrict format,...) ATTR_NONNULL(1
#define SNPRINTF_UTF8(dst, format,...)
#define SNPRINTF_UTF8_RLEN(dst, format,...)
char * BLI_strncpy_utf8(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
size_t BLI_string_join_array(char *result, size_t result_maxncpy, const char *strings[], uint strings_num) ATTR_NONNULL()
pthread_spinlock_t SpinLock
void BLI_spin_unlock(SpinLock *spin)
void BLI_spin_lock(SpinLock *spin)
#define DNA_struct_default_get(struct_name)
@ STRIP_TYPE_GAUSSIAN_BLUR
@ SEQ_EDIT_OVERLAY_FRAME_ABS
@ SEQ_EDIT_OVERLAY_FRAME_SHOW
@ SEQ_AUDIO_DRAW_WAVEFORM
@ SOUND_TAGS_WAVEFORM_LOADING
@ SEQ_TIMELINE_SHOW_FCURVES
@ SEQ_TIMELINE_SHOW_STRIP_DURATION
@ SEQ_TIMELINE_SHOW_STRIP_OFFSETS
@ SEQ_TIMELINE_ALL_WAVEFORMS
@ SEQ_TIMELINE_WAVEFORMS_HALF
@ SEQ_TIMELINE_SHOW_STRIP_SOURCE
@ SEQ_TIMELINE_SHOW_STRIP_NAME
@ SEQ_TIMELINE_NO_WAVEFORMS
@ SEQ_TIMELINE_SHOW_STRIP_COLOR_TAG
@ SEQ_CACHE_SHOW_FINAL_OUT
void ED_region_draw_cb_draw(const bContext *C, ARegion *region, int type)
#define REGION_DRAW_POST_VIEW
#define REGION_DRAW_PRE_VIEW
void GPU_framebuffer_bind_no_srgb(blender::gpu::FrameBuffer *fb)
void GPU_framebuffer_bind(blender::gpu::FrameBuffer *fb)
void GPU_matrix_push_projection()
void GPU_matrix_pop_projection()
@ GPU_SHADER_3D_LINE_DASHED_UNIFORM_COLOR
@ GPU_SHADER_3D_UNIFORM_COLOR
@ GPU_SEQ_FLAG_BACKGROUND
@ GPU_SEQ_FLAG_MISSING_CONTENT
@ GPU_SEQ_FLAG_COLOR_BAND
@ GPU_SEQ_FLAG_TRANSITION
@ GPU_SEQ_FLAG_SELECTED_LH
@ GPU_SEQ_FLAG_SELECTED_RH
@ GPU_SEQ_FLAG_MISSING_TITLE
@ GPU_BLEND_ALPHA_PREMULT
void GPU_blend(GPUBlend blend)
void GPU_depth_test(GPUDepthTest test)
void GPU_viewport_size_get_f(float coords[4])
blender::gpu::FrameBuffer * GPU_viewport_framebuffer_overlay_get(GPUViewport *viewport)
#define ICON_DEFAULT_HEIGHT
#define UI_NO_ICON_OVERLAY_TEXT
void UI_icon_draw_ex(float x, float y, int icon_id, float aspect, float alpha, float desaturate, const uchar mono_color[4], bool mono_border, const IconTextOverlay *text_overlay, const bool inverted=false)
void UI_Theme_Store(bThemeState *theme_state)
void UI_Theme_Restore(const bThemeState *theme_state)
void UI_GetColorPtrBlendShade3ubv(const unsigned char cp1[3], const unsigned char cp2[3], float fac, int offset, unsigned char r_col[3])
void UI_ThemeClearColor(int colorid)
void UI_GetThemeColor3ubv(int colorid, unsigned char col[3])
void UI_GetThemeColorShade3ubv(int colorid, int offset, unsigned char col[3])
void UI_SetTheme(int spacetype, int regionid)
void UI_GetColorPtrShade3ubv(const unsigned char cp[3], int offset, unsigned char r_col[3])
void UI_view2d_view_orthoSpecial(ARegion *region, View2D *v2d, bool xaxis)
char char char char void UI_view2d_text_cache_add(View2D *v2d, float x, float y, const char *str, size_t str_len, const unsigned char col[4])
void UI_view2d_scrollers_draw(View2D *v2d, const rcti *mask_custom)
#define UI_TIME_CACHE_MARGIN_Y
void UI_view2d_view_restore(const bContext *C)
void UI_view2d_text_cache_draw(ARegion *region)
float UI_view2d_region_to_view_y(const View2D *v2d, float y)
#define UI_TIME_SCRUB_MARGIN_Y
void UI_view2d_text_cache_add_rectf(View2D *v2d, const rctf *rect_view, const char *str, size_t str_len, const unsigned char col[4])
void UI_view2d_view_ortho(const View2D *v2d)
void UI_view2d_draw_lines_x__discrete_frames_or_seconds(const View2D *v2d, const Scene *scene, bool display_seconds, bool display_minor_lines)
View2D * UI_view2d_fromcontext(const bContext *C)
float UI_view2d_scale_get_y(const View2D *v2d)
@ WM_GIZMOMAP_DRAWSTEP_2D
void ANIM_draw_previewrange(const Scene *scene, View2D *v2d, int end_frame_width)
bool ED_markers_region_visible(const ScrArea *area, const ARegion *region)
void ED_markers_draw(const bContext *C, int flag)
BMesh const char void * data
int64_t remove_if(Predicate &&predicate)
void append(const T &value)
void reserve(const int64_t min_capacity)
void add_quad(float x1, float y1, float x2, float y2, const uchar color[4])
void add_line(float x1, float y1, float x2, float y2, const uchar color[4])
void add_wire_quad(float x1, float y1, float x2, float y2, const uchar color[4])
SeqStripDrawData & add_strip(float content_start, float content_end, float top, float bottom, float content_top, float left_handle, float right_handle, float handle_width, bool single_image)
static void visible_strips_ordered_get(TimelineDrawContext *timeline_ctx, Vector< StripDrawContext > &r_bottom_layer, Vector< StripDrawContext > &r_top_layer)
static void draw_seq_text_overlay(TimelineDrawContext *timeline_ctx, const StripDrawContext *strip_ctx)
void sequencer_preview_add_sound(const bContext *C, const Strip *strip)
float calc_strip_round_radius(float pixely)
static const char * draw_seq_text_get_name(const Strip *strip)
static void draw_cache_final_iter_fn(void *userdata, int timeline_frame)
static void draw_seq_timeline_channels(TimelineDrawContext *ctx)
void sequencer_retiming_draw_continuity(const TimelineDrawContext *timeline_ctx, const StripDrawContext &strip_ctx)
static void get_strip_text_color(const StripDrawContext *strip_ctx, uchar r_col[4])
static void draw_strip_offsets(TimelineDrawContext *timeline_ctx, const StripDrawContext *strip_ctx)
static float align_frame_with_pixel(float frame_coord, float frames_per_pixel)
static void draw_retiming_continuity_ranges(TimelineDrawContext *timeline_ctx, const Vector< StripDrawContext > &strips)
bool handle_is_selected(const Strip *strip, eStripHandle handle)
void sequencer_retiming_speed_draw(const TimelineDrawContext *timeline_ctx, const StripDrawContext &strip_ctx)
static void draw_seq_strips(TimelineDrawContext *timeline_ctx, StripsDrawBatch &strips_batch, const Vector< StripDrawContext > &strips)
static bool seq_draw_waveforms_poll(const SpaceSeq *sseq, const Strip *strip)
static void strip_data_outline_params_set(const StripDrawContext &strip, const TimelineDrawContext *timeline_ctx, SeqStripDrawData &data)
float strip_handle_draw_size_get(const Scene *scene, Strip *strip, float pixelx)
static void draw_timeline_post_view_callbacks(TimelineDrawContext *ctx)
uint color_pack(const uchar rgba[4])
static void strip_data_highlight_flags_set(const StripDrawContext &strip, const TimelineDrawContext *timeline_ctx, SeqStripDrawData &data)
static void draw_seq_fcurve_overlay(TimelineDrawContext *timeline_ctx, const StripDrawContext *strip_ctx)
void draw_timeline_seq(const bContext *C, ARegion *region)
void draw_strip_thumbnails(TimelineDrawContext *ctx, StripsDrawBatch &strips_batch, const blender::Vector< StripDrawContext > &strips)
static void draw_multicam_highlight(TimelineDrawContext *timeline_ctx, const StripDrawContext *strip_ctx)
void sequencer_retiming_keys_draw(const TimelineDrawContext *timeline_ctx, blender::Span< StripDrawContext > strips)
static void draw_overlap_frame_indicator(const Scene *scene, const View2D *v2d)
static TimelineDrawContext timeline_draw_context_get(const bContext *C, SeqQuadsBatch *quads_batch)
static void draw_icon_centered(TimelineDrawContext &ctx, const rctf &rect, int icon_id, const uchar color[4])
static void draw_cache_view(const bContext *C)
static void drawmeta_contents(TimelineDrawContext *timeline_ctx, const StripDrawContext *strip_ctx, float corner_radius)
bool can_select_handle(const Scene *scene, const Strip *strip, const View2D *v2d)
static void strip_draw_context_set_strip_content_visibility(TimelineDrawContext *ctx, StripDrawContext *strip_ctx)
static void draw_timeline_pre_view_callbacks(TimelineDrawContext *ctx)
Strip * special_preview_get()
static void strip_draw_context_set_text_overlay_visibility(TimelineDrawContext *ctx, StripDrawContext *strip_ctx)
bool retiming_keys_can_be_displayed(const SpaceSeq *sseq)
static void draw_strips_background(TimelineDrawContext *timeline_ctx, StripsDrawBatch &strips_batch, const Vector< StripDrawContext > &strips)
static void seq_prefetch_wm_notify(const bContext *C, Scene *scene)
static void draw_cache_stripe(const Scene *scene, const Strip *strip, SeqQuadsBatch &quads, const float stripe_bot, const float stripe_ht, const uchar color[4])
static void draw_seq_waveform_overlay(TimelineDrawContext *timeline_ctx, const StripDrawContext *strip_ctx)
static void draw_cache_background(const bContext *C, CacheDrawData *draw_data)
static void draw_cache_source_iter_fn(void *userdata, const Strip *strip, int timeline_frame)
static size_t draw_seq_text_get_overlay_string(TimelineDrawContext *timeline_ctx, const StripDrawContext *strip_ctx, char *r_overlay_string, size_t overlay_string_len)
static void draw_handle_transform_text(const TimelineDrawContext *timeline_ctx, const StripDrawContext *strip_ctx, eStripHandle handle)
void draw_timeline_seq_display(const bContext *C, ARegion *region)
static void strip_data_missing_media_flags_set(const StripDrawContext &strip, SeqStripDrawData &data)
constexpr float ICON_SIZE
static bool strip_hides_text_overlay_first(const TimelineDrawContext *ctx, const StripDrawContext *strip_ctx)
static void draw_timeline_sfra_efra(TimelineDrawContext *ctx)
static float strip_header_size_get(TimelineDrawContext *ctx)
static void waveform_job_start_if_needed(const bContext *C, const Strip *strip)
static void strip_draw_context_curve_get(const TimelineDrawContext *ctx, StripDrawContext &strip_ctx)
static void color3ubv_from_seq(const Scene *curscene, const Strip *strip, const bool show_strip_color_tag, const bool is_muted, uchar r_col[3])
static void draw_timeline_markers(TimelineDrawContext *ctx)
static void draw_timeline_gizmos(TimelineDrawContext *ctx)
static StripDrawContext strip_draw_context_get(TimelineDrawContext *ctx, Strip *strip)
static void strip_data_handle_flags_set(const StripDrawContext &strip, const TimelineDrawContext *timeline_ctx, SeqStripDrawData &data)
static void draw_strip_icons(TimelineDrawContext *timeline_ctx, const Vector< StripDrawContext > &strips)
blender::Vector< Strip * > sequencer_visible_strips_get(const bContext *C)
static void draw_seq_text_get_source(const Strip *strip, char *r_source, size_t source_maxncpy)
static void draw_timeline_grid(TimelineDrawContext *ctx)
static void strip_data_lock_flags_set(const StripDrawContext &strip, const TimelineDrawContext *timeline_ctx, SeqStripDrawData &data)
static void strip_draw_context_set_retiming_overlay_visibility(TimelineDrawContext *ctx, StripDrawContext *strip_ctx)
static void draw_strips_foreground(TimelineDrawContext *timeline_ctx, StripsDrawBatch &strips_batch, const Vector< StripDrawContext > &strips)
bool render_is_muted(const ListBase *channels, const Strip *strip)
int time_right_handle_frame_get(const Scene *scene, const Strip *strip)
ListBase * channels_displayed_get(const Editing *ed)
bool prefetch_need_redraw(const bContext *C, Scene *scene)
float time_content_end_frame_get(const Scene *scene, const Strip *strip)
blender::Map< SeqRetimingKey *, Strip * > retiming_selection_get(const Editing *ed)
void timeline_boundbox(const Scene *scene, const ListBase *seqbase, rctf *r_rect)
void source_image_cache_iterate(Scene *scene, void *userdata, void callback_iter(void *userdata, const Strip *strip, int timeline_frame))
void final_image_cache_iterate(Scene *scene, void *userdata, void callback_iter(void *userdata, int timeline_frame))
float give_frame_index(const Scene *scene, const Strip *strip, float timeline_frame)
Editing * editing_get(const Scene *scene)
int time_left_handle_frame_get(const Scene *, const Strip *strip)
const char * strip_give_name(const Strip *strip)
float time_start_frame_get(const Strip *strip)
bool transform_single_image_check(const Strip *strip)
Strip * select_active_get(const Scene *scene)
constexpr int MAX_CHANNELS
bool is_strip_connected(const Strip *strip)
bool transform_is_locked(ListBase *channels, const Strip *strip)
void thumbnail_cache_discard_requests_outside(Scene *scene, const rctf &rect)
ListBase * active_seqbase_get(const Editing *ed)
ListBase * get_seqbase_from_strip(Strip *strip, ListBase **r_channels, int *r_offset)
eSeqOverlapMode tool_settings_overlap_mode_get(Scene *scene)
void thumbnail_cache_maintain_capacity(Scene *scene)
void parallel_for(const IndexRange range, const int64_t grain_size, const Function &function, const TaskSizeHints &size_hints=detail::TaskSizeHints_Static(1))
blender::VecBase< uint8_t, 4 > uchar4
VecBase< float, 2 > float2
ARegionRuntimeHandle * runtime
struct SequencerCacheOverlay cache_overlay
struct SequencerTimelineOverlay timeline_overlay
struct Object * scene_camera
ThemeStripColor strip_color[9]
bool show_strip_color_tag
bool can_draw_retiming_overlay
bool can_draw_strip_content
bool can_draw_text_overlay
blender::gpu::FrameBuffer * framebuffer_overlay
blender::Map< SeqRetimingKey *, Strip * > retiming_selection
rcti ED_time_scrub_clamp_scroller_mask(const rcti &scroller_mask)
void ED_time_scrub_draw(const ARegion *region, const Scene *scene, bool display_seconds, bool discrete_frames, const int base)
void ED_time_scrub_draw_current_frame(const ARegion *region, const Scene *scene, bool display_seconds, bool display_stalk)
GPUViewport * WM_draw_region_get_viewport(ARegion *region)
void WM_event_add_notifier(const bContext *C, uint type, void *reference)
void WM_gizmomap_draw(wmGizmoMap *gzmap, const bContext *C, const eWM_GizmoFlagMapDrawStep drawstep)
void wmOrtho2_region_pixelspace(const ARegion *region)