proxy cpus usage, unlock win before render_proxy, snap tweaks
[goodguy/history.git] / cinelerra-5.1 / cinelerra / mwindowmove.C
index b66cf973270bad2cbf9c8a5055ebcc2d54354794..08a623f8f0a454cdad59e0624b6114cb81e0210c 100644 (file)
@@ -190,6 +190,12 @@ void MWindow::fit_autos(int doall)
                                max = floor(max*200)/100;
                        }
                        break;
+               case AUTOGROUPTYPE_SPEED:
+                       if (range < 0.001) {
+                               min = floor(min*5)/100;
+                               max = floor(max*300)/100;
+                       }
+                       break;
                case AUTOGROUPTYPE_X:
                case AUTOGROUPTYPE_Y:
                        if (range < 5) {
@@ -233,6 +239,7 @@ void MWindow::change_currentautorange(int autogrouptype, int increment, int chan
                        val += 1;
                        break;
                case AUTOGROUPTYPE_ZOOM:
+               case AUTOGROUPTYPE_SPEED:
                        if (val == 0)
                                val = 0.001;
                        else
@@ -254,6 +261,7 @@ void MWindow::change_currentautorange(int autogrouptype, int increment, int chan
                        val -= 1;
                        break;
                case AUTOGROUPTYPE_ZOOM:
+               case AUTOGROUPTYPE_SPEED:
                        if (val > 0) val = val/2;
                        break;
                case AUTOGROUPTYPE_X:
@@ -687,6 +695,12 @@ int MWindow::next_edit_handle(int shift_down)
        double position = edl->local_session->get_selectionend(1);
        Units::fix_double(&position);
        double new_position = INFINITY;
+
+       double max_rate = edl->get_frame_rate();
+       int sample_rate = edl->get_sample_rate();
+       if( sample_rate > max_rate ) max_rate = sample_rate;
+       double min_movement = max_rate > 0 ? 1. / max_rate : 1e-6;
+
 // Test for edit handles after cursor position
        for (Track *track = edl->tracks->first; track; track = track->next)
        {
@@ -696,6 +710,7 @@ int MWindow::next_edit_handle(int shift_down)
                        {
                                double edit_end = track->from_units(edit->startproject + edit->length);
                                Units::fix_double(&edit_end);
+                               if( fabs(edit_end-position) < min_movement ) continue;
                                if (edit_end > position && edit_end < new_position)
                                        new_position = edit_end;
                        }
@@ -753,6 +768,12 @@ int MWindow::prev_edit_handle(int shift_down)
        double position = edl->local_session->get_selectionstart(1);
        double new_position = -1;
        Units::fix_double(&position);
+
+       double max_rate = edl->get_frame_rate();
+       int sample_rate = edl->get_sample_rate();
+       if( sample_rate > max_rate ) max_rate = sample_rate;
+       double min_movement = max_rate > 0 ? 1. / max_rate : 1e-6;
+
 // Test for edit handles before cursor position
        for (Track *track = edl->tracks->first; track; track = track->next)
        {
@@ -762,6 +783,7 @@ int MWindow::prev_edit_handle(int shift_down)
                        {
                                double edit_end = track->from_units(edit->startproject);
                                Units::fix_double(&edit_end);
+                               if( fabs(edit_end-position) < min_movement ) continue;
                                if (edit_end < position && edit_end > new_position)
                                        new_position = edit_end;
                        }
@@ -876,6 +898,7 @@ void MWindow::split_x()
        gui->mainmenu->update_toggles(0);
        gui->update_pane_dividers();
        gui->update_cursor();
+       gui->draw_samplemovement();
 // required to get new widgets to appear
        gui->show_window();
 
@@ -899,6 +922,7 @@ void MWindow::split_y()
        gui->mainmenu->update_toggles(0);
        gui->update_pane_dividers();
        gui->update_cursor();
+       gui->draw_trackmovement();
 // required to get new widgets to appear
        gui->show_window();
        gui->resource_thread->start_draw();