mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-07 15:25:01 +01:00
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
6 changed files with 24 additions and 12 deletions
|
|
@ -1992,7 +1992,7 @@ RegionMoveDrag::finished_no_copy (
|
||||||
No need to do anything for copies as they are fake regions which will be deleted.
|
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->get_canvas_group()->set_y_position (i->initial_y);
|
||||||
rv->drag_end ();
|
rv->drag_end ();
|
||||||
|
|
||||||
|
|
@ -2190,7 +2190,7 @@ RegionMotionDrag::aborted (bool)
|
||||||
TimeAxisView* tv = &(rv->get_time_axis_view ());
|
TimeAxisView* tv = &(rv->get_time_axis_view ());
|
||||||
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (tv);
|
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (tv);
|
||||||
assert (rtv);
|
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->get_canvas_group()->set_y_position (0);
|
||||||
rv->drag_end ();
|
rv->drag_end ();
|
||||||
rv->move (-_total_x_delta, 0);
|
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]);
|
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);
|
_primary->get_canvas_group()->set_y_position (0);
|
||||||
|
|
||||||
boost::shared_ptr<Playlist> playlist = dest_rtv->playlist();
|
boost::shared_ptr<Playlist> playlist = dest_rtv->playlist();
|
||||||
|
|
|
||||||
|
|
@ -208,7 +208,7 @@ MidiGhostRegion::MidiGhostRegion(MidiRegionView& rv,
|
||||||
TimeAxisView& source_tv,
|
TimeAxisView& source_tv,
|
||||||
double initial_unit_pos)
|
double initial_unit_pos)
|
||||||
: GhostRegion (rv,
|
: GhostRegion (rv,
|
||||||
msv.midi_underlay_group,
|
msv.midi_underlay(),
|
||||||
msv.trackview(),
|
msv.trackview(),
|
||||||
source_tv,
|
source_tv,
|
||||||
initial_unit_pos)
|
initial_unit_pos)
|
||||||
|
|
|
||||||
|
|
@ -3687,9 +3687,9 @@ MidiRegionView::note_mouse_position (float x_fraction, float /*y_fraction*/, boo
|
||||||
uint32_t
|
uint32_t
|
||||||
MidiRegionView::get_fill_color() const
|
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" :
|
trackview.editor().internal_editing() ? "editable region" :
|
||||||
"midi frame base");
|
(_region->opaque() && !_region->muted ()) ? "opaque region base" : "transparent region base";
|
||||||
|
|
||||||
|
|
||||||
if (_selected) {
|
if (_selected) {
|
||||||
|
|
|
||||||
|
|
@ -74,9 +74,15 @@ MidiStreamView::MidiStreamView (MidiTimeAxisView& tv)
|
||||||
, _note_lines (0)
|
, _note_lines (0)
|
||||||
, _updates_suspended (false)
|
, _updates_suspended (false)
|
||||||
{
|
{
|
||||||
|
|
||||||
/* use a group dedicated to MIDI underlays. Audio underlays are not in this group. */
|
/* use a group dedicated to MIDI underlays. Audio underlays are not in this group. */
|
||||||
midi_underlay_group = new ArdourCanvas::Container (_canvas_group);
|
_midi_underlay = new ArdourCanvas::Container (_canvas_group);
|
||||||
midi_underlay_group->lower_to_bottom();
|
_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
|
/* put the note lines in the timeaxisview's group, so it
|
||||||
can be put below ghost regions from MIDI underlays
|
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;
|
RegionView* region_view = NULL;
|
||||||
if (recording) {
|
if (recording) {
|
||||||
region_view = new MidiRegionView (
|
region_view = new MidiRegionView (
|
||||||
_canvas_group, _trackview, region,
|
_region_group, _trackview, region,
|
||||||
_samples_per_pixel, region_color, recording,
|
_samples_per_pixel, region_color, recording,
|
||||||
TimeAxisViewItem::Visibility(TimeAxisViewItem::ShowFrame));
|
TimeAxisViewItem::Visibility(TimeAxisViewItem::ShowFrame));
|
||||||
} else {
|
} else {
|
||||||
region_view = new MidiRegionView (_canvas_group, _trackview, region,
|
region_view = new MidiRegionView (_region_group, _trackview, region,
|
||||||
_samples_per_pixel, region_color);
|
_samples_per_pixel, region_color);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -579,6 +585,7 @@ MidiStreamView::setup_rec_box ()
|
||||||
void
|
void
|
||||||
MidiStreamView::color_handler ()
|
MidiStreamView::color_handler ()
|
||||||
{
|
{
|
||||||
|
_region_group->set_render_with_alpha (UIConfiguration::instance().modifier ("region alpha").a());
|
||||||
draw_note_lines ();
|
draw_note_lines ();
|
||||||
|
|
||||||
if (_trackview.is_midi_track()) {
|
if (_trackview.is_midi_track()) {
|
||||||
|
|
|
||||||
|
|
@ -72,7 +72,6 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
Gtk::Adjustment note_range_adjustment;
|
Gtk::Adjustment note_range_adjustment;
|
||||||
ArdourCanvas::Container* midi_underlay_group;
|
|
||||||
|
|
||||||
void set_note_range(VisibleNoteRange r);
|
void set_note_range(VisibleNoteRange r);
|
||||||
|
|
||||||
|
|
@ -114,10 +113,16 @@ public:
|
||||||
void suspend_updates ();
|
void suspend_updates ();
|
||||||
void resume_updates ();
|
void resume_updates ();
|
||||||
|
|
||||||
|
ArdourCanvas::Container* midi_underlay () const { return _midi_underlay; }
|
||||||
|
ArdourCanvas::Container* region_canvas () const { return _region_group; }
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void setup_rec_box ();
|
void setup_rec_box ();
|
||||||
void update_rec_box ();
|
void update_rec_box ();
|
||||||
|
|
||||||
|
ArdourCanvas::Container* _midi_underlay;
|
||||||
|
ArdourCanvas::Container* _region_group;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
RegionView* add_region_view_internal (
|
RegionView* add_region_view_internal (
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,7 @@ public:
|
||||||
virtual bool can_change_layer_display() const { return true; }
|
virtual bool can_change_layer_display() const { return true; }
|
||||||
LayerDisplay layer_display () const { return _layer_display; }
|
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 {
|
enum ColorTarget {
|
||||||
RegionColor,
|
RegionColor,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue