return -1;
}
-
void TrackCanvas::draw(int mode, int hide_cursor)
{
const int debug = 0;
if(debug) PRINT_TRACE
- if(!mwindow->edl->session->show_assets) return;
-
-
// can't stop thread here, because this is called for every pane
// if(mode != IGNORE_THREAD && !indexes_only)
// gui->resource_thread->stop_draw(!indexes_only);
if(pixmap_w && pixmap_h)
{
// Create pixmap if it doesn't exist
- ResourcePixmap* pixmap = create_pixmap(edit,
- edit_x,
- pixmap_x,
- pixmap_w,
- pixmap_h);
+ ResourcePixmap* pixmap = create_pixmap(edit, edit_x,
+ pixmap_x, pixmap_w, pixmap_h);
// Resize it if it's bigger
- if(pixmap_w > pixmap->pixmap_w ||
- pixmap_h > pixmap->pixmap_h)
+ if( pixmap_w > pixmap->pixmap_w ||
+ pixmap_h > pixmap->pixmap_h)
pixmap->resize(pixmap_w, pixmap_h);
- pixmap->draw_data(this,
- edit,
- edit_x,
- edit_w,
- pixmap_x,
- pixmap_w,
- pixmap_h,
- mode,
- indexes_only);
+ pixmap->update_settings(edit, edit_x, edit_w,
+ pixmap_x, pixmap_w, pixmap_h);
+// Draw data
+ if( current->show_assets() )
+ pixmap->draw_data(this,
+ edit, edit_x, edit_w,
+ pixmap_x, pixmap_w, pixmap_h,
+ mode, indexes_only);
+ else {
+ set_bg_color(BLACK);
+ clear_box(0,0, pixmap_w,pixmap_h, pixmap);
+ }
+// Draw title
+ if( current->show_titles() )
+ pixmap->draw_title(this,
+ edit, edit_x, edit_w,
+ pixmap_x, pixmap_w);
// Resize it if it's smaller
if(pixmap_w < pixmap->pixmap_w ||
pixmap_h < pixmap->pixmap_h)
// }
pixmap_h = mwindow->edl->local_session->zoom_track;
- if(mwindow->edl->session->show_titles) pixmap_h += mwindow->theme->get_image("title_bg_data")->get_h();
+ Track *track = edit->edits->track;
+ if( track->show_titles() )
+ pixmap_h += mwindow->theme->get_image("title_bg_data")->get_h();
//printf("get_pixmap_size %d %d %d %d\n", edit_x, edit_w, pixmap_x, pixmap_w);
}
void TrackCanvas::edit_dimensions(Edit *edit,
- int64_t &x,
- int64_t &y,
- int64_t &w,
- int64_t &h)
+ int64_t &x, int64_t &y, int64_t &w, int64_t &h)
{
-// w = Units::round(edit->track->from_units(edit->length) *
-// mwindow->edl->session->sample_rate /
-// mwindow->edl->local_session->zoom_sample);
-
- h = resource_h();
-
x = Units::round(edit->track->from_units(edit->startproject) *
mwindow->edl->session->sample_rate /
mwindow->edl->local_session->zoom_sample -
mwindow->edl->local_session->view_start[pane->number]);
+ y = edit->edits->track->y_pixel - mwindow->edl->local_session->track_start[pane->number];
+
// Method for calculating w so when edits are together we never get off by one error due to rounding
int64_t x_next = Units::round(edit->track->from_units(edit->startproject + edit->length) *
mwindow->edl->session->sample_rate /
mwindow->edl->local_session->view_start[pane->number]);
w = x_next - x;
- y = edit->edits->track->y_pixel - mwindow->edl->local_session->track_start[pane->number];
-
- if(mwindow->edl->session->show_titles)
- h += mwindow->theme->get_image("title_bg_data")->get_h();
+ int edit_h = 0;
+ if( edit->track->show_titles() )
+ edit_h += mwindow->theme->get_image("title_bg_data")->get_h();
+ if( edit->track->show_assets() )
+ edit_h += resource_h();
+ h = edit_h;
}
void TrackCanvas::track_dimensions(Track *track, int64_t &x, int64_t &y, int64_t &w, int64_t &h)
w = Units::round(plugin->track->from_units(plugin->length) *
mwindow->edl->session->sample_rate /
mwindow->edl->local_session->zoom_sample);
- y = plugin->track->y_pixel -
- mwindow->edl->local_session->track_start[pane->number] +
- mwindow->edl->local_session->zoom_track +
- plugin->plugin_set->get_number() *
- mwindow->theme->get_image("plugin_bg_data")->get_h();
- if(mwindow->edl->session->show_titles)
+ y = plugin->track->y_pixel
+ - mwindow->edl->local_session->track_start[pane->number];
+ if( plugin->track->show_titles() )
y += mwindow->theme->get_image("title_bg_data")->get_h();
+ if( plugin->track->show_assets() )
+ y += resource_h();
+ y += plugin->plugin_set->get_number() *
+ mwindow->theme->get_image("plugin_bg_data")->get_h();
h = mwindow->theme->get_image("plugin_bg_data")->get_h();
}
edit_dimensions(edit, x, y, w, h);
- if(mwindow->edl->session->show_titles)
- {
+ if( edit->track->show_titles() )
y += mwindow->theme->get_image("title_bg_data")->get_h();
- }
- else
- {
- y = 0;
- }
if(side == EDIT_OUT)
- {
x += w - handle_w;
- }
h = handle_h;
w = handle_w;
}
-void TrackCanvas::get_transition_coords(int64_t &x, int64_t &y, int64_t &w, int64_t &h)
+void TrackCanvas::get_transition_coords(Edit *edit,
+ int64_t &x, int64_t &y, int64_t &w, int64_t &h)
{
-//printf("TrackCanvas::get_transition_coords 1\n");
-// int transition_w = mwindow->theme->transitionhandle_data[0]->get_w();
-// int transition_h = mwindow->theme->transitionhandle_data[0]->get_h();
- int transition_w = 30;
- int transition_h = 30;
-//printf("TrackCanvas::get_transition_coords 1\n");
-
- if(mwindow->edl->session->show_titles)
- y += mwindow->theme->get_image("title_bg_data")->get_h();
-//printf("TrackCanvas::get_transition_coords 2\n");
+ int transition_w = 30, transition_h = 30;
+ int has_titles = edit->track->show_titles();
+ int has_assets = edit->track->show_assets();
+ int title_bg_h = mwindow->theme->get_image("title_bg_data")->get_h();
+ int asset_h2 = resource_h() / 2;
+
+ int iy = has_titles ?
+ ( has_assets ? title_bg_h + asset_h2 : title_bg_h/2 ) :
+ ( has_assets ? asset_h2 : 0) ;
+ int title_h2 = mwindow->theme->title_h / 2;
+ if( iy < title_h2 )
+ iy = title_h2;
+ y += iy;
- y += (h - mwindow->theme->get_image("title_bg_data")->get_h()) / 2 - transition_h / 2;
x -= transition_w / 2;
-
- h = transition_h;
+ y -= transition_h / 2;
w = transition_w;
+ h = transition_h;
}
void TrackCanvas::draw_highlighting()
//printf("TrackCanvas::draw_highlighting 1 %p %p\n",
// mwindow->session->track_highlighted, mwindow->session->edit_highlighted);
if(mwindow->session->edit_highlighted) {
-//printf("TrackCanvas::draw_highlighting 2\n");
if((mwindow->session->current_operation == DRAG_ATRANSITION &&
mwindow->session->track_highlighted->data_type == TRACK_AUDIO) ||
(mwindow->session->current_operation == DRAG_VTRANSITION &&
mwindow->session->track_highlighted->data_type == TRACK_VIDEO)) {
-//printf("TrackCanvas::draw_highlighting 2\n");
- edit_dimensions(mwindow->session->edit_highlighted, x, y, w, h);
-//printf("TrackCanvas::draw_highlighting 2\n");
-
+ edit_dimensions(mwindow->session->edit_highlighted,
+ x, y, w, h);
if(MWindowGUI::visible(x, x + w, 0, get_w()) &&
MWindowGUI::visible(y, y + h, 0, get_h())) {
draw_box = 1;
- get_transition_coords(x, y, w, h);
+ get_transition_coords(mwindow->session->edit_highlighted,
+ x, y, w, h);
}
-//printf("TrackCanvas::draw_highlighting 3\n");
}
}
break;
int current_show = 0;
int current_preset = 0;
-// if(!mwindow->edl->session->show_assets) goto done;
-
for(int i = 0; i < plugin_on_toggles.total; i++)
plugin_on_toggles.values[i]->in_use = 0;
for(int i = 0; i < plugin_show_toggles.total; i++)
{
int64_t x, y, w, h;
-// if(!mwindow->edl->session->show_assets) return;
-
for(Track *track = mwindow->edl->tracks->first; track; track = track->next) {
for(Edit *edit = track->edits->first; edit; edit = edit->next) {
if( !edit->hard_left && !edit->hard_right ) continue;
edit_dimensions(edit, x, y, w, h);
set_color(GREEN);
- set_opaque(); int y1 = y+h-1;
+ set_opaque();
+ int y1 = y;
+ if( track->show_titles() )
+ y1 += mwindow->theme->get_image("title_bg_data")->get_h();
+ if( track->show_assets() )
+ y1 += resource_h();
+ if( y1 == y )
+ y1 += mwindow->theme->title_h;
if( edit->hard_left ) {
ArrayList<int> xpt, ypt;
xpt.append(x); ypt.append(y1);
{
int64_t x, y, w, h;
-// if(!mwindow->edl->session->show_assets) return;
-
for(Track *track = mwindow->edl->tracks->first; track; track = track->next) {
+ if( !track->show_transitions() ) continue;
+
for(Edit *edit = track->edits->first; edit; edit = edit->next) {
if(!edit->transition) continue;
edit_dimensions(edit, x, y, w, h);
- int strip_x = x, strip_y = y;
- if(mwindow->edl->session->show_titles)
- strip_y += mwindow->theme->get_image("title_bg_data")->get_h();
- get_transition_coords(x, y, w, h);
+ int strip_x = x;
+ get_transition_coords(edit, x, y, w, h);
+ int strip_h = mwindow->theme->get_image("plugin_bg_data")->get_h();
+ int track_y = edit->edits->track->y_pixel;
+ int strip_y = y - strip_h;
+ if( strip_y < track_y ) strip_y = track_y;
+
int strip_w = Units::round(edit->track->from_units(edit->transition->length) *
mwindow->edl->session->sample_rate / mwindow->edl->local_session->zoom_sample);
if( MWindowGUI::visible(x, x + w, 0, get_w()) &&
- MWindowGUI::visible(y, y + h, 0, get_h()) )
- {
+ MWindowGUI::visible(y, y + h, 0, get_h()) ) {
PluginServer *server = mwindow->scan_plugindb(edit->transition->title,
track->data_type);
if( !server ) continue;
VFrame *picon = server->get_picon();
if( !picon ) continue;
- draw_vframe(picon, x, y, w, h, 0, 0, picon->get_w(), picon->get_h());
+ int picon_w = picon->get_w(), picon_h = picon->get_h();
+ int track_h = edit->track->vertical_span(mwindow->theme);
+ if( picon_h > track_h ) picon_h = track_h;
+ draw_vframe(picon, x, y, w, h, 0, 0, picon_w, picon_h);
}
if(MWindowGUI::visible(strip_x, strip_x + strip_w, 0, get_w()) &&
- MWindowGUI::visible(strip_y, strip_y + h, 0, get_h()))
- {
+ MWindowGUI::visible(strip_y, strip_y + h, 0, get_h())) {
int x = strip_x, w = strip_w;
- if(x < 0)
- {
- w -= -x;
- x = 0;
- }
- if(w + x > get_w()) w -= (w + x) - get_w();
+ if( x < 0 ) { w -= -x; x = 0; }
+ if( w + x > get_w() ) w -= (w + x) - get_w();
draw_3segmenth( x, strip_y, w, strip_x, strip_w,
mwindow->theme->get_image("plugin_bg_data"), 0);
case Autos::AUTOMATION_TYPE_FLOAT: {
Automation automation(0, track);
int grouptype = automation.autogrouptype(i, track);
+ if( buttonpress && i == AUTOMATION_SPEED ) {
+ mwindow->speed_before();
+ }
+
if(draw) // Do dropshadow
result = do_float_autos(track, autos,
cursor_x, cursor_y, draw,
buttonpress, 1, 1, MDGREY,
auto_keyframe, grouptype);
-
result = do_float_autos(track, autos,
cursor_x, cursor_y, draw, buttonpress,
0, 0, GWindowGUI::auto_colors[i],
auto_keyframe, grouptype);
+
+ if( !result && buttonpress && i == AUTOMATION_SPEED )
+ mwindow->speed_after(-1);
+ int current_grouptype = mwindow->edl->local_session->zoombar_showautotype;
+ if( result && buttonpress && grouptype != current_grouptype ) {
+ mwindow->edl->local_session->zoombar_showautotype = grouptype;
+ mwindow->gui->zoombar->update_autozoom();
+ }
break; }
case Autos::AUTOMATION_TYPE_INT: {
}
}
- if(!result &&
- session->auto_conf->plugins /* &&
- mwindow->edl->session->show_assets */) {
+ if(!result && session->auto_conf->plugins) {
Plugin *plugin;
KeyFrame *keyframe;
result = do_plugin_autos(track, cursor_x, cursor_y,
mwindow->edl->local_session->zoom_sample /
mwindow->edl->session->sample_rate;
unit_end = track->to_doubleunits(view_end);
- yscale = mwindow->edl->local_session->zoom_track;
-//printf("TrackCanvas::calculate_viewport yscale=%.0f\n", yscale);
- center_pixel = (int)(track->y_pixel -
- mwindow->edl->local_session->track_start[pane->number] +
- yscale / 2) +
- (mwindow->edl->session->show_titles ?
- mwindow->theme->get_image("title_bg_data")->get_h() :
- 0);
+ yscale = resource_h();
+ center_pixel = track->y_pixel
+ - mwindow->edl->local_session->track_start[pane->number];
+ if( track->show_assets() )
+ center_pixel += yscale / 2;
+ if( track->show_titles() )
+ center_pixel += mwindow->theme->get_image("title_bg_data")->get_h();
zoom_sample = mwindow->edl->local_session->zoom_sample;
zoom_units = track->to_doubleunits(zoom_sample / mwindow->edl->session->sample_rate);
for(int i = 0; i < track->plugin_set.total && !result; i++)
{
PluginSet *plugin_set = track->plugin_set.values[i];
- int center_pixel = (int)(track->y_pixel -
- mwindow->edl->local_session->track_start[pane->number] +
- mwindow->edl->local_session->zoom_track +
- (i + 0.5) * mwindow->theme->get_image("plugin_bg_data")->get_h() +
- (mwindow->edl->session->show_titles ? mwindow->theme->get_image("title_bg_data")->get_h() : 0));
+ int center_pixel = track->y_pixel -
+ mwindow->edl->local_session->track_start[pane->number];
+ if( track->show_titles() )
+ center_pixel += mwindow->theme->get_image("title_bg_data")->get_h();
+ if( track->show_assets() )
+ center_pixel += resource_h();
+ center_pixel += (i + 0.5) * mwindow->theme->get_image("plugin_bg_data")->get_h();
for(Plugin *plugin = (Plugin*)plugin_set->first;
plugin && !result;
draw_inout_points();
// Transitions
- if(mwindow->edl->session->auto_conf->transitions) draw_transitions();
+ draw_transitions();
// Plugins
draw_plugins();
-int TrackCanvas::cursor_motion_event()
+int TrackCanvas::cursor_update(int in_motion)
{
int result = 0;
int cursor_x = 0;
int new_cursor = 0;
int rerender = 0;
double position = 0.;
-//printf("TrackCanvas::cursor_motion_event %d\n", __LINE__);
+//printf("TrackCanvas::cursor_update %d\n", __LINE__);
// Default cursor
switch(mwindow->edl->session->editing_mode)
case DRAG_PROJECTOR_Z:
if(active) rerender = update_overlay =
update_drag_floatauto(get_cursor_x(), get_cursor_y());
+ if( rerender && mwindow->session->current_operation == DRAG_SPEED )
+ mwindow->speed_after(!in_motion ? 1 : 0);
break;
case DRAG_PLAY:
position = mwindow->edl->align_to_frame(position, 0);
position = MAX(position, 0);
+ double start = mwindow->edl->local_session->get_selectionstart(1);
+ double end = mwindow->edl->local_session->get_selectionend(1);
if(position < selection_midpoint) {
mwindow->edl->local_session->set_selectionend(selection_midpoint);
mwindow->edl->local_session->set_selectionstart(position);
- // Que the CWindow
- gui->unlock_window();
- mwindow->cwindow->update(1, 0, 0, 0, 1);
- gui->lock_window("TrackCanvas::cursor_motion_event 1");
- // Update the faders
- mwindow->update_plugin_guis();
- gui->update_patchbay();
}
else {
mwindow->edl->local_session->set_selectionstart(selection_midpoint);
mwindow->edl->local_session->set_selectionend(position);
- // Don't que the CWindow
}
+ // Que the CWindow
+ gui->unlock_window();
+ int dir =
+ start != mwindow->edl->local_session->get_selectionstart(1) ? 1 :
+ end != mwindow->edl->local_session->get_selectionend(1) ? -1 : 0;
+ mwindow->cwindow->update(dir, 0, 0, 0, 1);
+ gui->lock_window("TrackCanvas::cursor_update 1");
+ // Update the faders
+ mwindow->update_plugin_guis();
+ gui->update_patchbay();
timebar_position = mwindow->edl->local_session->get_selectionend(1);
for(int i = 0; i < TOTAL_PANES; i++)
if(gui->pane[i]) gui->pane[i]->canvas->timebar_position = position;
-//printf("TrackCanvas::cursor_motion_event %d %d %p %p\n", __LINE__, pane->number, pane, pane->timebar);
+//printf("TrackCanvas::cursor_update %d %d %p %p\n", __LINE__, pane->number, pane, pane->timebar);
gui->update_timebar(0);
// Update cursor
if(do_transitions(get_cursor_x(), get_cursor_y(),
break;
}
-//printf("TrackCanvas::cursor_motion_event 1\n");
+//printf("TrackCanvas::cursor_update 1\n");
if(update_cursor && new_cursor != get_cursor())
{
set_cursor(new_cursor, 0, 1);
}
-//printf("TrackCanvas::cursor_motion_event 1 %d\n", rerender);
+//printf("TrackCanvas::cursor_update 1 %d\n", rerender);
if(rerender && render_timer->get_difference() > 0.25 ) {
render_timer->update();
mwindow->restart_brender();
mwindow->update_plugin_guis();
gui->unlock_window();
mwindow->cwindow->update(1, 0, 0, 0, 1);
- gui->lock_window("TrackCanvas::cursor_motion_event 2");
+ gui->lock_window("TrackCanvas::cursor_update 2");
}
if(rerender) {
// Update faders
gui->draw_overlays(1);
}
-//printf("TrackCanvas::cursor_motion_event %d\n", __LINE__);
+//printf("TrackCanvas::cursor_update %d\n", __LINE__);
return result;
}
+int TrackCanvas::cursor_motion_event()
+{
+ return cursor_update(1);
+}
+
void TrackCanvas::start_dragscroll()
{
if(!drag_scroll) {
int TrackCanvas::button_release_event()
{
- int redraw = 0, update_overlay = 0, result = 0;
+ int redraw = -1, update_overlay = 0;
+ int result = 0, load_flags = 0;
// printf("TrackCanvas::button_release_event %d\n",
// mwindow->session->current_operation);
result = 1;
break;
- case DRAG_FADE:
case DRAG_SPEED:
+ redraw = FORCE_REDRAW;
+ load_flags |= LOAD_EDITS;
+ case DRAG_FADE:
// delete the drag_auto_gang first and remove out of order keys
synchronize_autos(0, 0, 0, -1);
case DRAG_CZOOM:
case DRAG_PROJECTOR_Y:
case DRAG_PROJECTOR_Z:
case DRAG_PLUGINKEY:
+ load_flags |= LOAD_AUTOMATION;
mwindow->session->current_operation = NO_OPERATION;
mwindow->session->drag_handle = 0;
// Remove any out-of-order keyframe
update_overlay = 1;
}
-
- mwindow->undo->update_undo_after(_("keyframe"), LOAD_AUTOMATION);
+ mwindow->undo->update_undo_after(_("keyframe"), load_flags);
result = 1;
break;
}
if (result)
- cursor_motion_event();
+ cursor_update(0);
if(update_overlay) {
gui->draw_overlays(1);
}
- if(redraw) {
- gui->draw_canvas(NORMAL_DRAW, 0);
+ if(redraw >= 0) {
+ gui->draw_canvas(redraw, 0);
+ gui->flash_canvas(1);
}
return result;
}
int handle_result = -1;
int result = 0;
- if( !mwindow->edl->session->show_assets ) return 0;
-
for( Track *track=mwindow->edl->tracks->first; track && !result; track=track->next) {
+ if( !track->show_assets() ) continue;
+
for( Edit *edit=track->edits->first; edit && !result; edit=edit->next ) {
int64_t edit_x, edit_y, edit_w, edit_h;
edit_dimensions(edit, edit_x, edit_y, edit_w, edit_h);
int handle_result = 0;
int result = 0;
-// if(!mwindow->edl->session->show_assets) return 0;
-
for(Track *track = mwindow->edl->tracks->first;
track && !result;
track = track->next) {
{
int result = 0;
-// if(!mwindow->edl->session->show_assets) return 0;
-
for(Track *track = mwindow->edl->tracks->first;
track && !result;
track = track->next) {
int64_t track_x, track_y, track_w, track_h;
track_dimensions(track, track_x, track_y, track_w, track_h);
- if(button_press && get_buttonpress() == RIGHT_BUTTON &&
- cursor_y >= track_y && cursor_y < track_y + track_h) {
- gui->edit_menu->update(track, 0);
+ if( button_press && get_buttonpress() == RIGHT_BUTTON &&
+ cursor_y >= track_y && cursor_y < track_y + track_h) {
+ double pos = mwindow->edl->get_cursor_position(cursor_x, pane->number);
+ int64_t position = track->to_units(pos, 0);
+ gui->edit_menu->update(track, track->edits->editof(position, PLAY_FORWARD, 0));
gui->edit_menu->activate_menu();
result = 1;
}
{
int result = 0;
- if(!mwindow->edl->session->show_assets) return 0;
-
for(Track *track = mwindow->edl->tracks->first; track && !result; track = track->next) {
+ if( !track->show_assets() ) continue;
for(Edit *edit = track->edits->first; edit && !result; edit = edit->next) {
int64_t edit_x, edit_y, edit_w, edit_h;
int64_t x, y, w, h;
Track *track = 0;
-
-// if(!mwindow->edl->session->show_assets) return 0;
-
-
for(track = mwindow->edl->tracks->first; track && !done; track = track->next) {
if(!track->expand_view) continue;
int result = 0;
int64_t x, y, w, h;
- if(/* !mwindow->edl->session->show_assets || */
- !mwindow->edl->session->auto_conf->transitions) return 0;
for( Track *track = mwindow->edl->tracks->first; track && !result; track = track->next ) {
+ if( !track->show_transitions() ) continue;
for( Edit *edit = track->edits->first; edit; edit = edit->next ) {
if( edit->transition ) {
edit_dimensions(edit, x, y, w, h);
- get_transition_coords(x, y, w, h);
+ get_transition_coords(edit, x, y, w, h);
if( MWindowGUI::visible(x, x + w, 0, get_w()) &&
MWindowGUI::visible(y, y + h, 0, get_h()) ) {
mwindow->session->trim_edits = 0;
if(is_event_win() && cursor_inside()) {
-// double position = (double)cursor_x *
-// mwindow->edl->local_session->zoom_sample /
-// mwindow->edl->session->sample_rate +
-// (double)mwindow->edl->local_session->view_start[pane->number] *
-// mwindow->edl->local_session->zoom_sample /
-// mwindow->edl->session->sample_rate;
+// double position = mwindow->edl->get_cursor_position(cursor_x, pane->number);
result = 1;
if(!active) {
// Test handles only and select a region
case EDITING_IBEAM: {
- double position = (double)cursor_x *
- mwindow->edl->local_session->zoom_sample /
- mwindow->edl->session->sample_rate +
- (double)mwindow->edl->local_session->view_start[pane->number] *
- mwindow->edl->local_session->zoom_sample /
- mwindow->edl->session->sample_rate;
+ double position = mwindow->edl->get_cursor_position(cursor_x, pane->number);
//printf("TrackCanvas::button_press_event %d\n", position);
if( do_transitions(cursor_x, cursor_y,