Merge with 2.0-ongoing R2988
[ardour.git] / gtk2_ardour / editor_mouse.cc
index 048277fea7ab09bae5d7ff35cb7d649a7279a4e6..4234368acdc6c67a992097039fd2152f8d3cd379 100644 (file)
@@ -3072,7 +3072,7 @@ Editor::possibly_copy_regions_during_grab (GdkEvent* event)
                /* reset selection to new regionviews */
 
                selection->set (new_regionviews);
-               
+
                /* reset drag_info data to reflect the fact that we are dragging the copies */
                
                drag_info.data = new_regionviews.front();
@@ -3382,7 +3382,7 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
                        }
            
                        if (sync_frame - sync_offset <= sync_frame) {
-                               pending_region_position = sync_frame + (sync_dir*sync_offset);
+                               pending_region_position = sync_frame - (sync_dir*sync_offset);
                        } else {
                                pending_region_position = 0;
                        }
@@ -3471,7 +3471,7 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
 
                pair<set<boost::shared_ptr<Playlist> >::iterator,bool> insert_result;
                const list<RegionView*>& layered_regions = selection->regions.by_layer();
-
+               
                for (list<RegionView*>::const_iterator i = layered_regions.begin(); i != layered_regions.end(); ++i) {
            
                        RegionView* rv = (*i);
@@ -3866,7 +3866,7 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
                                sigc::connection c = rtv->view()->RegionViewAdded.connect (mem_fun(*this, &Editor::collect_new_region_view));
                                to_playlist->add_region (newregion, (nframes_t) (where * rtv->get_diskstream()->speed()));
                                c.disconnect ();
-                               
+
                                if (!latest_regionviews.empty()) {
                                        // XXX why just the first one ? we only expect one
                                        rtv->reveal_dependent_views (*latest_regionviews.front());
@@ -5331,11 +5331,15 @@ Editor::end_time_fx (ArdourCanvas::Item* item, GdkEvent* event)
        }
        
        nframes_t newlen = drag_info.last_pointer_frame - clicked_regionview->region()->position();
-#ifdef USE_RUBBERBAND
-       float percentage = (float) ((double) newlen / (double) clicked_regionview->region()->length());
-#else
-       float percentage = (float) ((double) newlen - (double) clicked_regionview->region()->length()) / ((double) newlen) * 100.0f;
+
+       float percentage = (double) newlen / (double) clicked_regionview->region()->length();
+
+#ifndef USE_RUBBERBAND
+       // Soundtouch uses percentage / 100 instead of normal (/ 1) 
+       if (clicked_regionview->region()->data_type() == DataType::AUDIO) {
+               percentage = (float) ((double) newlen - (double) clicked_regionview->region()->length()) / ((double) newlen) * 100.0f;
 #endif 
+       }
 
        begin_reversible_command (_("timestretch"));