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 ()
|
AudioRegionView::redraw_start_xfade ()
|
||||||
{
|
{
|
||||||
boost::shared_ptr<AudioRegion> ar (audio_region());
|
boost::shared_ptr<AudioRegion> ar (audio_region());
|
||||||
|
|
||||||
if (!ar->fade_in() || ar->fade_in()->empty()) {
|
if (!ar->fade_in() || ar->fade_in()->empty()) {
|
||||||
return;
|
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) {
|
if (npoints < 3) {
|
||||||
return;
|
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_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_ActiveCrossfade.get();
|
||||||
start_xfade_rect->property_outline_pixels() = 0;
|
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->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);
|
Points* points = get_canvas_points ("xfade edit redraw", npoints);
|
||||||
@ -1623,7 +1630,13 @@ AudioRegionView::redraw_end_xfade ()
|
|||||||
return;
|
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) {
|
if (npoints < 3) {
|
||||||
return;
|
return;
|
||||||
@ -1647,8 +1660,8 @@ AudioRegionView::redraw_end_xfade ()
|
|||||||
end_xfade_rect->property_fill() = true;;
|
end_xfade_rect->property_fill() = true;;
|
||||||
end_xfade_rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_ActiveCrossfade.get();
|
end_xfade_rect->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_ActiveCrossfade.get();
|
||||||
end_xfade_rect->property_outline_pixels() = 0;
|
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->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);
|
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);
|
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) {
|
for (int i = 0, pci = 0; i < npoints; ++i) {
|
||||||
Gnome::Art::Point &p ((*points)[pci++]);
|
Gnome::Art::Point &p ((*points)[pci++]);
|
||||||
@ -1706,6 +1719,7 @@ AudioRegionView::redraw_end_xfade ()
|
|||||||
|
|
||||||
delete points;
|
delete points;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
AudioRegionView::drag_start ()
|
AudioRegionView::drag_start ()
|
||||||
{
|
{
|
||||||
@ -1755,3 +1769,4 @@ AudioRegionView::drag_end ()
|
|||||||
end_xfade_rect->show ();
|
end_xfade_rect->show ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -120,6 +120,11 @@ class AudioRegionView : public RegionView
|
|||||||
void drag_start ();
|
void drag_start ();
|
||||||
void drag_end ();
|
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:
|
protected:
|
||||||
|
|
||||||
/* this constructor allows derived types
|
/* this constructor allows derived types
|
||||||
@ -190,9 +195,6 @@ class AudioRegionView : public RegionView
|
|||||||
|
|
||||||
void transients_changed();
|
void transients_changed();
|
||||||
|
|
||||||
void redraw_start_xfade ();
|
|
||||||
void redraw_end_xfade ();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void setup_fade_handle_positions ();
|
void setup_fade_handle_positions ();
|
||||||
|
|
||||||
|
@ -4576,15 +4576,60 @@ CrossfadeEdgeDrag::start_grab (GdkEvent* event, Gdk::Cursor *cursor)
|
|||||||
void
|
void
|
||||||
CrossfadeEdgeDrag::motion (GdkEvent*, bool)
|
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
|
void
|
||||||
CrossfadeEdgeDrag::finished (GdkEvent*, bool)
|
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
|
void
|
||||||
CrossfadeEdgeDrag::aborted (bool)
|
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 finished (GdkEvent*, bool);
|
||||||
void aborted (bool);
|
void aborted (bool);
|
||||||
|
|
||||||
bool x_movement_matters () const {
|
bool y_movement_matters () const {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
virtual std::pair<ARDOUR::framecnt_t, int> move_threshold () const {
|
||||||
|
return std::make_pair (1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
AudioRegionView* arv;
|
AudioRegionView* arv;
|
||||||
bool start;
|
bool start;
|
||||||
|
@ -940,7 +940,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case EndCrossFadeItem:
|
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;
|
break;
|
||||||
|
|
||||||
case FeatureLineItem:
|
case FeatureLineItem:
|
||||||
|
Loading…
Reference in New Issue
Block a user