9#ifndef HAS_LIVES_MULTITRACK_H
10#define HAS_LIVES_MULTITRACK_H
14#define CLIP_THUMB_WIDTH ((int)(72.*widget_opts.scale))
15#define CLIP_THUMB_HEIGHT ((int)(72.*widget_opts.scale))
17#define CLIP_LABEL_LENGTH ((int)(20.*widget_opts.scale))
19#define BLOCK_THUMB_WIDTH ((int)(40.*widget_opts.scale))
21#define MT_PLAY_WIDTH_SMALL ((int)(320.*widget_opts.scale))
22#define MT_PLAY_HEIGHT_SMALL ((int)(216.*widget_opts.scale))
24#define MT_PLAY_WIDTH_EXP ((int)(432.*widget_opts.scale))
25#define MT_PLAY_HEIGHT_EXP ((int)(324.*widget_opts.scale))
27#define MT_CTX_WIDTH ((int)(320.*widget_opts.scale))
28#define MT_CTX_HEIGHT ((int)(220.*widget_opts.scale))
30#define FX_BLOCK_WIDTH ((int)(80.*widget_opts.scale))
31#define FX_BLOCK_HEIGHT ((int)(20.*widget_opts.scale))
33#define MT_TRACK_HEIGHT ((int)(35.*widget_opts.scale))
35#define TIMECODE_LENGTH 14
37#define TIMELINE_TABLE_COLUMNS 40
39#define MENUBAR_MIN 1024
44#define AMIXER_WRATIO 2. / 3.
45#define AMIXER_HRATIO 2. / 3.
49#define MT_INOUT_TIME 10000
51#define BLOCK_DRAW_SIMPLE 1
52#define BLOCK_DRAW_THUMB 2
53#define BLOCK_DRAW_TYPE BLOCK_DRAW_THUMB
55#define SELBLOCK_ALPHA 0.6
59#define DEF_AUTOTRANS "simple_blend|chroma blend|salsaman"
61typedef struct _mt lives_mt;
409 LiVESWidget *open_loc_menu;
411#ifdef ENABLE_DVD_GRAB
412 LiVESWidget *vcd_dvd_menu;
415 LiVESWidget *device_menu;
710#define TRACK_I_HIDDEN_USER (1<<0)
711#define TRACK_I_HIDDEN_SCROLLED (1<<1)
756lives_mt *
multitrack(weed_plant_t *,
int orig_file,
double fps);
793track_rect *
move_block(lives_mt *, track_rect *block,
double timesecs,
int old_track,
int new_track);
819void scroll_tracks(lives_mt *,
int top_track,
boolean set_value);
834boolean on_track_click(LiVESWidget *eventbox, LiVESXEventButton *, livespointer mt);
838boolean on_track_release(LiVESWidget *eventbox, LiVESXEventButton *event, livespointer mt);
842boolean on_track_move(LiVESWidget *widget, LiVESXEventMotion *event, livespointer mt);
847 lives_direction_t direction, LiVESWidget *eventbox, lives_mt *, track_rect *in_block);
849 double avel,
lives_direction_t direction, LiVESWidget *eventbox, lives_mt *, track_rect *in_block);
882boolean mt_mark_callback(LiVESAccelGroup *group, LiVESWidgetObject *obj, uint32_t keyval, LiVESXModifierType mod,
883 livespointer user_data);
888void mt_zoom_in(LiVESMenuItem *, livespointer mt);
909boolean mt_tcoverlay_callback(LiVESAccelGroup *, LiVESWidgetObject *, uint32_t keyval, LiVESXModifierType mod,
910 livespointer user_data);
927weed_plant_t *
get_prev_fm(lives_mt *,
int current_track, weed_plant_t *frame);
928weed_plant_t *
get_next_fm(lives_mt *,
int current_track, weed_plant_t *frame);
947LiVESPixbuf *
make_thumb(lives_mt *mt,
int file,
int width,
int height,
int frame, LiVESInterpType interp,
boolean noblanks);
955 weed_plant_t *ito,
int track,
boolean after);
957 int track,
ticks_t new_start_tc,
int new_track);
958void mt_fixup_events(lives_mt *, weed_plant_t *old_event, weed_plant_t *new_event);
969void add_markers(lives_mt *, weed_plant_t *event_list,
boolean add_block_ids);
971void save_layout_map(
int *lmap,
double *lmap_audio,
const char *file,
const char *dir);
975void migrate_layouts(
const char *old_set_name,
const char *new_set_name);
1012boolean mt_prevclip(LiVESAccelGroup *, LiVESWidgetObject *, uint32_t keyval, LiVESXModifierType mod, livespointer);
1013boolean mt_nextclip(LiVESAccelGroup *, LiVESWidgetObject *, uint32_t keyval, LiVESXModifierType mod, livespointer);
1041#define DEF_MT_DISP_TRACKS 5
1044#define MAX_TRACKS 65536
1045#define MAX_VIDEO_TRACKS 65536
1046#define MAX_AUDIO_TRACKS 65536
1049#define QUANT_TIME(dbltime) ((q_gint64(dbltime * TICKS_PER_SECOND_DBL, mt->fps) / TICKS_PER_SECOND_DBL))
1052#define QUANT_TICKS(ticks) ((q_gint64(ticks, mt->fps) / TICKS_PER_SECOND_DBL))
lives_direction_t
use REVERSE / FORWARD when a sign is used, BACKWARD / FORWARD when a parity is used
boolean on_track_header_release(LiVESWidget *eventbox, LiVESXEventButton *, livespointer mt)
void insert_at_ctx_cb(LiVESMenuItem *, livespointer mt)
void mt_post_playback(lives_mt *)
void on_insgap_cur_activate(LiVESMenuItem *, livespointer mt)
void delete_audio_tracks(lives_mt *, LiVESList *list, boolean full)
void mt_set_autotrans(int idx)
char * get_eload_filename(lives_mt *mt, boolean allow_auto_reload)
boolean mt_mark_callback(LiVESAccelGroup *group, LiVESWidgetObject *obj, uint32_t keyval, LiVESXModifierType mod, livespointer user_data)
void in_anchor_toggled(LiVESToggleButton *, livespointer mt)
boolean on_render_activate(LiVESMenuItem *, livespointer mt)
void on_node_spin_value_changed(LiVESSpinButton *, livespointer mt)
boolean multitrack_insert(LiVESMenuItem *, livespointer mt)
void on_rename_track_activate(LiVESMenuItem *menuitem, livespointer mt)
boolean mt_auto_backup(livespointer mt)
void edit_start_end_cb(LiVESMenuItem *, livespointer mt)
boolean on_timeline_update(LiVESWidget *, LiVESXEventMotion *, livespointer mt)
lives_mt * multitrack(weed_plant_t *, int orig_file, double fps)
create and return lives_mt struct
void mt_clear_timeline(lives_mt *mt)
boolean on_track_between_click(LiVESWidget *eventbox, LiVESXEventButton *, livespointer mt)
void do_fx_list_context(lives_mt *, int fxcount)
void multitrack_play_sel(LiVESMenuItem *, livespointer mt)
void amixer_show(LiVESButton *, livespointer mt)
track_rect * get_block_from_track_and_time(lives_mt *mt, int track, double time)
get timeline end time of block
LiVESWidget * amixer_add_channel_slider(lives_mt *, int i)
LiVESWidget * get_eventbox_for_track(lives_mt *mt, int ntrack)
boolean mt_track_is_video(lives_mt *, int ntrack)
return TRUE if ntrack is a valid video track
void delete_audio_track(lives_mt *, LiVESWidget *eventbox, boolean full)
boolean on_save_event_list_activate(LiVESMenuItem *, livespointer mt)
void on_amixer_close_clicked(LiVESButton *, lives_mt *mt)
void on_split_activate(LiVESMenuItem *, livespointer mt)
void out_anchor_toggled(LiVESToggleButton *, livespointer mt)
@ INSERT_MODE_NORMAL
the default (only insert if it fits)
@ INSERT_MODE_FILL
insert enough to fill gap (from selection start or end depending on gravity)
@ INSERT_MODE_FLEX
stretch first gap to fit block
@ INSERT_MODE_OVERWRITE
overwite existing blocks
boolean on_track_header_move(LiVESWidget *widget, LiVESXEventMotion *event, livespointer mt)
void on_prev_fm_clicked(LiVESWidget *button, livespointer mt)
track_rect * find_block_by_uid(lives_mt *mt, ulong uid)
void reset_renumbering(void)
LiVESWidget * add_audio_track(lives_mt *, int trackno, boolean behind)
char * get_track_name(lives_mt *, int track_num, boolean is_audio)
void do_sel_context(lives_mt *)
track_rect * move_block(lives_mt *, track_rect *block, double timesecs, int old_track, int new_track)
weed_plant_t * get_prev_fm(lives_mt *, int current_track, weed_plant_t *frame)
void maybe_add_mt_idlefunc(void)
void unselect_all(lives_mt *)
unselect all blocks
void add_markers(lives_mt *, weed_plant_t *event_list, boolean add_block_ids)
void add_context_label(lives_mt *, const char *text)
boolean check_for_layout_del(lives_mt *, boolean exiting)
void mt_change_disp_tracks_ok(LiVESButton *, livespointer mt)
void recover_layout_cancelled(boolean is_startup)
void mt_tl_move(lives_mt *, double pos_abs)
void on_del_node_clicked(LiVESWidget *, livespointer mt)
void stored_event_list_free_undos(void)
void on_frame_preview_clicked(LiVESButton *, livespointer mt)
int add_video_track_behind(LiVESMenuItem *, livespointer mt)
void scroll_track_by_scrollbar(LiVESScrollbar *sbar, livespointer mt)
boolean mt_nextclip(LiVESAccelGroup *, LiVESWidgetObject *, uint32_t keyval, LiVESXModifierType mod, livespointer)
boolean recover_layout(void)
void close_clip_cb(LiVESMenuItem *, livespointer mt)
boolean on_atrack_release(LiVESWidget *eventbox, LiVESXEventButton *event, livespointer mt)
void on_next_fm_clicked(LiVESWidget *button, livespointer mt)
void mt_zoom_in(LiVESMenuItem *, livespointer mt)
void save_layout_map(int *lmap, double *lmap_audio, const char *file, const char *dir)
boolean used_in_current_layout(lives_mt *, int file)
double mt_get_effect_time(lives_mt *)
void mt_init_clips(lives_mt *, int orig_file, boolean add)
void animate_multitrack(lives_mt *)
void update_insert_mode(lives_mt *)
void add_aparam_menuitems(lives_mt *)
void draw_region(lives_mt *mt)
boolean make_backup_space(lives_mt *, size_t space_needed)
boolean on_track_header_click(LiVESWidget *eventbox, LiVESXEventButton *, livespointer mt)
boolean show_in_out_images(livespointer mt)
uint32_t mt_idle_add(lives_mt *)
void mt_clip_select(lives_mt *, boolean scroll)
boolean mt_idle_show_current_frame(livespointer mt)
weed_plant_t * add_blank_frames_up_to(weed_plant_t *event_list, weed_plant_t *start_event, ticks_t end_tc, double fps)
void do_fx_move_context(lives_mt *mt)
void in_out_end_changed(LiVESWidget *, livespointer mt)
void move_init_in_filter_map(lives_mt *, weed_plant_t *event_list, weed_plant_t *fmap, weed_plant_t *ifrom, weed_plant_t *ito, int track, boolean after)
void redraw_mt_param_box(lives_mt *)
boolean mt_prevclip(LiVESAccelGroup *, LiVESWidgetObject *, uint32_t keyval, LiVESXModifierType mod, livespointer)
void mt_selection_lock(LiVESMenuItem *, livespointer user_data)
lock the time selection
void scroll_tracks(lives_mt *, int top_track, boolean set_value)
void set_mt_play_sizes_cfg(lives_mt *)
int mt_get_block_count(lives_mt *, int ntrack)
count blocks in track
@ MT_UNDO_INSERT_AUDIO_BLOCK
@ MT_UNDO_MOVE_AUDIO_BLOCK
@ MT_UNDO_FILTER_MAP_CHANGE
@ MT_UNDO_DELETE_AUDIO_BLOCK
@ MT_UNDO_NONE
no event_list
void set_poly_tab(lives_mt *mt, uint32_t tab)
void mt_zoom_out(LiVESMenuItem *, livespointer mt)
void insert_audio_here_cb(LiVESMenuItem *, livespointer mt)
void delete_video_track(lives_mt *, int layer, boolean full)
void on_fx_insa_clicked(LiVESWidget *button, livespointer mt)
void on_seltrack_toggled(LiVESWidget *, livespointer mt)
boolean compare_filter_maps(weed_plant_t *fm1, weed_plant_t *fm2, int ctrack)
ctrack can be -1 to compare all events, else we cf for ctrack
boolean mt_tcoverlay_callback(LiVESAccelGroup *, LiVESWidgetObject *, uint32_t keyval, LiVESXModifierType mod, livespointer user_data)
boolean event_list_rectify(lives_mt *, weed_plant_t *event_listy)
LiVESPixbuf * make_thumb(lives_mt *mt, int file, int width, int height, int frame, LiVESInterpType interp, boolean noblanks)
void update_grav_mode(lives_mt *)
boolean track_arrow_pressed(LiVESWidget *ahbox, LiVESXEventButton *, livespointer mt)
boolean multitrack_delete(lives_mt *, boolean save)
boolean on_load_event_list_activate(LiVESMenuItem *, livespointer mt)
void mt_swap_play_pause(lives_mt *, boolean put_pause)
LiVESList * layout_audio_is_affected(int clipno, double stime, double etime, LiVESList *xlays)
int get_track_for_block(track_rect *block)
return track number for a given block
boolean set_new_set_name(lives_mt *)
void unpaint_line(lives_mt *, LiVESWidget *eventbox)
boolean on_atrack_click(LiVESWidget *eventbox, LiVESXEventButton *, livespointer mt)
void update_filter_events(lives_mt *, weed_plant_t *first_event, ticks_t start_tc, ticks_t end_tc, int track, ticks_t new_start_tc, int new_track)
void multitrack_end_cb(LiVESMenuItem *, livespointer mt)
void migrate_layouts(const char *old_set_name, const char *new_set_name)
weed_plant_t * get_next_fm(lives_mt *, int current_track, weed_plant_t *frame)
void mt_sensitise(lives_mt *)
@ LMAP_ERROR_DELETE_AUDIO
@ LMAP_ERROR_SHIFT_FRAMES
@ LMAP_ERROR_ALTER_FRAMES
@ LMAP_ERROR_MISSING_CLIP
@ LMAP_ERROR_DELETE_FRAMES
@ LMAP_INFO_SETNAME_CHANGED
void mt_show_current_frame(lives_mt *, boolean return_layer)
preview the current frame
void set_track_label_string(lives_mt *mt, int track, const char *label)
void insert_audio_at_ctx_cb(LiVESMenuItem *, livespointer mt)
void remove_first_gaps(LiVESMenuItem *, livespointer mt)
void mouse_mode_context(lives_mt *)
void mt_init_tracks(lives_mt *, boolean set_min_max)
add basic tracks, or set tracks from mt->event_list
void on_cback_audio_activate(LiVESMenuItem *, livespointer mt)
boolean on_track_between_release(LiVESWidget *eventbox, LiVESXEventButton *, livespointer mt)
LiVESList * load_layout_map(void)
void remove_markers(weed_plant_t *event_list)
void delete_block_cb(LiVESMenuItem *, livespointer mt)
boolean mt_load_recovery_layout(lives_mt *)
boolean save_event_list_inner(lives_mt *, int fd, weed_plant_t *event_list, unsigned char **mem)
void insert_frames(int filenum, ticks_t offset_start, ticks_t offset_end, ticks_t tc, lives_direction_t direction, LiVESWidget *eventbox, lives_mt *, track_rect *in_block)
void on_fx_insb_clicked(LiVESWidget *button, livespointer mt)
void selblock_cb(LiVESMenuItem *, livespointer mt)
void set_timeline_end_secs(lives_mt *, double secs)
void mt_delete_clips(lives_mt *, int file)
boolean on_track_move(LiVESWidget *widget, LiVESXEventMotion *event, livespointer mt)
double mt_get_block_entime(lives_mt *, int ntrack, int iblock)
get timeline start time of block
void avel_spin_changed(LiVESSpinButton *, livespointer mt)
void remove_current_from_affected_layouts(lives_mt *)
void stored_event_list_free_all(boolean wiped)
void multitrack_playall(lives_mt *)
void remove_gaps(LiVESMenuItem *, livespointer mt)
void free_thumb_cache(int fnum, frames_t fromframe)
boolean mt_track_is_audio(lives_mt *, int ntrack)
return TRUE if ntrack is a valid backing audio track
boolean on_track_click(LiVESWidget *eventbox, LiVESXEventButton *, livespointer mt)
ulong mt_get_last_block_uid(lives_mt *mt)
get index of last inserted (wallclock time) block for track
void list_fx_here_cb(LiVESMenuItem *, livespointer mt)
void unpaint_lines(lives_mt *)
void mt_prepare_for_playback(lives_mt *)
void avel_reverse_toggled(LiVESToggleButton *, livespointer mt)
double mt_get_block_sttime(lives_mt *, int ntrack, int iblock)
return time in seconds of first frame event in block
void track_select(lives_mt *)
must call after setting mt->current_track
#define TIMECODE_LENGTH
length of timecode text entry, must be > 12
void insert_audio(int filenum, ticks_t offset_start, ticks_t offset_end, ticks_t tc, double avel, lives_direction_t direction, LiVESWidget *eventbox, lives_mt *, track_rect *in_block)
boolean add_mt_param_box(lives_mt *)
void polymorph(lives_mt *, lives_mt_poly_state_t poly)
void show_clipinfo_cb(LiVESMenuItem *, livespointer mt)
void ** mt_get_pchain(void)
boolean write_backup_layout_numbering(lives_mt *)
LiVESList * layout_frame_is_affected(int clipno, int start, int end, LiVESList *xlays)
void event_list_free_undos(lives_mt *)
void on_insgap_sel_activate(LiVESMenuItem *, livespointer mt)
char * set_values_from_defs(lives_mt *, boolean from_prefs)
void clear_context(lives_mt *)
int add_video_track_front(LiVESMenuItem *, livespointer mt)
void in_out_start_changed(LiVESWidget *, livespointer mt)
void on_prev_node_clicked(LiVESWidget *, livespointer mt)
void activate_mt_preview(lives_mt *)
sensitize Show Preview and Apply buttons
boolean on_timeline_press(LiVESWidget *, LiVESXEventButton *, livespointer mt)
void insert_here_cb(LiVESMenuItem *, livespointer mt)
void mt_do_autotransition(lives_mt *, track_rect *block)
call this on a block to apply autotransition on it
void on_next_node_clicked(LiVESWidget *, livespointer mt)
boolean on_multitrack_activate(LiVESMenuItem *menuitem, weed_plant_t *event_list)
menuitem callback
void * find_init_event_in_ttable(ttable *trans_table, uint64_t in, boolean normal)
void wipe_layout(lives_mt *)
void on_resetp_clicked(LiVESWidget *, livespointer mt)
void show_preview(lives_mt *, ticks_t tc)
boolean on_track_release(LiVESWidget *eventbox, LiVESXEventButton *event, livespointer mt)
boolean on_timeline_release(LiVESWidget *, LiVESXEventButton *, livespointer mt)
void set_mt_colours(lives_mt *)
void mt_desensitise(lives_mt *)
int get_clip_for_block(track_rect *block)
void mt_fixup_events(lives_mt *, weed_plant_t *old_event, weed_plant_t *new_event)
weed_plant_t * load_event_list(lives_mt *, char *eload_file)
boolean resize_timeline(lives_mt *)
LiVESWidget * inv_checkbutton
LiVESWidget * gang_checkbutton
LiVESWidget ** ch_sliders
boolean snap_over
snap to overlap
lives_mt_grav_mode_t grav_mode
int back_audio_tracks
number of backing audio tracks (currently 0 or 1)
boolean insert_audio
do we insert audio with video ?
boolean move_effects
should we move effects attached to a block ?
boolean render_audp
render audio
boolean gang_audio
gang layer audio volume levels
boolean render_vidp
render video
LiVESList * aparam_view_list
lives_mt_mouse_mode_t mouse_mode
lives_mt_insert_mode_t insert_mode
boolean audio_bleedthru
should we allow all audio to bleed thru ?
boolean normalise_audp
normalise audio
boolean pertrack_audio
do we want pertrack audio ?
boolean set
have we set opts (in mainw) ?
boolean autocross_audio
crossfade audio with autotransitions
LiVESWidget * follow_play
LiVESWidget * timeline_table
char timestring[TIMECODE_LENGTH]
double tl_fixed_length
length of timeline can be fixed (secs) : TODO
LiVESWidget * remove_first_gaps
LiVESWidget * timeline_reg
LiVESWidget * clear_marks
LiVESWidget * change_max_disp
LiVESWidget * add_vid_front
LiVESWidget * context_frame
weed_plant_t * event_list
weed_plant_t * specific_event
a pointer to some generally interesting event
LiVESWidgetObject * spinbutton_in_adj
LiVESWidget * view_sel_events
lives_cursor_t cursor_style
LiVESWidget * fx_list_vbox
lives_painter_surface_t * tl_reg_surf
LiVESWidget * ins_submenu
LiVESToolItem * eview_button
LiVESWidget * param_inner_box
LiVESWidget * scroll_label
LiVESWidget * aparam_submenu
LiVESWidget * message_box
LiVESWidget * normalise_aud
LiVESWidget * prev_fm_button
LiVESWidget * context_scroll
LiVESWidget * grav_submenu
LiVESWidget * show_devopts
double end_secs
max display time of timeline in seconds
LiVESList * audio_draws
list of audio boxes, 0 == backing audio, 1 == track 0 audio, etc.
boolean pr_audio
TRUE if we are in the process of prerendering audio to a clip.
LiVESWidget * fx_region_3
LiVESWidget * recent[N_RECENT_FILES]
boolean is_rendering
TRUE if we are in the process of rendering/pre-rendering to a clip, cf. mainw->is_rendering.
int file_selected
actual LiVES file struct number which clip_selected matches
lives_painter_surface_t * tl_surf
int clip_selected
clip in clip window
LiVESWidget * r_sel_arrow
LiVESWidget * overlap_label
LiVESWidget * prerender_aud
track_rect * putative_block
putative block to move or copy, or NULL
LiVESWidget * spinbutton_out
weed_plant_t * solo_inst
instance to view solo in the frame preview
LiVESWidget * preview_frame
LiVESWidget * fx_region_v
boolean moving_block
moving block flag
LiVESWidget * checkbutton_start_anchored
LiVESWidgetObject * spinbutton_out_adj
uint32_t idlefunc
autobackup function
LiVESWidget * effects_menu
LiVESWidget * render_menu
LiVESWidget * next_node_button
lives_painter_surface_t * pbox_surface
LiVESWidgetObject * hadjustment
LiVESWidgetObject * node_adj
LiVESPixbuf * frame_pixbuf
LiVESWidget * rename_track
LiVESWidget * last_filter_map
LiVESWidget * context_box
LiVESWidget * checkbutton_avel_reverse
double pb_start_time
playback start time in seconds. If play is stopped (not paused) we return to here.
lives_rfx_t * current_rfx
LiVESWidget * fx_iafter_button
LiVESWidget * ins_menuitem
LiVESWidget * hseparator2
boolean tl_selecting
for mouse select mode
ulong check_avel_rev_func
LiVESWidget * atrans_menuitem
double insert_avel
override for avel used during audio insert
LiVESWidget * gens_submenu
LiVESWidget * fx_list_box
boolean no_expose
block timeline expose while we are exiting
LiVESWidget * clear_event_list
menuitem
LiVESWidget * spinbutton_start
double region_init
point where user pressed the mouse
LiVESWidget * prev_node_button
weed_plant_t * pb_start_event
FRAME event from which we start playback.
LiVESWidget * audio_insert
lives_painter_surface_t * tl_ev_surf
LiVESWidget * troubleshoot
LiVESWidget * checkbutton_end_anchored
LiVESWidget * tl_eventbox
lives_painter_surface_t * insurface
LiVESWidget * time_scrollbar
LiVESWidget * spinbutton_avel
lives_mt_poly_state_t poly_state
state of polymorph window
char layout_name[PATH_MAX]
lives_painter_surface_t * outsurface
char * force_load_name
pointer to a string which contains a filename to be force loaded when load_event_list_activate() is c...
LiVESWidget * clip_inner_box
LiVESWidget * select_track
LiVESWidget * apply_fx_button
LiVESWidget * fx_base_box
LiVESWidget * view_effects
LiVESWidget * top_eventbox
boolean block_node_spin
set to TRUE to block moving node spinner (prevents loops with the timeline)
boolean auto_changed
changed since last auto-saved
LiVESWidget * mark_jumpnext
LiVESWidget * del_node_button
LiVESWidget * mm_menuitem
LiVESWidget * ins_gap_cur
double region_end
end of time region in seconds (or 0.)
LiVESWidget * fx_list_scroll
LiVESWidget * preview_eventbox
boolean playing_sel
are we playing just the time selection ?
LiVESWidget * show_layout_errors
LiVESWidget * l_sel_arrow
boolean layout_set_properties
LiVESList * audio_vols_back
layer volume levels (coarse control) - reset levels
int current_track
starts at 0
LiVESWidget * fx_region_a
LiVESWidget * grav_normal
lives_special_framedraw_rect_t * framedraw
LiVESWidget * recent_menu
double fps
fps of this timeline
LiVESWidget * seldesel_menuitem
int top_track
top (video) track in scrolled window
weed_plant_t * avol_init_event
LiVESWidget * mark_jumpback
LiVESWidget * load_event_list
menuitem
LiVESWidget * fx_region_2v
LiVESWidget * fx_region_2a
LiVESWidget * cback_audio
boolean layout_prompt
on occasion, prompt user if they want to correct layout on disk or not
LiVESWidget * fx_list_label
LiVESWidget * fx_params_label
int selected_filter
filter selected in poly window tab
LiVESWidget * adjust_start_end
LiVESWidget * loop_continue
LiVESWidget * fx_region_2av
double region_start
start of time region in seconds (or 0.)
LiVESAccelGroup * accel_group
LiVESWidget * change_vals
LiVESWidget * aparam_separator
boolean aud_track_selected
LiVESList * selected_tracks
LiVESWidget * ins_gap_sel
boolean block_tl_move
set to TRUE to block moving timeline (prevents loops with the node spinbutton)
boolean redraw_block
block drawing of playback cursor during track redraws
LiVESWidget * amixer_button
LiVESList * video_draws
list of video timeline eventboxes, in layer order
LiVESWidget * view_in_out
weed_plant_t * init_event
current editable values
LiVESAdjustment * msg_adj
LiVESWidget * add_vid_behind
boolean changed
changed since last saved
LiVESWidget * msg_scrollbar
lives_mt_last_fx_type_t last_fx_type
LiVESWidget * tracks_menu
LiVESWidget * next_fm_button
LiVESWidget * timeline_table_header
track_rect * block_selected
pointer to current selected block, or NULL
double context_time
this is set when the user right clicks on a track, otherwise -1.
LiVESWidget * aparam_menuitem
double ptr_time
stored timeline cursor position before playback
LiVESWidget * node_spinbutton
double pb_unpaused_start_time
playback start time in seconds. If play is stopped (not paused) we return to here.
lives_direction_t last_direction
last direction timeline cursor was moved in
LiVESWidget * timeline_eb
LiVESWidget * ac_audio_check
LiVESWidget * grav_menuitem
LiVESWidgetObject * vadjustment
LiVESWidget * expl_missing
LiVESWidget * spinbutton_end
boolean no_frame_update
< force some visual changes when applying autotrans
LiVESWidget * clip_scroll
LiVESWidget * insa_checkbutton
LiVESWidget * fx_contents_box
lives_mt_fx_order_t fx_order
LiVESWidget * save_event_list
menuitem
weed_plant_t * pb_loop_event
FRAME event to loop back to (can be different from pb_start_event if we are paused)
weed_plant_t * fm_edit_event
LiVESWidget * scrolledwindow
LiVESWidget * snapo_checkbutton
LiVESWidget * resetp_button
LiVESList * audio_vols
layer volume levels (coarse control) - set in mixer
LiVESWidget * eview_label
LiVESWidget * remove_gaps
LiVESWidget * spinbutton_in
LiVESWidget * next_filter_map
LiVESWidget * fx_ibefore_button
LiVESWidget * selection_menu
ticks_t auto_back_time
time when last backup was done (not to be confused with prefs->auto_back)
int avol_fx
index of audio volume filter, delegated by user from audio volume candidates
weed_plant_t * selected_init_event
currently selected in list
LiVESWidget * submenu_atransfx
LiVESWidget * view_events
LiVESWidget * tlx_eventbox
track rectangles (blocks), we translate our event_list FRAME events into these, then when exposed,...
LiVESWidget * eventbox
pointer to eventbox widget which contains this block; we can use its "layer_number" to get the track/...
ticks_t offset_start
offset in sourcefile of first frame
lives_mt_block_state_t state
weed_plant_t * start_event
boolean ordered
are frames in sequential order ?
size_t data_len
including this mt_undo