basic xfade dragging
git-svn-id: svn://localhost/ardour2/branches/3.0@12236 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
25655e1a6d
commit
e3a9576aed
@ -1530,12 +1530,18 @@ void
|
||||
AudioRegionView::redraw_start_xfade ()
|
||||
{
|
||||
boost::shared_ptr<AudioRegion> ar (audio_region());
|
||||
|
||||
|
||||
if (!ar->fade_in() || ar->fade_in()->empty()) {
|
||||
return;
|
||||
}
|
||||
|
||||
int32_t const npoints = trackview.editor().frame_to_pixel (ar->fade_in()->back()->when);
|
||||
redraw_start_xfade_to (ar, ar->fade_in()->back()->when);
|
||||
}
|
||||
|
||||
void
|
||||
AudioRegionView::redraw_start_xfade_to (boost::shared_ptr<AudioRegion> ar, framecnt_t len)
|
||||
{
|
||||
int32_t const npoints = trackview.editor().frame_to_pixel (len);
|
||||
|
||||
if (npoints < 3) {
|
||||
return;
|
||||
@ -1560,6 +1566,7 @@ AudioRegionView::redraw_start_xfade ()
|
||||
start_xfade_rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_ActiveCrossfade.get();
|
||||
start_xfade_rect->property_outline_pixels() = 0;
|
||||
start_xfade_rect->signal_event().connect (sigc::bind (sigc::mem_fun (PublicEditor::instance(), &PublicEditor::canvas_start_xfade_event), start_xfade_rect, this));
|
||||
start_xfade_rect->set_data ("regionview", this);
|
||||
}
|
||||
|
||||
Points* points = get_canvas_points ("xfade edit redraw", npoints);
|
||||
@ -1623,7 +1630,13 @@ AudioRegionView::redraw_end_xfade ()
|
||||
return;
|
||||
}
|
||||
|
||||
int32_t const npoints = trackview.editor().frame_to_pixel (ar->fade_out()->back()->when);
|
||||
redraw_end_xfade_to (ar, ar->fade_out()->back()->when);
|
||||
}
|
||||
|
||||
void
|
||||
AudioRegionView::redraw_end_xfade_to (boost::shared_ptr<AudioRegion> ar, framecnt_t len)
|
||||
{
|
||||
int32_t const npoints = trackview.editor().frame_to_pixel (len);
|
||||
|
||||
if (npoints < 3) {
|
||||
return;
|
||||
@ -1647,8 +1660,8 @@ AudioRegionView::redraw_end_xfade ()
|
||||
end_xfade_rect->property_fill() = true;;
|
||||
end_xfade_rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_ActiveCrossfade.get();
|
||||
end_xfade_rect->property_outline_pixels() = 0;
|
||||
|
||||
end_xfade_rect->signal_event().connect (sigc::bind (sigc::mem_fun (PublicEditor::instance(), &PublicEditor::canvas_end_xfade_event), end_xfade_rect, this));
|
||||
end_xfade_rect->set_data ("regionview", this);
|
||||
}
|
||||
|
||||
Points* points = get_canvas_points ("xfade edit redraw", npoints);
|
||||
@ -1656,7 +1669,7 @@ AudioRegionView::redraw_end_xfade ()
|
||||
|
||||
ar->fade_out()->curve().get_vector (0, ar->fade_out()->back()->when, vec.get(), npoints);
|
||||
|
||||
double rend = trackview.editor().frame_to_pixel (_region->length() - ar->fade_out()->back()->when);
|
||||
double rend = trackview.editor().frame_to_pixel (_region->length() - len);
|
||||
|
||||
for (int i = 0, pci = 0; i < npoints; ++i) {
|
||||
Gnome::Art::Point &p ((*points)[pci++]);
|
||||
@ -1706,6 +1719,7 @@ AudioRegionView::redraw_end_xfade ()
|
||||
|
||||
delete points;
|
||||
}
|
||||
|
||||
void
|
||||
AudioRegionView::drag_start ()
|
||||
{
|
||||
@ -1755,3 +1769,4 @@ AudioRegionView::drag_end ()
|
||||
end_xfade_rect->show ();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -120,6 +120,11 @@ class AudioRegionView : public RegionView
|
||||
void drag_start ();
|
||||
void drag_end ();
|
||||
|
||||
void redraw_start_xfade_to (boost::shared_ptr<ARDOUR::AudioRegion>, framecnt_t);
|
||||
void redraw_end_xfade_to (boost::shared_ptr<ARDOUR::AudioRegion>, framecnt_t);
|
||||
void redraw_start_xfade ();
|
||||
void redraw_end_xfade ();
|
||||
|
||||
protected:
|
||||
|
||||
/* this constructor allows derived types
|
||||
@ -190,9 +195,6 @@ class AudioRegionView : public RegionView
|
||||
|
||||
void transients_changed();
|
||||
|
||||
void redraw_start_xfade ();
|
||||
void redraw_end_xfade ();
|
||||
|
||||
private:
|
||||
void setup_fade_handle_positions ();
|
||||
|
||||
|
@ -4576,15 +4576,60 @@ CrossfadeEdgeDrag::start_grab (GdkEvent* event, Gdk::Cursor *cursor)
|
||||
void
|
||||
CrossfadeEdgeDrag::motion (GdkEvent*, bool)
|
||||
{
|
||||
double distance = _drags->current_pointer_x() - grab_x();
|
||||
double new_length;
|
||||
framecnt_t len;
|
||||
|
||||
boost::shared_ptr<AudioRegion> ar (arv->audio_region());
|
||||
|
||||
if (start) {
|
||||
len = ar->fade_in()->back()->when;
|
||||
} else {
|
||||
len = ar->fade_out()->back()->when;
|
||||
}
|
||||
|
||||
new_length = len + _editor->unit_to_frame (distance);
|
||||
|
||||
if (start) {
|
||||
arv->redraw_start_xfade_to (ar, new_length);
|
||||
} else {
|
||||
arv->redraw_end_xfade_to (ar, new_length);
|
||||
}
|
||||
|
||||
// _editor->update_canvas_now ();
|
||||
}
|
||||
|
||||
void
|
||||
CrossfadeEdgeDrag::finished (GdkEvent*, bool)
|
||||
{
|
||||
double distance = _drags->current_pointer_x() - grab_x();
|
||||
double new_length;
|
||||
framecnt_t len;
|
||||
|
||||
boost::shared_ptr<AudioRegion> ar (arv->audio_region());
|
||||
|
||||
if (start) {
|
||||
len = ar->fade_in()->back()->when;
|
||||
} else {
|
||||
len = ar->fade_out()->back()->when;
|
||||
}
|
||||
|
||||
new_length = len + _editor->unit_to_frame (distance);
|
||||
|
||||
if (start) {
|
||||
ar->set_fade_in_length (new_length);
|
||||
} else {
|
||||
ar->set_fade_out_length (new_length);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
CrossfadeEdgeDrag::aborted (bool)
|
||||
{
|
||||
if (start) {
|
||||
arv->redraw_start_xfade ();
|
||||
} else {
|
||||
arv->redraw_end_xfade ();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -985,10 +985,14 @@ class CrossfadeEdgeDrag : public Drag
|
||||
void finished (GdkEvent*, bool);
|
||||
void aborted (bool);
|
||||
|
||||
bool x_movement_matters () const {
|
||||
bool y_movement_matters () const {
|
||||
return false;
|
||||
}
|
||||
|
||||
virtual std::pair<ARDOUR::framecnt_t, int> move_threshold () const {
|
||||
return std::make_pair (1, 1);
|
||||
}
|
||||
|
||||
private:
|
||||
AudioRegionView* arv;
|
||||
bool start;
|
||||
|
@ -940,7 +940,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
||||
break;
|
||||
|
||||
case EndCrossFadeItem:
|
||||
_drags->set (new CrossfadeEdgeDrag (this, reinterpret_cast<AudioRegionView*>(item->get_data("regionview")), item, true), event, 0);
|
||||
_drags->set (new CrossfadeEdgeDrag (this, reinterpret_cast<AudioRegionView*>(item->get_data("regionview")), item, false), event, 0);
|
||||
break;
|
||||
|
||||
case FeatureLineItem:
|
||||
|
Loading…
Reference in New Issue
Block a user