Fix stacking of MIDI stream views to match that of audio.
Make copy and brush operations type generic (i.e. fix brushing for MIDI regions). git-svn-id: svn://localhost/ardour2/branches/3.0@3724 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
@@ -392,8 +392,9 @@ AudioStreamView::redisplay_diskstream ()
|
||||
apl->foreach_crossfade (this, &AudioStreamView::add_crossfade);
|
||||
}
|
||||
|
||||
RegionViewList copy;
|
||||
RegionViewList copy;
|
||||
|
||||
/* Place regions */
|
||||
for (i = region_views.begin(); i != region_views.end(); ) {
|
||||
tmp = i;
|
||||
tmp++;
|
||||
@@ -407,10 +408,8 @@ AudioStreamView::redisplay_diskstream ()
|
||||
(*i)->enable_display(true);
|
||||
}
|
||||
|
||||
/*
|
||||
sort regionviews by layer so that when we call region_layered ()
|
||||
the canvas layering works out (in non-stacked mode).
|
||||
*/
|
||||
/* Sort regionviews by layer so that when we call region_layered ()
|
||||
the canvas layering works out (in non-stacked mode). */
|
||||
|
||||
if (copy.size() == 0) {
|
||||
copy.push_front((*i));
|
||||
@@ -433,7 +432,6 @@ AudioStreamView::redisplay_diskstream ()
|
||||
}
|
||||
|
||||
for (RegionViewList::iterator j = copy.begin(); j != copy.end(); ++j) {
|
||||
|
||||
if ((*j)->region()->layer() >= (*i)->region()->layer()) {
|
||||
copy.insert(j, (*i));
|
||||
break;
|
||||
@@ -456,12 +454,11 @@ AudioStreamView::redisplay_diskstream ()
|
||||
xi = tmpx;
|
||||
}
|
||||
|
||||
/* now fix canvas layering */
|
||||
|
||||
/* Fix canvas layering */
|
||||
for (RegionViewList::iterator j = copy.begin(); j != copy.end(); ++j) {
|
||||
(*j)->enable_display(true);
|
||||
(*j)->set_height (height);
|
||||
region_layered (*j);
|
||||
(*j)->enable_display(true);
|
||||
(*j)->set_height (height);
|
||||
region_layered (*j);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3212,9 +3212,8 @@ Editor::possibly_copy_regions_during_grab (GdkEvent* event)
|
||||
continue;
|
||||
}
|
||||
|
||||
const boost::shared_ptr<const Region> original = arv->region();
|
||||
const boost::shared_ptr<const Region> original = rv->region();
|
||||
boost::shared_ptr<Region> region_copy = RegionFactory::create (original);
|
||||
boost::shared_ptr<AudioRegion> ar = boost::dynamic_pointer_cast<AudioRegion> (region_copy);
|
||||
|
||||
nrv->get_canvas_group()->show ();
|
||||
new_regionviews.push_back (nrv);
|
||||
@@ -3918,7 +3917,7 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
|
||||
disappear on copying regions
|
||||
*/
|
||||
|
||||
//rv->get_time_axis_view().reveal_dependent_views (*rv);
|
||||
//rv->get_time_axis_view().reveal_dependent_views (*rv);
|
||||
|
||||
} else if (changed_tracks) {
|
||||
new_region = RegionFactory::create (rv->region());
|
||||
@@ -5546,10 +5545,6 @@ Editor::mouse_brush_insert_region (RegionView* rv, nframes64_t pos)
|
||||
{
|
||||
/* no brushing without a useful snap setting */
|
||||
|
||||
// FIXME
|
||||
AudioRegionView* arv = dynamic_cast<AudioRegionView*>(rv);
|
||||
assert(arv);
|
||||
|
||||
switch (snap_mode) {
|
||||
case SnapMagnetic:
|
||||
return; /* can't work because it allows region to be placed anywhere */
|
||||
@@ -5571,7 +5566,7 @@ Editor::mouse_brush_insert_region (RegionView* rv, nframes64_t pos)
|
||||
return;
|
||||
}
|
||||
|
||||
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*>(&arv->get_time_axis_view());
|
||||
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*>(&rv->get_time_axis_view());
|
||||
|
||||
if (rtv == 0 || !rtv->is_track()) {
|
||||
return;
|
||||
@@ -5581,7 +5576,7 @@ Editor::mouse_brush_insert_region (RegionView* rv, nframes64_t pos)
|
||||
double speed = rtv->get_diskstream()->speed();
|
||||
|
||||
XMLNode &before = playlist->get_state();
|
||||
playlist->add_region (boost::dynamic_pointer_cast<AudioRegion> (RegionFactory::create (arv->audio_region())), (nframes64_t) (pos * speed));
|
||||
playlist->add_region (RegionFactory::create (rv->region()), (nframes64_t) (pos * speed));
|
||||
XMLNode &after = playlist->get_state();
|
||||
session->add_command(new MementoCommand<Playlist>(*playlist.get(), &before, &after));
|
||||
|
||||
|
||||
@@ -618,6 +618,10 @@ void
|
||||
MidiRegionView::set_y_position_and_height (double y, double h)
|
||||
{
|
||||
RegionView::set_y_position_and_height(y, h - 1);
|
||||
|
||||
/* XXX why is this code here */
|
||||
|
||||
_height = h;
|
||||
|
||||
if (_enable_display) {
|
||||
|
||||
|
||||
@@ -190,21 +190,23 @@ MidiStreamView::redisplay_diskstream ()
|
||||
mrv->midi_region()->midi_source(0)->load_model();
|
||||
}
|
||||
|
||||
//_lowest_note = 60; // middle C
|
||||
//_highest_note = _lowest_note + 11;
|
||||
|
||||
if (_trackview.is_midi_track()) {
|
||||
_trackview.get_diskstream()->playlist()->foreach_region (static_cast<StreamView*>(this), &StreamView::add_region_view);
|
||||
_trackview.get_diskstream()->playlist()->foreach_region (
|
||||
static_cast<StreamView*>(this), &StreamView::add_region_view);
|
||||
}
|
||||
|
||||
/* Always display at least one octave */
|
||||
if (_highest_note == 127) {
|
||||
if (_lowest_note > (127 - 11))
|
||||
if (_lowest_note > (127 - 11)) {
|
||||
_lowest_note = 127 - 11;
|
||||
}
|
||||
} else if (_highest_note < _lowest_note + 11) {
|
||||
_highest_note = _lowest_note + 11;
|
||||
}
|
||||
|
||||
RegionViewList copy;
|
||||
|
||||
/* Place regions */
|
||||
for (i = region_views.begin(); i != region_views.end(); ) {
|
||||
tmp = i;
|
||||
tmp++;
|
||||
@@ -216,16 +218,48 @@ MidiStreamView::redisplay_diskstream ()
|
||||
(*i)->enable_display(true);
|
||||
(*i)->set_y_position_and_height(0, height); // apply note range
|
||||
}
|
||||
|
||||
/* Sort regionviews by layer so that when we call region_layered ()
|
||||
the canvas layering works out (in non-stacked mode). */
|
||||
|
||||
if (copy.size() == 0) {
|
||||
copy.push_front((*i));
|
||||
i = tmp;
|
||||
continue;
|
||||
}
|
||||
|
||||
RegionViewList::iterator k = copy.begin();
|
||||
RegionViewList::iterator l = copy.end();
|
||||
l--;
|
||||
|
||||
if ((*i)->region()->layer() <= (*k)->region()->layer()) {
|
||||
copy.push_front((*i));
|
||||
i = tmp;
|
||||
continue;
|
||||
} else if ((*i)->region()->layer() >= (*l)->region()->layer()) {
|
||||
copy.push_back((*i));
|
||||
i = tmp;
|
||||
continue;
|
||||
}
|
||||
|
||||
for (RegionViewList::iterator j = copy.begin(); j != copy.end(); ++j) {
|
||||
if ((*j)->region()->layer() >= (*i)->region()->layer()) {
|
||||
copy.insert(j, (*i));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
i = tmp;
|
||||
}
|
||||
|
||||
/* now fix layering */
|
||||
|
||||
for (RegionViewList::iterator i = region_views.begin(); i != region_views.end(); ++i) {
|
||||
region_layered (*i);
|
||||
/* Fix canvas layering */
|
||||
for (RegionViewList::iterator j = copy.begin(); j != copy.end(); ++j) {
|
||||
(*j)->enable_display(true);
|
||||
(*j)->set_height (height);
|
||||
region_layered (*j);
|
||||
}
|
||||
|
||||
/* Update note range and draw note lines */
|
||||
note_range_adjustment.set_page_size(_highest_note - _lowest_note);
|
||||
note_range_adjustment.set_value(_lowest_note);
|
||||
NoteRangeChanged();
|
||||
|
||||
Reference in New Issue
Block a user