/*
- Copyright (C) 2006 Paul Davis
+ Copyright (C) 2006 Paul Davis
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
#include <gtkmm2ext/gtk_ui.h>
-#include <ardour/playlist.h>
-#include <ardour/audioregion.h>
-#include <ardour/audiosource.h>
-#include <ardour/audio_diskstream.h>
+#include "ardour/audioregion.h"
+#include "ardour/audiosource.h"
#include "tape_region_view.h"
#include "audio_time_axis.h"
#include "i18n.h"
-using namespace sigc;
using namespace ARDOUR;
using namespace PBD;
using namespace Editing;
const TimeAxisViewItem::Visibility TapeAudioRegionView::default_tape_visibility
= TimeAxisViewItem::Visibility (
TimeAxisViewItem::ShowNameHighlight |
+ TimeAxisViewItem::ShowNameText |
TimeAxisViewItem::ShowFrame |
TimeAxisViewItem::HideFrameRight |
TimeAxisViewItem::FullWidthNameHighlight);
-TapeAudioRegionView::TapeAudioRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView &tv,
- boost::shared_ptr<AudioRegion> r,
- double spu,
- Gdk::Color& basic_color)
+TapeAudioRegionView::TapeAudioRegionView (ArdourCanvas::Container *parent, RouteTimeAxisView &tv,
+ boost::shared_ptr<AudioRegion> r,
+ double spu,
+ uint32_t basic_color)
- : AudioRegionView (parent, tv, r, spu, basic_color,
- TimeAxisViewItem::Visibility ((r->position() != 0) ? default_tape_visibility :
+ : AudioRegionView (parent, tv, r, spu, basic_color, false,
+ TimeAxisViewItem::Visibility ((r->position() != 0) ? default_tape_visibility :
TimeAxisViewItem::Visibility (default_tape_visibility|TimeAxisViewItem::HideFrameLeft)))
{
}
void
-TapeAudioRegionView::init (Gdk::Color& basic_color, bool wfw)
+TapeAudioRegionView::init (bool /*wfw*/)
{
- AudioRegionView::init(basic_color, wfw);
+ /* never wait for data: always just create the waves, connect once and then
+ we'll update whenever we need to.
+ */
+
+ AudioRegionView::init (false);
/* every time the wave data changes and peaks are ready, redraw */
-
+
for (uint32_t n = 0; n < audio_region()->n_channels(); ++n) {
- audio_region()->audio_source(n)->PeaksReady.connect (bind (mem_fun(*this, &TapeAudioRegionView::update), n));
+ audio_region()->audio_source(n)->PeaksReady.connect (*this, invalidator (*this), boost::bind (&TapeAudioRegionView::update, this, n), gui_context());
}
-
+
}
TapeAudioRegionView::~TapeAudioRegionView()
}
void
-TapeAudioRegionView::update (uint32_t n)
+TapeAudioRegionView::update (uint32_t /*n*/)
{
/* check that all waves are build and ready */
-
if (!tmp_waves.empty()) {
return;
}
- ENSURE_GUI_THREAD (bind (mem_fun(*this, &TapeAudioRegionView::update), n));
-
- /* this triggers a cache invalidation and redraw in the waveview */
-
- waves[n]->property_data_src() = _region.get();
-}
-
-void
-TapeAudioRegionView::set_frame_color ()
-{
- fill_opacity = 255;
- AudioRegionView::set_frame_color ();
+ ENSURE_GUI_THREAD (*this, &TapeAudioRegionView::update, n);
+ // CAIROCANVAS
+
+ /* this is a quick hack to draw something (abuse gain_changed to force
+ * an image-cache invalidation.
+ *
+ * TODO: ArdourCanvas::WaveView needs an API to look up the specific channel "n"
+ * and a special case to not only invalidate the cache but re-expose the
+ * waveform. e.g.
+ *
+ * waves[m]->rebuild(); // where 'm' corresponds to channel 'n'.
+ */
+ for (uint32_t i = 0; i < waves.size(); ++i) {
+ waves[i]->gain_changed ();
+ }
}