new (commented) continuous scroll from ben; fix for max() issues in MCP code
authorPaul Davis <paul@linuxaudiosystems.com>
Tue, 20 Feb 2007 22:32:32 +0000 (22:32 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Tue, 20 Feb 2007 22:32:32 +0000 (22:32 +0000)
git-svn-id: svn://localhost/ardour2/trunk@1481 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/editor_mixer.cc
libs/surfaces/mackie/mackie_control_protocol.cc

index ab1e54aa5b6e864ae43eaeb9869680b0f08426f8..f7fc867ab41d0d3afb1d177750c988617b02859d 100644 (file)
@@ -182,6 +182,9 @@ Editor::update_current_screen ()
 
                        if (frame != last_update_frame) {
 
+
+#ifdef CONTINUOUS_SCROLL
+#ifndef  CONTINUOUS_SCROLL
                                if (frame < leftmost_frame || frame > leftmost_frame + current_page_frames()) {
                                        
                                        if (session->transport_speed() < 0) {
@@ -197,35 +200,26 @@ Editor::update_current_screen ()
 
                                playhead_cursor->set_position (frame);
 
-#undef CONTINUOUS_SCROLL
-#ifdef  CONTINUOUS_SCROLL
-
+#else  // CONTINUOUS_SCROLL
+                               
                                /* don't do continuous scroll till the new position is in the rightmost quarter of the 
                                   editor canvas
                                */
                                
-#if 0
-                               if (frame > leftmost_frame + (3 * current_page_frames() / 4)) {
-                               
-                                       if (frame > playhead_cursor->current_frame) {
-                                               nframes_t delta = frame - playhead_cursor->current_frame;
-                                               horizontal_adjustment.set_value (horizontal_adjustment.get_value() + (delta/frames_per_unit));
+                               if (session->transport_speed()) {
+                                       double target = ((double)frame - (double)current_page_frames()/2.0) / frames_per_unit;
+                                       if (target <= 0.0) target = 0.0;
+                                       if ( fabs(target - current) < current_page_frames()/frames_per_unit ) {
+                                               target = (target * 0.15) + (current * 0.85);
                                        } else {
-                                               nframes_t delta = playhead_cursor->current_frame - frame;
-                                               horizontal_adjustment.set_value (horizontal_adjustment.get_value() - (delta/frames_per_unit));
+                                               /* relax */
                                        }
+                                       //printf("frame: %d,  cpf: %d,  fpu: %6.6f, current: %6.6f, target : %6.6f\n", frame, current_page_frames(), frames_per_unit, current, target );
+                                       current = target;
+                                       horizontal_adjustment.set_value ( current );
                                }
-#else
-                               if (!currentInitialized) {
-                                       current = (frame - current_page_frames()/2) / frames_per_unit;
-                                       currentInitialized = 1;
-                               }
-
-                               double target = (frame - current_page_frames()/2) / frames_per_unit;
-                               target = (target * 0.1) + (current * 0.9);
-                               horizontal_adjustment.set_value ( target );
-                               current = target;
-#endif
+                               
+                               playhead_cursor->set_position (frame);
 
 #endif // CONTINUOUS_SCROLL
 
index 2535c190441f5a14998cd1e1a5c158926ae23f4a..18fc26162a1580d6b3fbd3a0ae936e25ae86ac34 100644 (file)
@@ -1160,7 +1160,7 @@ void MackieControlProtocol::notify_remote_id_changed()
        if ( sorted.size() - _current_initial_bank < route_signals.size() )
        {
                // but don't shift backwards past the zeroth channel
-               switch_banks( max(0UL, sorted.size() - route_signals.size() ) );
+               switch_banks( max((Sorted::size_type) 0, sorted.size() - route_signals.size() ) );
        }
        // Otherwise just refresh the current bank
        else