X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Faudio_region_view.cc;h=ba5b9a1ce115f9cc38a470e3686f2afb54f2a377;hb=aa60114843f4990ef93ba83974501495ddda358b;hp=9892eb47cc1726211f393d299189dc4ffc783782;hpb=6f53e7c5e4d6c6d097a2360e486b963347b29241;p=ardour.git diff --git a/gtk2_ardour/audio_region_view.cc b/gtk2_ardour/audio_region_view.cc index 9892eb47cc..ba5b9a1ce1 100644 --- a/gtk2_ardour/audio_region_view.cc +++ b/gtk2_ardour/audio_region_view.cc @@ -31,6 +31,7 @@ #include #include #include +#include #include "streamview.h" #include "audio_region_view.h" @@ -161,8 +162,6 @@ AudioRegionView::init (Gdk::Color& basic_color, bool wfd) gain_line->show (); } - reset_width_dependent_items ((double) _region->length() / samples_per_unit); - gain_line->reset (); set_height (trackview.height); @@ -250,19 +249,6 @@ AudioRegionView::fade_out_changed () { reset_fade_out_shape (); } - -void -AudioRegionView::set_fade_in_active (bool yn) -{ - audio_region()->set_fade_in_active (yn); -} - -void -AudioRegionView::set_fade_out_active (bool yn) -{ - audio_region()->set_fade_out_active (yn); -} - void AudioRegionView::fade_in_active_changed () { @@ -680,8 +666,8 @@ AudioRegionView::show_region_editor () // trackview.editor.ensure_float (*editor); } - editor->show_all (); - editor->get_window()->raise(); + editor->present (); + editor->show_all(); } void @@ -751,7 +737,7 @@ AudioRegionView::create_waves () for (uint32_t n = 0; n < nchans; ++n) { tmp_waves.push_back (0); } - + for (uint32_t n = 0; n < nchans; ++n) { if (n >= audio_region()->n_channels()) { @@ -816,6 +802,8 @@ AudioRegionView::create_one_wave (uint32_t which, bool direct) wave->property_amplitude_above_axis() = _amplitude_above_axis; wave->property_wave_color() = _region->muted() ? color_map[cMutedWaveForm] : color_map[cWaveForm]; wave->property_region_start() = _region->start(); + wave->property_rectified() = (bool) (_flags & WaveformRectified); + wave->property_logscaled() = (bool) (_flags & WaveformLogScaled); if (!(_flags & WaveformVisible)) { wave->hide(); @@ -840,7 +828,7 @@ AudioRegionView::create_one_wave (uint32_t which, bool direct) break; } } - + if (n == nwaves && waves.empty()) { /* all waves are ready */ tmp_waves.resize(nwaves); @@ -848,6 +836,9 @@ AudioRegionView::create_one_wave (uint32_t which, bool direct) waves = tmp_waves; tmp_waves.clear (); + /* all waves created, don't hook into peaks ready anymore */ + data_ready_connection.disconnect (); + if (!zero_line) { zero_line = new ArdourCanvas::SimpleLine (*group); zero_line->property_x1() = (gdouble) 1.0; @@ -862,11 +853,6 @@ void AudioRegionView::peaks_ready_handler (uint32_t which) { Gtkmm2ext::UI::instance()->call_slot (bind (mem_fun(*this, &AudioRegionView::create_one_wave), which, false)); - - if (!waves.empty()) { - /* all waves created, don't hook into peaks ready anymore */ - data_ready_connection.disconnect (); - } } void @@ -904,12 +890,11 @@ AudioRegionView::add_gain_point_event (ArdourCanvas::Item *item, GdkEvent *ev) trackview.session().begin_reversible_command (_("add gain control point")); XMLNode &before = audio_region()->envelope().get_state(); - if (!audio_region()->envelope_active()) { - XMLNode &before = audio_region()->get_state(); + XMLNode ®ion_before = audio_region()->get_state(); audio_region()->set_envelope_active(true); - XMLNode &after = audio_region()->get_state(); - trackview.session().add_command (new MementoCommand(*(audio_region().get()), &before, &after)); + XMLNode ®ion_after = audio_region()->get_state(); + trackview.session().add_command (new MementoCommand(*(audio_region().get()), ®ion_before, ®ion_after)); } audio_region()->envelope().add (fx, y); @@ -933,6 +918,8 @@ AudioRegionView::store_flags() node->add_property ("waveform-visible", (_flags & WaveformVisible) ? "yes" : "no"); node->add_property ("envelope-visible", (_flags & EnvelopeVisible) ? "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); } @@ -953,6 +940,18 @@ AudioRegionView::set_flags (XMLNode* node) _flags |= EnvelopeVisible; } } + + if ((prop = node->property ("waveform-rectified")) != 0) { + if (prop->value() == "yes") { + _flags |= WaveformRectified; + } + } + + if ((prop = node->property ("waveform-logscaled")) != 0) { + if (prop->value() == "yes") { + _flags |= WaveformLogScaled; + } + } } void @@ -992,9 +991,30 @@ AudioRegionView::set_waveform_shape (WaveformShape shape) } else { _flags &= ~WaveformRectified; } + store_flags (); } } +void +AudioRegionView::set_waveform_scale (WaveformScale scale) +{ + bool yn = (scale == LogWaveform); + + if (yn != (bool) (_flags & WaveformLogScaled)) { + for (vector::iterator wave = waves.begin(); wave != waves.end() ; ++wave) { + (*wave)->property_logscaled() = yn; + } + + if (yn) { + _flags |= WaveformLogScaled; + } else { + _flags &= ~WaveformLogScaled; + } + store_flags (); + } +} + + GhostRegion* AudioRegionView::add_ghost (AutomationTimeAxisView& atv) {