traverso-commit
[Top][All Lists]
Advanced

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

[Traverso-commit] traverso/src/traverso/songcanvas CurveView.cpp ...


From: Ben Levitt
Subject: [Traverso-commit] traverso/src/traverso/songcanvas CurveView.cpp ...
Date: Wed, 25 Apr 2007 01:34:02 +0000

CVSROOT:        /sources/traverso
Module name:    traverso
Changes by:     Ben Levitt <benjie>     07/04/25 01:34:02

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

Log message:
        Allow dragging a CurveNode only when near a node, otherwise drag the 
clip.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/songcanvas/CurveView.cpp?cvsroot=traverso&r1=1.34&r2=1.35
http://cvs.savannah.gnu.org/viewcvs/traverso/src/traverso/songcanvas/CurveView.h?cvsroot=traverso&r1=1.7&r2=1.8

Patches:
Index: CurveView.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/songcanvas/CurveView.cpp,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -b -r1.34 -r1.35
--- CurveView.cpp       21 Apr 2007 01:07:04 -0000      1.34
+++ CurveView.cpp       25 Apr 2007 01:34:02 -0000      1.35
@@ -42,7 +42,7 @@
        Q_CLASSINFO("move_down", tr("Move Down"));
        
 public:
-       DragNode(CurveNode* node, CurveView* curveview, int scalefactor, const 
QString& des);
+       DragNode(CurveNode* node, CurveView* curveview, int scalefactor, long 
rangeMin, long rangeMax, const QString& des);
        
        int prepare_actions();
        int do_action();
@@ -58,6 +58,8 @@
        int             m_scalefactor;
        QPointF         m_origPos;
        QPointF         m_newPos;
+       long            m_rangeMin;
+       long            m_rangeMax;
        QPoint          m_mousepos;
 
 public slots:
@@ -69,10 +71,12 @@
 #include "CurveView.moc"
 
        
-DragNode::DragNode(CurveNode* node, CurveView* curveview, int scalefactor, 
const QString& des)
+DragNode::DragNode(CurveNode* node, CurveView* curveview, int scalefactor, 
long rangeMin, long rangeMax, const QString& des)
        : Command(curveview->get_context(), des)
 {
        m_node = node;
+       m_rangeMin = rangeMin;
+       m_rangeMax = rangeMax;
        m_curveView = curveview;
        m_scalefactor = scalefactor;
 }
@@ -154,6 +158,12 @@
                m_newPos.setY(1.0);
        }
        
+       if (m_newPos.x() < m_rangeMin) {
+               m_newPos.setX(m_rangeMin);
+       } else if (m_rangeMax != -1 && m_newPos.x() > m_rangeMax) {
+               m_newPos.setX(m_rangeMax);
+       }
+
        return do_action();
 }
 
@@ -363,15 +373,21 @@
        QPoint point((int)event->pos().x(), (int)event->pos().y());
        
        update_softselected_node(point);
+
+       if (m_blinkingNode) {
+               setCursor(themer()->get_cursor("Default"));
+       } else {
+               setCursor(themer()->get_cursor("AudioClip"));
+       }
 //     printf("mouse x,y pos %d,%d\n", point.x(), point.y());
        
 //     printf("\n");
 }
 
 
-void CurveView::update_softselected_node( QPoint pos )
+void CurveView::update_softselected_node( QPoint pos , bool force)
 {
-       if (ie().is_holding()) {
+       if (ie().is_holding() && !force) {
                return;
        }
        
@@ -394,12 +410,18 @@
                }
        }
        
+       if ((pos - QPoint(4, 4) - QPoint((int)m_blinkingNode->x(), 
(int)m_blinkingNode->y())).manhattanLength() > 10) {
+               m_blinkingNode = 0;
+       }
+       
        if (prevNode && (prevNode != m_blinkingNode) ) {
                prevNode->set_color(themer()->get_color("CurveNode:default"));
                prevNode->update();
                prevNode->decrease_size();
+               if (m_blinkingNode) {
                m_blinkingNode->increase_size();
        }
+       }
        if (!prevNode && m_blinkingNode) {
                m_blinkingNode->increase_size();
        }
@@ -459,13 +481,27 @@
 Command* CurveView::drag_node()
 {
        PENTER;
-/*     QPoint pos(cpointer().on_first_input_event_scene_x(), 
cpointer().on_first_input_event_scene_y());
-       update_softselected_node(pos);*/
+
+       QPointF origPos(mapFromScene(cpointer().scene_pos()));
+
+       update_softselected_node(QPoint((int)origPos.x(), (int)origPos.y()), 
true);
        
        if (m_blinkingNode) {
-               return new DragNode(m_blinkingNode->get_curve_node(), this, 
m_sv->scalefactor, tr("Drag Node"));
+               long min = 0;
+               long max = -1;
+               QList<CurveNode* >* nodeList = m_curve->get_nodes();
+               CurveNode* node = m_blinkingNode->get_curve_node();
+               int index = nodeList->indexOf(node);
+
+               if (index > 0) {
+                       min = nodeList->at(index-1)->get_when() + 1;
        }
-       return 0;
+               if (nodeList->size() > index + 1) {
+                       max = nodeList->at(index+1)->get_when() - 1;
+               }
+               return new DragNode(m_blinkingNode->get_curve_node(), this, 
m_sv->scalefactor, min, max, tr("Drag Node"));
+       }
+       return ie().did_not_implement();
 }
 
 void CurveView::node_moved( )

Index: CurveView.h
===================================================================
RCS file: /sources/traverso/traverso/src/traverso/songcanvas/CurveView.h,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -b -r1.7 -r1.8
--- CurveView.h 23 Feb 2007 13:54:33 -0000      1.7
+++ CurveView.h 25 Apr 2007 01:34:02 -0000      1.8
@@ -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: CurveView.h,v 1.7 2007/02/23 13:54:33 r_sijrier Exp $
+$Id: CurveView.h,v 1.8 2007/04/25 01:34:02 benjie Exp $
 */
 
 #ifndef CURVE_VIEW_H
@@ -66,7 +66,7 @@
        int             m_blinkColorDirection;
        QList<CurveNodeView*>   m_nodeViews;
        
-       void update_softselected_node(QPoint pos);
+       void update_softselected_node(QPoint pos, bool force = false);
 
 public slots:
        Command* add_node();




reply via email to

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