From abf64beac66bf340b52b7d29e881536d444d13d6 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Fri, 26 Sep 2008 17:18:22 +0000 Subject: [PATCH] Fix audio region copy-drag, partially fix MIDI region copy-drag (thanks torbenh). git-svn-id: svn://localhost/ardour2/branches/3.0@3809 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/audio_region_view.h | 4 ++-- gtk2_ardour/editor_mouse.cc | 23 ++++++++++-------- gtk2_ardour/midi_region_view.cc | 41 +++++++++++++++++++++++++++++++++ gtk2_ardour/midi_region_view.h | 3 +++ 4 files changed, 59 insertions(+), 12 deletions(-) diff --git a/gtk2_ardour/audio_region_view.h b/gtk2_ardour/audio_region_view.h index 79adbd0b62..31c5439079 100644 --- a/gtk2_ardour/audio_region_view.h +++ b/gtk2_ardour/audio_region_view.h @@ -62,8 +62,8 @@ class AudioRegionView : public RegionView bool recording, TimeAxisViewItem::Visibility); - AudioRegionView (const AudioRegionView& other); - AudioRegionView (const AudioRegionView& other, boost::shared_ptr); + AudioRegionView (const AudioRegionView& other); + AudioRegionView (const AudioRegionView& other, boost::shared_ptr); ~AudioRegionView (); diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index 32b84434b1..ca71c13c48 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -3329,21 +3329,24 @@ Editor::possibly_copy_regions_during_grab (GdkEvent* event) RegionView* nrv; rv = (*i); - AudioRegionView* arv = dynamic_cast(rv); MidiRegionView* mrv = dynamic_cast(rv); - - if (arv) { - nrv = new AudioRegionView (*arv); - } else if (mrv) { - nrv = new MidiRegionView (*mrv); - } else { - continue; - } - + const boost::shared_ptr original = rv->region(); boost::shared_ptr region_copy = RegionFactory::create (original); + if (arv) { + boost::shared_ptr audioregion_copy + = boost::dynamic_pointer_cast(region_copy); + nrv = new AudioRegionView (*arv, audioregion_copy); + } else if (mrv) { + boost::shared_ptr midiregion_copy + = boost::dynamic_pointer_cast(region_copy); + nrv = new MidiRegionView (*mrv, midiregion_copy); + } else { + continue; + } + nrv->get_canvas_group()->show (); new_regionviews.push_back (nrv); } diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index 90fcce84ea..8fe67afdd3 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -91,6 +91,47 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView & _note_group->raise_to_top(); } + +MidiRegionView::MidiRegionView (const MidiRegionView& other) + : RegionView (other) + , _force_channel(-1) + , _last_channel_selection(0xFFFF) + , _default_note_length(0.0) + , _active_notes(0) + , _note_group(new ArdourCanvas::Group(*get_canvas_group())) + , _delta_command(NULL) + , _mouse_state(None) + , _pressed_button(0) +{ + Gdk::Color c; + int r,g,b,a; + + UINT_TO_RGBA (other.fill_color, &r, &g, &b, &a); + c.set_rgb_p (r/255.0, g/255.0, b/255.0); + + init (c, false); +} + +MidiRegionView::MidiRegionView (const MidiRegionView& other, boost::shared_ptr other_region) + : RegionView (other, boost::shared_ptr (other_region)) + , _force_channel(-1) + , _last_channel_selection(0xFFFF) + , _default_note_length(0.0) + , _active_notes(0) + , _note_group(new ArdourCanvas::Group(*get_canvas_group())) + , _delta_command(NULL) + , _mouse_state(None) + , _pressed_button(0) +{ + Gdk::Color c; + int r,g,b,a; + + UINT_TO_RGBA (other.fill_color, &r, &g, &b, &a); + c.set_rgb_p (r/255.0, g/255.0, b/255.0); + + init (c, true); +} + void MidiRegionView::init (Gdk::Color& basic_color, bool wfd) { diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h index fe2655333c..6010e2253f 100644 --- a/gtk2_ardour/midi_region_view.h +++ b/gtk2_ardour/midi_region_view.h @@ -57,6 +57,9 @@ class MidiRegionView : public RegionView boost::shared_ptr, double initial_samples_per_unit, Gdk::Color& basic_color); + + MidiRegionView (const MidiRegionView& other); + MidiRegionView (const MidiRegionView& other, boost::shared_ptr); ~MidiRegionView ();