traverso-commit
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Traverso-commit] traverso/src/traverso/songcanvas SongView.cpp S...


From: Remon Sijrier
Subject: [Traverso-commit] traverso/src/traverso/songcanvas SongView.cpp S...
Date: Wed, 23 May 2007 12:37:06 +0000

CVSROOT:        /sources/traverso
Module name:    traverso
Changes by:     Remon Sijrier <r_sijrier>       07/05/23 12:37:06

Modified files:
        src/traverso/songcanvas: SongView.cpp SongView.h 

Log message:
        * Use curve to interpolate shuttle factor values

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/songcanvas/SongView.cpp?cvsroot=traverso&r1=1.56&r2=1.57
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/songcanvas/SongView.h?cvsroot=traverso&r1=1.25&r2=1.26

Patches:
Index: SongView.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/songcanvas/SongView.cpp,v
retrieving revision 1.56
retrieving revision 1.57
diff -u -b -r1.56 -r1.57
--- SongView.cpp        23 May 2007 00:40:16 -0000      1.56
+++ SongView.cpp        23 May 2007 12:37:06 -0000      1.57
@@ -33,12 +33,8 @@
 #include "TimeLineView.h"
 #include "TrackPanelViewPort.h"
 #include "Themer.h"
+#include "AddRemove.h"
                
-#include <Song.h>
-#include <Track.h>
-#include <Peak.h>
-#include <SnapList.h>
-#include <ContextPointer.h>
 #include <Zoom.h>
 #include <PlayHeadMove.h>
 #include <WorkCursorMove.h>
@@ -131,6 +127,27 @@
        m_song->get_scrollbar_xy(x, y);
        set_hscrollbar_value(x);
        set_vscrollbar_value(y);
+       
+       m_shuttleCurve = new Curve(0, m_song);
+       m_dragShuttleCurve = new Curve(0, m_song);
+       
+       // Use these variables to fine tune the scroll behavior
+       float whens[7] = {0.0, 0.2, 0.5, 0.7, 0.8, 0.9, 1.3};
+       float values[7] = {0.0, 0.2, 0.3, 0.8, 0.95, 1.5, 8.0};
+       
+       // Use these variables to fine tune the scroll during drag behavior
+       float dragWhens[7] =  {0.0, 0.9,  0.92, 0.97, 1.0, 1.1, 1.3};
+       float dragValues[7] = {0.0, 0.1, 0.3,  0.7,  0.95,  1.1,  2.0};
+       
+       for (int i=0; i<7; ++i) {
+               AddRemove* cmd = (AddRemove*) m_dragShuttleCurve->add_node(new 
CurveNode(m_dragShuttleCurve, dragWhens[i], dragValues[i]), false);
+               cmd->set_instantanious(true);
+               Command::process_command(cmd);
+               
+               cmd = (AddRemove*) m_shuttleCurve->add_node(new 
CurveNode(m_shuttleCurve, whens[i], values[i]), false);
+               cmd->set_instantanious(true);
+               Command::process_command(cmd);
+       }
 }
 
 SongView::~SongView()
@@ -309,8 +326,6 @@
 Command* SongView::center()
 {
        PENTER2;
-       QScrollBar* scrollbar = m_clipsViewPort->horizontalScrollBar();
-
        nframes_t centerX;
        if (m_song->is_transporting() && m_actOnPlayHead) { 
                centerX = m_song->get_transport_frame();
@@ -357,80 +372,60 @@
 
 void SongView::update_shuttle_factor()
 {
-       int shuttlespeed;
+       float vec[2];
+       int direction = 1;
        
-// TODO Interpolate normalized value from a (Fade)Curve, anyone ?
-
-       if(m_dragShuttle) {
                float normalizedX = (float) cpointer().x() / 
m_clipsViewPort->width();
-               shuttlespeed = 0;
-               if ( normalizedX > 0.87 || normalizedX < 0.13)
-                       shuttlespeed = 3;
-       
-               else if ( normalizedX > 0.90 || normalizedX < 0.10)
-                       shuttlespeed = 8;
-       
-               else if ( normalizedX > 0.95 || normalizedX < 0.05)
-                       shuttlespeed = 20;
-               
-               else if ( normalizedX > 0.98 || normalizedX < 0.02)
-                       shuttlespeed = 30;
-       
-               m_shuttleXfactor = (int) ( (( normalizedX * 30 ) - 15) * 
shuttlespeed / 2 );
-               
-       
-               shuttlespeed = 0;
-               float normalizedY = (float) cpointer().y() / 
m_clipsViewPort->height();
-               
-               if ( normalizedY > 0.80 || normalizedY < 0.20)
-                       shuttlespeed = 3;
-       
-               else if ( normalizedY > 0.90 || normalizedY < 0.10)
-                       shuttlespeed = 8;
-       
-               else if ( normalizedY > 0.95 || normalizedY < 0.05)
-                       shuttlespeed = 20;
-               
-               else if ( normalizedY > 0.98 || normalizedY < 0.02)
-                       shuttlespeed = 30;
                
-               m_shuttleYfactor = (int) ( (( normalizedY * 30 ) - 15) * 
shuttlespeed / 2 );
+       if (normalizedX < 0.5) {
+               normalizedX = 0.5 - normalizedX;
+               normalizedX *= 2;
+               direction = -1;
+       } else if (normalizedX > 0.5) {
+               normalizedX = normalizedX - 0.5;
+               normalizedX *= 2;
+               if (normalizedX > 1.0) {
+                       normalizedX *= 1.15;
+               }
+       }
        
+       if (m_dragShuttle) {
+               m_dragShuttleCurve->get_vector(normalizedX, normalizedX + 0.01, 
vec, 2);
        } else {
-               shuttlespeed = 0;
-               float normalizedX = (float) cpointer().x() / 
m_clipsViewPort->width();
-               
-               if ( normalizedX > 0.6 || normalizedX < 0.4)
-                       shuttlespeed = 7;
-       
-               else if ( normalizedX > 0.85 || normalizedX < 0.15)
-                       shuttlespeed = 15;
-       
-               else if ( normalizedX > 0.95 || normalizedX < 0.05)
-                       shuttlespeed = 20;
-       
-               else if ( normalizedX > 0.98 || normalizedX < 0.02)
-                       shuttlespeed = 30;
-       
-               m_shuttleXfactor = (int) ( (( normalizedX * 30 ) - 15) * 
shuttlespeed / 2 );
+               m_shuttleCurve->get_vector(normalizedX, normalizedX + 0.01, 
vec, 2);
+       }
                
+       if (direction > 0) {
+               m_shuttleXfactor = (int) (vec[0] * 30);
+       } else {
+               m_shuttleXfactor = (int) (vec[0] * -30);
+       }
                
-               shuttlespeed = 0;
+       direction = 1;
                float normalizedY = (float) cpointer().y() / 
m_clipsViewPort->height();
                
-               if ( normalizedY > 0.6 || normalizedY < 0.4)
-                       shuttlespeed = 5;
+       if (normalizedY < 0) normalizedY = 0;
+       if (normalizedY > 1) normalizedY = 1;
                
-               else if ( normalizedY > 0.80 || normalizedY < 0.20)
-                       shuttlespeed = 15;
+       if (normalizedY < 0.5) {
+               normalizedY = 0.5 - normalizedY;
+               direction = -1;
+       } else if (normalizedY > 0.5) {
+               normalizedY = normalizedY - 0.5;
+       }
        
-               else if ( normalizedY > 0.90 || normalizedY < 0.10)
-                       shuttlespeed = 20;
+       normalizedY *= 2;
        
-               else if ( normalizedY > 0.98 || normalizedY < 0.02)
-                       shuttlespeed = 30;
+       if (m_dragShuttle) {
+               m_dragShuttleCurve->get_vector(normalizedY, normalizedY + 0.01, 
vec, 2);
+       } else {
+               m_shuttleCurve->get_vector(normalizedY, normalizedY + 0.01, 
vec, 2);
+       }
                
-               m_shuttleYfactor = (int) ( (( normalizedY * 30 ) - 15) * 
shuttlespeed / 2 );
+       if (direction > 0) {
+               m_shuttleYfactor = (int) (vec[0] * 30);
+       } else {
+               m_shuttleYfactor = (int) (vec[0] * -30);
        }
        
 }

Index: SongView.h
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/songcanvas/SongView.h,v
retrieving revision 1.25
retrieving revision 1.26
diff -u -b -r1.25 -r1.26
--- SongView.h  17 May 2007 12:45:20 -0000      1.25
+++ SongView.h  23 May 2007 12:37:06 -0000      1.26
@@ -35,6 +35,7 @@
 class TrackView;
 class PlayHead;
 class WorkCursor;
+class Curve;
 
 class SongView : public ViewItem
 {
@@ -87,6 +88,8 @@
 
 private:
         Song*                  m_song;
+       Curve*                  m_shuttleCurve;
+       Curve*                  m_dragShuttleCurve;
        PlayHead*               m_playCursor;
        ClipsViewPort*          m_clipsViewPort;
        TrackPanelViewPort*     m_tpvp;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]