Simplify management of waveform visibility / shape / scale;
fixes #4727, I think. git-svn-id: svn://localhost/ardour2/branches/3.0@12743 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
00f51c6abf
commit
0c714fe3de
@ -83,9 +83,9 @@ AudioRegionView::AudioRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView
|
||||
, end_xfade_out (0)
|
||||
, end_xfade_rect (0)
|
||||
, _amplitude_above_axis(1.0)
|
||||
, _flags(0)
|
||||
, fade_color(0)
|
||||
{
|
||||
Config->ParameterChanged.connect (*this, invalidator (*this), boost::bind (&AudioRegionView::parameter_changed, this, _1), gui_context());
|
||||
}
|
||||
|
||||
AudioRegionView::AudioRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView &tv, boost::shared_ptr<AudioRegion> r, double spu,
|
||||
@ -104,9 +104,9 @@ AudioRegionView::AudioRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView
|
||||
, end_xfade_out (0)
|
||||
, end_xfade_rect (0)
|
||||
, _amplitude_above_axis(1.0)
|
||||
, _flags(0)
|
||||
, fade_color(0)
|
||||
{
|
||||
Config->ParameterChanged.connect (*this, invalidator (*this), boost::bind (&AudioRegionView::parameter_changed, this, _1), gui_context());
|
||||
}
|
||||
|
||||
AudioRegionView::AudioRegionView (const AudioRegionView& other, boost::shared_ptr<AudioRegion> other_region)
|
||||
@ -123,7 +123,6 @@ AudioRegionView::AudioRegionView (const AudioRegionView& other, boost::shared_pt
|
||||
, end_xfade_out (0)
|
||||
, end_xfade_rect (0)
|
||||
, _amplitude_above_axis (other._amplitude_above_axis)
|
||||
, _flags (other._flags)
|
||||
, fade_color(0)
|
||||
{
|
||||
Gdk::Color c;
|
||||
@ -133,6 +132,8 @@ AudioRegionView::AudioRegionView (const AudioRegionView& other, boost::shared_pt
|
||||
c.set_rgb_p (r/255.0, g/255.0, b/255.0);
|
||||
|
||||
init (c, true);
|
||||
|
||||
Config->ParameterChanged.connect (*this, invalidator (*this), boost::bind (&AudioRegionView::parameter_changed, this, _1), gui_context());
|
||||
}
|
||||
|
||||
void
|
||||
@ -143,17 +144,7 @@ AudioRegionView::init (Gdk::Color const & basic_color, bool wfd)
|
||||
|
||||
RegionView::init (basic_color, wfd);
|
||||
|
||||
XMLNode *node;
|
||||
|
||||
_amplitude_above_axis = 1.0;
|
||||
_flags = 0;
|
||||
|
||||
if ((node = _region->extra_xml ("GUI")) != 0) {
|
||||
set_flags (node);
|
||||
} else {
|
||||
_flags = WaveformVisible;
|
||||
store_flags ();
|
||||
}
|
||||
|
||||
compute_colors (basic_color);
|
||||
|
||||
@ -230,6 +221,10 @@ AudioRegionView::init (Gdk::Color const & basic_color, bool wfd)
|
||||
|
||||
set_colors ();
|
||||
|
||||
setup_waveform_visibility ();
|
||||
setup_waveform_shape ();
|
||||
setup_waveform_scale ();
|
||||
|
||||
/* XXX sync mark drag? */
|
||||
}
|
||||
|
||||
@ -765,8 +760,8 @@ AudioRegionView::set_samples_per_unit (gdouble spu)
|
||||
{
|
||||
RegionView::set_samples_per_unit (spu);
|
||||
|
||||
if (_flags & WaveformVisible) {
|
||||
for (uint32_t n=0; n < waves.size(); ++n) {
|
||||
if (Config->get_show_waveforms ()) {
|
||||
for (uint32_t n = 0; n < waves.size(); ++n) {
|
||||
waves[n]->property_samples_per_unit() = spu;
|
||||
}
|
||||
}
|
||||
@ -818,25 +813,20 @@ AudioRegionView::set_colors ()
|
||||
}
|
||||
|
||||
void
|
||||
AudioRegionView::set_waveform_visible (bool yn)
|
||||
AudioRegionView::setup_waveform_visibility ()
|
||||
{
|
||||
if (((_flags & WaveformVisible) != yn)) {
|
||||
if (yn) {
|
||||
for (uint32_t n=0; n < waves.size(); ++n) {
|
||||
/* make sure the zoom level is correct, since we don't update
|
||||
this when waveforms are hidden.
|
||||
*/
|
||||
waves[n]->property_samples_per_unit() = samples_per_unit;
|
||||
waves[n]->show();
|
||||
}
|
||||
_flags |= WaveformVisible;
|
||||
} else {
|
||||
for (uint32_t n=0; n < waves.size(); ++n) {
|
||||
waves[n]->hide();
|
||||
}
|
||||
_flags &= ~WaveformVisible;
|
||||
if (Config->get_show_waveforms ()) {
|
||||
for (uint32_t n = 0; n < waves.size(); ++n) {
|
||||
/* make sure the zoom level is correct, since we don't update
|
||||
this when waveforms are hidden.
|
||||
*/
|
||||
waves[n]->property_samples_per_unit() = samples_per_unit;
|
||||
waves[n]->show();
|
||||
}
|
||||
} else {
|
||||
for (uint32_t n = 0; n < waves.size(); ++n) {
|
||||
waves[n]->hide();
|
||||
}
|
||||
store_flags ();
|
||||
}
|
||||
}
|
||||
|
||||
@ -971,10 +961,10 @@ AudioRegionView::create_one_wave (uint32_t which, bool /*direct*/)
|
||||
wave->property_zero_color() = ARDOUR_UI::config()->canvasvar_ZeroLine.get();
|
||||
wave->property_zero_line() = true;
|
||||
wave->property_region_start() = _region->start();
|
||||
wave->property_rectified() = (bool) (_flags & WaveformRectified);
|
||||
wave->property_logscaled() = (bool) (_flags & WaveformLogScaled);
|
||||
wave->property_rectified() = Config->get_waveform_shape() == Rectified;
|
||||
wave->property_logscaled() = Config->get_waveform_scale() == Logarithmic;
|
||||
|
||||
if (!(_flags & WaveformVisible)) {
|
||||
if (!Config->get_show_waveforms ()) {
|
||||
wave->hide();
|
||||
}
|
||||
|
||||
@ -1079,90 +1069,18 @@ AudioRegionView::remove_gain_point_event (ArdourCanvas::Item *item, GdkEvent */*
|
||||
}
|
||||
|
||||
void
|
||||
AudioRegionView::store_flags()
|
||||
AudioRegionView::setup_waveform_shape ()
|
||||
{
|
||||
XMLNode *node = new XMLNode ("GUI");
|
||||
|
||||
node->add_property ("waveform-visible", (_flags & WaveformVisible) ? "yes" : "no");
|
||||
node->add_property ("waveform-rectified", (_flags & WaveformRectified) ? "yes" : "no");
|
||||
node->add_property ("waveform-logscaled", (_flags & WaveformLogScaled) ? "yes" : "no");
|
||||
|
||||
_region->add_extra_xml (*node);
|
||||
}
|
||||
|
||||
void
|
||||
AudioRegionView::set_flags (XMLNode* node)
|
||||
{
|
||||
XMLProperty *prop;
|
||||
|
||||
if ((prop = node->property ("waveform-visible")) != 0) {
|
||||
if (string_is_affirmative (prop->value())) {
|
||||
_flags |= WaveformVisible;
|
||||
}
|
||||
}
|
||||
|
||||
if ((prop = node->property ("waveform-rectified")) != 0) {
|
||||
if (string_is_affirmative (prop->value())) {
|
||||
_flags |= WaveformRectified;
|
||||
}
|
||||
}
|
||||
|
||||
if ((prop = node->property ("waveform-logscaled")) != 0) {
|
||||
if (string_is_affirmative (prop->value())) {
|
||||
_flags |= WaveformLogScaled;
|
||||
}
|
||||
for (vector<WaveView *>::iterator wave = waves.begin(); wave != waves.end() ; ++wave) {
|
||||
(*wave)->property_rectified() = Config->get_waveform_shape() == Rectified;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
AudioRegionView::set_waveform_shape (WaveformShape shape)
|
||||
AudioRegionView::setup_waveform_scale ()
|
||||
{
|
||||
bool yn;
|
||||
|
||||
/* this slightly odd approach is to leave the door open to
|
||||
other "shapes" such as spectral displays, etc.
|
||||
*/
|
||||
|
||||
switch (shape) {
|
||||
case Rectified:
|
||||
yn = true;
|
||||
break;
|
||||
|
||||
default:
|
||||
yn = false;
|
||||
break;
|
||||
}
|
||||
|
||||
if (yn != (bool) (_flags & WaveformRectified)) {
|
||||
for (vector<WaveView *>::iterator wave = waves.begin(); wave != waves.end() ; ++wave) {
|
||||
(*wave)->property_rectified() = yn;
|
||||
}
|
||||
|
||||
if (yn) {
|
||||
_flags |= WaveformRectified;
|
||||
} else {
|
||||
_flags &= ~WaveformRectified;
|
||||
}
|
||||
store_flags ();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
AudioRegionView::set_waveform_scale (WaveformScale scale)
|
||||
{
|
||||
bool yn = (scale == Logarithmic);
|
||||
|
||||
if (yn != (bool) (_flags & WaveformLogScaled)) {
|
||||
for (vector<WaveView *>::iterator wave = waves.begin(); wave != waves.end() ; ++wave) {
|
||||
(*wave)->property_logscaled() = yn;
|
||||
}
|
||||
|
||||
if (yn) {
|
||||
_flags |= WaveformLogScaled;
|
||||
} else {
|
||||
_flags &= ~WaveformLogScaled;
|
||||
}
|
||||
store_flags ();
|
||||
for (vector<WaveView *>::iterator wave = waves.begin(); wave != waves.end() ; ++wave) {
|
||||
(*wave)->property_logscaled() = Config->get_waveform_scale() == Logarithmic;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1811,3 +1729,14 @@ AudioRegionView::drag_end ()
|
||||
_hidden_xfades.clear ();
|
||||
}
|
||||
|
||||
void
|
||||
AudioRegionView::parameter_changed (string const & p)
|
||||
{
|
||||
if (p == "show-waveforms") {
|
||||
setup_waveform_visibility ();
|
||||
} else if (p == "waveform-scale") {
|
||||
setup_waveform_scale ();
|
||||
} else if (p == "waveform-shape") {
|
||||
setup_waveform_shape ();
|
||||
}
|
||||
}
|
||||
|
@ -80,13 +80,6 @@ class AudioRegionView : public RegionView
|
||||
void unhide_envelope (); ///< Dangerous!
|
||||
|
||||
void update_envelope_visibility ();
|
||||
void set_waveform_visible (bool yn);
|
||||
void set_waveform_shape (ARDOUR::WaveformShape);
|
||||
void set_waveform_scale (ARDOUR::WaveformScale);
|
||||
|
||||
bool waveform_rectified() const { return _flags & WaveformRectified; }
|
||||
bool waveform_logscaled() const { return _flags & WaveformLogScaled; }
|
||||
bool waveform_visible() const { return _flags & WaveformVisible; }
|
||||
|
||||
void add_gain_point_event (ArdourCanvas::Item *item, GdkEvent *event);
|
||||
void remove_gain_point_event (ArdourCanvas::Item *item, GdkEvent *event);
|
||||
@ -165,7 +158,6 @@ class AudioRegionView : public RegionView
|
||||
|
||||
double _amplitude_above_axis;
|
||||
|
||||
uint32_t _flags;
|
||||
uint32_t fade_color;
|
||||
|
||||
void reset_fade_shapes ();
|
||||
@ -183,8 +175,6 @@ class AudioRegionView : public RegionView
|
||||
|
||||
void create_one_wave (uint32_t, bool);
|
||||
void peaks_ready_handler (uint32_t);
|
||||
void set_flags (XMLNode *);
|
||||
void store_flags ();
|
||||
|
||||
void set_colors ();
|
||||
void compute_colors (Gdk::Color const &);
|
||||
@ -203,6 +193,11 @@ class AudioRegionView : public RegionView
|
||||
private:
|
||||
void setup_fade_handle_positions ();
|
||||
|
||||
void parameter_changed (std::string const &);
|
||||
void setup_waveform_visibility ();
|
||||
void setup_waveform_shape ();
|
||||
void setup_waveform_scale ();
|
||||
|
||||
/** A ScopedConnection for each PeaksReady callback (one per channel). Each member
|
||||
* may be 0 if no connection exists.
|
||||
*/
|
||||
|
@ -60,8 +60,6 @@ AudioStreamView::AudioStreamView (AudioTimeAxisView& tv)
|
||||
{
|
||||
color_handler ();
|
||||
_amplitude_above_axis = 1.0;
|
||||
|
||||
Config->ParameterChanged.connect (*this, invalidator (*this), boost::bind (&AudioStreamView::parameter_changed, this, _1), gui_context());
|
||||
}
|
||||
|
||||
int
|
||||
@ -132,10 +130,6 @@ AudioStreamView::create_region_view (boost::shared_ptr<Region> r, bool wait_for_
|
||||
region_view->set_sensitive (false);
|
||||
}
|
||||
|
||||
region_view->set_waveform_scale (Config->get_waveform_scale ());
|
||||
region_view->set_waveform_shape (Config->get_waveform_shape ());
|
||||
region_view->set_waveform_visible (Config->get_show_waveforms ());
|
||||
|
||||
return region_view;
|
||||
}
|
||||
|
||||
@ -208,38 +202,6 @@ AudioStreamView::redisplay_track ()
|
||||
layer_regions();
|
||||
}
|
||||
|
||||
void
|
||||
AudioStreamView::set_show_waveforms (bool yn)
|
||||
{
|
||||
for (list<RegionView *>::iterator i = region_views.begin(); i != region_views.end(); ++i) {
|
||||
AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
|
||||
if (arv) {
|
||||
arv->set_waveform_visible (yn);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
AudioStreamView::set_waveform_shape (WaveformShape shape)
|
||||
{
|
||||
for (RegionViewList::iterator i = region_views.begin(); i != region_views.end(); ++i) {
|
||||
AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
|
||||
if (arv)
|
||||
arv->set_waveform_shape (shape);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
AudioStreamView::set_waveform_scale (WaveformScale scale)
|
||||
{
|
||||
for (RegionViewList::iterator i = region_views.begin(); i != region_views.end(); ++i) {
|
||||
AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
|
||||
if (arv) {
|
||||
arv->set_waveform_scale (scale);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
AudioStreamView::setup_rec_box ()
|
||||
{
|
||||
@ -572,16 +534,3 @@ AudioStreamView::color_handler ()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
AudioStreamView::parameter_changed (string const & p)
|
||||
{
|
||||
if (p == "show-waveforms") {
|
||||
set_show_waveforms (Config->get_show_waveforms ());
|
||||
} else if (p == "waveform-scale") {
|
||||
set_waveform_scale (Config->get_waveform_scale ());
|
||||
} else if (p == "waveform-shape") {
|
||||
set_waveform_shape (Config->get_waveform_shape ());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -56,8 +56,6 @@ class AudioStreamView : public StreamView
|
||||
int set_amplitude_above_axis (gdouble app);
|
||||
gdouble get_amplitude_above_axis () { return _amplitude_above_axis; }
|
||||
|
||||
void set_show_waveforms (bool yn);
|
||||
|
||||
void show_all_fades ();
|
||||
void hide_all_fades ();
|
||||
|
||||
@ -77,10 +75,6 @@ class AudioStreamView : public StreamView
|
||||
|
||||
void color_handler ();
|
||||
|
||||
void parameter_changed (std::string const &);
|
||||
void set_waveform_shape (ARDOUR::WaveformShape);
|
||||
void set_waveform_scale (ARDOUR::WaveformScale);
|
||||
|
||||
double _amplitude_above_axis;
|
||||
|
||||
std::map<boost::shared_ptr<ARDOUR::Source>, bool> rec_data_ready_map;
|
||||
|
Loading…
Reference in New Issue
Block a user