X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Ftimebar.C;h=8d8bfc7c6a58f7deeac606fba58980831e092370;hp=7d25fb2c3195e37563ad58db99cefa8df4427a2c;hb=376dbcef804a17c74f0db851064e7947a3d0a5f5;hpb=73dc5bda76607b34aba5e2d4551aafe50889cf7d diff --git a/cinelerra-5.1/cinelerra/timebar.C b/cinelerra-5.1/cinelerra/timebar.C index 7d25fb2c..8d8bfc7c 100644 --- a/cinelerra-5.1/cinelerra/timebar.C +++ b/cinelerra-5.1/cinelerra/timebar.C @@ -527,32 +527,19 @@ double TimeBar::get_edl_length() int TimeBar::get_preview_pixels(int &x1, int &x2) { - x1 = 0; - x2 = 0; - + x1 = 0; x2 = get_w(); get_edl_length(); - - if( get_edl() ) { - if( !EQUIV(edl_length, 0) ) { - if( get_edl()->local_session->preview_end <= 0 || - get_edl()->local_session->preview_end > edl_length ) - get_edl()->local_session->preview_end = edl_length; - if( get_edl()->local_session->preview_start > - get_edl()->local_session->preview_end ) - get_edl()->local_session->preview_start = 0; - x1 = (int)(get_edl()->local_session->preview_start / time_per_pixel); - x2 = (int)(get_edl()->local_session->preview_end / time_per_pixel); - } - else { - x1 = 0; - x2 = get_w(); + EDL *edl = get_edl(); + if( edl && !EQUIV(edl_length, 0) ) { + double preview_start = edl->local_session->preview_start; + double preview_end = edl->local_session->preview_end; + if( preview_end < 0 || preview_end > edl_length ) + preview_end = edl_length; + if( preview_end >= preview_start ) { + x1 = (int)(preview_start / time_per_pixel); + x2 = (int)(preview_end / time_per_pixel); } } -// printf("TimeBar::get_preview_pixels %f %f %d %d\n", -// get_edl()->local_session->preview_start, -// get_edl()->local_session->preview_end, -// x1, -// x2); return 0; } @@ -586,6 +573,8 @@ int TimeBar::test_preview(int buttonpress) if( buttonpress ) { current_operation = TIMEBAR_DRAG_RIGHT; start_position = get_edl()->local_session->preview_end; + if( start_position < 0 || start_position > edl_length ) + start_position = edl_length; start_cursor_x = x; } else if( get_cursor() != RIGHT_CURSOR ) @@ -599,6 +588,8 @@ int TimeBar::test_preview(int buttonpress) current_operation = TIMEBAR_DRAG_CENTER; starting_start_position = get_edl()->local_session->preview_start; starting_end_position = get_edl()->local_session->preview_end; + if( starting_end_position < 0 || starting_end_position > edl_length ) + starting_end_position = edl_length; start_cursor_x = x; } if( get_cursor() != HSEPARATE_CURSOR ) @@ -617,26 +608,30 @@ int TimeBar::test_preview(int buttonpress) int TimeBar::move_preview(int &redraw) { int result = 0, x = get_relative_cursor_x(); - - if( current_operation == TIMEBAR_DRAG_LEFT ) { + switch( current_operation ) { + case TIMEBAR_DRAG_LEFT: { get_edl()->local_session->preview_start = start_position + time_per_pixel * (x - start_cursor_x); - CLAMP(get_edl()->local_session->preview_start, - 0, - get_edl()->local_session->preview_end); + double preview_end = get_edl()->local_session->preview_end; + if( preview_end < 0 || preview_end > edl_length ) + preview_end = get_edl()->local_session->preview_end = edl_length; + CLAMP(get_edl()->local_session->preview_start, 0, preview_end); result = 1; - } - else - if( current_operation == TIMEBAR_DRAG_RIGHT ) { - get_edl()->local_session->preview_end = + break; } + case TIMEBAR_DRAG_RIGHT: { + double preview_end = get_edl()->local_session->preview_end = start_position + time_per_pixel * (x - start_cursor_x); - CLAMP(get_edl()->local_session->preview_end, - get_edl()->local_session->preview_start, - edl_length); + double preview_start = get_edl()->local_session->preview_start; + if( preview_end >= edl_length && !preview_start ) { + get_edl()->local_session->preview_end = -1; + if( preview_start > preview_end ) + preview_start = get_edl()->local_session->preview_start = preview_end; + } + else + CLAMP(get_edl()->local_session->preview_end, preview_start, edl_length); result = 1; - } - else - if( current_operation == TIMEBAR_DRAG_CENTER ) { + break; } + case TIMEBAR_DRAG_CENTER: { double dt = time_per_pixel * (x - start_cursor_x); get_edl()->local_session->preview_start = starting_start_position + dt; get_edl()->local_session->preview_end = starting_end_position + dt; @@ -650,6 +645,7 @@ int TimeBar::move_preview(int &redraw) get_edl()->local_session->preview_end = edl_length; } result = 1; + break; } } //printf("TimeBar::move_preview %d %d\n", __LINE__, current_operation);