#include <gtkmm2ext/gtk_ui.h>
-#include <ardour/playlist.h>
-#include <ardour/audioregion.h>
-#include <ardour/audiosource.h>
-#include <ardour/audio_diskstream.h>
-#include <ardour/profile.h>
+#include "ardour/playlist.h"
+#include "ardour/audioregion.h"
+#include "ardour/audiosource.h"
+#include "ardour/audio_diskstream.h"
+#include "ardour/profile.h"
-#include <pbd/memento_command.h>
-#include <pbd/stacktrace.h>
+#include "pbd/memento_command.h"
+#include "pbd/stacktrace.h"
+
+#include "evoral/Curve.hpp"
#include "streamview.h"
#include "audio_region_view.h"
#define MUTED_ALPHA 10
+using namespace std;
using namespace sigc;
using namespace ARDOUR;
using namespace PBD;
AudioRegionView::AudioRegionView (const AudioRegionView& other)
- : RegionView (other)
+ : sigc::trackable(other)
+ , RegionView (other)
, zero_line(0)
, fade_in_shape(0)
, fade_out_shape(0)
store_flags ();
}
- if (trackview.editor.new_regionviews_display_gain()) {
+ if (trackview.editor().new_regionviews_display_gain()) {
_flags |= EnvelopeVisible;
}
setup_fade_handle_positions ();
- string line_name = _region->name();
- line_name += ':';
- line_name += "gain";
+ if (!trackview.session().config.get_show_region_fades()) {
+ set_fade_visibility (false);
+ }
+
+ const string line_name = _region->name() + ":gain";
if (!Profile->get_sae()) {
- gain_line = new AudioRegionGainLine (line_name, trackview.session(), *this, *group, audio_region()->envelope());
+ gain_line = new AudioRegionGainLine (line_name, trackview.session(), *this, *group,
+ audio_region()->envelope());
}
if (!(_flags & EnvelopeVisible)) {
gain_line->reset ();
- set_y_position_and_height (0, trackview.current_height());
+ set_height (trackview.current_height());
region_muted ();
region_sync_changed ();
/* all waveviews etc will be destroyed when the group is destroyed */
- if (gain_line) {
- delete gain_line;
- }
+ delete gain_line;
}
boost::shared_ptr<ARDOUR::AudioRegion>
fade_in_handle->hide();
fade_out_handle->hide();
} else {
- fade_in_handle->show();
- fade_out_handle->show();
+ if (trackview.session().config.get_show_region_fades()) {
+ fade_in_handle->show();
+ fade_out_handle->show();
+ }
}
}
}
double const handle_height = 5;
if (fade_in_handle) {
- fade_in_handle->property_y1() = _y_position + handle_pos;
- fade_in_handle->property_y2() = _y_position + handle_pos + handle_height;
+ fade_in_handle->property_y1() = handle_pos;
+ fade_in_handle->property_y2() = handle_pos + handle_height;
}
if (fade_out_handle) {
- fade_out_handle->property_y1() = _y_position + handle_pos;
- fade_out_handle->property_y2() = _y_position + handle_pos + handle_height;
+ fade_out_handle->property_y1() = handle_pos;
+ fade_out_handle->property_y2() = handle_pos + handle_height;
}
}
void
-AudioRegionView::set_y_position_and_height (double y, double h)
+AudioRegionView::set_height (gdouble height)
{
- RegionView::set_y_position_and_height (y, h - 1);
-
- /* XXX why is this code here */
+ RegionView::set_height (height);
- _y_position = y;
- _height = h;
+ uint32_t wcnt = waves.size();
- const uint32_t wcnt = waves.size();
+ // FIXME: ick
+ height -= 2;
+ _height = height;
+
for (uint32_t n=0; n < wcnt; ++n) {
gdouble ht;
- if ((h) < NAME_HIGHLIGHT_THRESH) {
- ht = ((_height-2*wcnt) / (double) wcnt);
+ if ((height) < NAME_HIGHLIGHT_THRESH) {
+ ht = ((height-2*wcnt) / (double) wcnt);
} else {
- ht = (((_height-2*wcnt) - NAME_HIGHLIGHT_SIZE) / (double) wcnt);
+ ht = (((height-2*wcnt) - NAME_HIGHLIGHT_SIZE) / (double) wcnt);
}
gdouble yoff = n * (ht+1);
}
if (gain_line) {
- if ((_height/wcnt) < NAME_HIGHLIGHT_THRESH) {
+ if ((height/wcnt) < NAME_HIGHLIGHT_THRESH) {
gain_line->hide ();
} else {
if (_flags & EnvelopeVisible) {
gain_line->show ();
}
}
- gain_line->set_y_position_and_height ((uint32_t) _y_position, (uint32_t) rint (_height - NAME_HIGHLIGHT_SIZE));
+ gain_line->set_height ((uint32_t) rint (height - NAME_HIGHLIGHT_SIZE));
}
manage_zero_line ();
reset_fade_shapes ();
-
- if (name_text) {
- name_text->raise_to_top();
+
+ if (name_pixbuf) {
+ name_pixbuf->raise_to_top();
}
+
}
void
}
if (_height >= 100) {
- double const wave_midpoint = _y_position + (_height - NAME_HIGHLIGHT_SIZE) / 2.0;
+ double const wave_midpoint = (_height - NAME_HIGHLIGHT_SIZE) / 2.0;
zero_line->property_y1() = wave_midpoint;
zero_line->property_y2() = wave_midpoint;
zero_line->show();
return;
}
- fade_in_shape->show();
+ if (trackview.session().config.get_show_region_fades()) {
+ fade_in_shape->show();
+ }
float curve[npoints];
audio_region()->fade_in()->curve().get_vector (0, audio_region()->fade_in()->back()->when, curve, npoints);
for (pi = 0, pc = 0; pc < npoints; ++pc) {
(*points)[pi].set_x(1 + (pc * xdelta));
- (*points)[pi++].set_y(_y_position + 2 + (h - (curve[pc] * h)));
+ (*points)[pi++].set_y(2 + (h - (curve[pc] * h)));
}
/* fold back */
(*points)[pi].set_x(pwidth);
- (*points)[pi++].set_y(_y_position + 2);
+ (*points)[pi++].set_y(2);
(*points)[pi].set_x(1);
- (*points)[pi++].set_y(_y_position + 2);
+ (*points)[pi++].set_y(2);
/* connect the dots ... */
return;
}
- fade_out_shape->show();
+ if (trackview.session().config.get_show_region_fades()) {
+ fade_out_shape->show();
+ }
float curve[npoints];
audio_region()->fade_out()->curve().get_vector (0, audio_region()->fade_out()->back()->when, curve, npoints);
for (pi = 0, pc = 0; pc < npoints; ++pc) {
(*points)[pi].set_x(_pixel_width - 1 - pwidth + (pc*xdelta));
- (*points)[pi++].set_y(_y_position + 2 + (h - (curve[pc] * h)));
+ (*points)[pi++].set_y(2 + (h - (curve[pc] * h)));
}
/* fold back */
(*points)[pi].set_x(_pixel_width);
- (*points)[pi++].set_y(_y_position + h);
+ (*points)[pi++].set_y(h);
(*points)[pi].set_x(_pixel_width);
- (*points)[pi++].set_y(_y_position + 2);
+ (*points)[pi++].set_y(2);
/* connect the dots ... */
/* all waves created, don't hook into peaks ready anymore */
data_ready_connection.disconnect ();
- if(0)
+#if 0
if (!zero_line) {
zero_line = new ArdourCanvas::SimpleLine (*group);
zero_line->property_x1() = (gdouble) 1.0;
zero_line->property_color_rgba() = (guint) ARDOUR_UI::config()->canvasvar_ZeroLine.get();
manage_zero_line ();
}
+#endif
}
}
item->w2i (x, y);
- nframes_t fx = trackview.editor.pixel_to_frame (x);
+ nframes_t fx = trackview.editor().pixel_to_frame (x);
if (fx > _region->length()) {
return;
/* compute vertical fractional position */
- y = 1.0 - (y / (trackview.current_height() - NAME_HIGHLIGHT_SIZE));
-
+ y = 1.0 - (y / (_height - NAME_HIGHLIGHT_SIZE));
+
/* map using gain line */
- gain_line->view_to_model_y (y);
+ gain_line->view_to_model_coord (x, y);
trackview.session().begin_reversible_command (_("add gain control point"));
XMLNode &before = audio_region()->envelope()->get_state();
}
}
+void
+AudioRegionView::set_fade_visibility (bool yn)
+{
+ if (yn) {
+ if (fade_in_shape) {
+ fade_in_shape->show();
+ }
+ if (fade_out_shape) {
+ fade_out_shape->show ();
+ }
+ if (fade_in_handle) {
+ fade_in_handle->show ();
+ }
+ if (fade_out_handle) {
+ fade_out_handle->show ();
+ }
+ } else {
+ if (fade_in_shape) {
+ fade_in_shape->hide();
+ }
+ if (fade_out_shape) {
+ fade_out_shape->hide ();
+ }
+ if (fade_in_handle) {
+ fade_in_handle->hide ();
+ }
+ if (fade_out_handle) {
+ fade_out_handle->hide ();
+ }
+ }
+}