X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fcinelerra%2Fcwindowgui.C;h=73c11dc5cca985735f44b0239af095aba5f2a2d4;hb=198530fac4797a9338e91f342939468efffa4eb2;hp=8df8e594961325ba6218a77ce99a449a436f3812;hpb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/cinelerra/cwindowgui.C b/cinelerra-5.1/cinelerra/cwindowgui.C index 8df8e594..73c11dc5 100644 --- a/cinelerra-5.1/cinelerra/cwindowgui.C +++ b/cinelerra-5.1/cinelerra/cwindowgui.C @@ -1369,15 +1369,16 @@ int CWindowCanvas::do_ruler(int draw, } -static inline bool test_bbox(int cx, int cy, int tx, int ty) +static inline double line_dist(float cx,float cy, float tx,float ty) { - return (llabs(cx-tx) < (CONTROL_W/2) && llabs(cy-ty) < (CONTROL_H/2)); + double dx = tx-cx, dy = ty-cy; + return sqrt(dx*dx + dy*dy); } -static inline double line_dist(float cx,float cy, float tx,float ty) +static inline bool test_bbox(int cx, int cy, int tx, int ty) { - int dx = tx-cx, dy = ty-cy; - return sqrt(dx*dx + dy*dy); +// printf("test_bbox %d,%d - %d,%d = %f\n",cx,cy,tx,ty,line_dist(cx,cy,tx,ty)); + return (llabs(cx-tx) < CONTROL_W/2 && llabs(cy-ty) < CONTROL_H/2); } @@ -1459,15 +1460,14 @@ int CWindowCanvas::do_mask(int &redraw, int &rerender, // Get position of cursor relative to mask - float cursor_x = get_cursor_x(); - float cursor_y = get_cursor_y(); - canvas_to_output(mwindow->edl, 0, cursor_x, cursor_y); + float cursor_x = get_cursor_x(), cursor_y = get_cursor_y(); + float mask_cursor_x = cursor_x, mask_cursor_y = cursor_y; + canvas_to_output(mwindow->edl, 0, mask_cursor_x, mask_cursor_y); projector_x += mwindow->edl->session->output_w / 2; projector_y += mwindow->edl->session->output_h / 2; - - float mask_cursor_x = (cursor_x - projector_x) / projector_z + half_track_w; - float mask_cursor_y = (cursor_y - projector_y) / projector_z + half_track_h; + mask_cursor_x = (mask_cursor_x - projector_x) / projector_z + half_track_w; + mask_cursor_y = (mask_cursor_y - projector_y) / projector_z + half_track_h; // Fix cursor origin if(button_press) { @@ -1551,7 +1551,7 @@ int CWindowCanvas::do_mask(int &redraw, int &rerender, y = (y - half_track_h) * projector_z + projector_y; // Test new point addition if(button_press) { - float line_distance = line_dist(x,y, cursor_x,cursor_y); + float line_distance = line_dist(x,y, mask_cursor_x,mask_cursor_y); //printf("CWindowCanvas::do_mask 1 x=%f cursor_x=%f y=%f cursor_y=%f %f %f %d, %d\n", // x, cursor_x, y, cursor_y, line_distance, shortest_line_distance, shortest_point1, shortest_point2); @@ -1568,10 +1568,10 @@ int CWindowCanvas::do_mask(int &redraw, int &rerender, float canvas_x = (x0 - half_track_w) * projector_z + projector_x; float canvas_y = (y0 - half_track_h) * projector_z + projector_y; // Test first point - if(gui->shift_down()) { + if(gui->ctrl_down()) { float control_x = (x1 - half_track_w) * projector_z + projector_x; float control_y = (y1 - half_track_h) * projector_z + projector_y; - float distance = line_dist(control_x,control_y, cursor_x,cursor_y); + float distance = line_dist(control_x,control_y, mask_cursor_x,mask_cursor_y); if(distance < selected_control_point_distance) { selected_point = i; @@ -1580,7 +1580,7 @@ int CWindowCanvas::do_mask(int &redraw, int &rerender, } } else { - if(!gui->ctrl_down()) { + if(!gui->shift_down()) { if(test_bbox(cursor_x, cursor_y, canvas_x, canvas_y)) { selected_point = i; } @@ -1593,10 +1593,10 @@ int CWindowCanvas::do_mask(int &redraw, int &rerender, canvas_x = (x3 - half_track_w) * projector_z + projector_x; canvas_y = (y3 - half_track_h) * projector_z + projector_y; - if(gui->shift_down()) { + if(gui->ctrl_down()) { float control_x = (x2 - half_track_w) * projector_z + projector_x; float control_y = (y2 - half_track_h) * projector_z + projector_y; - float distance = line_dist(control_x,control_y, cursor_x,cursor_y); + float distance = line_dist(control_x,control_y, mask_cursor_x,mask_cursor_y); //printf("CWindowCanvas::do_mask %d %f %f\n", i, distance, selected_control_point_distance); if(distance < selected_control_point_distance) { @@ -1606,7 +1606,7 @@ int CWindowCanvas::do_mask(int &redraw, int &rerender, } } else if(i < points.size() - 1) { - if(!gui->ctrl_down()) { + if(!gui->shift_down()) { if(test_bbox(cursor_x, cursor_y, canvas_x, canvas_y)) { selected_point = (i < points.size() - 1 ? i + 1 : 0); } @@ -1748,7 +1748,7 @@ int CWindowCanvas::do_mask(int &redraw, int &rerender, gui->current_operation = mwindow->edl->session->cwindow_operation; } else // No existing point or control point was selected so create a new one - if(!gui->shift_down() && !gui->alt_down()) { + if(!gui->ctrl_down() && !gui->alt_down()) { mwindow->undo->update_undo_before(_("mask point"), 0); // Create the template MaskPoint *point = new MaskPoint; @@ -1779,7 +1779,8 @@ int CWindowCanvas::do_mask(int &redraw, int &rerender, //printf("CWindowCanvas::do_mask %d %d\n", shortest_point1, shortest_point2); // Append to end of list - if(labs(shortest_point1 - shortest_point2) > 1) { + if( shortest_point1 == shortest_point2 || + labs(shortest_point1 - shortest_point2) > 1) { #ifdef USE_KEYFRAME_SPANNING MaskPoint *new_point = new MaskPoint; @@ -1865,6 +1866,7 @@ int CWindowCanvas::do_mask(int &redraw, int &rerender, MaskPoint *new_point = new MaskPoint; points.append(new_point); *new_point = *point; + gui->affected_point = points.size() - 1; #else for(MaskAuto *current = (MaskAuto*)mask_autos->default_auto; current; ) { SubMask *submask = current->get_submask(mwindow->edl->session->cwindow_mask); @@ -1876,35 +1878,7 @@ int CWindowCanvas::do_mask(int &redraw, int &rerender, else current = (MaskAuto*)NEXT; } -#endif - -//printf("CWindowCanvas::do_mask 2\n"); -// Create a second point if none existed before -#ifdef USE_KEYFRAME_SPANNING - if(points.size() < 2) { - - MaskPoint *new_point = new MaskPoint; - points.append(new_point); - *new_point = *point; - } - gui->affected_point = points.size() - 1; -#else - if(mask->points.size() < 2) { - - for(MaskAuto *current = (MaskAuto*)mask_autos->default_auto; current; ) { - SubMask *submask = current->get_submask(mwindow->edl->session->cwindow_mask); - MaskPoint *new_point = new MaskPoint; - submask->points.append(new_point); - *new_point = *point; - if(current == (MaskAuto*)mask_autos->default_auto) - current = (MaskAuto*)mask_autos->first; - else - current = (MaskAuto*)NEXT; - } - } - - gui->affected_point = mask->points.size() - 1; #endif //printf("CWindowCanvas::do_mask 3 %d\n", mask->points.size()); @@ -1958,7 +1932,7 @@ int CWindowCanvas::do_mask(int &redraw, int &rerender, //printf("CWindowCanvas::do_mask %d %d\n", __LINE__, gui->affected_point); SubMask *mask = gui->mask_keyframe->get_submask(mwindow->edl->session->cwindow_mask); - if(gui->affected_point < mask->points.size() && + if( gui->affected_point >= 0 && gui->affected_point < mask->points.size() && gui->current_operation != CWINDOW_NONE) { // mwindow->undo->update_undo_before(_("mask point"), this); #ifdef USE_KEYFRAME_SPANNING @@ -2040,7 +2014,7 @@ int CWindowCanvas::do_mask(int &redraw, int &rerender, over_point = 1; } - if(!over_point && gui->shift_down()) { + if(!over_point && gui->ctrl_down()) { canvas_x = (x1 - half_track_w) * projector_z + projector_x; canvas_y = (y1 - half_track_h) * projector_z + projector_y; output_to_canvas(mwindow->edl, 0, canvas_x, canvas_y); @@ -2085,7 +2059,6 @@ int CWindowCanvas::do_mask(int &redraw, int &rerender, return result; } - int CWindowCanvas::do_eyedrop(int &rerender, int button_press, int draw) { int result = 0;