mask ctrpt correction, on_track select fix, alt-wheel ptr focus, mask help chkbox
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / cwindowtool.C
index 295f5c107786c5b99bbb4614dd73e4a671fe6abe..8470f35487533b10bf5ee694a090a00d1b855068 100644 (file)
@@ -1499,18 +1499,25 @@ CWindowMaskOnTrack::~CWindowMaskOnTrack()
 
 int CWindowMaskOnTrack::handle_event()
 {
-       int k = get_number();
+       CWindowMaskItem *track_item = 0;
+       int k = get_number(), track_id = -1;
 //printf("selected %d = %s\n", k, k<0 ? "()" : track_items[k]->get_text());
-       CWindowMaskItem *track_item = k >= 0 ? (CWindowMaskItem *)track_items[k] : 0;
-       Track *track = track_item ? mwindow->edl->tracks->get_track_by_id(track_item->id) : 0;
-       int track_id = track_item && track && track->record ? track_item->id : -1;
+       if( k >= 0 ) {
+               track_item = (CWindowMaskItem *)track_items[k];
+               Track *track = track_item ? mwindow->edl->tracks->get_track_by_id(track_item->id) : 0;
+               if( track && track->record ) track_id = track->get_id();
+       }
+       else
+               track_id = mwindow->cwindow->mask_track_id;
        set_back_color(track_id >= 0 ?
                gui->get_resources()->text_background :
                gui->get_resources()->text_background_disarmed);
-       gui->mask_on_track->update(track_item ? track_item->get_text() : "");
+       if( mwindow->cwindow->mask_track_id != track_id )
+               gui->mask_on_track->update(track_item ? track_item->get_text() : "");
        mwindow->cwindow->mask_track_id = track_id;
        mwindow->edl->local_session->solo_track_id = -1;
        gui->mask_solo_track->update(0);
+       gui->update();
        gui->update_preview(1);
        return 1;
 }
@@ -1573,6 +1580,7 @@ int CWindowMaskTrackTumbler::do_event(int dir)
        mwindow->cwindow->mask_track_id = track_item ? track_item->id : -1;
        mwindow->edl->local_session->solo_track_id = -1;
        gui->mask_solo_track->update(0);
+       gui->update();
        gui->update_preview(1);
        return 1;
 }
@@ -1739,7 +1747,7 @@ CWindowMaskUnclear::CWindowMaskUnclear(MWindow *mwindow,
 {
        this->mwindow = mwindow;
        this->gui = gui;
-       set_tooltip(_("Show mask"));
+       set_tooltip(_("Show/Hide mask"));
 }
 
 int CWindowMaskUnclear::handle_event()
@@ -1978,6 +1986,27 @@ int CWindowMaskFocus::handle_event()
        return 1;
 }
 
+CWindowMaskHelp::CWindowMaskHelp(MWindow *mwindow, CWindowMaskGUI *gui, int x, int y)
+ : BC_CheckBox(x, y, 0, _("Help"))
+{
+       this->mwindow = mwindow;
+       this->gui = gui;
+       set_tooltip(_("Show help text"));
+}
+
+CWindowMaskHelp::~CWindowMaskHelp()
+{
+}
+
+int CWindowMaskHelp::handle_event()
+{
+       gui->helped = get_value();
+       gui->resize_window(gui->get_w(),
+               gui->helped ? gui->help_h : gui->help_y);
+       gui->update();
+       return 1;
+}
+
 CWindowMaskDrawMarkers::CWindowMaskDrawMarkers(MWindow *mwindow, CWindowMaskGUI *gui, int x, int y)
  : BC_CheckBox(x, y, gui->markers, _("Markers"))
 {
@@ -2362,11 +2391,11 @@ int CWindowMaskClrMask::handle_event()
        if( track ) {
                mwindow->undo->update_undo_before(_("del masks"), 0);
                ((MaskAutos*)track->automation->autos[AUTOMATION_MASK])->clear_all();
-               gui->update();
-               gui->update_preview();
                mwindow->undo->update_undo_after(_("del masks"), LOAD_AUTOMATION);
        }
 
+       gui->update();
+       gui->update_preview(1);
        return 1;
 }
 
@@ -2390,7 +2419,7 @@ int CWindowMaskGangFeather::handle_event()
 
 CWindowMaskGUI::CWindowMaskGUI(MWindow *mwindow, CWindowTool *thread)
  : CWindowToolGUI(mwindow, thread,
-       _(PROGRAM_NAME ": Mask"), 400, 660)
+       _(PROGRAM_NAME ": Mask"), 430, 680)
 {
        this->mwindow = mwindow;
        this->thread = thread;
@@ -2451,7 +2480,7 @@ void CWindowMaskGUI::create_objects()
        add_subwindow(title = new BC_Title(x, y, _("Select:")));
        int bw = 0, bh = 0;
        BC_CheckBox::calculate_extents(this, &bw, &bh);
-       int bdx = bw + margin;
+       int bdx = bw + 2*margin;
        x2 = x1;
        for( int i=0; i<SUBMASKS; x2+=bdx, ++i ) {
                int v = i == mwindow->edl->session->cwindow_mask ? 1 : 0;
@@ -2533,20 +2562,23 @@ void CWindowMaskGUI::create_objects()
        add_subwindow(this->apply_before_plugins = new CWindowMaskBeforePlugins(this, 10, y));
        y += this->apply_before_plugins->get_h();
        add_subwindow(this->disable_opengl_masking = new CWindowDisableOpenGLMasking(this, 10, y));
-       y += this->disable_opengl_masking->get_h() + margin;
-       add_subwindow(bar = new BC_Bar(x, y, get_w()-2*x));
-       y += bar->get_h() + margin;
-
-       y += margin;
-       add_subwindow(title = new BC_Title(x, y, _(
+       add_subwindow(help = new CWindowMaskHelp(mwindow, this, del_x, y));
+       y += this->disable_opengl_masking->get_h() + 2*margin;
+       help_y = y;
+       add_subwindow(new BC_Bar(x, y, get_w()-2*x));
+       y += bar->get_h() + 2*margin;
+       add_subwindow(new BC_Title(x, y, _(
                "Shift+LMB: move an end point\n"
                "Ctrl+LMB: move a control point\n"
                "Alt+LMB: to drag translate the mask\n"
                "Shift+Key Delete to delete the point\n"
-               "Wheel Up/Dn: rotate around pointer\n"
-               "Shift+Wheel Up/Dn: scale around pointer\n"
+               "Wheel Up/Dn: rotate around focal point\n"
+               "Shift+Wheel Up/Dn: scale around focal point\n"
+               "Alt/Shift+Wheel: rotate/scale around pointer\n"
                "Shift+MMB: Toggle focus center at pointer")));
+       help_h = get_h();
        update();
+       resize_window(get_w(), help_y);
        unlock_window();
 }
 
@@ -2605,6 +2637,7 @@ void CWindowMaskGUI::update()
        MaskPoint *point;
 //printf("CWindowMaskGUI::update 1\n");
        get_keyframe(track, autos, keyframe, mask, point, 0);
+       mwindow->cwindow->mask_track_id = track ? track->get_id() : -1;
        mask_on_track->set_back_color(!track || track->record ?
                get_resources()->text_background :
                get_resources()->text_background_disarmed);
@@ -2684,9 +2717,15 @@ void CWindowMaskGUI::handle_event()
 
 void CWindowMaskGUI::set_focused(int v, float cx, float cy)
 {
+       CWindowGUI *cgui = mwindow->cwindow->gui;
+       cgui->unlock_window();
+       lock_window("CWindowMaskGUI::set_focused");
+       if( focused != v )
+               focus->update(focused = v);
        focus_x->update(cx);
        focus_y->update(cy);
-       focus->update(focused = v);
+       unlock_window();
+       cgui->lock_window("CWindowCanvas::set_focused");
 }
 
 void CWindowMaskGUI::update_buttons(MaskAuto *keyframe, int k)