From: Good Guy Date: Thu, 26 Apr 2018 22:23:13 +0000 (-0600) Subject: fix ruler, cwdw info popup updates, reset camera/projector shortcuts, findobj tweak... X-Git-Url: http://git.cinelerra-gg.org/git/?p=goodguy%2Fhistory.git;a=commitdiff_plain;h=8d1277ccc789cf008150742da9fe66b21183541c fix ruler, cwdw info popup updates, reset camera/projector shortcuts, findobj tweak, doc updates --- diff --git a/cinelerra-5.1/cinelerra/canvas.C b/cinelerra-5.1/cinelerra/canvas.C index aabe440d..85d4e6f5 100644 --- a/cinelerra-5.1/cinelerra/canvas.C +++ b/cinelerra-5.1/cinelerra/canvas.C @@ -1169,7 +1169,7 @@ int CanvasPopupSize::handle_event() CanvasPopupResetCamera::CanvasPopupResetCamera(Canvas *canvas) - : BC_MenuItem(_("Reset camera")) + : BC_MenuItem(_("Reset camera"), "F11", KEY_F11) { this->canvas = canvas; } @@ -1182,7 +1182,7 @@ int CanvasPopupResetCamera::handle_event() CanvasPopupResetProjector::CanvasPopupResetProjector(Canvas *canvas) - : BC_MenuItem(_("Reset projector")) + : BC_MenuItem(_("Reset projector"), "F12", KEY_F12) { this->canvas = canvas; } diff --git a/cinelerra-5.1/cinelerra/cwindowgui.C b/cinelerra-5.1/cinelerra/cwindowgui.C index d7bcf789..b387bfe1 100644 --- a/cinelerra-5.1/cinelerra/cwindowgui.C +++ b/cinelerra-5.1/cinelerra/cwindowgui.C @@ -571,6 +571,8 @@ int CWindowGUI::keypress_event() case KEY_F8: cwindow_operation = CWINDOW_EYEDROP; break; case KEY_F9: cwindow_operation = CWINDOW_TOOL_WINDOW; break; case KEY_F10: cwindow_operation = CWINDOW_TITLESAFE; break; + case KEY_F11: canvas->reset_camera(); break; + case KEY_F12: canvas->reset_projector(); break; } if( cwindow_operation >= 0 ) { diff --git a/cinelerra-5.1/cinelerra/cwindowtool.C b/cinelerra-5.1/cinelerra/cwindowtool.C index fefe2d4c..e5e6b2ad 100644 --- a/cinelerra-5.1/cinelerra/cwindowtool.C +++ b/cinelerra-5.1/cinelerra/cwindowtool.C @@ -83,6 +83,7 @@ void CWindowTool::start_tool(int operation) //printf("CWindowTool::start_tool 1\n"); if(current_tool != operation) { + int previous_tool = current_tool; current_tool = operation; switch(operation) { @@ -104,6 +105,10 @@ void CWindowTool::start_tool(int operation) case CWINDOW_RULER: new_gui = new CWindowRulerGUI(mwindow, this); break; + case CWINDOW_PROTECT: + mwindow->edl->session->tool_window = 0; + gui->composite_panel->operation[CWINDOW_TOOL_WINDOW]->update(0); + // fall thru default: result = 1; stop_tool(); @@ -120,13 +125,11 @@ void CWindowTool::start_tool(int operation) output_lock->lock("CWindowTool::start_tool"); this->tool_gui = new_gui; tool_gui->create_objects(); - - if(mwindow->edl->session->tool_window && - mwindow->session->show_cwindow) tool_gui->show_window(); - tool_gui->lock_window("CWindowTool::start_tool 1"); - tool_gui->flush(); - tool_gui->unlock_window(); - + if( previous_tool == CWINDOW_PROTECT || previous_tool == CWINDOW_NONE ) { + mwindow->edl->session->tool_window = 1; + gui->composite_panel->operation[CWINDOW_TOOL_WINDOW]->update(1); + } + update_show_window(); // Signal thread to run next tool GUI input_lock->unlock(); @@ -305,6 +308,8 @@ int CWindowToolGUI::keypress_event() case KEY_F8: case KEY_F9: case KEY_F10: + case KEY_F11: + case KEY_F12: resend_event(thread->gui); result = 1; } @@ -2305,30 +2310,32 @@ CWindowRulerGUI::~CWindowRulerGUI() void CWindowRulerGUI::create_objects() { - int x = 10, y = 10; + int x = 10, y = 10, x1 = 100; BC_Title *title; lock_window("CWindowRulerGUI::create_objects"); add_subwindow(title = new BC_Title(x, y, _("Current:"))); - add_subwindow(current = new BC_Title(x + title->get_w() + 10, y, "")); + add_subwindow(current = new BC_TextBox(x1, y, 200, 1, "")); y += title->get_h() + 5; - add_subwindow(title = new BC_Title(x, y, _("Point 1:"))); - add_subwindow(point1 = new BC_Title(x + title->get_w() + 10, y, "")); + add_subwindow(point1 = new BC_TextBox(x1, y, 200, 1, "")); y += title->get_h() + 5; - add_subwindow(title = new BC_Title(x, y, _("Point 2:"))); - add_subwindow(point2 = new BC_Title(x + title->get_w() + 10, y, "")); + add_subwindow(point2 = new BC_TextBox(x1, y, 200, 1, "")); + y += title->get_h() + 5; + add_subwindow(title = new BC_Title(x, y, _("Deltas:"))); + add_subwindow(deltas = new BC_TextBox(x1, y, 200, 1, "")); y += title->get_h() + 5; - add_subwindow(title = new BC_Title(x, y, _("Distance:"))); - add_subwindow(distance = new BC_Title(x + title->get_w() + 10, y, "")); + add_subwindow(distance = new BC_TextBox(x1, y, 200, 1, "")); y += title->get_h() + 5; add_subwindow(title = new BC_Title(x, y, _("Angle:"))); - add_subwindow(angle = new BC_Title(x + title->get_w() + 10, y, "")); + add_subwindow(angle = new BC_TextBox(x1, y, 200, 1, "")); y += title->get_h() + 10; char string[BCTEXTLEN]; - sprintf(string, _("Press Ctrl to lock ruler to the\nnearest 45%c angle."), 0xb0); + sprintf(string, + _("Press Ctrl to lock ruler to the\nnearest 45%c%c angle."), + 0xc2, 0xb0); // degrees utf add_subwindow(title = new BC_Title(x, y, string)); @@ -2343,42 +2350,27 @@ void CWindowRulerGUI::create_objects() void CWindowRulerGUI::update() { - double distance_value = - sqrt(SQR(mwindow->edl->session->ruler_x2 - mwindow->edl->session->ruler_x1) + - SQR(mwindow->edl->session->ruler_y2 - mwindow->edl->session->ruler_y1)); - double angle_value = atan((mwindow->edl->session->ruler_y2 - mwindow->edl->session->ruler_y1) / - (mwindow->edl->session->ruler_x2 - mwindow->edl->session->ruler_x1)) * - 360 / - 2 / - M_PI; - - if(EQUIV(distance_value, 0.0)) - { - angle_value = 0.0; - } - else - if(angle_value < 0) - { - angle_value *= -1; - } - char string[BCTEXTLEN]; - sprintf(string, "%d, %d", - mwindow->session->cwindow_output_x, - mwindow->session->cwindow_output_y); + int cx = mwindow->session->cwindow_output_x; + int cy = mwindow->session->cwindow_output_y; + sprintf(string, "%d, %d", cx, cy); current->update(string); - sprintf(string, "%.0f, %.0f", - mwindow->edl->session->ruler_x1, - mwindow->edl->session->ruler_y1); + double x1 = mwindow->edl->session->ruler_x1; + double y1 = mwindow->edl->session->ruler_y1; + sprintf(string, "%.0f, %.0f", x1, y1); point1->update(string); - sprintf(string, "%.0f, %.0f", - mwindow->edl->session->ruler_x2, - mwindow->edl->session->ruler_y2); + double x2 = mwindow->edl->session->ruler_x2; + double y2 = mwindow->edl->session->ruler_y2; + sprintf(string, "%.0f, %.0f", x2, y2); point2->update(string); - - sprintf(string, _("%0.01f pixels"), distance_value); + double dx = x2 - x1, dy = y2 - y1; + sprintf(string, "%s%.0f, %s%.0f", (dx>=0? "+":""), dx, (dy>=0? "+":""), dy); + deltas->update(string); + double d = sqrt(dx*dx + dy*dy); + sprintf(string, _("%0.01f pixels"), d); distance->update(string); - sprintf(string, "%0.02f %c", angle_value, 0xb0); + double a = d > 0 ? (atan2(-dy, dx) * 180/M_PI) : 0.; + sprintf(string, "%0.02f %c%c", a, 0xc2, 0xb0); angle->update(string); } diff --git a/cinelerra-5.1/cinelerra/cwindowtool.h b/cinelerra-5.1/cinelerra/cwindowtool.h index 93610342..92fa72b9 100644 --- a/cinelerra-5.1/cinelerra/cwindowtool.h +++ b/cinelerra-5.1/cinelerra/cwindowtool.h @@ -443,11 +443,12 @@ public: // Update the gui void handle_event(); - BC_Title *current; - BC_Title *point1; - BC_Title *point2; - BC_Title *distance; - BC_Title *angle; + BC_TextBox *current; + BC_TextBox *point1; + BC_TextBox *point2; + BC_TextBox *deltas; + BC_TextBox *distance; + BC_TextBox *angle; }; diff --git a/cinelerra-5.1/cinelerra/mwindowgui.C b/cinelerra-5.1/cinelerra/mwindowgui.C index 1ac33aaf..566afd6c 100644 --- a/cinelerra-5.1/cinelerra/mwindowgui.C +++ b/cinelerra-5.1/cinelerra/mwindowgui.C @@ -1303,6 +1303,8 @@ int MWindowGUI::keypress_event() case KEY_F8: case KEY_F9: case KEY_F10: + case KEY_F11: + case KEY_F12: resend_event(mwindow->cwindow->gui); return 1; } diff --git a/cinelerra-5.1/doc/shortcuts.html b/cinelerra-5.1/doc/shortcuts.html index 89e8b516..38e01208 100644 --- a/cinelerra-5.1/doc/shortcuts.html +++ b/cinelerra-5.1/doc/shortcuts.html @@ -141,7 +141,7 @@
Save Backup -
+ 'b' Save auto-backup file “backup.xml” diff --git a/cinelerra-5.1/guicast/bcwindowbase.C b/cinelerra-5.1/guicast/bcwindowbase.C index 5b133106..a14c2eef 100644 --- a/cinelerra-5.1/guicast/bcwindowbase.C +++ b/cinelerra-5.1/guicast/bcwindowbase.C @@ -1266,6 +1266,8 @@ locking_message = event->xclient.message_type; case XK_F8: key_pressed = KEY_F8; break; case XK_F9: key_pressed = KEY_F9; break; case XK_F10: key_pressed = KEY_F10; break; + case XK_F11: key_pressed = KEY_F11; break; + case XK_F12: key_pressed = KEY_F12; break; case XK_Menu: key_pressed = KPMENU; break; /* menu */ // remote control diff --git a/cinelerra-5.1/guicast/keys.h b/cinelerra-5.1/guicast/keys.h index c48ee590..e580a84f 100644 --- a/cinelerra-5.1/guicast/keys.h +++ b/cinelerra-5.1/guicast/keys.h @@ -125,6 +125,8 @@ #define KEY_F8 308 #define KEY_F9 309 #define KEY_F10 310 +#define KEY_F11 311 +#define KEY_F12 312 #define RETURN 13 #define NEWLINE 13 diff --git a/cinelerra-5.1/info/plugins.txt b/cinelerra-5.1/info/plugins.txt index c4de14a1..e1854c1b 100644 --- a/cinelerra-5.1/info/plugins.txt +++ b/cinelerra-5.1/info/plugins.txt @@ -270,11 +270,13 @@ F_drawgrid: Draws a colored grid on the input video. F_edgedetect: Detects and draws edge. F_elbg: Apply posterize effect, using the ELBG algorithm. F_eq: Adjusts brightness, contrast, gamma and saturation. +F_entropy: Measure video frames entropy. F_erosion: Applies erosion effect. F_fade: Fade in/out input video. F_fftfilt: Apply arbitrary expressions to pixels in frequency domain. F_field: Extract a field from the input video. F_fieldorder: Set the field order. +F_fillborders: Fill borders of the input video. F_floodfill: Fill area of the same color with another color. F_framerate: Upsamples or downsamples progressive source between specified frame rates. @@ -312,6 +314,8 @@ F_noise: Adds noise to the video. Through the settings you can select the variables of the noise (strength, flag and seed). +F_normalize: Normalize RGB video. +F_owdenoise: Denoises using wavelets. F_oscilloscope: 2D video oscilloscope. Useful to measure spatial impulse, step responses, and chroma delays. F_owndenoise: Denoises using wavelets. @@ -338,6 +342,7 @@ F_roberts: Apply roberts cross operator which performs a simple/quick 2-D F_rotate: Rotates the input image. F_sab: Applies shape adaptive blur. F_separatefields: Split input video frames into fields. +F_setrange: Force color range for the output video frame. F_showinfo: Show textual information for each video frame. F_shuffleframes: Shuffles video frames. F_shuffleplanes: Shuffles video planes. @@ -360,6 +365,7 @@ F_uspp: Applies Ultra Simple/Slow Post-processing filter. F_vaguedenoiser: Applies a Wavelet based Denoiser. F_vectorscope: Video vectorscope. F_vflip: Flips the input video vertically. +F_vfrdet: Variable frame rate detect filter. F_vignette: Makes or reverses a vignette effect. Through the settings you can set the circle center position on a X-Y axis,choose the angle, @@ -375,6 +381,7 @@ F_zoompan: Applies Zoom & Pan effect. # F_abench: Benchmark part of a filtergraph. F_acompressor: Audio compressor. +F_acontrast: Simple audio dynamic range compression/expansion filter. F_acrusher: Reduces audio bit resolution. F_adelay: Delays one or more audio channels. F_aecho: Adds echoing to the audio. @@ -405,6 +412,8 @@ F_crossfeed: Apply headphone crossfeed which blends the left and right order to produce more speaker like sound. F_crystalizer: Simple Expand Audio Dynamic Range filter. F_dcshift: Applies a DC shift to the audio. +F_drmeter: Measure audio dynamic range where setting window length in + seconds is used to split audio into segments of equal length. F_dyaudnorm: Dynamic Audio Normalizer. When using this plugin, be sure to “attach effect” to all audio tracks by dragging the plugin to the 1st audio track and then right mouse @@ -429,8 +438,12 @@ F_haas: Apply Haas Stereo Enhancer for a more natural sounding pan effect applied to mono signals it give some directionality and stretches its stereo image F_highpass: Applies a high-pass filter with 3dB point frequency. +F_hilbert: Generate a Hilbert transform FIR coefficients. F_loudnorm: EBU R128 loudness normalization. F_lowpass: Applies a low-pass filter with 3dB point frequency. +F_mcompand: Multiband compress or expand audiodynamic range. The input audio + is divided into bands which is like the crossover of a loudspeaker, + resulting in flat frequency response when absent compander action. F_silenceremove: Removes silence. F_sine: Generate sine wave audio signal. F_stereotools: Applies various stereo tools. When using this plugin, diff --git a/cinelerra-5.1/plugins/findobj/findobj.C b/cinelerra-5.1/plugins/findobj/findobj.C index 737601e2..20f117bf 100644 --- a/cinelerra-5.1/plugins/findobj/findobj.C +++ b/cinelerra-5.1/plugins/findobj/findobj.C @@ -335,6 +335,11 @@ void FindObjMain::draw_quad(VFrame *vframe, draw_line(vframe, x2, y2, x3, y3); draw_line(vframe, x3, y3, x4, y4); draw_line(vframe, x4, y4, x1, y1); +} + +void FindObjMain::draw_point(VFrame *vframe, int x1, int y1) +{ + int r = bmin(vframe->get_w(), vframe->get_h()) / 200 + 1; for( int i=r; --i>0; ) draw_circle(vframe, x1, y1, i); } @@ -843,6 +848,8 @@ int FindObjMain::process_buffer(VFrame **frame, int64_t start_position, double f scene->set_pixel_color(BLUE); draw_quad(scene, match_x1, match_y1, match_x2, match_y2, match_x3, match_y3, match_x4, match_y4); + scene->set_pixel_color(LTGREEN); + draw_point(scene, match_x1, match_y1); } if( gui_open() ) { diff --git a/cinelerra-5.1/plugins/findobj/findobj.h b/cinelerra-5.1/plugins/findobj/findobj.h index 75a80fb2..d27ac056 100644 --- a/cinelerra-5.1/plugins/findobj/findobj.h +++ b/cinelerra-5.1/plugins/findobj/findobj.h @@ -168,8 +168,9 @@ public: OverlayFrame *overlayer; VFrame *object, *scene, *replace; + static void draw_point(VFrame *vframe,int x1, int y1); static void draw_line(VFrame *vframe, int x1, int y1, int x2, int y2); - void draw_quad(VFrame *vframe, + static void draw_quad(VFrame *vframe, int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4); static void draw_rect(VFrame *vframe, int x1, int y1, int x2, int y2);