traverso-commit
[Top][All Lists]
Advanced

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

[Traverso-commit] traverso resources/keymap.xml src/commands/Move...


From: Remon Sijrier
Subject: [Traverso-commit] traverso resources/keymap.xml src/commands/Move...
Date: Fri, 06 Apr 2007 09:29:03 +0000

CVSROOT:        /sources/traverso
Module name:    traverso
Changes by:     Remon Sijrier <r_sijrier>       07/04/06 09:29:03

Modified files:
        resources      : keymap.xml 
        src/commands   : MoveClip.cpp MoveClip.h 
        src/core       : SnapList.cpp SnapList.h 
        src/traverso/songcanvas: TimeLineView.cpp 

Log message:
        * Added (rather naive) implementation for snap to next/prev snap point 
during audioclip move.
        Keys: S, F, left/right arrow, mousewheel.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/resources/keymap.xml?cvsroot=traverso&r1=1.46&r2=1.47
http://cvs.savannah.gnu.org/viewcvs/traverso/src/commands/MoveClip.cpp?cvsroot=traverso&r1=1.28&r2=1.29
http://cvs.savannah.gnu.org/viewcvs/traverso/src/commands/MoveClip.h?cvsroot=traverso&r1=1.14&r2=1.15
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/SnapList.cpp?cvsroot=traverso&r1=1.11&r2=1.12
http://cvs.savannah.gnu.org/viewcvs/traverso/src/core/SnapList.h?cvsroot=traverso&r1=1.9&r2=1.10
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/songcanvas/TimeLineView.cpp?cvsroot=traverso&r1=1.13&r2=1.14

Patches:
Index: resources/keymap.xml
===================================================================
RCS file: /sources/traverso/traverso/resources/keymap.xml,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -b -r1.46 -r1.47
--- resources/keymap.xml        5 Apr 2007 22:56:43 -0000       1.46
+++ resources/keymap.xml        6 Apr 2007 09:29:03 -0000       1.47
@@ -41,11 +41,13 @@
                <keyfact type="FKEY" key1="LARROW" >
                        <Objects>
                                <Object objectname="SongView" 
slotsignature="scroll_left" modes="All" sortorder="1" submenu="Scroll" 
instantanious="0" />
+                               <Object objectname="MoveClip" 
slotsignature="prev_snap_pos" modes="All" sortorder="1" instantanious="1" />
                        </Objects>
                </keyfact>
                <keyfact type="FKEY" key1="RARROW" >
                        <Objects>
                                <Object objectname="SongView" 
slotsignature="scroll_right" modes="All" sortorder="2" submenu="Scroll" 
instantanious="0" />
+                               <Object objectname="MoveClip" 
slotsignature="next_snap_pos" modes="All" sortorder="1" instantanious="1" />
                        </Objects>
                </keyfact>
                <keyfact type="FKEY" key1="UARROW" >
@@ -92,6 +94,7 @@
                        <Objects>
                                <Object objectname="Project" 
slotsignature="select" modes="All" instantanious="0" />
                                <Object objectname="AudioClip" modes="All" 
sortorder="5" submenu="Selection" pluginname="TraversoCommands" 
commandname="ClipSelectionSelect" arguments="select_clip" />
+                               <Object objectname="MoveClip" 
slotsignature="prev_snap_pos" modes="All" sortorder="1" instantanious="1" />
                        </Objects>
                </keyfact>
                <keyfact type="FKEY" key1="SPACE" >
@@ -223,6 +226,7 @@
                <keyfact type="FKEY" key1="F" >
                        <Objects>
                                <Object objectname="AudioClipView" 
slotsignature="select_fade_shape" modes="All" sortorder="32" submenu="Fade 
In/Out" instantanious="0" />
+                               <Object objectname="MoveClip" 
slotsignature="next_snap_pos" modes="All" sortorder="1" instantanious="1" />
                        </Objects>
                </keyfact>
                

Index: src/commands/MoveClip.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/commands/MoveClip.cpp,v
retrieving revision 1.28
retrieving revision 1.29
diff -u -b -r1.28 -r1.29
--- src/commands/MoveClip.cpp   5 Apr 2007 17:53:48 -0000       1.28
+++ src/commands/MoveClip.cpp   6 Apr 2007 09:29:03 -0000       1.29
@@ -146,7 +146,7 @@
        }
 
        m_originTrack = m_targetTrack = m_clip->get_track();
-       m_originalTrackFirstFrame = m_clip->get_track_start_frame();
+       m_originalTrackFirstFrame = d->snappos = 
m_clip->get_track_start_frame();
        m_posDiff = 0;
        d->origXPos = cpointer().on_first_input_event_x();
        d->origPos = QPoint(d->origXPos, cpointer().on_first_input_event_y());
@@ -386,14 +386,18 @@
 
 void MoveClip::next_snap_pos(bool autorepeat)
 {
-       Q_UNUSED(autorepeat)
-       // TODO implement me!
+       Q_UNUSED(autorepeat);
+       d->snappos = m_song->get_snap_list()->next_snap_pos(d->snappos);
+       m_posDiff = d->snappos - m_originalTrackFirstFrame;
+       m_clip->set_track_start_frame(d->snappos);
 }
 
 void MoveClip::prev_snap_pos(bool autorepeat)
 {
-       Q_UNUSED(autorepeat)
-       // TODO implement me!
+       Q_UNUSED(autorepeat);
+       d->snappos = m_song->get_snap_list()->prev_snap_pos(d->snappos);
+       m_posDiff = d->snappos - m_originalTrackFirstFrame;
+       m_clip->set_track_start_frame(d->snappos);
 }
 
 void MoveClip::move_to_start(bool autorepeat)

Index: src/commands/MoveClip.h
===================================================================
RCS file: /sources/traverso/traverso/src/commands/MoveClip.h,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -b -r1.14 -r1.15
--- src/commands/MoveClip.h     5 Apr 2007 17:53:48 -0000       1.14
+++ src/commands/MoveClip.h     6 Apr 2007 09:29:03 -0000       1.15
@@ -17,7 +17,7 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
  
-    $Id: MoveClip.h,v 1.14 2007/04/05 17:53:48 r_sijrier Exp $
+    $Id: MoveClip.h,v 1.15 2007/04/06 09:29:03 r_sijrier Exp $
 */
 
 #ifndef MOVECLIPACTION_H
@@ -72,6 +72,7 @@
                nframes_t       origTrackStartFrame;
                nframes_t       origTrackEndFrame;
                bool            resync;
+               nframes_t       snappos;
        };
                        
 

Index: src/core/SnapList.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/core/SnapList.cpp,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -b -r1.11 -r1.12
--- src/core/SnapList.cpp       2 Apr 2007 04:52:49 -0000       1.11
+++ src/core/SnapList.cpp       6 Apr 2007 09:29:03 -0000       1.12
@@ -17,7 +17,7 @@
 along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
 
-$Id: SnapList.cpp,v 1.11 2007/04/02 04:52:49 benjie Exp $
+$Id: SnapList.cpp,v 1.12 2007/04/06 09:29:03 r_sijrier Exp $
 */
 
 #include "SnapList.h"
@@ -33,6 +33,14 @@
 
 #include <Debugger.h>
 
+#define debugsnaplist
+
+#if defined (debugsnaplist)
+#define SLPRINT(args...) printf(args)
+#else
+#define SLPRINT(args...)
+#endif
+
 static const int SNAP_WIDTH = 10;
 
 SnapList::SnapList(Song* song) 
@@ -61,7 +69,7 @@
        // collects all clip boundaries and adds them to the snap list
        QList<AudioClip* >* acList = 
m_song->get_audioclip_manager()->get_clip_list();
        
-//     printf("acList size is %d\n", acList->size());
+       SLPRINT("acList size is %d\n", acList->size());
 
        // Be able to snap to trackstart
        if (m_rangeStart == 0) {
@@ -117,8 +125,8 @@
                xposBool.push_back(false);
        }
 
-       int lastVal = -1;
-       int lastIndex = -1;
+       long lastVal = -1;
+       long lastIndex = -1;
        // now modify the regions around snap points in the lookup table
        for (int i = 0; i < xposList.size(); i++) {
                if (xposList.at(i) == lastVal) {
@@ -167,33 +175,34 @@
        }
        
        int i = (pos - m_rangeStart) / m_scalefactor;
-//     printf("get_snap_value:: i is %d\n", i);
+       SLPRINT("get_snap_value:: i is %d\n", i);
        
        // catch dangerous values:
        if (i < 0) { 
-//             printf("get_snap_value:: i < 0\n");
+               SLPRINT("get_snap_value:: i < 0\n");
                return pos;
        }
 
        if (xposLut.isEmpty()) {
-//             printf("get_snap_value:: empty lut\n");
+               SLPRINT("get_snap_value:: empty lut\n");
                return pos;
        }
 
        if (i >= xposLut.size()) {
-//             printf("get_snap_value:: i > xposLut.size()\n");
+               SLPRINT("get_snap_value:: i > xposLut.size()\n");
                return pos;
        }
        
        if (is_snap_value(pos)) {
-//             printf("get_snap_value returns: %d (was %d)\n", xposLut.at(i), 
pos);
+               SLPRINT("get_snap_value returns: %d (was %d)\n", xposLut.at(i), 
pos);
                return xposLut.at(i);
        }
        
        
-//     printf("get_snap_value returns: %d (was %d)\n", pos, pos);
+       SLPRINT("get_snap_value returns: %d (was %d)\n", pos, pos);
        return pos;
 }
+
 // returns true if i is inside a snap area, else returns false
 bool SnapList::is_snap_value(nframes_t pos)
 {
@@ -202,7 +211,7 @@
        }
        
        int i = (pos - m_rangeStart) / m_scalefactor;
-//     printf("is_snap_value:: i is %d\n", i);
+       SLPRINT("is_snap_value:: i is %d\n", i);
        
        // need to catch values outside the LUT. Return false in that case
        if (i < 0) {
@@ -213,7 +222,7 @@
                return false;
        }
 
-//     printf("is_snap_value returns: %d\n", xposBool.at(i));
+       SLPRINT("is_snap_value returns: %d\n", xposBool.at(i));
        return xposBool.at(i);
 }
 
@@ -226,7 +235,7 @@
        }
        
        int i = (pos - m_rangeStart) / m_scalefactor;
-//     printf("get_snap_diff:: i is %d\n", i);
+       SLPRINT("get_snap_diff:: i is %d\n", i);
        
        // need to catch values outside the LUT. Return 0 in that case
        if (i < 0) {
@@ -237,13 +246,13 @@
                return 0;
        }
 
-//     printf("get_snap_diff returns: %d\n", xposLut.at(i));
+       SLPRINT("get_snap_diff returns: %d\n", xposLut.at(i));
        return pos - xposLut.at(i);
 }
 
 void SnapList::set_range(nframes_t start, nframes_t end, int scalefactor)
 {
-       //printf("setting xstart %d, xend %d scalefactor %d\n", start, end, 
scalefactor);
+       SLPRINT("setting xstart %d, xend %d scalefactor %d\n", start, end, 
scalefactor);
 
        if (m_rangeStart == start && m_rangeEnd == end && m_scalefactor == 
scalefactor) {
                return;
@@ -255,4 +264,59 @@
        m_isDirty = true;
 };
 
+nframes_t SnapList::next_snap_pos(nframes_t pos)
+{
+       int index = pos / m_scalefactor;
+       
+       nframes_t newpos = pos;
+       
+       if (index > xposLut.size()) {
+               index = xposLut.size() - 1;
+       }
+       
+       for (; index<xposLut.size(); ++index) {
+               nframes_t snap = xposLut.at(index);
+               if (snap > pos) {
+                       newpos = snap;
+                       break;
+               }
+       }
+       
+       return newpos;
+}
+
+nframes_t SnapList::prev_snap_pos(nframes_t pos)
+{
+       if (! xposLut.size()) {
+               return pos;
+       }
+       
+       nframes_t newpos = pos;
+       
+       int index = pos / m_scalefactor;
+       if (index > xposLut.size()) {
+               index = xposLut.size() - 1;
+       }
+       
+       do {
+               nframes_t snap = xposLut.at(index);
+               if (snap < pos && snap != 0) {
+                       newpos = snap;
+                       break;
+               }
+               index--;
+       } while (index >= 0);
+       
+       if (index == -1) {
+               return 0;
+       }
+       
+       if (newpos == pos) {
+               return pos;
+       }
+       
+       return newpos;
+}
+
 /* EOF */
+

Index: src/core/SnapList.h
===================================================================
RCS file: /sources/traverso/traverso/src/core/SnapList.h,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- src/core/SnapList.h 2 Apr 2007 04:52:49 -0000       1.9
+++ src/core/SnapList.h 6 Apr 2007 09:29:03 -0000       1.10
@@ -17,7 +17,7 @@
 along with this program; if not, write to the Free Software
 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA.
 
-$Id: SnapList.h,v 1.9 2007/04/02 04:52:49 benjie Exp $
+$Id: SnapList.h,v 1.10 2007/04/06 09:29:03 r_sijrier Exp $
 */
 
 #ifndef SNAPLIST_H
@@ -43,6 +43,8 @@
        int get_snap_value(nframes_t);
        bool is_snap_value(nframes_t);
        int get_snap_diff(nframes_t);
+       nframes_t next_snap_pos(nframes_t pos);
+       nframes_t prev_snap_pos(nframes_t pos);
        
        void set_range(nframes_t start, nframes_t end, int scalefactor);
 

Index: src/traverso/songcanvas/TimeLineView.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/songcanvas/TimeLineView.cpp,v
retrieving revision 1.13
retrieving revision 1.14
diff -u -b -r1.13 -r1.14
--- src/traverso/songcanvas/TimeLineView.cpp    6 Apr 2007 07:43:30 -0000       
1.13
+++ src/traverso/songcanvas/TimeLineView.cpp    6 Apr 2007 09:29:03 -0000       
1.14
@@ -135,8 +135,8 @@
 {
        m_newWhen = (uint) (cpointer().scene_x() * m_scalefactor);
 
-       if (m_mview->get_marker()->get_timeline()->get_song()->is_snap_on()) {
-               SnapList* slist = 
m_mview->get_marker()->get_timeline()->get_song()->get_snap_list();
+       if (m_marker->get_timeline()->get_song()->is_snap_on()) {
+               SnapList* slist = 
m_marker->get_timeline()->get_song()->get_snap_list();
                m_newWhen = slist->get_snap_value(m_newWhen);
        }
 




reply via email to

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