[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Traverso-commit] traverso/src/commands MoveClip.cpp MoveClip.h
From: |
Remon Sijrier |
Subject: |
[Traverso-commit] traverso/src/commands MoveClip.cpp MoveClip.h |
Date: |
Fri, 13 Apr 2007 12:07:00 +0000 |
CVSROOT: /sources/traverso
Module name: traverso
Changes by: Remon Sijrier <r_sijrier> 07/04/13 12:07:00
Modified files:
src/commands : MoveClip.cpp MoveClip.h
Log message:
* added calculate_snap_diff() function to cleanup jog() a bit
* snap to prev/next works a bit better now, but still needs more
work....
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/traverso/src/commands/MoveClip.cpp?cvsroot=traverso&r1=1.32&r2=1.33
http://cvs.savannah.gnu.org/viewcvs/traverso/src/commands/MoveClip.h?cvsroot=traverso&r1=1.17&r2=1.18
Patches:
Index: MoveClip.cpp
===================================================================
RCS file: /sources/traverso/traverso/src/commands/MoveClip.cpp,v
retrieving revision 1.32
retrieving revision 1.33
diff -u -b -r1.32 -r1.33
--- MoveClip.cpp 13 Apr 2007 11:12:30 -0000 1.32
+++ MoveClip.cpp 13 Apr 2007 12:07:00 -0000 1.33
@@ -150,7 +150,7 @@
}
m_originTrack = m_targetTrack = m_clip->get_track();
- m_originalTrackFirstFrame = d->snappos =
m_clip->get_track_start_frame();
+ m_originalTrackFirstFrame = 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());
@@ -292,7 +292,6 @@
int MoveClip::jog()
{
-
if (! m_clip || d->bypassjog) {
return 0;
}
@@ -304,18 +303,14 @@
d->origPos = cpointer().pos();
-// printf("newPos x, y is %f, %f\n", newPos.x(), newPos.y());
-
if (m_actionType != "anchored_left_edge_move" && m_actionType !=
"anchored_right_edge_move") {
TrackView* trackView =
d->sv->get_trackview_under(cpointer().scene_pos());
if (!trackView) {
// printf("no trackview returned\n");
} else if (trackView != d->view->get_trackview()) {
- // printf("Setting new TrackView!\n");
d->view->set_trackview(trackView);
d->view->setParentItem(trackView);
m_targetTrack = trackView->get_track();
- // printf("track id is %d\n", m_targetTrack->get_id());
}
}
@@ -325,56 +320,15 @@
int diff_f = (cpointer().x() - d->origXPos - scrollbardif) *
d->sv->scalefactor;
long newTrackStartFrame = d->origTrackStartFrame + diff_f;
nframes_t newTrackEndFrame = d->origTrackEndFrame + diff_f;
-// printf("newTrackStartFrame is %d\n", newTrackStartFrame);
- // attention: newTrackStartFrame is unsigned, can't check for negative
values
if (newTrackStartFrame < 0) {
newTrackStartFrame = 0;
}
- // "nframe_t" domain, but must be signed ints because they can become
negative
- int snapStartDiff = 0;
- int snapEndDiff = 0;
- int snapDiff = 0;
-
if (m_song->is_snap_on()) {
-
- SnapList* slist = m_song->get_snap_list();
-
- // check if there is anything to snap
- bool start_snapped = false;
- bool end_snapped = false;
- if (m_actionType != "anchored_right_edge_move" &&
- slist->is_snap_value(newTrackStartFrame)) {
- start_snapped = true;
- }
- if (m_actionType != "anchored_left_edge_move" &&
- slist->is_snap_value(newTrackEndFrame)) {
- end_snapped = true;
- }
-
- if (start_snapped) {
- snapStartDiff =
slist->get_snap_diff(newTrackStartFrame) / d->sv->scalefactor;
- snapDiff = snapStartDiff; // in case both ends snapped,
change this value later, else leave it
- }
-
- if (end_snapped) {
- snapEndDiff = slist->get_snap_diff(newTrackEndFrame) /
d->sv->scalefactor;
- snapDiff = snapEndDiff; // in case both ends snapped,
change this value later, else leave it
+ calculate_snap_diff(newTrackStartFrame, newTrackEndFrame);
}
- // If both snapped, check which one is closer. Do not apply
this check if one of the
- // ends hasn't snapped, because it's diff value will be 0 by
default and will always
- // be smaller than the actually snapped value.
- if (start_snapped && end_snapped) {
- if (abs(snapEndDiff) > abs(snapStartDiff))
- snapDiff = snapStartDiff;
- else
- snapDiff = snapEndDiff;
- }
- }
-
- newTrackStartFrame -= snapDiff * d->sv->scalefactor;
m_posDiff = newTrackStartFrame - m_originalTrackFirstFrame;
// store the new position only if the clip was moved, but not if it
stuck to a snap position
@@ -396,14 +350,14 @@
newPos.setY(d->view->pos().y());
if (d->resync) {
m_clip->set_track_start_frame(newTrackStartFrame);
- if (m_actionType == "anchored_left_edge_move")
+ if (m_actionType == "anchored_left_edge_move") {
m_clip->set_right_edge(m_oldOppositeEdge);
+ }
} else {
d->view->setPos(newPos);
}
}
-
d->sv->update_shuttle_factor();
return 1;
@@ -414,18 +368,28 @@
{
Q_UNUSED(autorepeat);
d->bypassjog = true;
- 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);
+ long trackStartFrame =
m_song->get_snap_list()->next_snap_pos(m_clip->get_track_start_frame());
+ nframes_t trackEndFrame =
m_song->get_snap_list()->next_snap_pos(m_clip->get_track_end_frame());
+ int startdiff = trackStartFrame - m_clip->get_track_start_frame();
+ int enddiff = trackEndFrame - m_clip->get_track_end_frame();
+ int diff = (abs(startdiff) < abs(enddiff)) ? startdiff : enddiff;
+ trackStartFrame = m_clip->get_track_start_frame() + diff;
+ m_posDiff = trackStartFrame - m_originalTrackFirstFrame;
+ m_clip->set_track_start_frame(trackStartFrame);
}
void MoveClip::prev_snap_pos(bool autorepeat)
{
Q_UNUSED(autorepeat);
d->bypassjog = true;
- 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);
+ long trackStartFrame =
m_song->get_snap_list()->prev_snap_pos(m_clip->get_track_start_frame());
+ nframes_t trackEndFrame =
m_song->get_snap_list()->prev_snap_pos(m_clip->get_track_end_frame());
+ int startdiff = trackStartFrame - m_clip->get_track_start_frame();
+ int enddiff = trackEndFrame - m_clip->get_track_end_frame();
+ int diff = (abs(startdiff) < abs(enddiff)) ? startdiff : enddiff;
+ trackStartFrame = m_clip->get_track_start_frame() + diff;
+ m_posDiff = trackStartFrame - m_originalTrackFirstFrame;
+ m_clip->set_track_start_frame(trackStartFrame);
}
void MoveClip::move_to_start(bool autorepeat)
@@ -444,5 +408,48 @@
Command::process_command(track->add_clip(m_clip, false));
}
+void MoveClip::calculate_snap_diff(long& leftframe, nframes_t rightframe)
+{
+ // "nframe_t" domain, but must be signed ints because they can become
negative
+ int snapStartDiff = 0;
+ int snapEndDiff = 0;
+ int snapDiff = 0;
+
+ SnapList* slist = m_song->get_snap_list();
+
+ // check if there is anything to snap
+ bool start_snapped = false;
+ bool end_snapped = false;
+ if (slist->is_snap_value(leftframe) && m_actionType !=
"anchored_right_edge_move") {
+ start_snapped = true;
+ }
+
+ if (slist->is_snap_value(rightframe) && m_actionType !=
"anchored_left_edge_move") {
+ end_snapped = true;
+ }
+
+ if (start_snapped) {
+ snapStartDiff = slist->get_snap_diff(leftframe) /
d->sv->scalefactor;
+ snapDiff = snapStartDiff; // in case both ends snapped, change
this value later, else leave it
+ }
+
+ if (end_snapped) {
+ snapEndDiff = slist->get_snap_diff(rightframe) /
d->sv->scalefactor;
+ snapDiff = snapEndDiff; // in case both ends snapped, change
this value later, else leave it
+ }
+
+ // If both snapped, check which one is closer. Do not apply this check
if one of the
+ // ends hasn't snapped, because it's diff value will be 0 by default
and will always
+ // be smaller than the actually snapped value.
+ if (start_snapped && end_snapped) {
+ if (abs(snapEndDiff) > abs(snapStartDiff))
+ snapDiff = snapStartDiff;
+ else
+ snapDiff = snapEndDiff;
+ }
+
+ leftframe -= snapDiff * d->sv->scalefactor;
+}
// eof
+
Index: MoveClip.h
===================================================================
RCS file: /sources/traverso/traverso/src/commands/MoveClip.h,v
retrieving revision 1.17
retrieving revision 1.18
diff -u -b -r1.17 -r1.18
--- MoveClip.h 13 Apr 2007 11:12:30 -0000 1.17
+++ MoveClip.h 13 Apr 2007 12:07:00 -0000 1.18
@@ -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.17 2007/04/13 11:12:30 r_sijrier Exp $
+ $Id: MoveClip.h,v 1.18 2007/04/13 12:07:00 r_sijrier Exp $
*/
#ifndef MOVECLIPACTION_H
@@ -76,13 +76,13 @@
nframes_t origTrackEndFrame;
bool resync;
bool bypassjog;
- nframes_t snappos;
};
Data* d;
void init_data(bool isCopy=false);
+ void calculate_snap_diff(long& leftframe, nframes_t rightframe);
public slots:
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Traverso-commit] traverso/src/commands MoveClip.cpp MoveClip.h,
Remon Sijrier <=