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