remove whitespace at eol
[goodguy/history.git] / cinelerra-5.1 / cinelerra / cwindowtool.C
index 4730d81de975816b71ab68391508ba2cf40f33b7..026aa32003c605075a1929435ab5370073a57d78 100644 (file)
@@ -19,6 +19,9 @@
  *
  */
 
+#include <stdio.h>
+#include <stdint.h>
+
 #include "automation.h"
 #include "cicolors.h"
 #include "clip.h"
@@ -457,10 +460,6 @@ void CWindowCropGUI::update()
 }
 
 
-
-
-
-
 CWindowEyedropGUI::CWindowEyedropGUI(MWindow *mwindow, CWindowTool *thread)
  : CWindowToolGUI(mwindow,
        thread,
@@ -590,28 +589,27 @@ const _CVD Camera_Crv_Smooth =
        {       FloatAuto::SMOOTH,
                true,
                "tan_smooth",
-               _("\"smooth\" Curve on current Camera Keyframes")
+               N_("\"smooth\" Curve on current Camera Keyframes")
        };
 const _CVD Camera_Crv_Linear =
        {       FloatAuto::LINEAR,
                true,
                "tan_linear",
-               _("\"linear\" Curve on current Camera Keyframes")
+               N_("\"linear\" Curve on current Camera Keyframes")
        };
 const _CVD Projector_Crv_Smooth =
        {       FloatAuto::SMOOTH,
                false,
                "tan_smooth",
-               _("\"smooth\" Curve on current Projector Keyframes")
+               N_("\"smooth\" Curve on current Projector Keyframes")
        };
 const _CVD Projector_Crv_Linear =
        {       FloatAuto::LINEAR,
                false,
                "tan_linear",
-               _("\"linear\" Curve on current Projector Keyframes")
+               N_("\"linear\" Curve on current Projector Keyframes")
        };
 
-
 // Implementation Class für Keyframe Curve Mode buttons
 //
 // This button reflects the state of the "current" keyframe
@@ -639,7 +637,7 @@ CWindowCurveToggle::CWindowCurveToggle(_CVD mode, MWindow *mwindow, CWindowToolG
 {
        this->gui = gui;
        this->mwindow = mwindow;
-       set_tooltip(cfg.tooltip);
+       set_tooltip(_(cfg.tooltip));
 }
 
 void CWindowCurveToggle::check_toggle_state(FloatAuto *x, FloatAuto *y, FloatAuto *z)
@@ -675,10 +673,6 @@ int CWindowCurveToggle::handle_event()
 }
 
 
-
-
-
-
 CWindowCameraGUI::CWindowCameraGUI(MWindow *mwindow, CWindowTool *thread)
  : CWindowToolGUI(mwindow,
        thread,
@@ -1120,21 +1114,6 @@ int CWindowCameraBottom::handle_event()
 }
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 CWindowProjectorGUI::CWindowProjectorGUI(MWindow *mwindow, CWindowTool *thread)
  : CWindowToolGUI(mwindow,
        thread,
@@ -1330,44 +1309,6 @@ void CWindowProjectorGUI::update()
        }
 }
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 CWindowProjectorLeft::CWindowProjectorLeft(MWindow *mwindow, CWindowProjectorGUI *gui, int x, int y)
  : BC_Button(x, y, mwindow->theme->get_image_set("left_justify"))
 {
@@ -1576,12 +1517,6 @@ int CWindowProjectorBottom::handle_event()
 }
 
 
-
-
-
-
-
-
 CWindowMaskMode::CWindowMaskMode(MWindow *mwindow,
        CWindowToolGUI *gui, int x, int y, const char *text)
  : BC_PopupMenu(x, y, 220, text, 1)
@@ -1679,6 +1614,7 @@ int CWindowMaskDelete::handle_event()
        Track *track;
        MaskPoint *point;
        SubMask *mask;
+       int total_points = 0;
 
 // Get existing keyframe
        ((CWindowMaskGUI*)gui)->get_keyframe(track, autos, keyframe, mask, point, 0);
@@ -1705,6 +1641,8 @@ int CWindowMaskDelete::handle_event()
                        submask->points.remove_object(
                                submask->points.values[submask->points.total - 1]);
                }
+               total_points = submask->points.total;
+
 // Commit change to span of keyframes
                ((MaskAutos*)track->automation->autos[AUTOMATION_MASK])->update_parameter(&temp_keyframe);
 #else
@@ -1713,8 +1651,6 @@ int CWindowMaskDelete::handle_event()
                {
                        SubMask *submask = current->get_submask(mwindow->edl->session->cwindow_mask);
 
-
-
                        for(int i = mwindow->cwindow->gui->affected_point;
                                i < submask->points.total - 1;
                                i++)
@@ -1727,7 +1663,7 @@ int CWindowMaskDelete::handle_event()
                                submask->points.remove_object(
                                        submask->points.values[submask->points.total - 1]);
                        }
-
+                       total_points = submask->points.total;
 
                        if(current == (MaskAuto*)autos->default_auto)
                                current = (MaskAuto*)autos->first;
@@ -1735,6 +1671,9 @@ int CWindowMaskDelete::handle_event()
                                current = (MaskAuto*)NEXT;
                }
 #endif
+               if( mwindow->cwindow->gui->affected_point >= total_points )
+                       mwindow->cwindow->gui->affected_point =
+                               total_points > 0 ? total_points-1 : 0;
 
                gui->update();
                gui->update_preview();
@@ -1860,6 +1799,47 @@ int CWindowMaskNumber::handle_event()
 }
 
 
+CWindowMaskAffectedPoint::CWindowMaskAffectedPoint(MWindow *mwindow,
+       CWindowToolGUI *gui, int x, int y)
+ : BC_TumbleTextBox(gui,
+               (int64_t)mwindow->cwindow->gui->affected_point,
+               (int64_t)0, INT64_MAX, x, y, 100)
+{
+       this->mwindow = mwindow;
+       this->gui = gui;
+}
+
+CWindowMaskAffectedPoint::~CWindowMaskAffectedPoint()
+{
+}
+
+int CWindowMaskAffectedPoint::handle_event()
+{
+       int total_points = 0;
+       int affected_point = atol(get_text());
+       Track *track = mwindow->cwindow->calculate_affected_track();
+       if(track) {
+               MaskAutos *autos = (MaskAutos*)track->automation->autos[AUTOMATION_MASK];
+               MaskAuto *keyframe = (MaskAuto*)mwindow->cwindow->calculate_affected_auto(autos, 0);
+               if( keyframe ) {
+                       SubMask *mask = keyframe->get_submask(mwindow->edl->session->cwindow_mask);
+                       total_points = mask->points.size();
+               }
+       }
+       int active_point = affected_point;
+       if( affected_point >= total_points )
+               affected_point = total_points - 1;
+       else if( affected_point < 0 )
+               affected_point = 0;
+       if( active_point != affected_point )
+               update((int64_t)affected_point);
+       mwindow->cwindow->gui->affected_point = affected_point;
+       gui->update();
+       gui->update_preview();
+       return 1;
+}
+
+
 
 
 
@@ -1898,7 +1878,7 @@ int CWindowMaskFeather::handle_event()
                        mask, point, create_it);
 
        if(track)
-       {       
+       {
 #ifdef USE_KEYFRAME_SPANNING
 // Create temp keyframe
                MaskAuto temp_keyframe(mwindow->edl, autos);
@@ -1949,7 +1929,7 @@ int CWindowMaskValue::handle_event()
 #else
        int create_it = 1;
 #endif
-       
+
        mwindow->undo->update_undo_before(_("mask value"), this);
        ((CWindowMaskGUI*)gui)->get_keyframe(track, autos, keyframe,
                mask, point, create_it);
@@ -2001,6 +1981,30 @@ int CWindowMaskBeforePlugins::handle_event()
 }
 
 
+CWindowDisableOpenGLMasking::CWindowDisableOpenGLMasking(CWindowToolGUI *gui, int x, int y)
+ : BC_CheckBox(x, y, 1, _("Disable OpenGL masking"))
+{
+       this->gui = gui;
+}
+
+int CWindowDisableOpenGLMasking::handle_event()
+{
+       Track *track;
+       MaskAutos *autos;
+       MaskAuto *keyframe;
+       SubMask *mask;
+       MaskPoint *point;
+       ((CWindowMaskGUI*)gui)->get_keyframe(track, autos, keyframe, mask, point, 1);
+
+       if (keyframe) {
+               keyframe->disable_opengl_masking = get_value();
+               gui->update_preview();
+       }
+       return 1;
+}
+
+
+
 
 
 
@@ -2012,15 +2016,19 @@ CWindowMaskGUI::CWindowMaskGUI(MWindow *mwindow, CWindowTool *thread)
        thread,
        _(PROGRAM_NAME ": Mask"),
        330,
-       280)
+       310)
 {
        this->mwindow = mwindow;
        this->thread = thread;
+       number = 0;
+       active_point = 0;
+       feather = 0;
 }
 CWindowMaskGUI::~CWindowMaskGUI()
 {
        lock_window("CWindowMaskGUI::~CWindowMaskGUI");
        delete number;
+       delete active_point;
        delete feather;
        unlock_window();
 }
@@ -2044,6 +2052,11 @@ void CWindowMaskGUI::create_objects()
        add_subwindow(value = new CWindowMaskValue(mwindow, this, x + title->get_w() + margin, y));
        y += value->get_h() + margin;
        add_subwindow(delete_point = new CWindowMaskDelete(mwindow, this, x, y));
+       int x1 = x + delete_point->get_w() + 2*margin;
+       add_subwindow(title = new BC_Title(x1, y, _("Point:")));
+       x1 += title->get_w() + margin;
+       active_point = new CWindowMaskAffectedPoint(mwindow, this, x1, y);
+       active_point->create_objects();
        y += delete_point->get_h() + margin;
        add_subwindow(title = new BC_Title(x, y, _("Mask number:")));
        number = new CWindowMaskNumber(mwindow,
@@ -2067,19 +2080,16 @@ void CWindowMaskGUI::create_objects()
 
        x = 10;
        y += this->y->get_h() + margin;
-       add_subwindow(title = new BC_Title(x, y, _("Press Ctrl to move a point")));
+       add_subwindow(title = new BC_Title(x, y, _("Press Shift to move an end point")));
        y += title->get_h() + margin;
-       add_subwindow(title = new BC_Title(x, y, _("Press Alt to translate the mask")));
+       add_subwindow(title = new BC_Title(x, y, _("Press Ctrl to move a control point")));
        y += title->get_h() + margin;
-       add_subwindow(title = new BC_Title(x, y, _("Press Shift to edit bezier curve")));
-
+       add_subwindow(title = new BC_Title(x, y, _("Press Alt to translate the mask")));
        y += 30;
-//     add_subwindow(title = new BC_Title(x, y, _("Apply mask before plugins:")));
 
-       add_subwindow(this->apply_before_plugins = new CWindowMaskBeforePlugins(this,
-               10,
-               y));
-//     this->apply_before_plugins->create_objects();
+       add_subwindow(this->apply_before_plugins = new CWindowMaskBeforePlugins(this, 10, y));
+       y += this->apply_before_plugins->get_h() + margin;
+       add_subwindow(this->disable_opengl_masking = new CWindowDisableOpenGLMasking(this, 10, y));
 
        update();
        unlock_window();
@@ -2147,10 +2157,12 @@ void CWindowMaskGUI::update()
                        feather->update((int64_t)autos->get_feather(position_i, PLAY_FORWARD));
                        value->update((int64_t)autos->get_value(position_i, PLAY_FORWARD));
                        apply_before_plugins->update((int64_t)keyframe->apply_before_plugins);
+                       disable_opengl_masking->update((int64_t)keyframe->disable_opengl_masking);
                }
        }
-//printf("CWindowMaskGUI::update 1\n");
 
+//printf("CWindowMaskGUI::update 1\n");
+       active_point->update((int64_t)mwindow->cwindow->gui->affected_point);
        number->update((int64_t)mwindow->edl->session->cwindow_mask);
 
 //printf("CWindowMaskGUI::update 1\n");