double TimeBar::get_edl_length()
{
- edl_length = 0;
-
- if( get_edl() ) {
-//printf("TimeBar::get_edl_length 1 %f\n", get_edl()->tracks->total_length());
- edl_length = get_edl()->tracks->total_length();
- }
-
-//printf("TimeBar::get_edl_length 2\n");
- if( !EQUIV(edl_length, 0) ) {
-//printf("TimeBar::get_edl_length 3\n");
- time_per_pixel = edl_length / get_w();
-//printf("TimeBar::get_edl_length 4\n");
- }
- else {
- time_per_pixel = 0;
- }
-//printf("TimeBar::get_edl_length 5\n");
-
+ edl_length = get_edl() ? get_edl()->tracks->total_length() : 0;
+ int w1 = get_w()-1;
+ time_per_pixel = !EQUIV(edl_length, 0) ? edl_length/w1 : w1;
return 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;
}
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 )
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 )
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;
get_edl()->local_session->preview_end = edl_length;
}
result = 1;
+ break; }
}
//printf("TimeBar::move_preview %d %d\n", __LINE__, current_operation);