}
-void MWindow::fit_autos(int doall)
+void MWindow::fit_autos(int all)
{
float min = 0, max = 0;
double start, end;
int forstart = edl->local_session->zoombar_showautotype;
int forend = edl->local_session->zoombar_showautotype + 1;
- if (doall) {
+ if( all ) {
forstart = 0;
forend = AUTOGROUPTYPE_COUNT;
}
int MWindow::goto_position(double position)
{
- TimelinePane *pane = gui->get_focused_pane();
- int64_t old_view_start = edl->local_session->view_start[pane->number];
- edl->local_session->set_selectionstart(position);
- edl->local_session->set_selectionend(position);
- find_cursor();
- int64_t new_view_start = edl->local_session->view_start[pane->number];
- if(new_view_start != old_view_start)
- samplemovement(new_view_start, pane->number);
- update_plugin_guis();
- gui->update_patchbay();
- gui->update_cursor();
+ position = edl->align_to_frame(position, 0);
+ if( position < 0 ) position = 0;
+ select_point(position);
gui->activate_timeline();
- gui->zoombar->update();
- gui->update_timebar(1);
- cwindow->update(1, 0, 0, 0, 1);
return 0;
}
{
TimelinePane *pane = gui->get_focused_pane();
if(!distance)
- distance = pane->canvas->get_w() /
- 10;
+ distance = pane->canvas->get_w() / 10;
edl->local_session->view_start[pane->number] -= distance;
samplemovement(edl->local_session->view_start[pane->number],
pane->number);
{
TimelinePane *pane = gui->get_focused_pane();
if(!distance)
- distance = pane->canvas->get_w() /
- 10;
+ distance = pane->canvas->get_w() / 10;
edl->local_session->view_start[pane->number] += distance;
samplemovement(edl->local_session->view_start[pane->number],
pane->number);
KeyFrame *keyframe = 0;
double start = edl->local_session->get_selectionstart(1);
double end = edl->local_session->get_selectionend(1);
- double position = dir == PLAY_FORWARD ? end : start, new_position = 0;
+ double position = dir == PLAY_FORWARD ? end : start;
+ double new_position = dir == PLAY_FORWARD ? start : end;
for( Track *track=edl->tracks->first; track; track=track->next ) {
if( !track->record ) continue;
for( int i=0; i<track->plugin_set.size(); ++i ) {
return find_selection(new_position);
}
+int MWindow::nearest_auto_keyframe(int shift_down, int dir)
+{
+ Auto *keyframe = 0;
+ double start = edl->local_session->get_selectionstart(1);
+ double end = edl->local_session->get_selectionend(1);
+ double position = dir == PLAY_FORWARD ? end : start;
+ double new_position = dir == PLAY_FORWARD ? start : end;
+ for( Track *track=edl->tracks->first; track; track=track->next ) {
+ if( !track->record ) continue;
+ int64_t pos = track->to_units(position, 0);
+ for( int i=0; i<AUTOMATION_TOTAL; ++i ) {
+ Autos *autos = track->automation->autos[i];
+ if( !autos ) continue;
+ Auto *key = dir == PLAY_FORWARD ?
+ autos->nearest_after(pos) :
+ autos->nearest_before(pos);
+ if( !key ) continue;
+ double key_position = track->from_units(key->position);
+ if( keyframe && (dir == PLAY_FORWARD ?
+ key_position >= new_position :
+ new_position >= key_position ) ) continue;
+ keyframe = key; new_position = key_position;
+ }
+ }
+
+ new_position = keyframe ?
+ keyframe->autos->track->from_units(keyframe->position) :
+ dir == PLAY_FORWARD ? edl->tracks->total_length() : 0;
+
+ if( !shift_down )
+ start = end = new_position;
+ else if( dir == PLAY_FORWARD )
+ end = new_position;
+ else
+ start = new_position;
+
+ edl->local_session->set_selectionstart(start);
+ edl->local_session->set_selectionend(end);
+ return find_selection(new_position);
+}
+
int MWindow::find_selection(double position, int scroll_display)
{
update_plugin_guis();
return 0;
}
+double MWindow::get_position()
+{
+ return edl->local_session->get_selectionstart(1);
+}
+
+void MWindow::set_position(double position)
+{
+ if( position != get_position() ) {
+ if( position < 0 ) position = 0;
+ edl->local_session->set_selectionstart(position);
+ edl->local_session->set_selectionend(position);
+ gui->lock_window();
+ find_cursor();
+ gui->update(1, NORMAL_DRAW, 1, 1, 1, 1, 0);
+ gui->unlock_window();
+ cwindow->update(1, 0, 0, 0, 0);
+ }
+}
+
int MWindow::expand_y()
{