Option to how x-run markers in regions
This commit is contained in:
parent
8486a938ed
commit
f4f9d76e53
@ -131,7 +131,6 @@ AudioRegionView::AudioRegionView (ArdourCanvas::Container *parent, RouteTimeAxis
|
||||
, trim_fade_in_drag_active(false)
|
||||
, trim_fade_out_drag_active(false)
|
||||
{
|
||||
UIConfiguration::instance().ParameterChanged.connect (sigc::mem_fun (*this, &AudioRegionView::parameter_changed));
|
||||
}
|
||||
|
||||
AudioRegionView::AudioRegionView (ArdourCanvas::Container *parent, RouteTimeAxisView &tv, boost::shared_ptr<AudioRegion> r, double spu,
|
||||
@ -153,7 +152,6 @@ AudioRegionView::AudioRegionView (ArdourCanvas::Container *parent, RouteTimeAxis
|
||||
, trim_fade_in_drag_active(false)
|
||||
, trim_fade_out_drag_active(false)
|
||||
{
|
||||
UIConfiguration::instance().ParameterChanged.connect (sigc::mem_fun (*this, &AudioRegionView::parameter_changed));
|
||||
}
|
||||
|
||||
AudioRegionView::AudioRegionView (const AudioRegionView& other, boost::shared_ptr<AudioRegion> other_region)
|
||||
@ -174,8 +172,6 @@ AudioRegionView::AudioRegionView (const AudioRegionView& other, boost::shared_pt
|
||||
, trim_fade_out_drag_active(false)
|
||||
{
|
||||
init (true);
|
||||
|
||||
UIConfiguration::instance().ParameterChanged.connect (sigc::mem_fun (*this, &AudioRegionView::parameter_changed));
|
||||
}
|
||||
|
||||
void
|
||||
@ -1826,6 +1822,7 @@ AudioRegionView::drag_end ()
|
||||
void
|
||||
AudioRegionView::parameter_changed (string const & p)
|
||||
{
|
||||
RegionView::parameter_changed (p);
|
||||
if (p == "show-waveforms") {
|
||||
setup_waveform_visibility ();
|
||||
}
|
||||
|
@ -142,7 +142,6 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Container* parent,
|
||||
PublicEditor::DropDownKeys.connect (sigc::mem_fun (*this, &MidiRegionView::drop_down_keys));
|
||||
|
||||
Config->ParameterChanged.connect (*this, invalidator (*this), boost::bind (&MidiRegionView::parameter_changed, this, _1), gui_context());
|
||||
UIConfiguration::instance().ParameterChanged.connect (sigc::mem_fun (*this, &MidiRegionView::parameter_changed));
|
||||
|
||||
connect_to_diskstream ();
|
||||
}
|
||||
@ -195,6 +194,7 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Container* parent,
|
||||
void
|
||||
MidiRegionView::parameter_changed (std::string const & p)
|
||||
{
|
||||
RegionView::parameter_changed (p);
|
||||
if (p == "display-first-midi-bank-as-zero") {
|
||||
if (_enable_display) {
|
||||
redisplay_model();
|
||||
@ -319,7 +319,6 @@ MidiRegionView::init (bool wfd)
|
||||
gui_context ());
|
||||
|
||||
Config->ParameterChanged.connect (*this, invalidator (*this), boost::bind (&MidiRegionView::parameter_changed, this, _1), gui_context());
|
||||
UIConfiguration::instance().ParameterChanged.connect (sigc::mem_fun (*this, &MidiRegionView::parameter_changed));
|
||||
connect_to_diskstream ();
|
||||
}
|
||||
|
||||
|
@ -2573,6 +2573,14 @@ RCOptionEditor::RCOptionEditor ()
|
||||
sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_show_region_gain)
|
||||
));
|
||||
|
||||
add_option (_("Editor"),
|
||||
new BoolOption (
|
||||
"show-region-xrun-markers",
|
||||
_("Show xrun markers in regions"),
|
||||
sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::get_show_region_xrun_markers),
|
||||
sigc::mem_fun (UIConfiguration::instance(), &UIConfiguration::set_show_region_xrun_markers)
|
||||
));
|
||||
|
||||
add_option (_("Editor"), new OptionEditorHeading (_("Editor Behavior")));
|
||||
|
||||
add_option (_("Editor"),
|
||||
|
@ -36,6 +36,7 @@
|
||||
|
||||
#include "gtkmm2ext/colors.h"
|
||||
|
||||
#include "canvas/arrow.h"
|
||||
#include "canvas/polygon.h"
|
||||
#include "canvas/debug.h"
|
||||
#include "canvas/pixbuf.h"
|
||||
@ -90,14 +91,18 @@ RegionView::RegionView (ArdourCanvas::Container* parent,
|
||||
, in_destructor(false)
|
||||
, wait_for_data(false)
|
||||
, _silence_text (0)
|
||||
, _xrun_markers_visible (false)
|
||||
{
|
||||
UIConfiguration::instance().ParameterChanged.connect (sigc::mem_fun (*this, &RegionView::parameter_changed));
|
||||
}
|
||||
|
||||
RegionView::RegionView (const RegionView& other)
|
||||
: sigc::trackable(other)
|
||||
, TimeAxisViewItem (other)
|
||||
, _silence_text (0)
|
||||
, _xrun_markers_visible (false)
|
||||
{
|
||||
UIConfiguration::instance().ParameterChanged.connect (sigc::mem_fun (*this, &RegionView::parameter_changed));
|
||||
/* derived concrete type will call init () */
|
||||
|
||||
_region = other._region;
|
||||
@ -110,7 +115,10 @@ RegionView::RegionView (const RegionView& other, boost::shared_ptr<Region> other
|
||||
: sigc::trackable(other)
|
||||
, TimeAxisViewItem (other)
|
||||
, _silence_text (0)
|
||||
, _xrun_markers_visible (false)
|
||||
{
|
||||
UIConfiguration::instance().ParameterChanged.connect (sigc::mem_fun (*this, &RegionView::parameter_changed));
|
||||
/* derived concrete type will call init () */
|
||||
/* this is a pseudo-copy constructor used when dragging regions
|
||||
around on the canvas.
|
||||
*/
|
||||
@ -143,6 +151,7 @@ RegionView::RegionView (ArdourCanvas::Container* parent,
|
||||
, wait_for_data(false)
|
||||
, _silence_text (0)
|
||||
{
|
||||
UIConfiguration::instance().ParameterChanged.connect (sigc::mem_fun (*this, &RegionView::parameter_changed));
|
||||
}
|
||||
|
||||
void
|
||||
@ -181,6 +190,26 @@ RegionView::init (bool wfd)
|
||||
name_text->Event.connect (sigc::bind (sigc::mem_fun (PublicEditor::instance(), &PublicEditor::canvas_region_view_name_event), name_text, this));
|
||||
}
|
||||
|
||||
XrunPositions xrp;
|
||||
_region->captured_xruns (xrp, true);
|
||||
int arrow_size = (int)(7.0 * UIConfiguration::instance ().get_ui_scale ()) & ~1;
|
||||
for (XrunPositions::const_iterator x = xrp.begin (); x != xrp.end (); ++x) {
|
||||
ArdourCanvas::Arrow* canvas_item = new ArdourCanvas::Arrow(group);
|
||||
canvas_item->set_color (UIConfiguration::instance().color ("neutral:background"));
|
||||
canvas_item->set_show_head (1, true);
|
||||
canvas_item->set_show_head (0, false);
|
||||
canvas_item->set_head_width (1, arrow_size);
|
||||
canvas_item->set_head_height (1, arrow_size);
|
||||
canvas_item->set_y0 (arrow_size);
|
||||
canvas_item->set_y1 (arrow_size);
|
||||
canvas_item->raise_to_top ();
|
||||
canvas_item->hide ();
|
||||
_xrun_markers.push_back (make_pair(*x, canvas_item));
|
||||
}
|
||||
|
||||
_xrun_markers_visible = false;
|
||||
update_xrun_markers ();
|
||||
|
||||
if (wfd) {
|
||||
_enable_display = true;
|
||||
}
|
||||
@ -209,6 +238,10 @@ RegionView::~RegionView ()
|
||||
delete *i;
|
||||
}
|
||||
|
||||
for (list<std::pair<samplepos_t, ArdourCanvas::Arrow*> >::iterator i = _xrun_markers.begin(); i != _xrun_markers.end(); ++i) {
|
||||
delete ((*i).second);
|
||||
}
|
||||
|
||||
drop_silent_frames ();
|
||||
|
||||
delete editor;
|
||||
@ -421,10 +454,10 @@ RegionView::region_resized (const PropertyChange& what_changed)
|
||||
unit_length = _region->length() / samples_per_pixel;
|
||||
|
||||
for (vector<GhostRegion*>::iterator i = ghosts.begin(); i != ghosts.end(); ++i) {
|
||||
|
||||
(*i)->set_duration (unit_length);
|
||||
|
||||
}
|
||||
|
||||
update_xrun_markers ();
|
||||
}
|
||||
}
|
||||
|
||||
@ -433,6 +466,36 @@ RegionView::reset_width_dependent_items (double pixel_width)
|
||||
{
|
||||
TimeAxisViewItem::reset_width_dependent_items (pixel_width);
|
||||
_pixel_width = pixel_width;
|
||||
|
||||
if (_xrun_markers_visible) {
|
||||
const samplepos_t start = _region->start();
|
||||
for (list<std::pair<samplepos_t, ArdourCanvas::Arrow*> >::iterator i = _xrun_markers.begin(); i != _xrun_markers.end(); ++i) {
|
||||
float x_pos = trackview.editor().sample_to_pixel (i->first - start);
|
||||
i->second->set_x (x_pos);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
RegionView::update_xrun_markers ()
|
||||
{
|
||||
const bool show_xruns_markers = UIConfiguration::instance().get_show_region_xrun_markers();
|
||||
if (_xrun_markers_visible == show_xruns_markers && !_xrun_markers_visible) {
|
||||
return;
|
||||
}
|
||||
|
||||
const samplepos_t start = _region->start();
|
||||
const samplepos_t length = _region->length();
|
||||
for (list<std::pair<samplepos_t, ArdourCanvas::Arrow*> >::iterator i = _xrun_markers.begin(); i != _xrun_markers.end(); ++i) {
|
||||
float x_pos = trackview.editor().sample_to_pixel (i->first - start);
|
||||
i->second->set_x (x_pos);
|
||||
if (show_xruns_markers && (i->first >= start && i->first < start + length)) {
|
||||
i->second->show ();
|
||||
} else {
|
||||
i->second->hide ();
|
||||
}
|
||||
}
|
||||
_xrun_markers_visible = show_xruns_markers;
|
||||
}
|
||||
|
||||
void
|
||||
@ -517,6 +580,14 @@ RegionView::set_colors ()
|
||||
set_sync_mark_color ();
|
||||
}
|
||||
|
||||
void
|
||||
RegionView::parameter_changed (std::string const& p)
|
||||
{
|
||||
if (p == "show-region-xrun-markers") {
|
||||
update_xrun_markers ();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
RegionView::set_sync_mark_color ()
|
||||
{
|
||||
|
@ -164,6 +164,7 @@ protected:
|
||||
virtual void reset_width_dependent_items (double pixel_width);
|
||||
|
||||
virtual void color_handler () {}
|
||||
virtual void parameter_changed (std::string const&);
|
||||
|
||||
boost::shared_ptr<ARDOUR::Region> _region;
|
||||
|
||||
@ -198,6 +199,11 @@ protected:
|
||||
std::list<ArdourCanvas::Rectangle*> _silent_threshold_samples;
|
||||
/** a text item to display strip silence statistics */
|
||||
ArdourCanvas::Text* _silence_text;
|
||||
|
||||
private:
|
||||
void update_xrun_markers ();
|
||||
std::list<std::pair<samplepos_t, ArdourCanvas::Arrow*> > _xrun_markers;
|
||||
bool _xrun_markers_visible;
|
||||
};
|
||||
|
||||
#endif /* __gtk_ardour_region_view_h__ */
|
||||
|
@ -70,6 +70,7 @@ UI_CONFIG_VARIABLE (bool, use_tooltips, "use-tooltips", true)
|
||||
UI_CONFIG_VARIABLE (std::string, mixer_strip_visibility, "mixer-element-visibility", "Input,PhaseInvert,RecMon,SoloIsoLock,Output,Comments")
|
||||
UI_CONFIG_VARIABLE (bool, allow_non_quarter_pulse, "allow-non-quarter-pulse", false)
|
||||
UI_CONFIG_VARIABLE (bool, show_region_gain, "show-region-gain", false)
|
||||
UI_CONFIG_VARIABLE (bool, show_region_xrun_markers, "show-region-xrun-markers", false)
|
||||
UI_CONFIG_VARIABLE (bool, show_name_highlight, "show-name-highlight", false)
|
||||
UI_CONFIG_VARIABLE (ARDOUR::ClockDeltaMode, primary_clock_delta_mode, "primary-clock-delta-mode", NoDelta)
|
||||
UI_CONFIG_VARIABLE (ARDOUR::ClockDeltaMode, secondary_clock_delta_mode, "secondary-clock-delta-mode", NoDelta)
|
||||
|
Loading…
Reference in New Issue
Block a user