summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2012-05-29 18:30:10 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2012-05-29 18:30:10 +0000
commitf1505b631dd6a2ef30eae01e00ca7162de0aba3f (patch)
tree9387adf7cde30f50990c1fae5ac92ecbd002eed4
parent71988944739d8daf2fda75ee709fa54af2f2f1f5 (diff)
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
-rw-r--r--gtk2_ardour/audio_region_view.cc44
-rw-r--r--gtk2_ardour/audio_region_view.h4
-rw-r--r--gtk2_ardour/automation_line.cc85
-rw-r--r--gtk2_ardour/automation_line.h29
-rw-r--r--gtk2_ardour/automation_region_view.cc3
-rw-r--r--gtk2_ardour/automation_time_axis.cc2
-rw-r--r--gtk2_ardour/editor.h4
-rw-r--r--gtk2_ardour/editor_actions.cc2
-rw-r--r--gtk2_ardour/editor_mouse.cc2
-rw-r--r--gtk2_ardour/editor_ops.cc8
10 files changed, 92 insertions, 91 deletions
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<Trimmable>());
trackview.editor().set_current_movable (boost::shared_ptr<Movable>());
- 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<ControlPoint*>::iterator i = control_points.begin(); i != control_points.end(); ++i) {
+ (*i)->set_visible (true);
(*i)->show ();
}
+ } else if (_visible & SelectedControlPoints) {
+ for (vector<ControlPoint*>::iterator i = control_points.begin(); i != control_points.end(); ++i) {
+ (*i)->set_visible ((*i)->get_selected());
+ }
+ } else {
+ for (vector<ControlPoint*>::iterator i = control_points.begin(); i != control_points.end(); ++i) {
+ (*i)->set_visible (false);
+ }
}
-
- _visible = true;
}
void
AutomationLine::hide ()
{
- line->hide();
- for (vector<ControlPoint*>::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<ARDOUR::AutomationList> 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<ControlPoint*>::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<ControlPoint*>::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<ARDOUR::AutomationList>,
Evoral::TimeConverter<double, ARDOUR::framepos_t>* 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<ARDOUR::AutomationList> list);
boost::shared_ptr<ARDOUR::AutomationList> 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<ARDOUR::AutomationList> 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<AutomationLine> 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<AudioRegionView*> (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<AudioTimeAxisView*>(*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));
}
}
}