Use a dedicated Canvas Group for MRV
This fixes rendering of opaque MIDI regions (previously MIDI regions were always transparent). This change provides a way to "flatten" layered MIDI regions, while still allowing to show the note-line and grid behind the regions.
This commit is contained in:
parent
1efa5e9a55
commit
f003bee985
@ -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<RouteTimeAxisView*> (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<RouteTimeAxisView*> (_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> playlist = dest_rtv->playlist();
|
||||
|
@ -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)
|
||||
|
@ -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) {
|
||||
|
@ -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<Region> 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()) {
|
||||
|
@ -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 (
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user