[Top][All Lists]
[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();
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Traverso-commit] traverso/src/traverso/songcanvas CurveView.cpp ...,
Ben Levitt <=