X-Git-Url: https://git.cinelerra-gg.org/git/?p=goodguy%2Fcinelerra.git;a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fvwindowgui.C;h=7c1d51e0a0df80a702a4fd34d5cc526055f4eed1;hp=dfbffff0b7bbc1ae580304d6ff62e775298e793b;hb=b78b166faf60a1c7357f990b1e2fb0e70be29fee;hpb=7fd85fb66168f6b518c5f2d73e04036e87faa0e1 diff --git a/cinelerra-5.1/cinelerra/vwindowgui.C b/cinelerra-5.1/cinelerra/vwindowgui.C index dfbffff0..7c1d51e0 100644 --- a/cinelerra-5.1/cinelerra/vwindowgui.C +++ b/cinelerra-5.1/cinelerra/vwindowgui.C @@ -31,6 +31,7 @@ #include "edl.h" #include "edlsession.h" #include "filesystem.h" +#include "file.h" #include "filexml.h" #include "fonts.h" #include "keys.h" @@ -67,11 +68,7 @@ VWindowGUI::VWindowGUI(MWindow *mwindow, VWindow *vwindow) mwindow->session->vwindow_y, mwindow->session->vwindow_w, mwindow->session->vwindow_h, - 100, - 100, - 1, - 1, - 0) // Hide it + xS(100), yS(100), 1, 1, 0) // Hide it { this->mwindow = mwindow; this->vwindow = vwindow; @@ -86,7 +83,7 @@ VWindowGUI::VWindowGUI(MWindow *mwindow, VWindow *vwindow) VWindowGUI::~VWindowGUI() { - vwindow->playback_engine->interrupt_playback(1); + vwindow->stop_playback(1); sources.remove_all_objects(); labels.remove_all_objects(); delete canvas; @@ -135,7 +132,7 @@ void VWindowGUI::draw_wave() delete cache; delete canvas->refresh_frame; canvas->refresh_frame = vframe; - canvas->draw_refresh(1); + canvas->refresh(1); } void VWindowGUI::change_source(EDL *edl, const char *title) @@ -241,8 +238,18 @@ void VWindowGUI::create_objects() canvas = new VWindowCanvas(mwindow, this); canvas->create_objects(mwindow->edl); canvas->use_vwindow(); - - + char vsplash_path[BCTEXTLEN]; + int vsplash_len = sizeof(vsplash_path)-1; + snprintf(vsplash_path, vsplash_len, "%s/vsplash.png", File::get_cindat_path()); + VFrame *vsplash = VFramePng::vframe_png(vsplash_path); + if( vsplash ) { + BC_WindowBase *vcanvas = canvas->get_canvas(); + vcanvas->draw_vframe(vsplash, + 0,0, vcanvas->get_w(), vcanvas->get_h(), + 0,0, vsplash->get_w(), vsplash->get_h(), 0); + vcanvas->flash(1); + delete vsplash; + } //printf("VWindowGUI::create_objects 1\n"); add_subwindow(timebar = new VTimeBar(mwindow, this, @@ -344,47 +351,39 @@ int VWindowGUI::close_event() int VWindowGUI::keypress_event() { int result = 0; - switch(get_keypress()) - { - case 'w': - case 'W': - close_event(); + switch( get_keypress() ) { + case 'w': + case 'W': + close_event(); + result = 1; + break; + case 'z': + mwindow->undo_entry(this); + break; + case 'Z': + mwindow->redo_entry(this); + break; + case 'f': + canvas->set_fullscreen(canvas->get_fullscreen() ? 0 : 1); + break; + case ESC: + canvas->set_fullscreen(0); + break; + case KEY_F1: + case KEY_F2: + case KEY_F3: + case KEY_F4: + if( ctrl_down() && shift_down() ) { + resend_event(mwindow->gui); result = 1; break; - case 'z': - mwindow->undo_entry(this); - break; - case 'Z': - mwindow->redo_entry(this); - break; - case 'f': - unlock_window(); - if(mwindow->session->vwindow_fullscreen) - canvas->stop_fullscreen(); - else - canvas->start_fullscreen(); - lock_window("VWindowGUI::keypress_event 1"); - break; - case ESC: - unlock_window(); - if(mwindow->session->vwindow_fullscreen) - canvas->stop_fullscreen(); - lock_window("VWindowGUI::keypress_event 2"); - break; + } } - if(!result) result = transport->keypress_event(); + if( !result ) + result = transport->keypress_event(); return result; } -void VWindowGUI::stop_transport(const char *lock_msg) -{ - if( !transport->is_stopped() ) { - if( lock_msg ) unlock_window(); - transport->handle_transport(STOP, 1, 0, 0); - if( lock_msg ) lock_window(lock_msg); - } -} - int VWindowGUI::button_press_event() { if( vwindow->get_edl() != 0 && canvas->get_canvas() && @@ -457,7 +456,7 @@ void VWindowGUI::drag_motion() int need_highlight = cursor_above() && get_cursor_over_window() ? 1 : 0; if( highlighted == need_highlight ) return; highlighted = need_highlight; - canvas->draw_refresh(); + canvas->refresh(1); } int VWindowGUI::drag_stop() @@ -467,7 +466,7 @@ int VWindowGUI::drag_stop() if( highlighted && mwindow->session->current_operation == DRAG_ASSET ) { highlighted = 0; - canvas->draw_refresh(); + canvas->refresh(1); unlock_window(); Indexable *indexable = @@ -485,6 +484,14 @@ int VWindowGUI::drag_stop() return 0; } +void VWindowGUI::stop_transport() +{ + if( !transport->is_stopped() ) { + unlock_window(); + transport->handle_transport(STOP, 1); + lock_window("VWindowGUI::panel_stop_transport"); + } +} void VWindowGUI::update_meters() { @@ -539,8 +546,6 @@ VWindowEditing::VWindowEditing(MWindow *mwindow, VWindow *vwindow) 0, // use_keyframe 1, // use_splice 1, // use_overwrite - 0, // use_lift - 0, // use_extract 1, // use_copy 0, // use_paste 0, // use_undo @@ -562,155 +567,146 @@ VWindowEditing::~VWindowEditing() { } -void VWindowEditing::copy_selection() +#define relock_vm(s) \ + vwindow->gui->unlock_window(); \ + mwindow->gui->lock_window("VWindowEditing::" s) +#define relock_mv(s) \ + mwindow->gui->unlock_window(); \ + vwindow->gui->lock_window("VWindowEditing::" s) + +double VWindowEditing::get_position() { - vwindow->copy(subwindow->shift_down()); + EDL *edl = vwindow->get_edl(); + double position = !edl ? 0 : edl->local_session->get_selectionstart(1); + return position; } -void VWindowEditing::splice_selection() +void VWindowEditing::set_position(double position) { - if(vwindow->get_edl()) - { - mwindow->gui->lock_window("VWindowEditing::splice_selection"); - mwindow->splice(vwindow->get_edl(), subwindow->shift_down()); - mwindow->gui->unlock_window(); + EDL *edl = vwindow->get_edl(); + if( !edl ) return; + if( get_position() != position ) { + if( position < 0 ) position = 0; + edl->local_session->set_selectionstart(position); + edl->local_session->set_selectionend(position); + vwindow->update_position(); } } -void VWindowEditing::overwrite_selection() +void VWindowEditing::set_click_to_play(int v) { - if(vwindow->get_edl()) - { - mwindow->gui->lock_window("VWindowEditing::overwrite_selection"); - mwindow->overwrite(vwindow->get_edl(), subwindow->shift_down()); - mwindow->gui->unlock_window(); - } + click2play->update(v); + relock_vm("set_click_to_play"); + mwindow->edl->session->vwindow_click2play = v; + mwindow->update_vwindow(); + relock_mv("set_click_to_play"); } -void VWindowEditing::toggle_label() +void VWindowEditing::panel_stop_transport() { - if(vwindow->get_edl()) - { - EDL *edl = vwindow->get_edl(); - edl->labels->toggle_label(edl->local_session->get_selectionstart(1), - edl->local_session->get_selectionend(1)); - vwindow->gui->timebar->update(1); - } + vwindow->gui->stop_transport(); } -void VWindowEditing::prev_label(int cut) +void VWindowEditing::panel_toggle_label() { - if(vwindow->get_edl()) - { - EDL *edl = vwindow->get_edl(); - vwindow->gui->unlock_window(); - vwindow->playback_engine->interrupt_playback(1); - vwindow->gui->lock_window("VWindowEditing::prev_label"); + if( !vwindow->get_edl() ) return; + EDL *edl = vwindow->get_edl(); + edl->labels->toggle_label(edl->local_session->get_selectionstart(1), + edl->local_session->get_selectionend(1)); + vwindow->gui->timebar->update(1); +} - Label *current = edl->labels->prev_label( - edl->local_session->get_selectionstart(1)); +void VWindowEditing::panel_next_label(int cut) +{ + if( !vwindow->get_edl() ) return; + vwindow->interrupt_playback(1); + EDL *edl = vwindow->get_edl(); + Label *current = edl->labels->next_label( + edl->local_session->get_selectionstart(1)); + double position = current ? current->position : + edl->tracks->total_length(); + edl->local_session->set_selectionstart(position); + edl->local_session->set_selectionend(position); + vwindow->update_position(); + vwindow->gui->timebar->update(1); +} - if(!current) - { - edl->local_session->set_selectionstart(0); - edl->local_session->set_selectionend(0); - vwindow->update_position(CHANGE_NONE, 0, 1, 0); - vwindow->gui->timebar->update(1); - } - else - { - edl->local_session->set_selectionstart(current->position); - edl->local_session->set_selectionend(current->position); - vwindow->update_position(CHANGE_NONE, 0, 1, 0); - vwindow->gui->timebar->update(1); - } - } +void VWindowEditing::panel_prev_label(int cut) +{ + if( !vwindow->get_edl() ) return; + vwindow->interrupt_playback(1); + + EDL *edl = vwindow->get_edl(); + Label *current = edl->labels->prev_label( + edl->local_session->get_selectionstart(1)); + double position = !current ? 0 : current->position; + edl->local_session->set_selectionstart(position); + edl->local_session->set_selectionend(position); + vwindow->update_position(); + vwindow->gui->timebar->update(1); } -void VWindowEditing::next_label(int cut) +void VWindowEditing::panel_prev_edit(int cut) {} // not used +void VWindowEditing::panel_next_edit(int cut) {} // not used + +void VWindowEditing::panel_copy_selection() { - if(vwindow->get_edl()) - { - EDL *edl = vwindow->get_edl(); - Label *current = edl->labels->next_label( - edl->local_session->get_selectionstart(1)); - if(!current) - { - vwindow->gui->unlock_window(); - vwindow->playback_engine->interrupt_playback(1); - vwindow->gui->lock_window("VWindowEditing::next_label 1"); - - double position = edl->tracks->total_length(); - edl->local_session->set_selectionstart(position); - edl->local_session->set_selectionend(position); - vwindow->update_position(CHANGE_NONE, 0, 1, 0); - vwindow->gui->timebar->update(1); - } - else - { - vwindow->gui->unlock_window(); - vwindow->playback_engine->interrupt_playback(1); - vwindow->gui->lock_window("VWindowEditing::next_label 2"); - - edl->local_session->set_selectionstart(current->position); - edl->local_session->set_selectionend(current->position); - vwindow->update_position(CHANGE_NONE, 0, 1, 0); - vwindow->gui->timebar->update(1); - } - } + vwindow->copy(vwindow->gui->shift_down()); } -double VWindowEditing::get_position() +void VWindowEditing::panel_overwrite_selection() { - EDL *edl = vwindow->get_edl(); - double position = !edl ? 0 : edl->local_session->get_selectionstart(1); - return position; + if( !vwindow->get_edl() ) return; + relock_vm("overwrite_selection"); + mwindow->overwrite(vwindow->get_edl(), vwindow->gui->shift_down()); + relock_mv("overwrite_selection"); } -void VWindowEditing::set_position(double position) +void VWindowEditing::panel_splice_selection() { - EDL *edl = vwindow->get_edl(); - if( !edl ) return; - if( get_position() != position ) { - if( position < 0 ) position = 0; - edl->local_session->set_selectionstart(position); - edl->local_session->set_selectionend(position); - vwindow->update_position(CHANGE_NONE, 0, 1); - } + if( !vwindow->get_edl() ) return; + relock_vm("splice_selection"); + mwindow->splice(vwindow->get_edl(), vwindow->gui->shift_down()); + relock_mv("splice_selection"); } -void VWindowEditing::set_inpoint() +void VWindowEditing::panel_set_inpoint() { vwindow->set_inpoint(); } -void VWindowEditing::set_outpoint() +void VWindowEditing::panel_set_outpoint() { vwindow->set_outpoint(); } -void VWindowEditing::unset_inoutpoint() +void VWindowEditing::panel_unset_inoutpoint() { vwindow->unset_inoutpoint(); } - -void VWindowEditing::to_clip() +void VWindowEditing::panel_to_clip() { EDL *edl = vwindow->get_edl(); if( !edl ) return; mwindow->to_clip(edl, _("viewer window: "), subwindow->shift_down()); } +// not used +void VWindowEditing::panel_cut() {} +void VWindowEditing::panel_paste() {} +void VWindowEditing::panel_fit_selection() {} +void VWindowEditing::panel_fit_autos(int all) {} +void VWindowEditing::panel_set_editing_mode(int mode) {} +void VWindowEditing::panel_set_auto_keyframes(int v) {} +void VWindowEditing::panel_set_span_keyframes(int v) {} +void VWindowEditing::panel_set_labels_follow_edits(int v) {} + + VWindowSource::VWindowSource(MWindow *mwindow, VWindowGUI *vwindow, int x, int y) - : BC_PopupTextBox(vwindow, - &vwindow->sources, - "", - x, - y, - 200, - 200) + : BC_PopupTextBox(vwindow, &vwindow->sources, "", + x, y, xS(200), yS(200)) { this->mwindow = mwindow; this->vwindow = vwindow; @@ -811,11 +807,16 @@ void VWindowCanvas::zoom_resize_window(float percentage) gui->resize_event(new_w, new_h); } +void VWindowCanvas::zoom_auto() +{ + EDL *edl = gui->vwindow->get_edl(); + if(!edl) edl = mwindow->edl; + set_zoom(edl, 0); +} + void VWindowCanvas::close_source() { - gui->unlock_window(); - gui->vwindow->playback_engine->interrupt_playback(1); - gui->lock_window("VWindowCanvas::close_source"); + gui->vwindow->interrupt_playback(1); gui->vwindow->delete_source(1, 1); } @@ -824,37 +825,31 @@ void VWindowCanvas::draw_refresh(int flush) { EDL *edl = gui->vwindow->get_edl(); - if(!get_canvas()->get_video_on()) get_canvas()->clear_box(0, 0, get_canvas()->get_w(), get_canvas()->get_h()); - if(!get_canvas()->get_video_on() && refresh_frame && edl) - { - float in_x1, in_y1, in_x2, in_y2; - float out_x1, out_y1, out_x2, out_y2; - get_transfers(edl, - in_x1, in_y1, in_x2, in_y2, - out_x1, out_y1, out_x2, out_y2); + if( !get_canvas()->get_video_on() ) { + int cw = get_canvas()->get_w(), ch = get_canvas()->get_h(); + get_canvas()->clear_box(0, 0, cw, ch); + int ow = edl ? get_output_w(edl) : 0; + int oh = edl ? get_output_h(edl) : 0; + if( ow > 0 && oh > 0 && refresh_frame ) { + float in_x1, in_y1, in_x2, in_y2; + float out_x1, out_y1, out_x2, out_y2; + get_transfers(edl, + in_x1, in_y1, in_x2, in_y2, + out_x1, out_y1, out_x2, out_y2); // input scaled from session to refresh frame coordinates - int ow = get_output_w(edl); - int oh = get_output_h(edl); - int rw = refresh_frame->get_w(); - int rh = refresh_frame->get_h(); - float xs = (float)rw / ow; - float ys = (float)rh / oh; - in_x1 *= xs; in_x2 *= xs; - in_y1 *= ys; in_y2 *= ys; - get_canvas()->draw_vframe(refresh_frame, - (int)out_x1, - (int)out_y1, - (int)(out_x2 - out_x1), - (int)(out_y2 - out_y1), - (int)in_x1, - (int)in_y1, - (int)(in_x2 - in_x1), - (int)(in_y2 - in_y1), + int rw = refresh_frame->get_w(); + int rh = refresh_frame->get_h(); + float xs = (float)rw / ow; + float ys = (float)rh / oh; + in_x1 *= xs; in_x2 *= xs; + in_y1 *= ys; in_y2 *= ys; + get_canvas()->draw_vframe(refresh_frame, + (int)out_x1, (int)out_y1, + (int)(out_x2 - out_x1), (int)(out_y2 - out_y1), + (int)in_x1, (int)in_y1, + (int)(in_x2 - in_x1), (int)(in_y2 - in_y1), 0); - } - - if(!get_canvas()->get_video_on()) - { + } draw_overlays(); get_canvas()->flash(flush); } @@ -878,13 +873,3 @@ void VWindowCanvas::draw_overlays() } } -int VWindowCanvas::get_fullscreen() -{ - return mwindow->session->vwindow_fullscreen; -} - -void VWindowCanvas::set_fullscreen(int value) -{ - mwindow->session->vwindow_fullscreen = value; -} -