diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index f2ab3e2ac3..67f1ce37e4 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -1992,7 +1992,7 @@ RegionMoveDrag::finished_no_copy ( No need to do anything for copies as they are fake regions which will be deleted. */ - rv->get_canvas_group()->reparent (dest_rtv->view()->canvas_item()); + rv->get_canvas_group()->reparent (dest_rtv->view()->region_canvas()); rv->get_canvas_group()->set_y_position (i->initial_y); rv->drag_end (); @@ -2190,7 +2190,7 @@ RegionMotionDrag::aborted (bool) TimeAxisView* tv = &(rv->get_time_axis_view ()); RouteTimeAxisView* rtv = dynamic_cast (tv); assert (rtv); - rv->get_canvas_group()->reparent (rtv->view()->canvas_item()); + rv->get_canvas_group()->reparent (rtv->view()->region_canvas()); rv->get_canvas_group()->set_y_position (0); rv->drag_end (); rv->move (-_total_x_delta, 0); @@ -2248,7 +2248,7 @@ RegionInsertDrag::finished (GdkEvent * event, bool) RouteTimeAxisView* dest_rtv = dynamic_cast (_time_axis_views[pos]); - _primary->get_canvas_group()->reparent (dest_rtv->view()->canvas_item()); + _primary->get_canvas_group()->reparent (dest_rtv->view()->region_canvas()); _primary->get_canvas_group()->set_y_position (0); boost::shared_ptr playlist = dest_rtv->playlist(); diff --git a/gtk2_ardour/ghostregion.cc b/gtk2_ardour/ghostregion.cc index d028e59586..f5158a041a 100644 --- a/gtk2_ardour/ghostregion.cc +++ b/gtk2_ardour/ghostregion.cc @@ -208,7 +208,7 @@ MidiGhostRegion::MidiGhostRegion(MidiRegionView& rv, TimeAxisView& source_tv, double initial_unit_pos) : GhostRegion (rv, - msv.midi_underlay_group, + msv.midi_underlay(), msv.trackview(), source_tv, initial_unit_pos) diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc index d4f6885994..6447b1f878 100644 --- a/gtk2_ardour/midi_region_view.cc +++ b/gtk2_ardour/midi_region_view.cc @@ -3687,9 +3687,9 @@ MidiRegionView::note_mouse_position (float x_fraction, float /*y_fraction*/, boo uint32_t MidiRegionView::get_fill_color() const { - const std::string mod_name = (_dragging ? "dragging region" : + const std::string mod_name = _dragging ? "dragging region" : trackview.editor().internal_editing() ? "editable region" : - "midi frame base"); + (_region->opaque() && !_region->muted ()) ? "opaque region base" : "transparent region base"; if (_selected) { diff --git a/gtk2_ardour/midi_streamview.cc b/gtk2_ardour/midi_streamview.cc index 10de7e632d..0473930b96 100644 --- a/gtk2_ardour/midi_streamview.cc +++ b/gtk2_ardour/midi_streamview.cc @@ -74,9 +74,15 @@ MidiStreamView::MidiStreamView (MidiTimeAxisView& tv) , _note_lines (0) , _updates_suspended (false) { + /* use a group dedicated to MIDI underlays. Audio underlays are not in this group. */ - midi_underlay_group = new ArdourCanvas::Container (_canvas_group); - midi_underlay_group->lower_to_bottom(); + _midi_underlay = new ArdourCanvas::Container (_canvas_group); + _midi_underlay->lower_to_bottom(); + + /* use a dedicated group for MIDI regions (on top of the grid and lines) */ + _region_group = new ArdourCanvas::Container (_canvas_group); + _region_group->raise_to_top (); + _region_group->set_render_with_alpha (UIConfiguration::instance().modifier ("region alpha").a()); /* put the note lines in the timeaxisview's group, so it can be put below ghost regions from MIDI underlays @@ -117,11 +123,11 @@ MidiStreamView::create_region_view (boost::shared_ptr r, bool /*wfd*/, b RegionView* region_view = NULL; if (recording) { region_view = new MidiRegionView ( - _canvas_group, _trackview, region, + _region_group, _trackview, region, _samples_per_pixel, region_color, recording, TimeAxisViewItem::Visibility(TimeAxisViewItem::ShowFrame)); } else { - region_view = new MidiRegionView (_canvas_group, _trackview, region, + region_view = new MidiRegionView (_region_group, _trackview, region, _samples_per_pixel, region_color); } @@ -579,6 +585,7 @@ MidiStreamView::setup_rec_box () void MidiStreamView::color_handler () { + _region_group->set_render_with_alpha (UIConfiguration::instance().modifier ("region alpha").a()); draw_note_lines (); if (_trackview.is_midi_track()) { diff --git a/gtk2_ardour/midi_streamview.h b/gtk2_ardour/midi_streamview.h index ed741fdd99..7aae4c2fe8 100644 --- a/gtk2_ardour/midi_streamview.h +++ b/gtk2_ardour/midi_streamview.h @@ -72,7 +72,6 @@ public: }; Gtk::Adjustment note_range_adjustment; - ArdourCanvas::Container* midi_underlay_group; void set_note_range(VisibleNoteRange r); @@ -114,10 +113,16 @@ public: void suspend_updates (); void resume_updates (); + ArdourCanvas::Container* midi_underlay () const { return _midi_underlay; } + ArdourCanvas::Container* region_canvas () const { return _region_group; } + protected: void setup_rec_box (); void update_rec_box (); + ArdourCanvas::Container* _midi_underlay; + ArdourCanvas::Container* _region_group; + private: RegionView* add_region_view_internal ( diff --git a/gtk2_ardour/streamview.h b/gtk2_ardour/streamview.h index 2a9020e563..47025d81b6 100644 --- a/gtk2_ardour/streamview.h +++ b/gtk2_ardour/streamview.h @@ -86,7 +86,7 @@ public: virtual bool can_change_layer_display() const { return true; } LayerDisplay layer_display () const { return _layer_display; } - ArdourCanvas::Container* canvas_item() { return _canvas_group; } + virtual ArdourCanvas::Container* region_canvas () const { return _canvas_group; } enum ColorTarget { RegionColor,