X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Ftrackcanvas.C;h=4de073e34a281231075b3e7c69a71f5aca5db171;hb=5c1aff2fd123b65be6e51ca7652185e14ddaf168;hp=061545bac18728ba5f25be967788c789a304367f;hpb=9f0e523f895dabf635f694efc854f2be479d712c;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/trackcanvas.C b/cinelerra-5.1/cinelerra/trackcanvas.C index 061545ba..4de073e3 100644 --- a/cinelerra-5.1/cinelerra/trackcanvas.C +++ b/cinelerra-5.1/cinelerra/trackcanvas.C @@ -1392,11 +1392,17 @@ void TrackCanvas::get_transition_coords(Edit *edit, int64_t &x, int64_t &y, int64_t &w, int64_t &h) { int transition_w = 30, transition_h = 30; - - if( edit->track->show_titles() ) - y += mwindow->theme->get_image("title_bg_data")->get_h(); - if( edit->track->show_assets() ) - y += resource_h() / 2; + int has_titles = edit->track->show_titles(); + int has_assets = edit->track->show_assets(); + double title_bg_h = mwindow->theme->get_image("title_bg_data")->get_h(); + double asset_h = resource_h(); + double ys = has_assets ? asset_h : has_titles ? title_bg_h : 0; + double dy = has_titles ? + ( has_assets ? title_bg_h + asset_h/2 : title_bg_h/2 ) : + ( has_assets ? asset_h/2 : 0) ; + double title_h = mwindow->theme->title_h; + if( dy < title_h / 2 ) { ys = title_h; dy = ys / 2; } + y += dy; x -= transition_w / 2; y -= transition_h / 2; @@ -1837,32 +1843,32 @@ void TrackCanvas::draw_transitions() 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( track->show_titles() ) - strip_y += mwindow->theme->get_image("title_bg_data")->get_h(); + int strip_x = x, edit_y = y; get_transition_coords(edit, x, y, w, h); + int strip_y = y - mwindow->theme->get_image("plugin_bg_data")->get_h(); + if( track->show_assets() && track->show_titles() ) + edit_y += mwindow->theme->get_image("title_bg_data")->get_h(); + if( strip_y < edit_y ) strip_y = edit_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); @@ -2852,6 +2858,7 @@ void TrackCanvas::calculate_viewport(Track *track, double &zoom_sample, double &zoom_units) { + view_start = (double)mwindow->edl->local_session->view_start[pane->number] * mwindow->edl->local_session->zoom_sample / mwindow->edl->session->sample_rate; @@ -2861,15 +2868,23 @@ void TrackCanvas::calculate_viewport(Track *track, mwindow->edl->local_session->zoom_sample / mwindow->edl->session->sample_rate; unit_end = track->to_doubleunits(view_end); - yscale = resource_h(); - center_pixel = track->y_pixel + + int y = 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; + int has_titles = track->show_titles(); + int has_assets = track->show_assets(); + double title_bg_h = mwindow->theme->get_image("title_bg_data")->get_h(); + double asset_h = resource_h(); + double title_h = mwindow->theme->title_h; + double ys = has_assets ? asset_h : has_titles ? title_bg_h : 0; + double dy = has_titles ? + ( has_assets ? title_bg_h + asset_h/2 : title_bg_h/2) : + ( has_assets ? asset_h/2 : 0) ; + if( dy < title_h/2 ) { ys = title_h; dy = ys / 2; } + yscale = ys; + center_pixel = y + dy; + zoom_sample = mwindow->edl->local_session->zoom_sample; zoom_units = track->to_doubleunits(zoom_sample / mwindow->edl->session->sample_rate); }