X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fautomation_time_axis.cc;h=a92ac3853077f70de8bb4cb3d261ed341557575b;hb=b15e1cba3b11f73f3155c5dbd8a162c2512f5641;hp=760794dd1eddb68574ccca5926f61603db6244c8;hpb=86244875a40206694c142af8fe1128f28293c467;p=ardour.git diff --git a/gtk2_ardour/automation_time_axis.cc b/gtk2_ardour/automation_time_axis.cc index 760794dd1e..a92ac38530 100644 --- a/gtk2_ardour/automation_time_axis.cc +++ b/gtk2_ardour/automation_time_axis.cc @@ -28,6 +28,7 @@ #include "ardour_ui.h" #include "automation_time_axis.h" #include "automation_streamview.h" +#include "global_signals.h" #include "gui_thread.h" #include "route_time_axis.h" #include "automation_line.h" @@ -58,26 +59,39 @@ const string AutomationTimeAxisView::state_node_name = "AutomationChild"; * For route child (e.g. plugin) automation, pass the child for \a. * For region automation (e.g. MIDI CC), pass null for \a. */ -AutomationTimeAxisView::AutomationTimeAxisView (Session* s, boost::shared_ptr r, - boost::shared_ptr a, boost::shared_ptr c, - PublicEditor& e, TimeAxisView& parent, bool show_regions, - ArdourCanvas::Canvas& canvas, const string & nom, const string & nomparent) - : AxisView (s), - TimeAxisView (s, e, &parent, canvas), - _route (r), - _control (c), - _automatable (a), - _controller(AutomationController::create(a, c->parameter(), c)), - _base_rect (0), - _view (show_regions ? new AutomationStreamView(*this) : NULL), - _name (nom), - auto_button (X_("")) /* force addition of a label */ +AutomationTimeAxisView::AutomationTimeAxisView ( + Session* s, + boost::shared_ptr r, + boost::shared_ptr a, + boost::shared_ptr c, + Evoral::Parameter p, + PublicEditor& e, + TimeAxisView& parent, + bool show_regions, + ArdourCanvas::Canvas& canvas, + const string & nom, + const string & nomparent + ) + : AxisView (s) + , TimeAxisView (s, e, &parent, canvas) + , _route (r) + , _control (c) + , _automatable (a) + , _parameter (p) + , _base_rect (0) + , _view (show_regions ? new AutomationStreamView (*this) : 0) + , _name (nom) + , auto_button (X_("")) /* force addition of a label */ { if (!have_name_font) { name_font = get_font_for_style (X_("AutomationTrackName")); have_name_font = true; } + if (_automatable && _control) { + _controller = AutomationController::create (_automatable, _control->parameter(), _control); + } + automation_menu = 0; auto_off_item = 0; auto_touch_item = 0; @@ -92,7 +106,10 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session* s, boost::shared_ptrproperty_x1() = 0.0; _base_rect->property_y1() = 0.0; - _base_rect->property_x2() = LONG_MAX - 2; + /** gnomecanvas sometimes converts this value to int or adds 2 to it, so it must be + set correctly to avoid overflow. + */ + _base_rect->property_x2() = INT_MAX - 2; _base_rect->property_outline_color_rgba() = ARDOUR_UI::config()->canvasvar_AutomationTrackOutline.get(); /* outline ends and bottom */ @@ -144,6 +161,7 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session* s, boost::shared_ptrset_name (X_("TrackPlugName")); plugname->show(); - name_label.set_name (X_("TrackParameterName")); controls_table.remove (name_hbox); controls_table.attach (*plugname, 1, 5, 0, 1, Gtk::FILL|Gtk::EXPAND, Gtk::FILL|Gtk::EXPAND); plugname_packed = true; @@ -181,8 +198,10 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session* s, boost::shared_ptrget_automation_child_xml_node ( - _control->parameter(), Stateful::loading_state_version - ); + XMLNode* xml_node = get_parent_with_state()->get_automation_child_xml_node (_parameter); if (xml_node) { set_state (*xml_node, Stateful::loading_state_version); @@ -207,13 +224,17 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session* s, boost::shared_ptrattach (); - /* no regions, just a single line for the entire track (e.g. bus gain) */ } else { - boost::shared_ptr line(new AutomationLine ( - ARDOUR::EventTypeMap::instance().to_symbol(_control->parameter()), - *this, - *_canvas_display, - _control->alist())); + /* no regions, just a single line for the entire track (e.g. bus gain) */ + + boost::shared_ptr line ( + new AutomationLine ( + ARDOUR::EventTypeMap::instance().to_symbol(_parameter), + *this, + *_canvas_display, + _control->alist() + ) + ); line->set_line_color (ARDOUR_UI::config()->canvasvar_ProcessorAutomationLine.get()); line->queue_reset (); @@ -261,11 +282,11 @@ AutomationTimeAxisView::set_automation_state (AutoState state) } if (_automatable) { - _automatable->set_parameter_automation_state (_control->parameter(), state); + _automatable->set_parameter_automation_state (_parameter, state); } #if 0 if (_route == _automatable) { // This is a time axis for route (not region) automation - _route->set_parameter_automation_state (_control->parameter(), state); + _route->set_parameter_automation_state (_parameter, state); } if (_control->list()) { @@ -404,7 +425,7 @@ AutomationTimeAxisView::set_height (uint32_t h) TimeAxisView* state_parent = get_parent_with_state (); assert(state_parent); - XMLNode* xml_node = state_parent->get_automation_child_xml_node (_control->parameter(), Stateful::loading_state_version); + XMLNode* xml_node = state_parent->get_automation_child_xml_node (_parameter); TimeAxisView::set_height (h); _base_rect->property_y2() = h; @@ -555,7 +576,7 @@ AutomationTimeAxisView::build_display_menu () /* current interpolation state */ AutomationList::InterpolationStyle const s = _view ? _view->interpolation() : _control->list()->interpolation (); - if (EventTypeMap::instance().is_midi_parameter(_control->parameter())) { + if (EventTypeMap::instance().is_midi_parameter(_parameter)) { Menu* auto_mode_menu = manage (new Menu); auto_mode_menu->set_name ("ArdourContextMenu"); @@ -585,10 +606,11 @@ AutomationTimeAxisView::build_display_menu () } void -AutomationTimeAxisView::add_automation_event (ArdourCanvas::Item* /*item*/, GdkEvent* /*event*/, nframes_t when, double y) +AutomationTimeAxisView::add_automation_event (ArdourCanvas::Item* /*item*/, GdkEvent* /*event*/, framepos_t when, double y) { - if (!_line) + if (!_line) { return; + } double x = 0; @@ -637,7 +659,7 @@ AutomationTimeAxisView::cut_copy_clear_one (AutomationLine& line, Selection& sel XMLNode &before = alist->get_state(); /* convert time selection to automation list model coordinates */ - const Evoral::TimeConverter& tc = line.time_converter (); + const Evoral::TimeConverter& tc = line.time_converter (); double const start = tc.from (selection.time.front().start - tc.origin_b ()); double const end = tc.from (selection.time.front().end - tc.origin_b ()); @@ -927,15 +949,17 @@ AutomationTimeAxisView::add_line (boost::shared_ptr line) void AutomationTimeAxisView::entered() { - if (_line) + if (_line) { _line->track_entered(); + } } void AutomationTimeAxisView::exited () { - if (_line) + if (_line) { _line->track_exited(); + } } void @@ -956,7 +980,7 @@ AutomationTimeAxisView::set_state (const XMLNode& node, int version) } XMLProperty const * type = node.property ("automation-id"); - if (type && type->value () == ARDOUR::EventTypeMap::instance().to_symbol (_control->parameter())) { + if (type && type->value () == ARDOUR::EventTypeMap::instance().to_symbol (_parameter)) { XMLProperty const * shown = node.property ("shown"); if (shown && shown->value () == "yes") { set_marked_for_display (true); @@ -972,9 +996,10 @@ AutomationTimeAxisView::set_state (const XMLNode& node, int version) } int -AutomationTimeAxisView::set_state_2X (const XMLNode& node, int version) + +AutomationTimeAxisView::set_state_2X (const XMLNode& node, int /*version*/) { - if (node.name() == X_("gain") && _control->parameter() == Evoral::Parameter (GainAutomation)) { + if (node.name() == X_("gain") && _parameter == Evoral::Parameter (GainAutomation)) { XMLProperty const * shown = node.property (X_("shown")); if (shown && string_is_affirmative (shown->value ())) { set_marked_for_display (true); @@ -995,7 +1020,7 @@ AutomationTimeAxisView::get_state_node () TimeAxisView* state_parent = get_parent_with_state (); if (state_parent) { - return state_parent->get_automation_child_xml_node (_control->parameter(), Stateful::loading_state_version); + return state_parent->get_automation_child_xml_node (_parameter); } else { return 0; }