fix ruler, cwdw info popup updates, reset camera/projector shortcuts, findobj tweak...
authorGood Guy <good1.2guy@gmail.com>
Thu, 26 Apr 2018 22:23:13 +0000 (16:23 -0600)
committerGood Guy <good1.2guy@gmail.com>
Thu, 26 Apr 2018 22:23:13 +0000 (16:23 -0600)
cinelerra-5.1/cinelerra/canvas.C
cinelerra-5.1/cinelerra/cwindowgui.C
cinelerra-5.1/cinelerra/cwindowtool.C
cinelerra-5.1/cinelerra/cwindowtool.h
cinelerra-5.1/cinelerra/mwindowgui.C
cinelerra-5.1/doc/shortcuts.html
cinelerra-5.1/guicast/bcwindowbase.C
cinelerra-5.1/guicast/keys.h
cinelerra-5.1/info/plugins.txt
cinelerra-5.1/plugins/findobj/findobj.C
cinelerra-5.1/plugins/findobj/findobj.h

index aabe440de3c470bfd47a1865e0dfc732c7893a29..85d4e6f51ce453286e7d2636fbf22d00d021d7ce 100644 (file)
@@ -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;
 }
index d7bcf789f5fc79595be3dc7ce376679f9217e0a1..b387bfe19a9e0ec146688b60be2e893f622de4f9 100644 (file)
@@ -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 ) {
index fefe2d4ca28b259e365c4c9489098fbb92c43a5c..e5e6b2adf43f660e843e5e5aa9002d260b8e0ee7 100644 (file)
@@ -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);
 }
 
index 9361034200c5977c233984da6fe3d38c36049565..92fa72b9e6251fe01c899148a184624e2d9b7906 100644 (file)
@@ -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;
 };
 
 
index 1ac33aafa235c7f2c02a646b9e7d184b5f78c64c..566afd6c27d12f21d96c12c8fee2540b0fe6b7fe 100644 (file)
@@ -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;
        }
index 89e8b5164ffdc88bddfb4167346f0540cd5dfa98..38e0120817d0da3f9d380edf264b4813ace51531 100644 (file)
        <tr>
                <td height="26" align="left"><font face="Liberation Serif" size=4><br></font></td>
                <td align="left"><font face="Liberation Serif" size=4>Save Backup</font></td>
-               <td align="left"><font face="Liberation Serif" size=4><br></font></td>
+               <td align="left"><font face="Liberation Serif" size=4>'b'</font></td>
                <td align="left"><font face="Liberation Serif" size=4>Save auto-backup file “backup.xml”</font></td>
        </tr>
        <tr>
index 5b1331061d321bfb3dec45a55a8bacef288ff9fd..a14c2eef960b4582b9e3836681c9f0b4e2020965 100644 (file)
@@ -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
index c48ee590f066650365de6f2997a29885e5d16daf..e580a84ffb56f842d66e9d0e7ef45f2edaad452d 100644 (file)
 #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
index c4de14a159b6998044d73d115cb8848d4fab07fb..e1854c1bf611feb2981bceae030d05347156d1f3 100644 (file)
@@ -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,
index 737601e2d204198b36bf711311a92ff7837145bd..20f117bffcb9665c965a0966f2a341ebd43d34ec 100644 (file)
@@ -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() ) {
index 75a80fb262a4ec53009fd2fddec961a6f1df94ae..d27ac056315b361d7bdf7a80aee536c36a33219a 100644 (file)
@@ -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);