13
0

Option to how x-run markers in regions

This commit is contained in:
Robin Gareus 2021-02-14 00:53:28 +01:00
parent 8486a938ed
commit f4f9d76e53
Signed by: rgareus
GPG Key ID: A090BCE02CF57F04
6 changed files with 90 additions and 8 deletions

View File

@ -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 ();
}

View File

@ -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 ();
}

View File

@ -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"),

View File

@ -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 ()
{

View File

@ -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__ */

View File

@ -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)