X-Git-Url: https://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fcwindowgui.C;h=d9738c2cbe8c93b5989d85fd9487c6178d6604d2;hb=refs%2Fheads%2Fmaster;hp=567c9338c8f129dbd95995eae96831b6c70e88ef;hpb=b78b166faf60a1c7357f990b1e2fb0e70be29fee;p=goodguy%2Fcinelerra.git diff --git a/cinelerra-5.1/cinelerra/cwindowgui.C b/cinelerra-5.1/cinelerra/cwindowgui.C index 567c9338..d9738c2c 100644 --- a/cinelerra-5.1/cinelerra/cwindowgui.C +++ b/cinelerra-5.1/cinelerra/cwindowgui.C @@ -21,6 +21,7 @@ #include "automation.h" #include "autos.h" +#include "bccolors.h" #include "bcsignals.h" #include "canvas.h" #include "clip.h" @@ -57,6 +58,7 @@ #include "tracks.h" #include "transportque.h" #include "vtrack.h" +#include "zoombar.h" static double my_zoom_table[] = @@ -111,6 +113,8 @@ CWindowGUI::CWindowGUI(MWindow *mwindow, CWindow *cwindow) control_out_x = control_out_y = 0; translating_zoom = 0; highlighted = 0; +// *** CONTEXT_HELP *** + context_help_set_keyword("Compositor Window"); } CWindowGUI::~CWindowGUI() @@ -162,8 +166,6 @@ void CWindowGUI::create_objects() canvas = new CWindowCanvas(mwindow, this); canvas->create_objects(mwindow->edl); - canvas->use_cwindow(); - add_subwindow(timebar = new CTimeBar(mwindow, this, @@ -282,7 +284,7 @@ int CWindowGUI::button_press_event() if( current_operation == CWINDOW_NONE && mwindow->edl != 0 && canvas->get_canvas() && mwindow->edl->session->cwindow_click2play && - canvas->get_canvas()->get_cursor_over_window() ) { + canvas->get_canvas()->cursor_above() ) { switch( get_buttonpress() ) { case LEFT_BUTTON: if( !cwindow->playback_engine->is_playing_back ) { @@ -442,12 +444,13 @@ int CWindowGUI::keypress_event() keyboard_zoomout(); result = 1; break; - case 'f': - canvas->set_fullscreen(canvas->get_fullscreen() ? 0 : 1); + case 'f': { + int on = canvas->get_fullscreen() ? 0 : 1; + canvas->set_fullscreen(on, 1); result = 1; - break; + break; } case ESC: - canvas->set_fullscreen(0); + canvas->set_fullscreen(0, 1); result = 1; break; case 'x': @@ -591,6 +594,9 @@ int CWindowGUI::keypress_event() if( !result ) result = transport->keypress_event(); + if( !result ) + result = context_help_check_and_show(); + return result; } @@ -744,7 +750,7 @@ CWindowEditing::CWindowEditing(MWindow *mwindow, CWindow *cwindow) mwindow->theme->cedit_x, mwindow->theme->cedit_y, mwindow->edl->session->editing_mode, 0, // use_editing_mode - 1, // use_keyframe + 0, // use_keyframe 0, // use_splice 0, // use_overwrite 1, // use_copy @@ -758,7 +764,10 @@ CWindowEditing::CWindowEditing(MWindow *mwindow, CWindow *cwindow) 1, // use_cut 0, // use_commerical 0, // use_goto - 1) // use_clk2play + 1, // use_clk2play + 1, // use_scope + 0, // use_gang_tracks + 0) // use_timecode { this->mwindow = mwindow; this->cwindow = cwindow; @@ -823,6 +832,7 @@ void panel_btn(set_editing_mode,(int mode), set_editing_mode(mode)) void panel_btn(set_auto_keyframes,(int v), set_auto_keyframes(v)) void panel_btn(set_span_keyframes,(int v), set_span_keyframes(v)) void panel_btn(set_labels_follow_edits,(int v), set_labels_follow_edits(v)) +void panel_btn(set_gang_tracks,(int v), set_gang_tracks(v)) CWindowMeters::CWindowMeters(MWindow *mwindow, @@ -970,6 +980,22 @@ void CWindowTransport::goto_end() gui->lock_window("CWindowTransport::goto_end 2"); } +CWindowCanvasToggleControls::CWindowCanvasToggleControls(CWindowCanvas *canvas) + : BC_MenuItem(calculate_text(canvas->get_controls())) +{ + this->canvas = canvas; +} +int CWindowCanvasToggleControls::handle_event() +{ + canvas->toggle_controls(); + set_text(calculate_text(canvas->get_controls())); + return 1; +} + +const char *CWindowCanvasToggleControls::calculate_text(int controls) +{ + return !controls ? _("Show controls") : _("Hide controls"); +} CWindowCanvas::CWindowCanvas(MWindow *mwindow, CWindowGUI *gui) @@ -983,6 +1009,19 @@ CWindowCanvas::CWindowCanvas(MWindow *mwindow, CWindowGUI *gui) last_xscroll = 0; last_yscroll = 0; last_zoom = 0; + controls = 0; +} + +void CWindowCanvas::create_objects(EDL *edl) +{ + Canvas::create_objects(edl); + canvas_menu->add_item(new CanvasPopupAuto(this)); + canvas_menu->add_item(new CanvasPopupResetCamera(this)); + canvas_menu->add_item(new CanvasPopupResetProjector(this)); + canvas_menu->add_item(new CanvasPopupCameraKeyframe(this)); + canvas_menu->add_item(new CanvasPopupProjectorKeyframe(this)); + canvas_menu->add_item(controls = new CWindowCanvasToggleControls(this)); + fullscreen_menu->add_item(new CanvasPopupAuto(this)); } void CWindowCanvas::status_event() @@ -999,19 +1038,19 @@ void CWindowCanvas::update_zoom(int x, int y, float zoom) mwindow->edl->session->cwindow_scrollbars = use_scrollbars; } -int CWindowCanvas::set_fullscreen(int on) +int CWindowCanvas::set_fullscreen(int on, int unlock) { int ret = 0; if( on && !get_fullscreen() ) { last_xscroll = get_xscroll(); last_yscroll = get_yscroll(); last_zoom = get_zoom(); - Canvas::set_fullscreen(1); - zoom_auto(); + Canvas::set_fullscreen(1, unlock); +// zoom_auto(); ret = 1; } if( !on && get_fullscreen() ) { - Canvas::set_fullscreen(0); + Canvas::set_fullscreen(0, unlock); gui->zoom_panel->update(get_zoom()); update_zoom(last_xscroll, last_yscroll, last_zoom); gui->update_canvas(); @@ -1062,6 +1101,25 @@ int CWindowCanvas::do_scroll(EDL *edl, float cursor_x, float cursor_y) return 1; } +int CWindowCanvas::scope_on() +{ + EditPanelScopeDialog *scope_dialog = gui->edit_panel->scope_dialog; + if( !scope_dialog || !scope_dialog->scope_gui ) return 0; + if( scope_dialog->scope_gui->use_refresh ) return 0; + if( scope_dialog->scope_gui->use_release ) return 0; + return scope_dialog->running(); +} + +void CWindowCanvas::draw_scope(VFrame *output, int refresh) +{ + if( !output ) return; + EditPanelScopeDialog *scope_dialog = gui->edit_panel->scope_dialog; + if( !scope_dialog || !scope_dialog->scope_gui ) return; + if( scope_dialog->scope_gui->use_refresh && !refresh ) return; + if( scope_dialog->scope_gui->use_release && refresh >= 0 ) return; + scope_dialog->process(output); +} + void CWindowCanvas::draw_refresh(int flush) { BC_WindowBase *window = get_canvas(); @@ -2344,45 +2402,22 @@ int CWindowCanvas::do_eyedrop(int &rerender, int button_press, int draw) gui->eyedrop_visible = 1; } -// Decompression coefficients straight out of jpeglib -#define V_TO_R 1.40200 -#define V_TO_G -0.71414 - -#define U_TO_G -0.34414 -#define U_TO_B 1.77200 - -#define GET_COLOR(type, components, max, do_yuv) \ -{ \ +#define GET_COLOR(type, components, max, do_yuv) { \ type *row = (type*)(refresh_frame->get_rows()[i]) + \ j * components; \ float red = (float)*row++ / max; \ float green = (float)*row++ / max; \ float blue = (float)*row++ / max; \ if( do_yuv ) \ - { \ - float r = red + V_TO_R * (blue - 0.5); \ - float g = red + U_TO_G * (green - 0.5) + V_TO_G * (blue - 0.5); \ - float b = red + U_TO_B * (green - 0.5); \ - mwindow->edl->local_session->red += r; \ - mwindow->edl->local_session->green += g; \ - mwindow->edl->local_session->blue += b; \ - if( r > mwindow->edl->local_session->red_max ) mwindow->edl->local_session->red_max = r; \ - if( g > mwindow->edl->local_session->green_max ) mwindow->edl->local_session->green_max = g; \ - if( b > mwindow->edl->local_session->blue_max ) mwindow->edl->local_session->blue_max = b; \ - } \ - else \ - { \ - mwindow->edl->local_session->red += red; \ - mwindow->edl->local_session->green += green; \ - mwindow->edl->local_session->blue += blue; \ - if( red > mwindow->edl->local_session->red_max ) mwindow->edl->local_session->red_max = red; \ - if( green > mwindow->edl->local_session->green_max ) mwindow->edl->local_session->green_max = green; \ - if( blue > mwindow->edl->local_session->blue_max ) mwindow->edl->local_session->blue_max = blue; \ - } \ + YUV::yuv.yuv_to_rgb_f(red, green, blue, red, green-0.5, blue-0.5); \ + mwindow->edl->local_session->red += red; \ + mwindow->edl->local_session->green += green; \ + mwindow->edl->local_session->blue += blue; \ + if( red > mwindow->edl->local_session->red_max ) mwindow->edl->local_session->red_max = red; \ + if( green > mwindow->edl->local_session->green_max ) mwindow->edl->local_session->green_max = green; \ + if( blue > mwindow->edl->local_session->blue_max ) mwindow->edl->local_session->blue_max = blue; \ } - - mwindow->edl->local_session->red = 0; mwindow->edl->local_session->green = 0; mwindow->edl->local_session->blue = 0; @@ -2613,6 +2648,12 @@ void CWindowCanvas::reset_keyframe(int do_camera) z_keyframe->set_value(1); gui->sync_parameters(CHANGE_PARAMS, 1, 1); + MWindowGUI *mgui = mwindow->gui; + mgui->lock_window("CWindowCanvas::reset_keyframe"); + gui->mwindow->edl->local_session->reset_view_limits(); + gui->mwindow->gui->zoombar->update_autozoom(); + mgui->unlock_window(); + mwindow->save_backup(); } } @@ -3019,9 +3060,13 @@ int CWindowCanvas::test_bezier(int button_press, redraw = 1; } - float x_val = gui->affected_x->get_value(); - float y_val = gui->affected_y->get_value(); - float z_val = gui->affected_z->get_value(); + CWindowToolGUI *tool_gui = !gui->tool_panel ? 0 : gui->tool_panel->tool_gui; + int edge = tool_gui ? tool_gui->edge : 0; + int span = tool_gui ? tool_gui->span : 0; + + float x_val = gui->affected_x->get_value(edge); + float y_val = gui->affected_y->get_value(edge); + float z_val = gui->affected_z->get_value(edge); if( gui->translating_zoom ) { float z = gui->center_z + (cursor_y - gui->y_origin) / yS(128); @@ -3031,7 +3076,7 @@ int CWindowCanvas::test_bezier(int button_press, redraw = 1; redraw_canvas = 1; } - gui->affected_z->set_value(z); + gui->affected_z->bump_value(z, edge, span); } else { float dx = cursor_x - gui->x_origin; @@ -3042,8 +3087,8 @@ int CWindowCanvas::test_bezier(int button_press, } float x = gui->center_x + dx; float y = gui->center_y + dy; - gui->affected_x->set_value(x); - gui->affected_y->set_value(y); + gui->affected_x->bump_value(x, edge, span); + gui->affected_y->bump_value(y, edge, span); if( !EQUIV(x_val, x) || !EQUIV(y_val, y) ) { rerender = 1; redraw = 1; @@ -3312,6 +3357,9 @@ int CWindowCanvas::button_release_event() { int result = 0; const char *undo_label = 0; + BC_WindowBase *window = get_canvas(); + if( window && !window->get_video_on() ) + draw_scope(refresh_frame, -1); switch( gui->current_operation ) { case CWINDOW_SCROLL: @@ -3394,7 +3442,7 @@ void CWindowCanvas::toggle_controls() gui->resize_event(gui->get_w(), gui->get_h()); } -int CWindowCanvas::get_cwindow_controls() +int CWindowCanvas::get_controls() { return mwindow->session->cwindow_controls; }