From: Paul Davis Date: Tue, 29 May 2012 18:30:10 +0000 (+0000) Subject: substantive change to try to provide some rationality for region gain line visibility... X-Git-Tag: 3.0~1342 X-Git-Url: https://main.carlh.net/gitweb/?a=commitdiff_plain;h=f1505b631dd6a2ef30eae01e00ca7162de0aba3f;p=ardour.git substantive change to try to provide some rationality for region gain line visibility (and automation line visibility in general git-svn-id: svn://localhost/ardour2/branches/3.0@12478 d708f5d6-7413-0410-9779-e7cbd77b26cf --- diff --git a/gtk2_ardour/audio_region_view.cc b/gtk2_ardour/audio_region_view.cc index 8feb1ac52e..ec0a230f49 100644 --- a/gtk2_ardour/audio_region_view.cc +++ b/gtk2_ardour/audio_region_view.cc @@ -199,13 +199,8 @@ AudioRegionView::init (Gdk::Color const & basic_color, bool wfd) if (!Profile->get_sae()) { gain_line.reset (new AudioRegionGainLine (line_name, *this, *group, audio_region()->envelope())); } - - if (Config->get_show_region_gain()) { - gain_line->show (); - } else { - gain_line->hide (); - } - + + gain_line->set_visibility (automation_line_visibility()); gain_line->reset (); set_height (trackview.current_height()); @@ -499,9 +494,7 @@ AudioRegionView::set_height (gdouble height) if ((height/wcnt) < NAME_HIGHLIGHT_THRESH) { gain_line->hide (); } else { - if (Config->get_show_region_gain ()) { - gain_line->show (); - } + gain_line->set_visibility (automation_line_visibility()); } gain_line->set_height ((uint32_t) rint (height - NAME_HIGHLIGHT_SIZE) - 2); @@ -858,19 +851,15 @@ void AudioRegionView::unhide_envelope () { if (gain_line) { - gain_line->show (); + gain_line->set_visibility (automation_line_visibility()); } } void -AudioRegionView::set_envelope_visible (bool yn) +AudioRegionView::update_envelope_visible () { if (gain_line) { - if (yn) { - gain_line->show (); - } else { - gain_line->hide (); - } + gain_line->set_visibility (automation_line_visibility()); } } @@ -1035,7 +1024,7 @@ AudioRegionView::add_gain_point_event (ArdourCanvas::Item *item, GdkEvent *ev) /* don't create points that can't be seen */ - set_envelope_visible (true); + gain_line->set_visibility (automation_line_visibility()); x = ev->button.x; y = ev->button.y; @@ -1222,9 +1211,9 @@ AudioRegionView::entered (bool internal_editing) { trackview.editor().set_current_trimmable (_region); trackview.editor().set_current_movable (_region); - - if (gain_line && Config->get_show_region_gain ()) { - gain_line->show_all_control_points (); + + if (gain_line && trackview.editor().current_mouse_mode() == Editing::MouseGain) { + gain_line->add_visibility (AutomationLine::ControlPoints); } if (fade_in_handle && !internal_editing) { @@ -1239,8 +1228,8 @@ AudioRegionView::exited () trackview.editor().set_current_trimmable (boost::shared_ptr()); trackview.editor().set_current_movable (boost::shared_ptr()); - if (gain_line) { - gain_line->hide_all_but_selected_control_points (); + if (gain_line && trackview.editor().current_mouse_mode() == Editing::MouseGain) { + gain_line->remove_visibility (AutomationLine::ControlPoints); } if (fade_in_handle) { @@ -1812,3 +1801,12 @@ AudioRegionView::drag_end () /* fades will be redrawn if they changed */ } +AutomationLine::VisibleAspects +AudioRegionView::automation_line_visibility () const +{ + if (Config->get_show_region_gain() || trackview.editor().current_mouse_mode() == Editing::MouseGain) { + return AutomationLine::Line; + } else { + return AutomationLine::VisibleAspects (0); + } +} diff --git a/gtk2_ardour/audio_region_view.h b/gtk2_ardour/audio_region_view.h index 5e41c382bb..8a3a8d2394 100644 --- a/gtk2_ardour/audio_region_view.h +++ b/gtk2_ardour/audio_region_view.h @@ -79,7 +79,7 @@ class AudioRegionView : public RegionView void temporarily_hide_envelope (); ///< Dangerous! void unhide_envelope (); ///< Dangerous! - void set_envelope_visible (bool); + void update_envelope_visible (); void set_waveform_visible (bool yn); void set_waveform_shape (ARDOUR::WaveformShape); void set_waveform_scale (ARDOUR::WaveformScale); @@ -198,6 +198,8 @@ class AudioRegionView : public RegionView void transients_changed(); + AutomationLine::VisibleAspects automation_line_visibility () const; + private: void setup_fade_handle_positions (); diff --git a/gtk2_ardour/automation_line.cc b/gtk2_ardour/automation_line.cc index 72bc1a69e3..54755d36c5 100644 --- a/gtk2_ardour/automation_line.cc +++ b/gtk2_ardour/automation_line.cc @@ -76,11 +76,11 @@ AutomationLine::AutomationLine (const string& name, TimeAxisView& tv, ArdourCanv _our_time_converter = true; } - points_visible = false; + _visible = Line; + update_pending = false; _uses_gain_mapping = false; no_draw = false; - _visible = true; _is_boolean = false; terminal_points_can_slide = true; _height = 0; @@ -135,27 +135,36 @@ AutomationLine::queue_reset () void AutomationLine::show () { - if (alist->interpolation() != AutomationList::Discrete) { - line->show(); + if (_visible & Line) { + if (alist->interpolation() != AutomationList::Discrete) { + line->show(); + } else { + line->hide (); + } + } else { + line->hide(); } - if (points_visible) { + if (_visible & ControlPoints) { for (vector::iterator i = control_points.begin(); i != control_points.end(); ++i) { + (*i)->set_visible (true); (*i)->show (); } + } else if (_visible & SelectedControlPoints) { + for (vector::iterator i = control_points.begin(); i != control_points.end(); ++i) { + (*i)->set_visible ((*i)->get_selected()); + } + } else { + for (vector::iterator i = control_points.begin(); i != control_points.end(); ++i) { + (*i)->set_visible (false); + } } - - _visible = true; } void AutomationLine::hide () { - line->hide(); - for (vector::iterator i = control_points.begin(); i != control_points.end(); ++i) { - (*i)->hide(); - } - _visible = false; + set_visibility (VisibleAspects (0)); } double @@ -895,44 +904,31 @@ AutomationLine::set_list (boost::shared_ptr list) } void -AutomationLine::show_all_control_points () +AutomationLine::add_visibility (VisibleAspects va) { - if (_is_boolean) { - // show the line but don't allow any control points - return; - } - - points_visible = true; - - for (vector::iterator i = control_points.begin(); i != control_points.end(); ++i) { - if (!(*i)->visible()) { - (*i)->show (); - (*i)->set_visible (true); - } - } + _visible = VisibleAspects (_visible | va); + show (); } void -AutomationLine::hide_all_but_selected_control_points () +AutomationLine::set_visibility (VisibleAspects va) { - if (alist->interpolation() == AutomationList::Discrete) { - return; - } - - points_visible = false; + _visible = va; + show (); +} - for (vector::iterator i = control_points.begin(); i != control_points.end(); ++i) { - if (!(*i)->get_selected()) { - (*i)->set_visible (false); - } - } +void +AutomationLine::remove_visibility (VisibleAspects va) +{ + _visible = VisibleAspects (_visible & ~va); + show (); } void AutomationLine::track_entered() { if (alist->interpolation() != AutomationList::Discrete) { - show_all_control_points(); + add_visibility (ControlPoints); } } @@ -940,7 +936,7 @@ void AutomationLine::track_exited() { if (alist->interpolation() != AutomationList::Discrete) { - hide_all_but_selected_control_points(); + remove_visibility (ControlPoints); } } @@ -1011,11 +1007,10 @@ void AutomationLine::interpolation_changed (AutomationList::InterpolationStyle style) { if (style == AutomationList::Discrete) { - show_all_control_points(); + set_visibility (ControlPoints); line->hide(); } else { - hide_all_but_selected_control_points(); - line->show(); + set_visibility (Line); } } @@ -1059,13 +1054,11 @@ AutomationLine::add_visible_control_point (uint32_t view_index, uint32_t pi, dou /* finally, control visibility */ - if (_visible && points_visible) { + if (_visible & ControlPoints) { control_points[view_index]->show (); control_points[view_index]->set_visible (true); } else { - if (!points_visible) { - control_points[view_index]->set_visible (false); - } + control_points[view_index]->set_visible (false); } } diff --git a/gtk2_ardour/automation_line.h b/gtk2_ardour/automation_line.h index bee78c4ef5..43bfd04d1d 100644 --- a/gtk2_ardour/automation_line.h +++ b/gtk2_ardour/automation_line.h @@ -57,6 +57,12 @@ namespace Gnome { class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible { public: + enum VisibleAspects { + Line = 0x1, + ControlPoints = 0x2, + SelectedControlPoints = 0x4 + }; + AutomationLine (const std::string& name, TimeAxisView&, ArdourCanvas::Group&, boost::shared_ptr, Evoral::TimeConverter* converter = 0); @@ -85,17 +91,20 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible uint32_t npoints() const { return control_points.size(); } std::string name() const { return _name; } - bool visible() const { return _visible; } + bool visible() const { return _visible != VisibleAspects(0); } guint32 height() const { return _height; } void set_line_color (uint32_t); uint32_t get_line_color() const { return _line_color; } - void show (); - void hide (); - void set_height (guint32); - void set_uses_gain_mapping (bool yn); - bool get_uses_gain_mapping () const { return _uses_gain_mapping; } + void set_visibility (VisibleAspects); + void add_visibility (VisibleAspects); + void remove_visibility (VisibleAspects); + + void hide (); + void set_height (guint32); + void set_uses_gain_mapping (bool yn); + bool get_uses_gain_mapping () const { return _uses_gain_mapping; } TimeAxisView& trackview; @@ -113,9 +122,6 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible void set_list(boost::shared_ptr list); boost::shared_ptr the_list() const { return alist; } - void show_all_control_points (); - void hide_all_but_selected_control_points (); - void track_entered(); void track_exited(); @@ -157,13 +163,13 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible /** true if _time_converter belongs to us (ie we should delete it on destruction) */ bool _our_time_converter; - bool _visible : 1; + VisibleAspects _visible; + bool _uses_gain_mapping : 1; bool terminal_points_can_slide : 1; bool update_pending : 1; bool no_draw : 1; bool _is_boolean : 1; - bool points_visible : 1; bool did_push; ArdourCanvas::Group& _parent_group; @@ -195,6 +201,7 @@ class AutomationLine : public sigc::trackable, public PBD::StatefulDestructible */ ARDOUR::framecnt_t _offset; + void show (); void reset_line_coords (ControlPoint&); void add_visible_control_point (uint32_t, uint32_t, double, double, ARDOUR::AutomationList::iterator, uint32_t); double control_point_box_size (); diff --git a/gtk2_ardour/automation_region_view.cc b/gtk2_ardour/automation_region_view.cc index 0fb22b05bc..5c9fc767df 100644 --- a/gtk2_ardour/automation_region_view.cc +++ b/gtk2_ardour/automation_region_view.cc @@ -89,8 +89,7 @@ AutomationRegionView::create_line (boost::shared_ptr lis &_source_relative_time_converter)); _line->set_colors(); _line->set_height ((uint32_t)rint(trackview.current_height() - NAME_HIGHLIGHT_SIZE)); - _line->show(); - _line->show_all_control_points(); + _line->set_visibility (AutomationLine::VisibleAspects (AutomationLine::Line|AutomationLine::ControlPoints)); _line->set_maximum_time (_region->length()); _line->set_offset (_region->start ()); } diff --git a/gtk2_ardour/automation_time_axis.cc b/gtk2_ardour/automation_time_axis.cc index e0d53e1707..7c9f38aa0f 100644 --- a/gtk2_ardour/automation_time_axis.cc +++ b/gtk2_ardour/automation_time_axis.cc @@ -730,7 +730,7 @@ AutomationTimeAxisView::add_line (boost::shared_ptr line) /* pick up the current state */ automation_state_changed (); - line->show(); + line->add_visibility (AutomationLine::Line); } void diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 2e203e9c75..1953bb27ea 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -1951,8 +1951,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD gint left_automation_track (); void reset_canvas_action_sensitivity (bool); - void set_gain_envelope_visibility (bool); - void set_region_gain_visibility (RegionView*, bool); + void set_gain_envelope_visibility (); + void set_region_gain_visibility (RegionView*); void toggle_gain_envelope_active (); void reset_region_gain_envelopes (); diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc index 074d51428e..00ea296e61 100644 --- a/gtk2_ardour/editor_actions.cc +++ b/gtk2_ardour/editor_actions.cc @@ -1483,7 +1483,7 @@ Editor::parameter_changed (std::string p) } } } else if (p == "show-region-gain") { - set_gain_envelope_visibility (Config->get_show_region_gain ()); + set_gain_envelope_visibility (); } } diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index b5c7635265..5b718f49f0 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -473,6 +473,8 @@ Editor::mouse_mode_toggled (MouseMode m) } set_canvas_cursor (); + cerr << "mouse-driven sgev\n"; + set_gain_envelope_visibility (); MouseModeChanged (); /* EMIT SIGNAL */ } diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index de24266374..bd1ee9d1c9 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -4851,16 +4851,16 @@ Editor::reset_region_gain_envelopes () } void -Editor::set_region_gain_visibility (RegionView* rv, bool yn) +Editor::set_region_gain_visibility (RegionView* rv) { AudioRegionView* arv = dynamic_cast (rv); if (arv) { - arv->set_envelope_visible (yn); + arv->update_envelope_visible (); } } void -Editor::set_gain_envelope_visibility (bool yn) +Editor::set_gain_envelope_visibility () { if (!_session) { return; @@ -4869,7 +4869,7 @@ Editor::set_gain_envelope_visibility (bool yn) for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) { AudioTimeAxisView* v = dynamic_cast(*i); if (v) { - v->audio_view()->foreach_regionview (sigc::bind (sigc::mem_fun (this, &Editor::set_region_gain_visibility), yn)); + v->audio_view()->foreach_regionview (sigc::mem_fun (this, &Editor::set_region_gain_visibility)); } } }