add libdav1d codec, add remap_a/v_codec option keywords
[goodguy/cinelerra.git] / cinelerra-5.1 / cinelerra / cwindowgui.C
index 935a5f9fc9798ee6611e5348945dba722a9bd27a..50938bd3760fa23690750c589d62622651077dc4 100644 (file)
@@ -1756,6 +1756,8 @@ int CWindowCanvas::do_mask(int &redraw, int &rerender,
                if( draw && mask_gui && mask_gui->focused ) {
                        float fx = atof(mask_gui->focus_x->get_text());
                        float fy = atof(mask_gui->focus_y->get_text());
+                       fx = (fx - half_track_w) * projector_z + projector_x;
+                       fy = (fy - half_track_h) * projector_z + projector_y;
                        output_to_canvas(mwindow->edl, 0, fx, fy);
                        float r = bmax(cvs_win->get_w(), cvs_win->get_h());
                        float d = 0.005*r;
@@ -1785,6 +1787,8 @@ int CWindowCanvas::do_mask(int &redraw, int &rerender,
                        cx /= n;  cy /= n;
                        if( !mask_gui->focused )
                                mask_gui->set_focused(0, cx, cy);
+                       cx = (cx - half_track_w) * projector_z + projector_x;
+                       cy = (cy - half_track_h) * projector_z + projector_y;
                        output_to_canvas(mwindow->edl, 0, cx, cy);
                        float r = bmax(cvs_win->get_w(), cvs_win->get_h());
                        float d = 0.007*r;
@@ -2094,8 +2098,8 @@ int CWindowCanvas::do_mask(int &redraw, int &rerender,
                                        MaskPoints &points = sub_mask->points;
                                        for( int i=0; i<points.size(); ++i ) {
                                                MaskPoint *point = points[i];
-                                               if( mode == 0 || mode == 2) point->x += dx;
-                                               if( mode == 1 || mode == 2) point->y += dy;
+                                               if( mode == MASK_SCALE_X || mode == MASK_SCALE_XY ) point->x += dx;
+                                               if( mode == MASK_SCALE_Y || mode == MASK_SCALE_XY ) point->y += dy;
                                        }
                                }
                                gui->x_origin = mask_cursor_x;
@@ -2133,8 +2137,10 @@ int CWindowCanvas::do_mask(int &redraw, int &rerender,
                                double ds = accel/64., dt = accel*M_PI/360.;
                                double scale = button_no == WHEEL_UP ? 1.+ds : 1.-ds;
                                int mode = mask_gui->scale_mode;
-                               double xscale = !rotate && (mode == 0 || mode == 2 ) ? scale : 1.;
-                               double yscale = !rotate && (mode == 1 || mode == 2 ) ? scale : 1.;
+                               double xscale = !rotate && (mode == MASK_SCALE_X ||
+                                       mode == MASK_SCALE_XY ) ? scale : 1.;
+                               double yscale = !rotate && (mode == MASK_SCALE_Y ||
+                                       mode == MASK_SCALE_XY ) ? scale : 1.;
                                double theta = button_no == WHEEL_UP ? dt : -dt;
                                if( rotate ? theta==0 : scale==1 ) break;
                                float st = sin(theta), ct = cos(theta);
@@ -2271,9 +2277,23 @@ int CWindowCanvas::do_mask(int &redraw, int &rerender,
 
 int CWindowCanvas::do_mask_focus()
 {
-       CWindowMaskGUI *mask_gui = (CWindowMaskGUI*) gui->tool_panel->tool_gui;
+       Track *track = gui->cwindow->calculate_affected_track();
+       int64_t position = track->to_units(
+               mwindow->edl->local_session->get_selectionstart(1),
+               0);
+       float projector_x, projector_y, projector_z;
+       track->automation->get_projector(
+               &projector_x, &projector_y, &projector_z,
+               position, PLAY_FORWARD);
        float cx = get_cursor_x(), cy = get_cursor_y();
        canvas_to_output(mwindow->edl, 0, cx, cy);
+       projector_x += mwindow->edl->session->output_w / 2;
+       projector_y += mwindow->edl->session->output_h / 2;
+       float half_track_w = (float)track->track_w / 2;
+       float half_track_h = (float)track->track_h / 2;
+       cx = (cx - projector_x) / projector_z + half_track_w;
+       cy = (cy - projector_y) / projector_z + half_track_h;
+       CWindowMaskGUI *mask_gui = (CWindowMaskGUI*) gui->tool_panel->tool_gui;
        mask_gui->set_focused(1, cx, cy);
        return 1;
 }
@@ -3532,5 +3552,10 @@ int CWindowCanvas::get_cwindow_controls()
        return mwindow->session->cwindow_controls;
 }
 
-
+int CWindowCanvas::get_clear_color()
+{
+       int color = mwindow->edl->session->cwindow_clear_color;
+       if( color < 0 ) color = get_canvas()->get_bg_color();
+       return color;
+}