/*
* CINELERRA
* Copyright (C) 1997-2014 Adam Williams <broadcast at earthling dot net>
+ * Copyright (C) 2003-2016 Cinelerra CV contributors
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#include "edits.h"
#include "edl.h"
#include "edlsession.h"
+#include "gwindowgui.h"
#include "keyframe.h"
#include "labels.h"
#include "localsession.h"
break;
case AUTOGROUPTYPE_X:
case AUTOGROUPTYPE_Y:
- val = floor(val + 5);
+ val = floor(val + 50);
break;
}
}
break;
case AUTOGROUPTYPE_X:
case AUTOGROUPTYPE_Y:
- val = floor(val-5);
+ val = floor(val-50);
break;
}
}
}
}
+void MWindow::update_autorange(int type, int increment, int use_max)
+{
+ gui->lock_window("MWindow::update_autorange");
+ int group = Automation::autogrouptype(type, 0);
+ change_currentautorange(group, increment, use_max);
+ int color = GWindowGUI::auto_colors[type];
+ gui->zoombar->update_autozoom(group, color);
+ gui->draw_overlays(0);
+ gui->update_patchbay();
+ gui->flash_canvas(1);
+ gui->unlock_window();
+}
void MWindow::expand_autos(int changeall, int domin, int domax)
{
gui->flush();
}
-void MWindow::zoom_track(int64_t zoom_track)
+void MWindow::zoom_atrack(int64_t zoom)
{
-// scale waveforms
- edl->local_session->zoom_y = (int64_t)((float)edl->local_session->zoom_y *
- zoom_track /
- edl->local_session->zoom_track);
- CLAMP(edl->local_session->zoom_y, MIN_AMP_ZOOM, MAX_AMP_ZOOM);
-
-// scale tracks
- double scale = (double)zoom_track / edl->local_session->zoom_track;
- edl->local_session->zoom_track = zoom_track;
+ int64_t old_zoom = edl->local_session->zoom_atrack;
+ CLAMP(zoom, MIN_TRACK_ZOOM, MAX_TRACK_ZOOM);
+ edl->local_session->zoom_atrack = zoom;
+ edl->local_session->zoom_atrack = zoom;
+ for( Track *track= edl->tracks->first; track; track=track->next ) {
+ if( track->data_type != TRACK_AUDIO ) continue;
+ track->data_h = zoom;
+ }
// shift row position
- for(int i = 0; i < TOTAL_PANES; i++)
- {
- edl->local_session->track_start[i] *= scale;
+ for( int i=0; i<TOTAL_PANES; ++i ) edl->local_session->track_start[i] =
+ (edl->local_session->track_start[i] * zoom) / old_zoom;
+ edl->tracks->update_y_pixels(theme);
+ gui->draw_trackmovement();
+}
+
+void MWindow::zoom_vtrack(int64_t zoom)
+{
+ int64_t old_zoom = edl->local_session->zoom_vtrack;
+ CLAMP(zoom, MIN_TRACK_ZOOM, MAX_TRACK_ZOOM);
+ edl->local_session->zoom_vtrack = zoom;
+
+ for( Track *track= edl->tracks->first; track; track=track->next ) {
+ if( track->data_type != TRACK_VIDEO ) continue;
+ track->data_h = zoom;
}
+// shift row position
+ for( int i=0; i<TOTAL_PANES; ++i ) edl->local_session->track_start[i] =
+ (edl->local_session->track_start[i] * zoom) / old_zoom;
edl->tracks->update_y_pixels(theme);
gui->draw_trackmovement();
-//printf("MWindow::zoom_track %d %d\n", edl->local_session->zoom_y, edl->local_session->zoom_track);
}
void MWindow::trackmovement(int offset, int pane_number)
void MWindow::move_up(int64_t distance)
{
TimelinePane *pane = gui->get_focused_pane();
- if(distance == 0) distance = edl->local_session->zoom_track;
-
+ if(distance == 0) distance = pane->canvas->get_h() / 10;
trackmovement(-distance, pane->number);
}
void MWindow::move_down(int64_t distance)
{
TimelinePane *pane = gui->get_focused_pane();
- if(distance == 0) distance = edl->local_session->zoom_track;
-
+ if(distance == 0) distance = pane->canvas->get_h() / 10;
trackmovement(distance, pane->number);
}
TimelinePane *pane = gui->get_focused_pane();
int64_t old_view_start = edl->local_session->view_start[pane->number];
- if(edl->tracks->total_length() > (double)pane->canvas->get_w() *
- edl->local_session->zoom_sample /
- edl->session->sample_rate)
- {
+ if( edl->tracks->total_length() > (double)pane->canvas->get_w() *
+ edl->local_session->zoom_sample / edl->session->sample_rate ) {
edl->local_session->view_start[pane->number] =
Units::round(edl->tracks->total_length() *
edl->session->sample_rate /
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;
+ if( !track->is_armed() ) continue;
for( int i=0; i<track->plugin_set.size(); ++i ) {
PluginSet *plugin_set = track->plugin_set[i];
int64_t pos = track->to_units(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;
+ if( !track->is_armed() ) continue;
int64_t pos = track->to_units(position, 0);
for( int i=0; i<AUTOMATION_TOTAL; ++i ) {
Autos *autos = track->automation->autos[i];
double MWindow::get_position()
{
- return edl->local_session->get_selectionstart(1);
+ 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);
- }
+ 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);
+ }
+}
+
+
+double MWindow::get_timecode_offset()
+{
+ return edl->session->timecode_offset;
+}
+
+void MWindow::set_timecode_offset(double offset)
+{
+ edl->session->time_format = TIME_TIMECODE;
+ edl->session->timecode_offset = offset;
+ gui->lock_window();
+ gui->update(1, NORMAL_DRAW, 1, 1, 1, 1, 0);
+ gui->unlock_window();
+ cwindow->update(1, 0, 0, 0, 0);
}
int MWindow::expand_t()
{
- int result = edl->local_session->zoom_track * 2;
- result = MIN(result, MAX_TRACK_ZOOM);
- zoom_track(result);
+ int zoom = edl->local_session->zoom_atrack * 2;
+ zoom = MIN(zoom, MAX_TRACK_ZOOM);
+ zoom_atrack(zoom);
+ zoom = edl->local_session->zoom_vtrack * 2;
+ zoom = MIN(zoom, MAX_TRACK_ZOOM);
+ zoom_vtrack(zoom);
gui->zoombar->update();
return 0;
}
int MWindow::zoom_in_t()
{
- int result = edl->local_session->zoom_track / 2;
- result = MAX(result, MIN_TRACK_ZOOM);
- zoom_track(result);
+ int zoom = edl->local_session->zoom_atrack / 2;
+ zoom = MAX(zoom, MIN_TRACK_ZOOM);
+ zoom_atrack(zoom);
+ zoom = edl->local_session->zoom_vtrack / 2;
+ zoom = MAX(zoom, MIN_TRACK_ZOOM);
+ zoom_vtrack(zoom);
gui->zoombar->update();
return 0;
}