X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fplaytransport.C;h=6fc55d63d376f12fefd1d68dff011764b8344e2f;hb=38cb4182e11e57fc426bede3825e825e9d61433b;hp=a426ac79336e6509c098c5ce475413985bffad05;hpb=4784a8d70bc39f9b7e467f93304d2df3f23fd2df;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/playtransport.C b/cinelerra-5.1/cinelerra/playtransport.C index a426ac79..6fc55d63 100644 --- a/cinelerra-5.1/cinelerra/playtransport.C +++ b/cinelerra-5.1/cinelerra/playtransport.C @@ -193,12 +193,13 @@ int PlayTransport::keypress_event() int toggle_audio = subwindow->shift_down() ? 1 : 0; int use_inout = subwindow->ctrl_down() ? 1 : 0; + int alt_key = subwindow->alt_down() ? 1 : 0; int command = -1, prev_command = engine->command->command; using_inout = use_inout; subwindow->unlock_window(); + result = 0; switch( key ) { - case 'k': case KPINS: command = STOP; break; case KPPLUS: command = FAST_REWIND; break; case KP6: command = NORMAL_REWIND; break; @@ -221,12 +222,38 @@ int PlayTransport::keypress_event() break; } break; - default: - result = 0; + case 'u': case 'U': + if( alt_key ) command = SINGLE_FRAME_REWIND; + break; + case 'i': case 'I': + if( alt_key ) command = SLOW_REWIND; + break; + case 'o': case 'O': + if( alt_key ) command = NORMAL_REWIND; + break; + case 'p': case 'P': + if( alt_key ) command = FAST_REWIND; + break; + case 'j': case 'J': + if( alt_key ) command = SINGLE_FRAME_FWD; + break; + case 'k': case 'K': + if( alt_key ) command = SLOW_FWD; + break; + case 'l': case 'L': + if( alt_key ) command = NORMAL_FWD; + break; + case ':': case ';': + if( alt_key ) command = FAST_FWD; + break; + case 'm': case 'M': + if( alt_key ) command = STOP; break; } - if( command >= 0 ) + if( command >= 0 ) { handle_transport(command, 0, use_inout, 1, toggle_audio); + result = 1; + } subwindow->lock_window("PlayTransport::keypress_event 5"); return result; @@ -255,7 +282,6 @@ void PlayTransport::handle_transport(int command, int resume = 0; //printf("PlayTransport::handle_transport 1 %d\n", command); int prev_command = engine->command->command; - int prev_direction = engine->command->get_direction(); int prev_single_frame = engine->command->single_frame(); int prev_audio = engine->command->audio_toggle ? !prev_single_frame : prev_single_frame; @@ -283,7 +309,7 @@ void PlayTransport::handle_transport(int command, // Resume or change direction switch( prev_command ) { default: - engine->que->send_command(STOP, CHANGE_NONE, 0, 0, 0, 0); + engine->que->send_command(STOP, CHANGE_NONE, 0, 0); engine->interrupt_playback(wait_tracking); resume = 1; // fall through @@ -293,36 +319,23 @@ void PlayTransport::handle_transport(int command, case SINGLE_FRAME_REWIND: // Start from scratch engine->que->send_command(command, CHANGE_NONE, get_edl(), - 1, resume, use_inout, toggle_audio); + 1, resume, use_inout, toggle_audio, + mwindow->preferences->forward_render_displacement); break; } break; // Commands that stop case STOP: - do_stop = 1; - break; - case REWIND: case GOTO_END: - engine->que->send_command(STOP, CHANGE_NONE, 0, 0, 0, 0); - engine->interrupt_playback(wait_tracking); - break; + do_stop = 1; + break; } if( do_stop ) { - engine->que->send_command(STOP, CHANGE_NONE, 0, 0, 0, 0); + engine->que->send_command(STOP, CHANGE_NONE, 0, 0); engine->interrupt_playback(wait_tracking); -// This is necessary to get an OpenGL output buffer -// printf("PlayTransport::handle_transport 2 update_refresh=%d prev_command=%d prev_direction=%d\n", -// update_refresh, prev_command, prev_direction); - if( !prev_single_frame && update_refresh && - prev_command != STOP && prev_command != COMMAND_NONE ) { - int command = (prev_direction == PLAY_FORWARD) ? - SINGLE_FRAME_REWIND : SINGLE_FRAME_FWD; - engine->que->send_command(command, - CHANGE_NONE, get_edl(), 1, 0, 0); - } } } @@ -507,7 +520,7 @@ void PlayTransport::change_position(double position) // stop transport if( prev_command != STOP && prev_command != COMMAND_NONE && prev_command != SINGLE_FRAME_FWD && prev_command != SINGLE_FRAME_REWIND ) { - engine->que->send_command(STOP, CHANGE_NONE, 0, 0, 0, 0); + engine->que->send_command(STOP, CHANGE_NONE, 0, 0); engine->interrupt_playback(0); } mwindow->gui->lock_window("PlayTransport::change_position"); @@ -522,7 +535,7 @@ void PlayTransport::change_position(double position) case NORMAL_FWD: case FAST_FWD: engine->que->send_command(prev_command, CHANGE_NONE, - get_edl(), 1, 1, using_inout); + get_edl(), 1, 1, using_inout, 0); } }