X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fghostregion.cc;h=ef0e020dcfc88039aa34db0b442b2112ac2eb749;hb=b6c3e5537269e53bb145300e7724e8b89dfb74d6;hp=6f4b56eed91572d1b56784c945b176dd9c7baac0;hpb=11cfdd4c6dcee2eb4c7fae8743576b42ffde246b;p=ardour.git diff --git a/gtk2_ardour/ghostregion.cc b/gtk2_ardour/ghostregion.cc index 6f4b56eed9..ef0e020dcf 100644 --- a/gtk2_ardour/ghostregion.cc +++ b/gtk2_ardour/ghostregion.cc @@ -17,6 +17,8 @@ */ +#include "ardour/parameter_descriptor.h" + #include "evoral/Note.hpp" #include "canvas/container.h" #include "canvas/polygon.h" @@ -24,25 +26,29 @@ #include "canvas/wave_view.h" #include "canvas/debug.h" -#include "ardour_ui.h" #include "automation_time_axis.h" #include "ghostregion.h" #include "midi_streamview.h" #include "midi_time_axis.h" +#include "region_view.h" #include "rgb_macros.h" #include "note.h" #include "hit.h" +#include "ui_config.h" using namespace std; using namespace Editing; using namespace ArdourCanvas; using namespace ARDOUR; -PBD::Signal1 GhostRegion::CatchDeletion; - -GhostRegion::GhostRegion (ArdourCanvas::Container* parent, TimeAxisView& tv, TimeAxisView& source_tv, double initial_pos) - : trackview (tv) - , source_trackview (source_tv) +GhostRegion::GhostRegion(RegionView& rv, + ArdourCanvas::Container* parent, + TimeAxisView& tv, + TimeAxisView& source_tv, + double initial_pos) + : parent_rv(rv) + , trackview(tv) + , source_trackview(source_tv) { group = new ArdourCanvas::Container (parent); CANVAS_DEBUG_NAME (group, "ghost region"); @@ -68,7 +74,8 @@ GhostRegion::GhostRegion (ArdourCanvas::Container* parent, TimeAxisView& tv, Tim GhostRegion::~GhostRegion () { - CatchDeletion (this); + parent_rv.remove_ghost(this); + trackview.erase_ghost(this); delete base_rect; delete group; } @@ -89,7 +96,7 @@ void GhostRegion::set_colors () { if (is_automation_ghost()) { - base_rect->set_fill_color (ARDOUR_UI::config()->color_mod ("ghost track base", "ghost track base")); + base_rect->set_fill_color (UIConfiguration::instance().color_mod ("ghost track base", "ghost track base")); } } @@ -106,8 +113,11 @@ GhostRegion::is_automation_ghost() return (dynamic_cast(&trackview)) != 0; } -AudioGhostRegion::AudioGhostRegion(TimeAxisView& tv, TimeAxisView& source_tv, double initial_unit_pos) - : GhostRegion(tv.ghost_group(), tv, source_tv, initial_unit_pos) +AudioGhostRegion::AudioGhostRegion(RegionView& rv, + TimeAxisView& tv, + TimeAxisView& source_tv, + double initial_unit_pos) + : GhostRegion(rv, tv.ghost_group(), tv, source_tv, initial_unit_pos) { } @@ -143,29 +153,33 @@ AudioGhostRegion::set_colors () guint fill_color; if (is_automation_ghost()) { - fill_color = ARDOUR_UI::config()->color ("ghost track wave fill"); + fill_color = UIConfiguration::instance().color ("ghost track wave fill"); } else { fill_color = source_track_color(200); } for (uint32_t n=0; n < waves.size(); ++n) { - waves[n]->set_outline_color (ARDOUR_UI::config()->color ("ghost track wave")); + waves[n]->set_outline_color (UIConfiguration::instance().color ("ghost track wave")); waves[n]->set_fill_color (fill_color); - waves[n]->set_clip_color (ARDOUR_UI::config()->color ("ghost track wave clip")); - waves[n]->set_zero_color (ARDOUR_UI::config()->color ("ghost track zero line")); + waves[n]->set_clip_color (UIConfiguration::instance().color ("ghost track wave clip")); + waves[n]->set_zero_color (UIConfiguration::instance().color ("ghost track zero line")); } } /** The general constructor; called when the destination timeaxisview doesn't have * a midistreamview. * + * @param rv The parent RegionView that is being ghosted. * @param tv TimeAxisView that this ghost region is on. * @param source_tv TimeAxisView that we are the ghost for. */ -MidiGhostRegion::MidiGhostRegion(TimeAxisView& tv, TimeAxisView& source_tv, double initial_unit_pos) - : GhostRegion(tv.ghost_group(), tv, source_tv, initial_unit_pos) - , _optimization_iterator (events.end ()) +MidiGhostRegion::MidiGhostRegion(RegionView& rv, + TimeAxisView& tv, + TimeAxisView& source_tv, + double initial_unit_pos) + : GhostRegion(rv, tv.ghost_group(), tv, source_tv, initial_unit_pos) + , _optimization_iterator(events.end()) { base_rect->lower_to_bottom(); update_range (); @@ -174,12 +188,20 @@ MidiGhostRegion::MidiGhostRegion(TimeAxisView& tv, TimeAxisView& source_tv, doub } /** + * @param rv The parent RegionView being ghosted. * @param msv MidiStreamView that this ghost region is on. * @param source_tv TimeAxisView that we are the ghost for. */ -MidiGhostRegion::MidiGhostRegion(MidiStreamView& msv, TimeAxisView& source_tv, double initial_unit_pos) - : GhostRegion(msv.midi_underlay_group, msv.trackview(), source_tv, initial_unit_pos) - , _optimization_iterator (events.end ()) +MidiGhostRegion::MidiGhostRegion(RegionView& rv, + MidiStreamView& msv, + TimeAxisView& source_tv, + double initial_unit_pos) + : GhostRegion(rv, + msv.midi_underlay_group, + msv.trackview(), + source_tv, + initial_unit_pos) + , _optimization_iterator(events.end()) { base_rect->lower_to_bottom(); update_range (); @@ -245,8 +267,10 @@ MidiGhostRegion::set_colors() GhostRegion::set_colors(); for (EventList::iterator it = events.begin(); it != events.end(); ++it) { - (*it)->item->set_fill_color (ARDOUR_UI::config()->color_mod((*it)->event->base_color(), "ghost track midi fill")); - (*it)->item->set_outline_color (ARDOUR_UI::config()->color ("ghost track midi outline")); + _fill = UIConfiguration::instance().color_mod((*it)->event->base_color(), "ghost track midi fill"); + _outline = UIConfiguration::instance().color ("ghost track midi outline"); + (*it)->item->set_fill_color (_fill); + (*it)->item->set_outline_color (_outline); } } @@ -309,8 +333,8 @@ MidiGhostRegion::add_note (NoteBase* n) GhostEvent* event = new GhostEvent (n, group); events.push_back (event); - event->item->set_fill_color (ARDOUR_UI::config()->color_mod(n->base_color(), "ghost track midi fill")); - event->item->set_outline_color (ARDOUR_UI::config()->color ("ghost track midi outline")); + event->item->set_fill_color (_fill); + event->item->set_outline_color (_outline); MidiStreamView* mv = midi_view(); @@ -325,8 +349,7 @@ MidiGhostRegion::add_note (NoteBase* n) ArdourCanvas::Rectangle* rect = NULL; ArdourCanvas::Polygon* poly = NULL; if ((rect = dynamic_cast(event->item))) { - rect->set_y0 (y); - rect->set_y1 (y + h); + rect->set (ArdourCanvas::Rect (rect->x0(), y, rect->x1(), y + h)); } else if ((poly = dynamic_cast(event->item))) { Duple position = poly->position(); position.y = y; @@ -365,10 +388,7 @@ MidiGhostRegion::update_note (NoteBase* parent) ArdourCanvas::Polygon* poly = NULL; if ((note = dynamic_cast(parent))) { if ((rect = dynamic_cast(ev->item))) { - double const x1 = parent->x0 (); - double const x2 = parent->x1 (); - rect->set_x0 (x1); - rect->set_x1 (x2); + rect->set (ArdourCanvas::Rect (parent->x0(), rect->y0(), parent->x1(), rect->y1())); } } else if ((hit = dynamic_cast(parent))) { if ((poly = dynamic_cast(ev->item))) {