mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-19 21:26:26 +01:00
merge 3.0 12308:12389
git-svn-id: svn://localhost/ardour2/branches/3.0-SG@12391 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
08c87b22b4
commit
89df06eb2d
88 changed files with 877 additions and 717 deletions
|
|
@ -559,7 +559,7 @@ About::About ()
|
||||||
|
|
||||||
sys::path splash_file;
|
sys::path splash_file;
|
||||||
|
|
||||||
SearchPath spath(ardour_search_path() + system_data_search_path());
|
SearchPath spath(ardour_data_search_path());
|
||||||
|
|
||||||
if (find_file_in_search_path (spath, "splash.png", splash_file)) {
|
if (find_file_in_search_path (spath, "splash.png", splash_file)) {
|
||||||
set_logo (Gdk::Pixbuf::create_from_file (splash_file.to_string()));
|
set_logo (Gdk::Pixbuf::create_from_file (splash_file.to_string()));
|
||||||
|
|
|
||||||
|
|
@ -72,9 +72,7 @@ ActionManager::init ()
|
||||||
|
|
||||||
ui_manager = UIManager::create ();
|
ui_manager = UIManager::create ();
|
||||||
|
|
||||||
SearchPath spath = ardour_search_path() + user_config_directory() + system_config_search_path();
|
find_file_in_search_path (ardour_config_search_path(), "ardour.menus", ui_file);
|
||||||
|
|
||||||
find_file_in_search_path (spath, "ardour.menus", ui_file);
|
|
||||||
|
|
||||||
bool loaded = false;
|
bool loaded = false;
|
||||||
|
|
||||||
|
|
@ -159,11 +157,7 @@ ActionManager::map_some_state (const char* group, const char* action, bool (RCCo
|
||||||
if (tact->get_active() != x) {
|
if (tact->get_active() != x) {
|
||||||
tact->set_active (x);
|
tact->set_active (x);
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
cerr << group << ':' << action << " is not a toggle\n";
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
cerr << group << ':' << action << " not an action\n";
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,13 @@ TOP=`dirname "$0"`/..
|
||||||
|
|
||||||
libs=$TOP/@LIBS@
|
libs=$TOP/@LIBS@
|
||||||
|
|
||||||
|
#
|
||||||
|
# when running ardev, the various parts of Ardour have not been consolidated into the locations that they
|
||||||
|
# would normally end up after an install. We therefore need to set up environment variables so that we
|
||||||
|
# can find all the components.
|
||||||
|
#
|
||||||
|
|
||||||
|
|
||||||
export ARDOUR_PATH=$TOP/gtk2_ardour/icons:$TOP/gtk2_ardour/pixmaps:$TOP/build/gtk2_ardour:$TOP/gtk2_ardour:.
|
export ARDOUR_PATH=$TOP/gtk2_ardour/icons:$TOP/gtk2_ardour/pixmaps:$TOP/build/gtk2_ardour:$TOP/gtk2_ardour:.
|
||||||
export ARDOUR_SURFACES_PATH=$libs/surfaces/osc:$libs/surfaces/generic_midi:$libs/surfaces/tranzport:$libs/surfaces/powermate:$libs/surfaces/mackie
|
export ARDOUR_SURFACES_PATH=$libs/surfaces/osc:$libs/surfaces/generic_midi:$libs/surfaces/tranzport:$libs/surfaces/powermate:$libs/surfaces/mackie
|
||||||
export ARDOUR_PANNER_PATH=$libs/panners/2in2out:$libs/panners/1in2out:$libs/panners/vbap
|
export ARDOUR_PANNER_PATH=$libs/panners/2in2out:$libs/panners/1in2out:$libs/panners/vbap
|
||||||
|
|
@ -11,6 +18,14 @@ export ARDOUR_DATA_PATH=$TOP/gtk2_ardour:build/gtk2_ardour:.
|
||||||
export ARDOUR_MIDIMAPS_PATH=$TOP/midi_maps:.
|
export ARDOUR_MIDIMAPS_PATH=$TOP/midi_maps:.
|
||||||
export ARDOUR_MCP_PATH=$TOP/mcp:.
|
export ARDOUR_MCP_PATH=$TOP/mcp:.
|
||||||
|
|
||||||
|
#
|
||||||
|
# even though we set the above variables, ardour requires that these
|
||||||
|
# two also be set. the above settings will override them.
|
||||||
|
#
|
||||||
|
|
||||||
|
export ARDOUR_CONFIG_PATH=$TOP:$TOP/gtk2_ardour:$TOP/build:$TOP/build/gtk2_ardour
|
||||||
|
export ARDOUR_DLL_PATH=$libs
|
||||||
|
|
||||||
if test -d $HOME/gtk/inst ; then
|
if test -d $HOME/gtk/inst ; then
|
||||||
export GTK_PATH=~/.ardour3:$libs/clearlooks-newer
|
export GTK_PATH=~/.ardour3:$libs/clearlooks-newer
|
||||||
else
|
else
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,13 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
export GTK_PATH=@LIBDIR@/ardour3${GTK_PATH:+:$GTK_PATH}
|
#
|
||||||
|
# This script runs an installed version of Ardour. It sets a few environment variables
|
||||||
|
# and does a few checks before exec'ing the real executable.
|
||||||
|
#
|
||||||
|
|
||||||
|
export GTK_PATH=@SYSCONFDIR@/ardour3${GTK_PATH:+:$GTK_PATH}
|
||||||
|
|
||||||
export LD_LIBRARY_PATH=@LIBDIR@/ardour3${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
|
export LD_LIBRARY_PATH=@LIBDIR@/ardour3${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
|
||||||
# DYLD_LIBRARY_PATH is for Darwin
|
|
||||||
export DYLD_LIBRARY_PATH=$LD_LIBRARY_PATH
|
|
||||||
|
|
||||||
## Memlock check
|
## Memlock check
|
||||||
|
|
||||||
|
|
@ -36,6 +39,14 @@ elif [ $(nm -D --radix=dec --defined-only -S $GLIB | grep -w g_atomic_int_add |
|
||||||
echo ""
|
echo ""
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
#
|
||||||
|
# Running Ardour requires these 3 variables to be set
|
||||||
|
#
|
||||||
|
|
||||||
|
export ARDOUR_DATA_PATH=@DATADIR@/ardour3
|
||||||
|
export ARDOUR_CONFIG_PATH=@SYSCONFDIR@/ardour3
|
||||||
|
export ARDOUR_DLL_PATH=@LIBDIR@/ardour3
|
||||||
|
|
||||||
exec @LIBDIR@/ardour3/ardour-@VERSION@ "$@"
|
exec @LIBDIR@/ardour3/ardour-@VERSION@ "$@"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -49,6 +49,7 @@ using namespace std;
|
||||||
ArdourButton::Element ArdourButton::default_elements = ArdourButton::Element (ArdourButton::Edge|ArdourButton::Body|ArdourButton::Text);
|
ArdourButton::Element ArdourButton::default_elements = ArdourButton::Element (ArdourButton::Edge|ArdourButton::Body|ArdourButton::Text);
|
||||||
ArdourButton::Element ArdourButton::led_default_elements = ArdourButton::Element (ArdourButton::default_elements|ArdourButton::Indicator);
|
ArdourButton::Element ArdourButton::led_default_elements = ArdourButton::Element (ArdourButton::default_elements|ArdourButton::Indicator);
|
||||||
ArdourButton::Element ArdourButton::just_led_default_elements = ArdourButton::Element (ArdourButton::Edge|ArdourButton::Body|ArdourButton::Indicator);
|
ArdourButton::Element ArdourButton::just_led_default_elements = ArdourButton::Element (ArdourButton::Edge|ArdourButton::Body|ArdourButton::Indicator);
|
||||||
|
bool ArdourButton::_flat_buttons = false;
|
||||||
|
|
||||||
ArdourButton::ArdourButton (Element e)
|
ArdourButton::ArdourButton (Element e)
|
||||||
: _elements (e)
|
: _elements (e)
|
||||||
|
|
@ -382,10 +383,18 @@ ArdourButton::set_colors ()
|
||||||
edge_pattern = cairo_pattern_create_linear (0.0, 0.0, 0.0, get_height());
|
edge_pattern = cairo_pattern_create_linear (0.0, 0.0, 0.0, get_height());
|
||||||
if (visual_state() & Gtkmm2ext::Selected) {
|
if (visual_state() & Gtkmm2ext::Selected) {
|
||||||
start_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: border start selected", get_name()));
|
start_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: border start selected", get_name()));
|
||||||
end_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: border end selected", get_name()));
|
if (_flat_buttons) {
|
||||||
|
end_color = start_color;
|
||||||
|
} else {
|
||||||
|
end_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: border end selected", get_name()));
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
start_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: border start", get_name()));
|
start_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: border start", get_name()));
|
||||||
end_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: border end", get_name()));
|
if (_flat_buttons) {
|
||||||
|
end_color = start_color;
|
||||||
|
} else {
|
||||||
|
end_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: border end", get_name()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
UINT_TO_RGBA (start_color, &r, &g, &b, &a);
|
UINT_TO_RGBA (start_color, &r, &g, &b, &a);
|
||||||
cairo_pattern_add_color_stop_rgba (edge_pattern, 0, r/255.0,g/255.0,b/255.0, 0.7);
|
cairo_pattern_add_color_stop_rgba (edge_pattern, 0, r/255.0,g/255.0,b/255.0, 0.7);
|
||||||
|
|
@ -407,7 +416,12 @@ ArdourButton::set_colors ()
|
||||||
|
|
||||||
active_pattern = cairo_pattern_create_linear (0.0, 0.0, 0.0, get_height());
|
active_pattern = cairo_pattern_create_linear (0.0, 0.0, 0.0, get_height());
|
||||||
start_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: fill start active", get_name()));
|
start_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: fill start active", get_name()));
|
||||||
end_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: fill end active", get_name()));
|
|
||||||
|
if (_flat_buttons) {
|
||||||
|
end_color = start_color;
|
||||||
|
} else {
|
||||||
|
end_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: fill end active", get_name()));
|
||||||
|
}
|
||||||
UINT_TO_RGBA (start_color, &r, &g, &b, &a);
|
UINT_TO_RGBA (start_color, &r, &g, &b, &a);
|
||||||
|
|
||||||
active_r = r/255.0;
|
active_r = r/255.0;
|
||||||
|
|
@ -421,7 +435,11 @@ ArdourButton::set_colors ()
|
||||||
|
|
||||||
inactive_pattern = cairo_pattern_create_linear (0.0, 0.0, 0.0, get_height());
|
inactive_pattern = cairo_pattern_create_linear (0.0, 0.0, 0.0, get_height());
|
||||||
start_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: fill start", get_name()));
|
start_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: fill start", get_name()));
|
||||||
end_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: fill end", get_name()));
|
if (_flat_buttons) {
|
||||||
|
end_color = start_color;
|
||||||
|
} else {
|
||||||
|
end_color = ARDOUR_UI::config()->color_by_name (string_compose ("%1: fill end", get_name()));
|
||||||
|
}
|
||||||
UINT_TO_RGBA (start_color, &r, &g, &b, &a);
|
UINT_TO_RGBA (start_color, &r, &g, &b, &a);
|
||||||
cairo_pattern_add_color_stop_rgba (inactive_pattern, 0, r/255.0,g/255.0,b/255.0, a/255.0);
|
cairo_pattern_add_color_stop_rgba (inactive_pattern, 0, r/255.0,g/255.0,b/255.0, a/255.0);
|
||||||
UINT_TO_RGBA (end_color, &r, &g, &b, &a);
|
UINT_TO_RGBA (end_color, &r, &g, &b, &a);
|
||||||
|
|
@ -764,3 +782,9 @@ ArdourButton::set_elements (Element e)
|
||||||
_elements = e;
|
_elements = e;
|
||||||
set_colors ();
|
set_colors ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ArdourButton::set_flat_buttons (bool yn)
|
||||||
|
{
|
||||||
|
_flat_buttons = yn;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,9 @@ class ArdourButton : public CairoWidget , public Gtkmm2ext::Activatable
|
||||||
static Element led_default_elements;
|
static Element led_default_elements;
|
||||||
static Element just_led_default_elements;
|
static Element just_led_default_elements;
|
||||||
|
|
||||||
|
static void set_flat_buttons (bool yn);
|
||||||
|
static bool flat_buttons() { return _flat_buttons; }
|
||||||
|
|
||||||
ArdourButton (Element e = default_elements);
|
ArdourButton (Element e = default_elements);
|
||||||
ArdourButton (const std::string&, Element e = default_elements);
|
ArdourButton (const std::string&, Element e = default_elements);
|
||||||
virtual ~ArdourButton ();
|
virtual ~ArdourButton ();
|
||||||
|
|
@ -142,6 +145,8 @@ class ArdourButton : public CairoWidget , public Gtkmm2ext::Activatable
|
||||||
bool _distinct_led_click;
|
bool _distinct_led_click;
|
||||||
bool _hovering;
|
bool _hovering;
|
||||||
|
|
||||||
|
static bool _flat_buttons;
|
||||||
|
|
||||||
void setup_led_rect ();
|
void setup_led_rect ();
|
||||||
void set_colors ();
|
void set_colors ();
|
||||||
void color_handler ();
|
void color_handler ();
|
||||||
|
|
|
||||||
|
|
@ -1162,7 +1162,6 @@ ARDOUR_UI::redisplay_recent_sessions ()
|
||||||
/* check whether session still exists */
|
/* check whether session still exists */
|
||||||
if (!Glib::file_test(fullpath.c_str(), Glib::FILE_TEST_EXISTS)) {
|
if (!Glib::file_test(fullpath.c_str(), Glib::FILE_TEST_EXISTS)) {
|
||||||
/* session doesn't exist */
|
/* session doesn't exist */
|
||||||
cerr << "skipping non-existent session " << fullpath << endl;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2839,7 +2838,6 @@ ARDOUR_UI::show_splash ()
|
||||||
try {
|
try {
|
||||||
splash = new Splash;
|
splash = new Splash;
|
||||||
} catch (...) {
|
} catch (...) {
|
||||||
cerr << "Splash could not be created\n";
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1568,7 +1568,8 @@ AudioRegionView::redraw_start_xfade_to (boost::shared_ptr<AudioRegion> ar, frame
|
||||||
if (!start_xfade_out) {
|
if (!start_xfade_out) {
|
||||||
start_xfade_out = new ArdourCanvas::Line (*group);
|
start_xfade_out = new ArdourCanvas::Line (*group);
|
||||||
start_xfade_out->property_width_pixels() = 1;
|
start_xfade_out->property_width_pixels() = 1;
|
||||||
start_xfade_out->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_GainLine.get();
|
uint32_t col = UINT_RGBA_CHANGE_A (ARDOUR_UI::config()->canvasvar_GainLine.get(), 125);
|
||||||
|
start_xfade_out->property_fill_color_rgba() = col;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!start_xfade_rect) {
|
if (!start_xfade_rect) {
|
||||||
|
|
@ -1673,7 +1674,8 @@ AudioRegionView::redraw_end_xfade_to (boost::shared_ptr<AudioRegion> ar, framecn
|
||||||
if (!end_xfade_out) {
|
if (!end_xfade_out) {
|
||||||
end_xfade_out = new ArdourCanvas::Line (*group);
|
end_xfade_out = new ArdourCanvas::Line (*group);
|
||||||
end_xfade_out->property_width_pixels() = 1;
|
end_xfade_out->property_width_pixels() = 1;
|
||||||
end_xfade_out->property_fill_color_rgba() = ARDOUR_UI::config()->canvasvar_GainLine.get();
|
uint32_t col UINT_RGBA_CHANGE_A (ARDOUR_UI::config()->canvasvar_GainLine.get(), 125);
|
||||||
|
end_xfade_out->property_fill_color_rgba() = col;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!end_xfade_rect) {
|
if (!end_xfade_rect) {
|
||||||
|
|
|
||||||
|
|
@ -179,7 +179,6 @@ void
|
||||||
AudioTimeAxisView::create_automation_child (const Evoral::Parameter& param, bool show)
|
AudioTimeAxisView::create_automation_child (const Evoral::Parameter& param, bool show)
|
||||||
{
|
{
|
||||||
if (param.type() == NullAutomation) {
|
if (param.type() == NullAutomation) {
|
||||||
cerr << "WARNING: Attempt to create NullAutomation child, ignoring" << endl;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -442,8 +442,6 @@ AutomationTimeAxisView::set_height (uint32_t h)
|
||||||
auto_button.hide();
|
auto_button.hide();
|
||||||
hide_button.hide();
|
hide_button.hide();
|
||||||
}
|
}
|
||||||
} else if (h >= preset_height (HeightNormal)) {
|
|
||||||
cerr << "track grown, but neither changed_between_small_and_normal nor first_call_to_set_height set!" << endl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (changed) {
|
if (changed) {
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,7 @@ BundleEditorMatrix::setup_ports (int dim)
|
||||||
otherwise in some cases the basic system IO ports may be hidden, making
|
otherwise in some cases the basic system IO ports may be hidden, making
|
||||||
the bundle editor useless */
|
the bundle editor useless */
|
||||||
|
|
||||||
_ports[OTHER].gather (_session, DataType::NIL, _bundle->ports_are_inputs(), true);
|
_ports[OTHER].gather (_session, DataType::NIL, _bundle->ports_are_inputs(), true, show_only_bundles ());
|
||||||
_ports[OTHER].remove_bundle (_bundle);
|
_ports[OTHER].remove_bundle (_bundle);
|
||||||
_ports[OTHER].resume_signals ();
|
_ports[OTHER].resume_signals ();
|
||||||
}
|
}
|
||||||
|
|
@ -101,13 +101,13 @@ BundleEditorMatrix::get_state (BundleChannel c[2]) const
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
BundleEditorMatrix::can_add_channel (boost::shared_ptr<Bundle> b) const
|
BundleEditorMatrix::can_add_channels (boost::shared_ptr<Bundle> b) const
|
||||||
{
|
{
|
||||||
if (b == _bundle) {
|
if (b == _bundle) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
return PortMatrix::can_add_channel (b);
|
return PortMatrix::can_add_channels (b);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -42,7 +42,7 @@ class BundleEditorMatrix : public PortMatrix
|
||||||
void set_state (ARDOUR::BundleChannel c[2], bool s);
|
void set_state (ARDOUR::BundleChannel c[2], bool s);
|
||||||
PortMatrixNode::State get_state (ARDOUR::BundleChannel c[2]) const;
|
PortMatrixNode::State get_state (ARDOUR::BundleChannel c[2]) const;
|
||||||
|
|
||||||
bool can_add_channel (boost::shared_ptr<ARDOUR::Bundle>) const;
|
bool can_add_channels (boost::shared_ptr<ARDOUR::Bundle>) const;
|
||||||
|
|
||||||
void add_channel (boost::shared_ptr<ARDOUR::Bundle>, ARDOUR::DataType);
|
void add_channel (boost::shared_ptr<ARDOUR::Bundle>, ARDOUR::DataType);
|
||||||
bool can_remove_channels (boost::shared_ptr<ARDOUR::Bundle>) const;
|
bool can_remove_channels (boost::shared_ptr<ARDOUR::Bundle>) const;
|
||||||
|
|
|
||||||
|
|
@ -786,7 +786,6 @@ Editor::button_settings () const
|
||||||
XMLNode* node = find_named_node (*settings, X_("Buttons"));
|
XMLNode* node = find_named_node (*settings, X_("Buttons"));
|
||||||
|
|
||||||
if (!node) {
|
if (!node) {
|
||||||
cerr << "new empty Button node\n";
|
|
||||||
node = new XMLNode (X_("Buttons"));
|
node = new XMLNode (X_("Buttons"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1449,141 +1448,140 @@ Editor::popup_fade_context_menu (int button, int32_t time, ArdourCanvas::Item* i
|
||||||
}
|
}
|
||||||
|
|
||||||
MenuList& items (fade_context_menu.items());
|
MenuList& items (fade_context_menu.items());
|
||||||
|
items.clear ();
|
||||||
|
|
||||||
if (items.empty()) {
|
switch (item_type) {
|
||||||
switch (item_type) {
|
case FadeInItem:
|
||||||
case FadeInItem:
|
case FadeInHandleItem:
|
||||||
case FadeInHandleItem:
|
if (arv->audio_region()->fade_in_active()) {
|
||||||
if (arv->audio_region()->fade_in_active()) {
|
items.push_back (MenuElem (_("Deactivate"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_active), false)));
|
||||||
items.push_back (MenuElem (_("Deactivate"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_active), false)));
|
} else {
|
||||||
} else {
|
items.push_back (MenuElem (_("Activate"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_active), true)));
|
||||||
items.push_back (MenuElem (_("Activate"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_active), true)));
|
|
||||||
}
|
|
||||||
|
|
||||||
items.push_back (SeparatorElem());
|
|
||||||
|
|
||||||
if (Profile->get_sae()) {
|
|
||||||
|
|
||||||
items.push_back (MenuElem (_("Linear"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeLinear)));
|
|
||||||
items.push_back (MenuElem (_("Slowest"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeFast)));
|
|
||||||
|
|
||||||
} else {
|
|
||||||
|
|
||||||
items.push_back (
|
|
||||||
ImageMenuElem (
|
|
||||||
_("Linear"),
|
|
||||||
*_fade_in_images[FadeLinear],
|
|
||||||
sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeLinear)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
dynamic_cast<ImageMenuItem*>(&items.back())->set_always_show_image ();
|
|
||||||
|
|
||||||
items.push_back (
|
|
||||||
ImageMenuElem (
|
|
||||||
_("Slow"),
|
|
||||||
*_fade_in_images[FadeSlow],
|
|
||||||
sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeSlow)
|
|
||||||
));
|
|
||||||
|
|
||||||
dynamic_cast<ImageMenuItem*>(&items.back())->set_always_show_image ();
|
|
||||||
|
|
||||||
items.push_back (
|
|
||||||
ImageMenuElem (
|
|
||||||
_("Fast"),
|
|
||||||
*_fade_in_images[FadeFast],
|
|
||||||
sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeFast)
|
|
||||||
));
|
|
||||||
|
|
||||||
dynamic_cast<ImageMenuItem*>(&items.back())->set_always_show_image ();
|
|
||||||
|
|
||||||
items.push_back (
|
|
||||||
ImageMenuElem (
|
|
||||||
_("Symmetric"),
|
|
||||||
*_fade_in_images[FadeSymmetric],
|
|
||||||
sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeSymmetric)
|
|
||||||
));
|
|
||||||
|
|
||||||
items.push_back (
|
|
||||||
ImageMenuElem (
|
|
||||||
_("Constant Power"),
|
|
||||||
*_fade_in_images[FadeConstantPower],
|
|
||||||
sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeConstantPower)
|
|
||||||
));
|
|
||||||
|
|
||||||
dynamic_cast<ImageMenuItem*>(&items.back())->set_always_show_image ();
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case FadeOutItem:
|
|
||||||
case FadeOutHandleItem:
|
|
||||||
if (arv->audio_region()->fade_out_active()) {
|
|
||||||
items.push_back (MenuElem (_("Deactivate"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_active), false)));
|
|
||||||
} else {
|
|
||||||
items.push_back (MenuElem (_("Activate"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_active), true)));
|
|
||||||
}
|
|
||||||
|
|
||||||
items.push_back (SeparatorElem());
|
|
||||||
|
|
||||||
if (Profile->get_sae()) {
|
|
||||||
items.push_back (MenuElem (_("Linear"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), FadeLinear)));
|
|
||||||
items.push_back (MenuElem (_("Slowest"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), FadeSlow)));
|
|
||||||
} else {
|
|
||||||
|
|
||||||
items.push_back (
|
|
||||||
ImageMenuElem (
|
|
||||||
_("Linear"),
|
|
||||||
*_fade_out_images[FadeLinear],
|
|
||||||
sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), FadeLinear)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
dynamic_cast<ImageMenuItem*>(&items.back())->set_always_show_image ();
|
|
||||||
|
|
||||||
items.push_back (
|
|
||||||
ImageMenuElem (
|
|
||||||
_("Slow"),
|
|
||||||
*_fade_out_images[FadeSlow],
|
|
||||||
sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), FadeSlow)
|
|
||||||
));
|
|
||||||
|
|
||||||
dynamic_cast<ImageMenuItem*>(&items.back())->set_always_show_image ();
|
|
||||||
|
|
||||||
items.push_back (
|
|
||||||
ImageMenuElem (
|
|
||||||
_("Fast"),
|
|
||||||
*_fade_out_images[FadeFast],
|
|
||||||
sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), FadeFast)
|
|
||||||
));
|
|
||||||
|
|
||||||
dynamic_cast<ImageMenuItem*>(&items.back())->set_always_show_image ();
|
|
||||||
|
|
||||||
items.push_back (
|
|
||||||
ImageMenuElem (
|
|
||||||
_("Symmetric"),
|
|
||||||
*_fade_out_images[FadeSymmetric],
|
|
||||||
sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), FadeSymmetric)
|
|
||||||
));
|
|
||||||
|
|
||||||
items.push_back (
|
|
||||||
ImageMenuElem (
|
|
||||||
_("Constant Power"),
|
|
||||||
*_fade_out_images[FadeConstantPower],
|
|
||||||
sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), FadeConstantPower)
|
|
||||||
));
|
|
||||||
|
|
||||||
dynamic_cast<ImageMenuItem*>(&items.back())->set_always_show_image ();
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
fatal << _("programming error: ")
|
|
||||||
<< X_("non-fade canvas item passed to popup_fade_context_menu()")
|
|
||||||
<< endmsg;
|
|
||||||
/*NOTREACHED*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
items.push_back (SeparatorElem());
|
||||||
|
|
||||||
|
if (Profile->get_sae()) {
|
||||||
|
|
||||||
|
items.push_back (MenuElem (_("Linear"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeLinear)));
|
||||||
|
items.push_back (MenuElem (_("Slowest"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeFast)));
|
||||||
|
|
||||||
|
} else {
|
||||||
|
|
||||||
|
items.push_back (
|
||||||
|
ImageMenuElem (
|
||||||
|
_("Linear"),
|
||||||
|
*_fade_in_images[FadeLinear],
|
||||||
|
sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeLinear)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
dynamic_cast<ImageMenuItem*>(&items.back())->set_always_show_image ();
|
||||||
|
|
||||||
|
items.push_back (
|
||||||
|
ImageMenuElem (
|
||||||
|
_("Slow"),
|
||||||
|
*_fade_in_images[FadeSlow],
|
||||||
|
sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeSlow)
|
||||||
|
));
|
||||||
|
|
||||||
|
dynamic_cast<ImageMenuItem*>(&items.back())->set_always_show_image ();
|
||||||
|
|
||||||
|
items.push_back (
|
||||||
|
ImageMenuElem (
|
||||||
|
_("Fast"),
|
||||||
|
*_fade_in_images[FadeFast],
|
||||||
|
sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeFast)
|
||||||
|
));
|
||||||
|
|
||||||
|
dynamic_cast<ImageMenuItem*>(&items.back())->set_always_show_image ();
|
||||||
|
|
||||||
|
items.push_back (
|
||||||
|
ImageMenuElem (
|
||||||
|
_("Symmetric"),
|
||||||
|
*_fade_in_images[FadeSymmetric],
|
||||||
|
sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeSymmetric)
|
||||||
|
));
|
||||||
|
|
||||||
|
items.push_back (
|
||||||
|
ImageMenuElem (
|
||||||
|
_("Constant Power"),
|
||||||
|
*_fade_in_images[FadeConstantPower],
|
||||||
|
sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_in_shape), FadeConstantPower)
|
||||||
|
));
|
||||||
|
|
||||||
|
dynamic_cast<ImageMenuItem*>(&items.back())->set_always_show_image ();
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
case FadeOutItem:
|
||||||
|
case FadeOutHandleItem:
|
||||||
|
if (arv->audio_region()->fade_out_active()) {
|
||||||
|
items.push_back (MenuElem (_("Deactivate"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_active), false)));
|
||||||
|
} else {
|
||||||
|
items.push_back (MenuElem (_("Activate"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_active), true)));
|
||||||
|
}
|
||||||
|
|
||||||
|
items.push_back (SeparatorElem());
|
||||||
|
|
||||||
|
if (Profile->get_sae()) {
|
||||||
|
items.push_back (MenuElem (_("Linear"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), FadeLinear)));
|
||||||
|
items.push_back (MenuElem (_("Slowest"), sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), FadeSlow)));
|
||||||
|
} else {
|
||||||
|
|
||||||
|
items.push_back (
|
||||||
|
ImageMenuElem (
|
||||||
|
_("Linear"),
|
||||||
|
*_fade_out_images[FadeLinear],
|
||||||
|
sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), FadeLinear)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
dynamic_cast<ImageMenuItem*>(&items.back())->set_always_show_image ();
|
||||||
|
|
||||||
|
items.push_back (
|
||||||
|
ImageMenuElem (
|
||||||
|
_("Slow"),
|
||||||
|
*_fade_out_images[FadeSlow],
|
||||||
|
sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), FadeSlow)
|
||||||
|
));
|
||||||
|
|
||||||
|
dynamic_cast<ImageMenuItem*>(&items.back())->set_always_show_image ();
|
||||||
|
|
||||||
|
items.push_back (
|
||||||
|
ImageMenuElem (
|
||||||
|
_("Fast"),
|
||||||
|
*_fade_out_images[FadeFast],
|
||||||
|
sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), FadeFast)
|
||||||
|
));
|
||||||
|
|
||||||
|
dynamic_cast<ImageMenuItem*>(&items.back())->set_always_show_image ();
|
||||||
|
|
||||||
|
items.push_back (
|
||||||
|
ImageMenuElem (
|
||||||
|
_("Symmetric"),
|
||||||
|
*_fade_out_images[FadeSymmetric],
|
||||||
|
sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), FadeSymmetric)
|
||||||
|
));
|
||||||
|
|
||||||
|
items.push_back (
|
||||||
|
ImageMenuElem (
|
||||||
|
_("Constant Power"),
|
||||||
|
*_fade_out_images[FadeConstantPower],
|
||||||
|
sigc::bind (sigc::mem_fun (*this, &Editor::set_fade_out_shape), FadeConstantPower)
|
||||||
|
));
|
||||||
|
|
||||||
|
dynamic_cast<ImageMenuItem*>(&items.back())->set_always_show_image ();
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
fatal << _("programming error: ")
|
||||||
|
<< X_("non-fade canvas item passed to popup_fade_context_menu()")
|
||||||
|
<< endmsg;
|
||||||
|
/*NOTREACHED*/
|
||||||
}
|
}
|
||||||
|
|
||||||
fade_context_menu.popup (button, time);
|
fade_context_menu.popup (button, time);
|
||||||
|
|
@ -1997,10 +1995,10 @@ Editor::add_dstream_context_items (Menu_Helpers::MenuList& edit_items)
|
||||||
nudge_menu->set_name ("ArdourContextMenu");
|
nudge_menu->set_name ("ArdourContextMenu");
|
||||||
|
|
||||||
edit_items.push_back (SeparatorElem());
|
edit_items.push_back (SeparatorElem());
|
||||||
nudge_items.push_back (MenuElem (_("Nudge Entire Track Forward"), (sigc::bind (sigc::mem_fun(*this, &Editor::nudge_track), false, true))));
|
nudge_items.push_back (MenuElem (_("Nudge Entire Track Later"), (sigc::bind (sigc::mem_fun(*this, &Editor::nudge_track), false, true))));
|
||||||
nudge_items.push_back (MenuElem (_("Nudge Track After Edit Point Forward"), (sigc::bind (sigc::mem_fun(*this, &Editor::nudge_track), true, true))));
|
nudge_items.push_back (MenuElem (_("Nudge Track After Edit Point Later"), (sigc::bind (sigc::mem_fun(*this, &Editor::nudge_track), true, true))));
|
||||||
nudge_items.push_back (MenuElem (_("Nudge Entire Track Backward"), (sigc::bind (sigc::mem_fun(*this, &Editor::nudge_track), false, false))));
|
nudge_items.push_back (MenuElem (_("Nudge Entire Track Earlier"), (sigc::bind (sigc::mem_fun(*this, &Editor::nudge_track), false, false))));
|
||||||
nudge_items.push_back (MenuElem (_("Nudge Track After Edit Point Backward"), (sigc::bind (sigc::mem_fun(*this, &Editor::nudge_track), true, false))));
|
nudge_items.push_back (MenuElem (_("Nudge Track After Edit Point Earlier"), (sigc::bind (sigc::mem_fun(*this, &Editor::nudge_track), true, false))));
|
||||||
|
|
||||||
edit_items.push_back (MenuElem (_("Nudge"), *nudge_menu));
|
edit_items.push_back (MenuElem (_("Nudge"), *nudge_menu));
|
||||||
}
|
}
|
||||||
|
|
@ -2053,10 +2051,10 @@ Editor::add_bus_context_items (Menu_Helpers::MenuList& edit_items)
|
||||||
nudge_menu->set_name ("ArdourContextMenu");
|
nudge_menu->set_name ("ArdourContextMenu");
|
||||||
|
|
||||||
edit_items.push_back (SeparatorElem());
|
edit_items.push_back (SeparatorElem());
|
||||||
nudge_items.push_back (MenuElem (_("Nudge Entire Track Forward"), (sigc::bind (sigc::mem_fun(*this, &Editor::nudge_track), false, true))));
|
nudge_items.push_back (MenuElem (_("Nudge Entire Track Later"), (sigc::bind (sigc::mem_fun(*this, &Editor::nudge_track), false, true))));
|
||||||
nudge_items.push_back (MenuElem (_("Nudge Track After Edit Point Forward"), (sigc::bind (sigc::mem_fun(*this, &Editor::nudge_track), true, true))));
|
nudge_items.push_back (MenuElem (_("Nudge Track After Edit Point Later"), (sigc::bind (sigc::mem_fun(*this, &Editor::nudge_track), true, true))));
|
||||||
nudge_items.push_back (MenuElem (_("Nudge Entire Track Backward"), (sigc::bind (sigc::mem_fun(*this, &Editor::nudge_track), false, false))));
|
nudge_items.push_back (MenuElem (_("Nudge Entire Track Earlier"), (sigc::bind (sigc::mem_fun(*this, &Editor::nudge_track), false, false))));
|
||||||
nudge_items.push_back (MenuElem (_("Nudge Track After Edit Point Backward"), (sigc::bind (sigc::mem_fun(*this, &Editor::nudge_track), true, false))));
|
nudge_items.push_back (MenuElem (_("Nudge Track After Edit Point Earlier"), (sigc::bind (sigc::mem_fun(*this, &Editor::nudge_track), true, false))));
|
||||||
|
|
||||||
edit_items.push_back (MenuElem (_("Nudge"), *nudge_menu));
|
edit_items.push_back (MenuElem (_("Nudge"), *nudge_menu));
|
||||||
}
|
}
|
||||||
|
|
@ -3061,8 +3059,8 @@ Editor::setup_tooltips ()
|
||||||
ARDOUR_UI::instance()->set_tip (smart_mode_joiner, _("Smart Mode (Select/Move Objects + Ranges)"));
|
ARDOUR_UI::instance()->set_tip (smart_mode_joiner, _("Smart Mode (Select/Move Objects + Ranges)"));
|
||||||
ARDOUR_UI::instance()->set_tip (internal_edit_button, _("Edit Region Contents (e.g. notes)"));
|
ARDOUR_UI::instance()->set_tip (internal_edit_button, _("Edit Region Contents (e.g. notes)"));
|
||||||
ARDOUR_UI::instance()->set_tip (*_group_tabs, _("Groups: click to (de)activate\nContext-click for other operations"));
|
ARDOUR_UI::instance()->set_tip (*_group_tabs, _("Groups: click to (de)activate\nContext-click for other operations"));
|
||||||
ARDOUR_UI::instance()->set_tip (nudge_forward_button, _("Nudge Region/Selection Forwards"));
|
ARDOUR_UI::instance()->set_tip (nudge_forward_button, _("Nudge Region/Selection Later"));
|
||||||
ARDOUR_UI::instance()->set_tip (nudge_backward_button, _("Nudge Region/Selection Backwards"));
|
ARDOUR_UI::instance()->set_tip (nudge_backward_button, _("Nudge Region/Selection Earlier"));
|
||||||
ARDOUR_UI::instance()->set_tip (zoom_in_button, _("Zoom In"));
|
ARDOUR_UI::instance()->set_tip (zoom_in_button, _("Zoom In"));
|
||||||
ARDOUR_UI::instance()->set_tip (zoom_out_button, _("Zoom Out"));
|
ARDOUR_UI::instance()->set_tip (zoom_out_button, _("Zoom Out"));
|
||||||
ARDOUR_UI::instance()->set_tip (zoom_out_full_button, _("Zoom to Session"));
|
ARDOUR_UI::instance()->set_tip (zoom_out_full_button, _("Zoom to Session"));
|
||||||
|
|
|
||||||
|
|
@ -228,17 +228,17 @@ Editor::register_actions ()
|
||||||
reg_sens (editor_actions, a.c_str(), n.c_str(), sigc::bind (sigc::mem_fun (*this, &Editor::goto_nth_marker), i - 1));
|
reg_sens (editor_actions, a.c_str(), n.c_str(), sigc::bind (sigc::mem_fun (*this, &Editor::goto_nth_marker), i - 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
reg_sens (editor_actions, "jump-forward-to-mark", _("Jump Forward to Mark"), sigc::mem_fun(*this, &Editor::jump_forward_to_mark));
|
reg_sens (editor_actions, "jump-forward-to-mark", _("Jump to Next Mark"), sigc::mem_fun(*this, &Editor::jump_forward_to_mark));
|
||||||
reg_sens (editor_actions, "jump-backward-to-mark", _("Jump Backward to Mark"), sigc::mem_fun(*this, &Editor::jump_backward_to_mark));
|
reg_sens (editor_actions, "jump-backward-to-mark", _("Jump to Previous Mark"), sigc::mem_fun(*this, &Editor::jump_backward_to_mark));
|
||||||
reg_sens (editor_actions, "add-location-from-playhead", _("Add Mark from Playhead"), sigc::mem_fun(*this, &Editor::add_location_from_playhead_cursor));
|
reg_sens (editor_actions, "add-location-from-playhead", _("Add Mark from Playhead"), sigc::mem_fun(*this, &Editor::add_location_from_playhead_cursor));
|
||||||
|
|
||||||
reg_sens (editor_actions, "nudge-next-forward", _("Nudge Next Forward"), sigc::bind (sigc::mem_fun(*this, &Editor::nudge_forward), true, false));
|
reg_sens (editor_actions, "nudge-next-forward", _("Nudge Next Later"), sigc::bind (sigc::mem_fun(*this, &Editor::nudge_forward), true, false));
|
||||||
reg_sens (editor_actions, "nudge-next-backward", _("Nudge Next Backward"), sigc::bind (sigc::mem_fun(*this, &Editor::nudge_backward), true, false));
|
reg_sens (editor_actions, "nudge-next-backward", _("Nudge Next Earlier"), sigc::bind (sigc::mem_fun(*this, &Editor::nudge_backward), true, false));
|
||||||
|
|
||||||
reg_sens (editor_actions, "nudge-playhead-forward", _("Nudge Playhead Forward"), sigc::bind (sigc::mem_fun(*this, &Editor::nudge_forward), false, true));
|
reg_sens (editor_actions, "nudge-playhead-forward", _("Nudge Playhead Forward"), sigc::bind (sigc::mem_fun(*this, &Editor::nudge_forward), false, true));
|
||||||
reg_sens (editor_actions, "nudge-playhead-backward", _("Nudge Playhead Backward"), sigc::bind (sigc::mem_fun(*this, &Editor::nudge_backward), false, true));
|
reg_sens (editor_actions, "nudge-playhead-backward", _("Nudge Playhead Backward"), sigc::bind (sigc::mem_fun(*this, &Editor::nudge_backward), false, true));
|
||||||
reg_sens (editor_actions, "playhead-forward-to-grid", _("Forward to Grid"), sigc::mem_fun(*this, &Editor::playhead_forward_to_grid));
|
reg_sens (editor_actions, "playhead-forward-to-grid", _("Playhead To Next Grid"), sigc::mem_fun(*this, &Editor::playhead_forward_to_grid));
|
||||||
reg_sens (editor_actions, "playhead-backward-to-grid", _("Backward to Grid"), sigc::mem_fun(*this, &Editor::playhead_backward_to_grid));
|
reg_sens (editor_actions, "playhead-backward-to-grid", _("Playhead To Previous Grid"), sigc::mem_fun(*this, &Editor::playhead_backward_to_grid));
|
||||||
|
|
||||||
reg_sens (editor_actions, "temporal-zoom-out", _("Zoom Out"), sigc::bind (sigc::mem_fun(*this, &Editor::temporal_zoom_step), true));
|
reg_sens (editor_actions, "temporal-zoom-out", _("Zoom Out"), sigc::bind (sigc::mem_fun(*this, &Editor::temporal_zoom_step), true));
|
||||||
reg_sens (editor_actions, "temporal-zoom-in", _("Zoom In"), sigc::bind (sigc::mem_fun(*this, &Editor::temporal_zoom_step), false));
|
reg_sens (editor_actions, "temporal-zoom-in", _("Zoom In"), sigc::bind (sigc::mem_fun(*this, &Editor::temporal_zoom_step), false));
|
||||||
|
|
@ -319,8 +319,8 @@ Editor::register_actions ()
|
||||||
toggle_reg_sens (editor_actions, "toggle-log-window", _("Log"),
|
toggle_reg_sens (editor_actions, "toggle-log-window", _("Log"),
|
||||||
sigc::mem_fun (ARDOUR_UI::instance(), &ARDOUR_UI::toggle_errors));
|
sigc::mem_fun (ARDOUR_UI::instance(), &ARDOUR_UI::toggle_errors));
|
||||||
|
|
||||||
reg_sens (editor_actions, "tab-to-transient-forwards", _("Move Forward to Transient"), sigc::bind (sigc::mem_fun(*this, &Editor::tab_to_transient), true));
|
reg_sens (editor_actions, "tab-to-transient-forwards", _("Move Later to Transient"), sigc::bind (sigc::mem_fun(*this, &Editor::tab_to_transient), true));
|
||||||
reg_sens (editor_actions, "tab-to-transient-backwards", _("Move Backwards to Transient"), sigc::bind (sigc::mem_fun(*this, &Editor::tab_to_transient), false));
|
reg_sens (editor_actions, "tab-to-transient-backwards", _("Move Earlier to Transient"), sigc::bind (sigc::mem_fun(*this, &Editor::tab_to_transient), false));
|
||||||
|
|
||||||
reg_sens (editor_actions, "crop", _("Crop"), sigc::mem_fun(*this, &Editor::crop_region_to_selection));
|
reg_sens (editor_actions, "crop", _("Crop"), sigc::mem_fun(*this, &Editor::crop_region_to_selection));
|
||||||
|
|
||||||
|
|
@ -643,13 +643,12 @@ Editor::load_bindings ()
|
||||||
key_bindings.set_action_map (editor_action_map);
|
key_bindings.set_action_map (editor_action_map);
|
||||||
|
|
||||||
sys::path binding_file;
|
sys::path binding_file;
|
||||||
SearchPath spath = ardour_search_path() + user_config_directory() + system_config_search_path();
|
|
||||||
|
|
||||||
if (find_file_in_search_path (spath, "editor.bindings", binding_file)) {
|
if (find_file_in_search_path (ardour_config_search_path(), "editor.bindings", binding_file)) {
|
||||||
key_bindings.load (binding_file.to_string());
|
key_bindings.load (binding_file.to_string());
|
||||||
info << string_compose (_("Loaded editor bindings from %1"), binding_file.to_string()) << endmsg;
|
info << string_compose (_("Loaded editor bindings from %1"), binding_file.to_string()) << endmsg;
|
||||||
} else {
|
} else {
|
||||||
error << string_compose (_("Could not find editor.bindings in search path %1"), spath.to_string()) << endmsg;
|
error << string_compose (_("Could not find editor.bindings in search path %1"), ardour_config_search_path().to_string()) << endmsg;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1700,20 +1699,20 @@ Editor::register_region_actions ()
|
||||||
reg_sens (_region_actions, "strip-region-silence", _("Strip Silence..."), sigc::mem_fun (*this, &Editor::strip_region_silence));
|
reg_sens (_region_actions, "strip-region-silence", _("Strip Silence..."), sigc::mem_fun (*this, &Editor::strip_region_silence));
|
||||||
reg_sens (_region_actions, "set-selection-from-region", _("Set Range Selection"), sigc::mem_fun (*this, &Editor::set_selection_from_region));
|
reg_sens (_region_actions, "set-selection-from-region", _("Set Range Selection"), sigc::mem_fun (*this, &Editor::set_selection_from_region));
|
||||||
|
|
||||||
reg_sens (_region_actions, "nudge-forward", _("Nudge Forward"), sigc::bind (sigc::mem_fun (*this, &Editor::nudge_forward), false, false));
|
reg_sens (_region_actions, "nudge-forward", _("Nudge Later"), sigc::bind (sigc::mem_fun (*this, &Editor::nudge_forward), false, false));
|
||||||
reg_sens (_region_actions, "nudge-backward", _("Nudge Backward"), sigc::bind (sigc::mem_fun (*this, &Editor::nudge_backward), false, false));
|
reg_sens (_region_actions, "nudge-backward", _("Nudge Earlier"), sigc::bind (sigc::mem_fun (*this, &Editor::nudge_backward), false, false));
|
||||||
|
|
||||||
reg_sens (
|
reg_sens (
|
||||||
_region_actions,
|
_region_actions,
|
||||||
"nudge-forward-by-capture-offset",
|
"nudge-forward-by-capture-offset",
|
||||||
_("Nudge Forward by Capture Offset"),
|
_("Nudge Later by Capture Offset"),
|
||||||
sigc::mem_fun (*this, &Editor::nudge_forward_capture_offset)
|
sigc::mem_fun (*this, &Editor::nudge_forward_capture_offset)
|
||||||
);
|
);
|
||||||
|
|
||||||
reg_sens (
|
reg_sens (
|
||||||
_region_actions,
|
_region_actions,
|
||||||
"nudge-backward-by-capture-offset",
|
"nudge-backward-by-capture-offset",
|
||||||
_("Nudge Backward by Capture Offset"),
|
_("Nudge Earlier by Capture Offset"),
|
||||||
sigc::mem_fun (*this, &Editor::nudge_backward_capture_offset)
|
sigc::mem_fun (*this, &Editor::nudge_backward_capture_offset)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -732,7 +732,7 @@ Editor::left_track_canvas (GdkEventCrossing */*ev*/)
|
||||||
{
|
{
|
||||||
DropDownKeys ();
|
DropDownKeys ();
|
||||||
within_track_canvas = false;
|
within_track_canvas = false;
|
||||||
cerr << "left track canvas\n";
|
//cerr << "left track canvas\n";
|
||||||
set_entered_track (0);
|
set_entered_track (0);
|
||||||
set_entered_regionview (0);
|
set_entered_regionview (0);
|
||||||
reset_canvas_action_sensitivity (false);
|
reset_canvas_action_sensitivity (false);
|
||||||
|
|
@ -742,7 +742,7 @@ Editor::left_track_canvas (GdkEventCrossing */*ev*/)
|
||||||
bool
|
bool
|
||||||
Editor::entered_track_canvas (GdkEventCrossing */*ev*/)
|
Editor::entered_track_canvas (GdkEventCrossing */*ev*/)
|
||||||
{
|
{
|
||||||
cerr << "entered track canvas\n";
|
//cerr << "entered track canvas\n";
|
||||||
within_track_canvas = true;
|
within_track_canvas = true;
|
||||||
reset_canvas_action_sensitivity (true);
|
reset_canvas_action_sensitivity (true);
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
|
||||||
|
|
@ -2430,10 +2430,6 @@ Editor::point_trim (GdkEvent* event, framepos_t new_bound)
|
||||||
for (list<RegionView*>::const_iterator i = selection->regions.by_layer().begin();
|
for (list<RegionView*>::const_iterator i = selection->regions.by_layer().begin();
|
||||||
i != selection->regions.by_layer().end(); ++i)
|
i != selection->regions.by_layer().end(); ++i)
|
||||||
{
|
{
|
||||||
if ( (*i) == NULL){
|
|
||||||
cerr << "region view contains null region" << endl;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(*i)->region()->locked()) {
|
if (!(*i)->region()->locked()) {
|
||||||
(*i)->region()->clear_changes ();
|
(*i)->region()->clear_changes ();
|
||||||
(*i)->region()->trim_front (new_bound);
|
(*i)->region()->trim_front (new_bound);
|
||||||
|
|
|
||||||
|
|
@ -3202,15 +3202,10 @@ Editor::trim_region (bool front)
|
||||||
framepos_t where = get_preferred_edit_position();
|
framepos_t where = get_preferred_edit_position();
|
||||||
RegionSelection rs = get_regions_from_selection_and_edit_point ();
|
RegionSelection rs = get_regions_from_selection_and_edit_point ();
|
||||||
|
|
||||||
cerr << "trim regions\n";
|
|
||||||
|
|
||||||
if (rs.empty()) {
|
if (rs.empty()) {
|
||||||
cerr << " no regions\n";
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
cerr << "where = " << where << endl;
|
|
||||||
|
|
||||||
begin_reversible_command (front ? _("trim front") : _("trim back"));
|
begin_reversible_command (front ? _("trim front") : _("trim back"));
|
||||||
|
|
||||||
for (list<RegionView*>::const_iterator i = rs.by_layer().begin(); i != rs.by_layer().end(); ++i) {
|
for (list<RegionView*>::const_iterator i = rs.by_layer().begin(); i != rs.by_layer().end(); ++i) {
|
||||||
|
|
|
||||||
|
|
@ -367,7 +367,6 @@ EditorRouteGroups::button_press_event (GdkEventButton* ev)
|
||||||
|
|
||||||
case 12:
|
case 12:
|
||||||
val = (*iter)[_columns.active_shared];
|
val = (*iter)[_columns.active_shared];
|
||||||
cerr << "set group active to " << !val << endl;
|
|
||||||
group->set_route_active (!val);
|
group->set_route_active (!val);
|
||||||
ret = true;
|
ret = true;
|
||||||
break;
|
break;
|
||||||
|
|
|
||||||
|
|
@ -264,7 +264,6 @@ Editor::set_selected_track_as_side_effect (Selection::Operation op)
|
||||||
|
|
||||||
case Selection::Extend:
|
case Selection::Extend:
|
||||||
selection->clear();
|
selection->clear();
|
||||||
cerr << ("Editor::set_selected_track_as_side_effect case Selection::Add not yet implemented\n");
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ void
|
||||||
GlobalPortMatrix::setup_ports (int dim)
|
GlobalPortMatrix::setup_ports (int dim)
|
||||||
{
|
{
|
||||||
_ports[dim].suspend_signals ();
|
_ports[dim].suspend_signals ();
|
||||||
_ports[dim].gather (_session, type(), dim == IN, false);
|
_ports[dim].gather (_session, type(), dim == IN, false, show_only_bundles ());
|
||||||
_ports[dim].resume_signals ();
|
_ports[dim].resume_signals ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -118,7 +118,7 @@ IOSelector::setup_ports (int dim)
|
||||||
|
|
||||||
if (dim == _other) {
|
if (dim == _other) {
|
||||||
|
|
||||||
_ports[_other].gather (_session, type(), _find_inputs_for_io_outputs, false);
|
_ports[_other].gather (_session, type(), _find_inputs_for_io_outputs, false, show_only_bundles ());
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -126,9 +126,7 @@ ArdourKeyboard::setup_keybindings ()
|
||||||
/* not absolute - look in the usual places */
|
/* not absolute - look in the usual places */
|
||||||
sys::path keybindings_file;
|
sys::path keybindings_file;
|
||||||
|
|
||||||
SearchPath spath = ardour_search_path() + user_config_directory() + system_config_search_path();
|
if ( ! find_file_in_search_path (ardour_config_search_path(), keybindings_path, keybindings_file)) {
|
||||||
|
|
||||||
if ( ! find_file_in_search_path (spath, keybindings_path, keybindings_file)) {
|
|
||||||
|
|
||||||
if (keybindings_path == default_bindings) {
|
if (keybindings_path == default_bindings) {
|
||||||
error << string_compose (_("Default keybindings not found - %1 will be hard to use!"), PROGRAM_NAME) << endmsg;
|
error << string_compose (_("Default keybindings not found - %1 will be hard to use!"), PROGRAM_NAME) << endmsg;
|
||||||
|
|
|
||||||
|
|
@ -109,8 +109,6 @@ KeyEditor::unbind ()
|
||||||
|
|
||||||
unbind_button.set_sensitive (false);
|
unbind_button.set_sensitive (false);
|
||||||
|
|
||||||
cerr << "trying to unbind\n";
|
|
||||||
|
|
||||||
if (i != model->children().end()) {
|
if (i != model->children().end()) {
|
||||||
string path = (*i)[columns.path];
|
string path = (*i)[columns.path];
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -166,44 +166,26 @@ fixup_bundle_environment (int, char* [])
|
||||||
}
|
}
|
||||||
setenv ("PATH", path.c_str(), 1);
|
setenv ("PATH", path.c_str(), 1);
|
||||||
|
|
||||||
path = dir_path;
|
export_search_path (dir_path, "ARDOUR_DLL_PATH", "/../lib");
|
||||||
path += "/../Resources";
|
|
||||||
path += dir_path;
|
|
||||||
path += "/../Surfaces";
|
|
||||||
path += dir_path;
|
|
||||||
path += "/../Panners";
|
|
||||||
|
|
||||||
setenv ("ARDOUR_MODULE_PATH", path.c_str(), 1);
|
|
||||||
|
|
||||||
path = user_config_directory().to_string();
|
|
||||||
path += ':';
|
|
||||||
path += dir_path;
|
|
||||||
path += "/../Resources/icons:";
|
|
||||||
path += dir_path;
|
|
||||||
path += "/../Resources/pixmaps:";
|
|
||||||
path += dir_path;
|
|
||||||
path += "/../Resources/share:";
|
|
||||||
path += dir_path;
|
path += dir_path;
|
||||||
path += "/../Resources";
|
path += "/../Resources";
|
||||||
|
|
||||||
setenv ("ARDOUR_PATH", path.c_str(), 1);
|
/* inside an OS X .app bundle, there is no difference
|
||||||
setenv ("ARDOUR_CONFIG_PATH", path.c_str(), 1);
|
between DATA and CONFIG locations, since OS X doesn't
|
||||||
|
attempt to do anything to expose the notion of
|
||||||
|
machine-independent shared data.
|
||||||
|
*/
|
||||||
|
|
||||||
path = dir_path;
|
export_search_path (dir_path, "ARDOUR_DATA_PATH", "/../Resources");
|
||||||
path += "/../Resources";
|
export_search_path (dir_path, "ARDOUR_CONFIG_PATH", "/../Resources");
|
||||||
setenv ("ARDOUR_INSTANT_XML_PATH", path.c_str(), 1);
|
export_search_path (dir_path, "ARDOUR_INSTANT_XML_PATH", "/../Resources");
|
||||||
|
|
||||||
export_search_path (dir_path, "LADSPA_PATH", "/../Plugins");
|
export_search_path (dir_path, "LADSPA_PATH", "/../Plugins");
|
||||||
export_search_path (dir_path, "VAMP_PATH", "/../Frameworks");
|
export_search_path (dir_path, "VAMP_PATH", "/../Frameworks");
|
||||||
export_search_path (dir_path, "ARDOUR_PANNER_PATH", "/../Panners");
|
|
||||||
export_search_path (dir_path, "ARDOUR_SURFACES_PATH", "/../Surfaces");
|
|
||||||
export_search_path (dir_path, "ARDOUR_MIDIMAPS_PATH", "/../MidiMaps");
|
|
||||||
export_search_path (dir_path, "ARDOUR_MCP_PATH", "../MCP");
|
|
||||||
export_search_path (dir_path, "ARDOUR_EXPORT_FORMATS_PATH", "/../ExportFormats");
|
|
||||||
|
|
||||||
path = dir_path;
|
path = dir_path;
|
||||||
path += "/../Frameworks/clearlooks";
|
path += "/../lib/clearlooks";
|
||||||
|
|
||||||
setenv ("GTK_PATH", path.c_str(), 1);
|
setenv ("GTK_PATH", path.c_str(), 1);
|
||||||
|
|
||||||
/* unset GTK_RC_FILES so that we only load the RC files that we define
|
/* unset GTK_RC_FILES so that we only load the RC files that we define
|
||||||
|
|
@ -305,49 +287,17 @@ fixup_bundle_environment (int /*argc*/, char* argv[])
|
||||||
Glib::ustring path;
|
Glib::ustring path;
|
||||||
Glib::ustring userconfigdir = user_config_directory().to_string();
|
Glib::ustring userconfigdir = user_config_directory().to_string();
|
||||||
|
|
||||||
/* ensure that we find any bundled executables (e.g. JACK),
|
|
||||||
and find them before any instances of the same name
|
|
||||||
elsewhere in PATH
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* note that this function is POSIX/Linux specific, so using / as
|
/* note that this function is POSIX/Linux specific, so using / as
|
||||||
a dir separator in this context is just fine.
|
a dir separator in this context is just fine.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
path = dir_path;
|
export_search_path (dir_path, "ARDOUR_DLL_PATH", "/lib");
|
||||||
path += "/etc:";
|
export_search_path (dir_path, "ARDOUR_CONFIG_PATH", "/etc");
|
||||||
path += dir_path;
|
export_search_path (dir_path, "ARDOUR_INSTANT_XML_PATH", "/share");
|
||||||
path += "/lib/surfaces:";
|
export_search_path (dir_path, "ARDOUR_DATA_PATH", "/share");
|
||||||
path += dir_path;
|
|
||||||
path += "/lib/panners:";
|
|
||||||
|
|
||||||
setenv ("ARDOUR_MODULE_PATH", path.c_str(), 1);
|
|
||||||
|
|
||||||
path = userconfigdir;
|
|
||||||
path += ':';
|
|
||||||
path += dir_path;
|
|
||||||
path += "/etc/icons:";
|
|
||||||
path += dir_path;
|
|
||||||
path += "/etc/pixmaps:";
|
|
||||||
path += dir_path;
|
|
||||||
path += "/share:";
|
|
||||||
path += dir_path;
|
|
||||||
path += "/etc";
|
|
||||||
|
|
||||||
setenv ("ARDOUR_PATH", path.c_str(), 1);
|
|
||||||
setenv ("ARDOUR_CONFIG_PATH", path.c_str(), 1);
|
|
||||||
|
|
||||||
path = dir_path;
|
|
||||||
path += "/etc";
|
|
||||||
setenv ("ARDOUR_INSTANT_XML_PATH", path.c_str(), 1);
|
|
||||||
|
|
||||||
export_search_path (dir_path, "LADSPA_PATH", "/../plugins");
|
export_search_path (dir_path, "LADSPA_PATH", "/../plugins");
|
||||||
export_search_path (dir_path, "VAMP_PATH", "/lib");
|
export_search_path (dir_path, "VAMP_PATH", "/lib");
|
||||||
export_search_path (dir_path, "ARDOUR_PANNER_PATH", "/lib/panners");
|
|
||||||
export_search_path (dir_path, "ARDOUR_SURFACES_PATH", "/lib/surfaces");
|
|
||||||
export_search_path (dir_path, "ARDOUR_MIDIMAPS_PATH", "/share/midi_maps");
|
|
||||||
export_search_path (dir_path, "ARDOUR_MCP_PATH", "/share/mcp");
|
|
||||||
export_search_path (dir_path, "ARDOUR_EXPORT_FORMATS_PATH", "/share/export");
|
|
||||||
|
|
||||||
path = dir_path;
|
path = dir_path;
|
||||||
path += "/lib/clearlooks";
|
path += "/lib/clearlooks";
|
||||||
|
|
@ -367,7 +317,7 @@ fixup_bundle_environment (int /*argc*/, char* argv[])
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Tell fontconfig where to find fonts.conf. Use the system version
|
/* Tell fontconfig where to find fonts.conf. Use the system version
|
||||||
if it exists, otherwise use the stuff we included in t
|
if it exists, otherwise use the stuff we included in the bundle
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (Glib::file_test ("/etc/fonts/fonts.conf", Glib::FILE_TEST_EXISTS)) {
|
if (Glib::file_test ("/etc/fonts/fonts.conf", Glib::FILE_TEST_EXISTS)) {
|
||||||
|
|
|
||||||
|
|
@ -2909,7 +2909,7 @@ MidiRegionView::change_note_lengths (bool fine, bool shorter, Evoral::MusicalTim
|
||||||
delta = trackview.editor().get_grid_type_as_beats (success, _region->position());
|
delta = trackview.editor().get_grid_type_as_beats (success, _region->position());
|
||||||
if (!success) {
|
if (!success) {
|
||||||
/* XXX cannot get grid type as beats ... should always be possible ... FIX ME */
|
/* XXX cannot get grid type as beats ... should always be possible ... FIX ME */
|
||||||
cerr << "Grid type not available as beats - TO BE FIXED\n";
|
error << string_compose (_("programming error: %1"), "Grid type not available as beats - TO BE FIXED") << endmsg;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -861,7 +861,6 @@ void
|
||||||
MidiTimeAxisView::create_automation_child (const Evoral::Parameter& param, bool show)
|
MidiTimeAxisView::create_automation_child (const Evoral::Parameter& param, bool show)
|
||||||
{
|
{
|
||||||
if (param.type() == NullAutomation) {
|
if (param.type() == NullAutomation) {
|
||||||
cerr << "WARNING: Attempt to create NullAutomation child, ignoring" << endl;
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -874,8 +873,6 @@ MidiTimeAxisView::create_automation_child (const Evoral::Parameter& param, bool
|
||||||
* since it will have been set visible by default.
|
* since it will have been set visible by default.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
cerr << "show existing auto track: " << show << " noredraw " << no_redraw << endl;
|
|
||||||
|
|
||||||
if (existing->second->set_marked_for_display (show) && !no_redraw) {
|
if (existing->second->set_marked_for_display (show) && !no_redraw) {
|
||||||
request_redraw ();
|
request_redraw ();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,6 @@ MissingFileDialog::MissingFileDialog (Session* s, const std::string& path, DataT
|
||||||
string dirstr;
|
string dirstr;
|
||||||
|
|
||||||
dirstr = s->source_search_path (type);
|
dirstr = s->source_search_path (type);
|
||||||
cerr << "Search path = " << dirstr << endl;
|
|
||||||
replace_all (dirstr, ":", "\n");
|
replace_all (dirstr, ":", "\n");
|
||||||
|
|
||||||
msg.set_justify (JUSTIFY_CENTER);
|
msg.set_justify (JUSTIFY_CENTER);
|
||||||
|
|
|
||||||
|
|
@ -83,13 +83,12 @@ MixerActor::load_bindings ()
|
||||||
bindings.set_action_map (myactions);
|
bindings.set_action_map (myactions);
|
||||||
|
|
||||||
sys::path binding_file;
|
sys::path binding_file;
|
||||||
SearchPath spath = ardour_search_path() + user_config_directory() + system_config_search_path();
|
|
||||||
|
|
||||||
if (find_file_in_search_path (spath, "mixer.bindings", binding_file)) {
|
if (find_file_in_search_path (ardour_config_search_path(), "mixer.bindings", binding_file)) {
|
||||||
bindings.load (binding_file.to_string());
|
bindings.load (binding_file.to_string());
|
||||||
info << string_compose (_("Loaded mixer bindings from %1"), binding_file.to_string()) << endmsg;
|
info << string_compose (_("Loaded mixer bindings from %1"), binding_file.to_string()) << endmsg;
|
||||||
} else {
|
} else {
|
||||||
error << string_compose (_("Could not find mixer.bindings in search path %1"), spath.to_string()) << endmsg;
|
error << string_compose (_("Could not find mixer.bindings in search path %1"), ardour_config_search_path().to_string()) << endmsg;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -321,9 +321,12 @@ public:
|
||||||
|
|
||||||
/** Gather ports from around the system and put them in this PortGroupList.
|
/** Gather ports from around the system and put them in this PortGroupList.
|
||||||
* @param type Type of ports to collect, or NIL for all types.
|
* @param type Type of ports to collect, or NIL for all types.
|
||||||
|
* @param use_session_bundles true to use the session's non-user bundles. Doing this will mean that
|
||||||
|
* hardware ports will be gathered into stereo pairs, as the session sets up bundles for these pairs.
|
||||||
|
* Not using the session bundles will mean that all hardware IO will be presented separately.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
PortGroupList::gather (ARDOUR::Session* session, ARDOUR::DataType type, bool inputs, bool allow_dups)
|
PortGroupList::gather (ARDOUR::Session* session, ARDOUR::DataType type, bool inputs, bool allow_dups, bool use_session_bundles)
|
||||||
{
|
{
|
||||||
clear ();
|
clear ();
|
||||||
|
|
||||||
|
|
@ -408,9 +411,12 @@ PortGroupList::gather (ARDOUR::Session* session, ARDOUR::DataType type, bool inp
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (BundleList::iterator i = b->begin(); i != b->end(); ++i) {
|
/* Only look for non-user bundles if instructed to do so */
|
||||||
if (boost::dynamic_pointer_cast<UserBundle> (*i) == 0 && (*i)->ports_are_inputs() == inputs) {
|
if (use_session_bundles) {
|
||||||
system->add_bundle (*i, allow_dups);
|
for (BundleList::iterator i = b->begin(); i != b->end(); ++i) {
|
||||||
|
if (boost::dynamic_pointer_cast<UserBundle> (*i) == 0 && (*i)->ports_are_inputs() == inputs) {
|
||||||
|
system->add_bundle (*i, allow_dups);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -107,7 +107,7 @@ class PortGroupList : public sigc::trackable
|
||||||
|
|
||||||
void add_group (boost::shared_ptr<PortGroup>);
|
void add_group (boost::shared_ptr<PortGroup>);
|
||||||
void add_group_if_not_empty (boost::shared_ptr<PortGroup>);
|
void add_group_if_not_empty (boost::shared_ptr<PortGroup>);
|
||||||
void gather (ARDOUR::Session *, ARDOUR::DataType, bool, bool);
|
void gather (ARDOUR::Session *, ARDOUR::DataType, bool, bool, bool);
|
||||||
PortGroup::BundleList const & bundles () const;
|
PortGroup::BundleList const & bundles () const;
|
||||||
void clear ();
|
void clear ();
|
||||||
void remove_bundle (boost::shared_ptr<ARDOUR::Bundle>);
|
void remove_bundle (boost::shared_ptr<ARDOUR::Bundle>);
|
||||||
|
|
|
||||||
|
|
@ -213,6 +213,7 @@ PortMatrix::setup ()
|
||||||
|
|
||||||
_body->setup ();
|
_body->setup ();
|
||||||
setup_scrollbars ();
|
setup_scrollbars ();
|
||||||
|
update_tab_highlighting ();
|
||||||
queue_draw ();
|
queue_draw ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -411,23 +412,25 @@ PortMatrix::popup_menu (BundleChannel column, BundleChannel row, uint32_t t)
|
||||||
|
|
||||||
boost::weak_ptr<Bundle> w (bc[dim].bundle);
|
boost::weak_ptr<Bundle> w (bc[dim].bundle);
|
||||||
|
|
||||||
/* Start off with options for the `natural' port type */
|
if (can_add_channels (bc[dim].bundle)) {
|
||||||
for (DataType::iterator i = DataType::begin(); i != DataType::end(); ++i) {
|
/* Start off with options for the `natural' port type */
|
||||||
if (should_show (*i)) {
|
for (DataType::iterator i = DataType::begin(); i != DataType::end(); ++i) {
|
||||||
snprintf (buf, sizeof (buf), _("Add %s %s"), (*i).to_i18n_string(), channel_noun().c_str());
|
if (should_show (*i)) {
|
||||||
sub.push_back (MenuElem (buf, sigc::bind (sigc::mem_fun (*this, &PortMatrix::add_channel_proxy), w, *i)));
|
snprintf (buf, sizeof (buf), _("Add %s %s"), (*i).to_i18n_string(), channel_noun().c_str());
|
||||||
|
sub.push_back (MenuElem (buf, sigc::bind (sigc::mem_fun (*this, &PortMatrix::add_channel_proxy), w, *i)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Now add other ones */
|
||||||
|
for (DataType::iterator i = DataType::begin(); i != DataType::end(); ++i) {
|
||||||
|
if (!should_show (*i)) {
|
||||||
|
snprintf (buf, sizeof (buf), _("Add %s %s"), (*i).to_i18n_string(), channel_noun().c_str());
|
||||||
|
sub.push_back (MenuElem (buf, sigc::bind (sigc::mem_fun (*this, &PortMatrix::add_channel_proxy), w, *i)));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Now add other ones */
|
if (can_rename_channels (bc[dim].bundle) && bc[dim].channel != -1) {
|
||||||
for (DataType::iterator i = DataType::begin(); i != DataType::end(); ++i) {
|
|
||||||
if (!should_show (*i)) {
|
|
||||||
snprintf (buf, sizeof (buf), _("Add %s %s"), (*i).to_i18n_string(), channel_noun().c_str());
|
|
||||||
sub.push_back (MenuElem (buf, sigc::bind (sigc::mem_fun (*this, &PortMatrix::add_channel_proxy), w, *i)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (can_rename_channels (bc[dim].bundle)) {
|
|
||||||
snprintf (
|
snprintf (
|
||||||
buf, sizeof (buf), _("Rename '%s'..."),
|
buf, sizeof (buf), _("Rename '%s'..."),
|
||||||
escape_underscores (bc[dim].bundle->channel_name (bc[dim].channel)).c_str()
|
escape_underscores (bc[dim].bundle->channel_name (bc[dim].channel)).c_str()
|
||||||
|
|
@ -623,6 +626,11 @@ PortMatrix::toggle_show_only_bundles ()
|
||||||
_show_only_bundles = !_show_only_bundles;
|
_show_only_bundles = !_show_only_bundles;
|
||||||
|
|
||||||
setup ();
|
setup ();
|
||||||
|
|
||||||
|
/* The way in which hardware ports are grouped changes depending on the _show_only_bundles
|
||||||
|
setting, so we need to set things up again now.
|
||||||
|
*/
|
||||||
|
setup_all_ports ();
|
||||||
}
|
}
|
||||||
|
|
||||||
pair<uint32_t, uint32_t>
|
pair<uint32_t, uint32_t>
|
||||||
|
|
@ -672,7 +680,7 @@ PortMatrix::io_from_bundle (boost::shared_ptr<Bundle> b) const
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
PortMatrix::can_add_channel (boost::shared_ptr<Bundle> b) const
|
PortMatrix::can_add_channels (boost::shared_ptr<Bundle> b) const
|
||||||
{
|
{
|
||||||
return io_from_bundle (b);
|
return io_from_bundle (b);
|
||||||
}
|
}
|
||||||
|
|
@ -770,6 +778,7 @@ PortMatrix::setup_notebooks ()
|
||||||
dummy->show ();
|
dummy->show ();
|
||||||
Label* label = manage (new Label ((*i)->name));
|
Label* label = manage (new Label ((*i)->name));
|
||||||
label->set_angle (_arrangement == LEFT_TO_BOTTOM ? 90 : -90);
|
label->set_angle (_arrangement == LEFT_TO_BOTTOM ? 90 : -90);
|
||||||
|
label->set_use_markup ();
|
||||||
label->show ();
|
label->show ();
|
||||||
if (_arrangement == LEFT_TO_BOTTOM) {
|
if (_arrangement == LEFT_TO_BOTTOM) {
|
||||||
_vnotebook.prepend_page (*dummy, *label);
|
_vnotebook.prepend_page (*dummy, *label);
|
||||||
|
|
@ -785,7 +794,10 @@ PortMatrix::setup_notebooks ()
|
||||||
for (PortGroupList::List::const_iterator i = _ports[_column_index].begin(); i != _ports[_column_index].end(); ++i) {
|
for (PortGroupList::List::const_iterator i = _ports[_column_index].begin(); i != _ports[_column_index].end(); ++i) {
|
||||||
HBox* dummy = manage (new HBox);
|
HBox* dummy = manage (new HBox);
|
||||||
dummy->show ();
|
dummy->show ();
|
||||||
_hnotebook.append_page (*dummy, (*i)->name);
|
Label* label = manage (new Label ((*i)->name));
|
||||||
|
label->set_use_markup ();
|
||||||
|
label->show ();
|
||||||
|
_hnotebook.append_page (*dummy, *label);
|
||||||
}
|
}
|
||||||
|
|
||||||
_ignore_notebook_page_selected = false;
|
_ignore_notebook_page_selected = false;
|
||||||
|
|
@ -947,6 +959,55 @@ void
|
||||||
PortMatrix::port_connected_or_disconnected ()
|
PortMatrix::port_connected_or_disconnected ()
|
||||||
{
|
{
|
||||||
_body->rebuild_and_draw_grid ();
|
_body->rebuild_and_draw_grid ();
|
||||||
|
update_tab_highlighting ();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Update the highlighting of tab names to reflect which ones
|
||||||
|
* have connections. This is pretty inefficient, unfortunately,
|
||||||
|
* but maybe that doesn't matter too much.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
PortMatrix::update_tab_highlighting ()
|
||||||
|
{
|
||||||
|
for (int i = 0; i < 2; ++i) {
|
||||||
|
|
||||||
|
Gtk::Notebook* notebook = row_index() == i ? &_vnotebook : &_hnotebook;
|
||||||
|
|
||||||
|
PortGroupList const * gl = ports (i);
|
||||||
|
int p = 0;
|
||||||
|
for (PortGroupList::List::const_iterator j = gl->begin(); j != gl->end(); ++j) {
|
||||||
|
bool has_connection = false;
|
||||||
|
PortGroup::BundleList const & bl = (*j)->bundles ();
|
||||||
|
PortGroup::BundleList::const_iterator k = bl.begin ();
|
||||||
|
while (k != bl.end()) {
|
||||||
|
if ((*k)->bundle->connected_to_anything (_session->engine())) {
|
||||||
|
has_connection = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
++k;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Find the page index that we should update; this is backwards
|
||||||
|
for the vertical tabs in the LEFT_TO_BOTTOM arrangement.
|
||||||
|
*/
|
||||||
|
int page = p;
|
||||||
|
if (i == row_index() && _arrangement == LEFT_TO_BOTTOM) {
|
||||||
|
page = notebook->get_n_pages() - p - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
Gtk::Label* label = dynamic_cast<Gtk::Label*> (notebook->get_tab_label(*notebook->get_nth_page (page)));
|
||||||
|
string c = label->get_label ();
|
||||||
|
if (c.length() && c[0] == '<' && !has_connection) {
|
||||||
|
/* this label is marked up with <b> but shouldn't be */
|
||||||
|
label->set_markup ((*j)->name);
|
||||||
|
} else if (c.length() && c[0] != '<' && has_connection) {
|
||||||
|
/* this label is not marked up with <b> but should be */
|
||||||
|
label->set_markup (string_compose ("<b>%1</b>", (*j)->name));
|
||||||
|
}
|
||||||
|
|
||||||
|
++p;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
string
|
string
|
||||||
|
|
|
||||||
|
|
@ -141,7 +141,7 @@ public:
|
||||||
virtual PortMatrixNode::State get_state (ARDOUR::BundleChannel c[2]) const = 0;
|
virtual PortMatrixNode::State get_state (ARDOUR::BundleChannel c[2]) const = 0;
|
||||||
virtual bool list_is_global (int) const = 0;
|
virtual bool list_is_global (int) const = 0;
|
||||||
|
|
||||||
virtual bool can_add_channel (boost::shared_ptr<ARDOUR::Bundle>) const;
|
virtual bool can_add_channels (boost::shared_ptr<ARDOUR::Bundle>) const;
|
||||||
virtual void add_channel (boost::shared_ptr<ARDOUR::Bundle>, ARDOUR::DataType);
|
virtual void add_channel (boost::shared_ptr<ARDOUR::Bundle>, ARDOUR::DataType);
|
||||||
virtual bool can_remove_channels (boost::shared_ptr<ARDOUR::Bundle>) const;
|
virtual bool can_remove_channels (boost::shared_ptr<ARDOUR::Bundle>) const;
|
||||||
virtual void remove_channel (ARDOUR::BundleChannel);
|
virtual void remove_channel (ARDOUR::BundleChannel);
|
||||||
|
|
@ -198,6 +198,7 @@ private:
|
||||||
void add_remove_option (Gtk::Menu_Helpers::MenuList &, boost::weak_ptr<ARDOUR::Bundle>, int);
|
void add_remove_option (Gtk::Menu_Helpers::MenuList &, boost::weak_ptr<ARDOUR::Bundle>, int);
|
||||||
void add_disassociate_option (Gtk::Menu_Helpers::MenuList &, boost::weak_ptr<ARDOUR::Bundle>, int, int);
|
void add_disassociate_option (Gtk::Menu_Helpers::MenuList &, boost::weak_ptr<ARDOUR::Bundle>, int, int);
|
||||||
void port_connected_or_disconnected ();
|
void port_connected_or_disconnected ();
|
||||||
|
void update_tab_highlighting ();
|
||||||
|
|
||||||
Gtk::Window* _parent;
|
Gtk::Window* _parent;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1287,10 +1287,13 @@ RouteUI::solo_isolate_button_release (GdkEventButton* ev)
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
RouteUI::solo_safe_button_release (GdkEventButton*)
|
RouteUI::solo_safe_button_release (GdkEventButton* ev)
|
||||||
{
|
{
|
||||||
_route->set_solo_safe (!solo_safe_led->active_state(), this);
|
if (ev->button == 1) {
|
||||||
return true;
|
_route->set_solo_safe (!solo_safe_led->active_state(), this);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -1025,6 +1025,7 @@ Selection::set (ControlPoint* cp)
|
||||||
cp->line().nth (i)->set_selected (false);
|
cp->line().nth (i)->set_selected (false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clear_points ();
|
||||||
add (cp);
|
add (cp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -447,6 +447,9 @@ SoundFileBrowser::SoundFileBrowser (Gtk::Window& parent, string title, ARDOUR::S
|
||||||
{
|
{
|
||||||
chooser.set_border_width (12);
|
chooser.set_border_width (12);
|
||||||
|
|
||||||
|
audio_and_midi_filter.add_custom (FILE_FILTER_FILENAME, sigc::mem_fun (*this, &SoundFileBrowser::on_audio_and_midi_filter));
|
||||||
|
audio_and_midi_filter.set_name (_("Audio and MIDI files"));
|
||||||
|
|
||||||
audio_filter.add_custom (FILE_FILTER_FILENAME, sigc::mem_fun(*this, &SoundFileBrowser::on_audio_filter));
|
audio_filter.add_custom (FILE_FILTER_FILENAME, sigc::mem_fun(*this, &SoundFileBrowser::on_audio_filter));
|
||||||
audio_filter.set_name (_("Audio files"));
|
audio_filter.set_name (_("Audio files"));
|
||||||
|
|
||||||
|
|
@ -456,6 +459,7 @@ SoundFileBrowser::SoundFileBrowser (Gtk::Window& parent, string title, ARDOUR::S
|
||||||
matchall_filter.add_pattern ("*.*");
|
matchall_filter.add_pattern ("*.*");
|
||||||
matchall_filter.set_name (_("All files"));
|
matchall_filter.set_name (_("All files"));
|
||||||
|
|
||||||
|
chooser.add_filter (audio_and_midi_filter);
|
||||||
chooser.add_filter (audio_filter);
|
chooser.add_filter (audio_filter);
|
||||||
chooser.add_filter (midi_filter);
|
chooser.add_filter (midi_filter);
|
||||||
chooser.add_filter (matchall_filter);
|
chooser.add_filter (matchall_filter);
|
||||||
|
|
@ -700,6 +704,12 @@ SoundFileBrowser::on_midi_filter (const FileFilter::Info& filter_info)
|
||||||
return SMFSource::safe_midi_file_extension (filter_info.filename);
|
return SMFSource::safe_midi_file_extension (filter_info.filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
SoundFileBrowser::on_audio_and_midi_filter (const FileFilter::Info& filter_info)
|
||||||
|
{
|
||||||
|
return on_audio_filter (filter_info) || on_midi_filter (filter_info);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SoundFileBrowser::update_preview ()
|
SoundFileBrowser::update_preview ()
|
||||||
{
|
{
|
||||||
|
|
@ -1043,6 +1053,8 @@ SoundFileOmega::reset_options ()
|
||||||
string existing_choice;
|
string existing_choice;
|
||||||
vector<string> action_strings;
|
vector<string> action_strings;
|
||||||
|
|
||||||
|
resetting_ourselves = true;
|
||||||
|
|
||||||
if (chooser.get_filter() == &audio_filter) {
|
if (chooser.get_filter() == &audio_filter) {
|
||||||
|
|
||||||
/* AUDIO */
|
/* AUDIO */
|
||||||
|
|
@ -1071,10 +1083,10 @@ SoundFileOmega::reset_options ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
/* MIDI */
|
/* MIDI ONLY */
|
||||||
|
|
||||||
if (selected_midi_track_cnt > 0) {
|
if (selected_midi_track_cnt > 0) {
|
||||||
action_strings.push_back (importmode2string (ImportToTrack));
|
action_strings.push_back (importmode2string (ImportToTrack));
|
||||||
|
|
@ -1085,8 +1097,6 @@ SoundFileOmega::reset_options ()
|
||||||
action_strings.push_back (importmode2string (ImportAsRegion));
|
action_strings.push_back (importmode2string (ImportAsRegion));
|
||||||
action_strings.push_back (importmode2string (ImportAsTapeTrack));
|
action_strings.push_back (importmode2string (ImportAsTapeTrack));
|
||||||
|
|
||||||
resetting_ourselves = true;
|
|
||||||
|
|
||||||
existing_choice = action_combo.get_active_text();
|
existing_choice = action_combo.get_active_text();
|
||||||
|
|
||||||
set_popdown_strings (action_combo, action_strings);
|
set_popdown_strings (action_combo, action_strings);
|
||||||
|
|
@ -1573,6 +1583,15 @@ SoundFileOmega::reset (uint32_t selected_audio_tracks, uint32_t selected_midi_tr
|
||||||
{
|
{
|
||||||
selected_audio_track_cnt = selected_audio_tracks;
|
selected_audio_track_cnt = selected_audio_tracks;
|
||||||
selected_midi_track_cnt = selected_midi_tracks;
|
selected_midi_track_cnt = selected_midi_tracks;
|
||||||
|
|
||||||
|
if (selected_audio_track_cnt == 0 && selected_midi_track_cnt > 0) {
|
||||||
|
chooser.set_filter (midi_filter);
|
||||||
|
} else if (selected_midi_track_cnt == 0 && selected_audio_track_cnt > 0) {
|
||||||
|
chooser.set_filter (audio_filter);
|
||||||
|
} else {
|
||||||
|
chooser.set_filter (audio_and_midi_filter);
|
||||||
|
}
|
||||||
|
|
||||||
reset_options ();
|
reset_options ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -182,6 +182,7 @@ class SoundFileBrowser : public ArdourDialog
|
||||||
protected:
|
protected:
|
||||||
bool resetting_ourselves;
|
bool resetting_ourselves;
|
||||||
|
|
||||||
|
Gtk::FileFilter audio_and_midi_filter;
|
||||||
Gtk::FileFilter audio_filter;
|
Gtk::FileFilter audio_filter;
|
||||||
Gtk::FileFilter midi_filter;
|
Gtk::FileFilter midi_filter;
|
||||||
Gtk::FileFilter custom_filter;
|
Gtk::FileFilter custom_filter;
|
||||||
|
|
@ -216,6 +217,7 @@ class SoundFileBrowser : public ArdourDialog
|
||||||
|
|
||||||
bool on_audio_filter (const Gtk::FileFilter::Info& filter_info);
|
bool on_audio_filter (const Gtk::FileFilter::Info& filter_info);
|
||||||
bool on_midi_filter (const Gtk::FileFilter::Info& filter_info);
|
bool on_midi_filter (const Gtk::FileFilter::Info& filter_info);
|
||||||
|
bool on_audio_and_midi_filter (const Gtk::FileFilter::Info& filter_info);
|
||||||
|
|
||||||
virtual bool reset_options() { return true; }
|
virtual bool reset_options() { return true; }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ Splash::Splash ()
|
||||||
{
|
{
|
||||||
sys::path splash_file;
|
sys::path splash_file;
|
||||||
|
|
||||||
if (!find_file_in_search_path (ardour_search_path() + system_data_search_path(), "splash.png", splash_file)) {
|
if (!find_file_in_search_path (ardour_data_search_path(), "splash.png", splash_file)) {
|
||||||
throw failed_constructor();
|
throw failed_constructor();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -549,10 +549,10 @@ ArdourStartup::setup_initial_choice_page ()
|
||||||
centering_vbox->pack_start (ic_new_session_button, false, true);
|
centering_vbox->pack_start (ic_new_session_button, false, true);
|
||||||
centering_vbox->pack_start (ic_existing_session_button, false, true);
|
centering_vbox->pack_start (ic_existing_session_button, false, true);
|
||||||
|
|
||||||
ic_new_session_button.signal_button_press_event().connect(sigc::mem_fun(*this, &ArdourStartup::initial_button_press), false);
|
ic_new_session_button.signal_clicked().connect(sigc::mem_fun(*this, &ArdourStartup::initial_button_clicked));
|
||||||
ic_new_session_button.signal_activate().connect(sigc::mem_fun(*this, &ArdourStartup::initial_button_activated), false);
|
ic_new_session_button.signal_activate().connect(sigc::mem_fun(*this, &ArdourStartup::initial_button_activated), false);
|
||||||
|
|
||||||
ic_existing_session_button.signal_button_press_event().connect(sigc::mem_fun(*this, &ArdourStartup::initial_button_press), false);
|
ic_existing_session_button.signal_clicked().connect(sigc::mem_fun(*this, &ArdourStartup::initial_button_clicked));
|
||||||
ic_existing_session_button.signal_activate().connect(sigc::mem_fun(*this, &ArdourStartup::initial_button_activated), false);
|
ic_existing_session_button.signal_activate().connect(sigc::mem_fun(*this, &ArdourStartup::initial_button_activated), false);
|
||||||
|
|
||||||
centering_hbox->pack_start (*centering_vbox, true, true);
|
centering_hbox->pack_start (*centering_vbox, true, true);
|
||||||
|
|
@ -572,21 +572,20 @@ ArdourStartup::setup_initial_choice_page ()
|
||||||
set_page_complete (ic_vbox, true);
|
set_page_complete (ic_vbox, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
void
|
||||||
ArdourStartup::initial_button_press (GdkEventButton *event)
|
ArdourStartup::initial_button_clicked ()
|
||||||
{
|
{
|
||||||
if (event && event->type == GDK_2BUTTON_PRESS && session_page_index != -1) {
|
if (session_page_index != -1) {
|
||||||
set_current_page(session_page_index);
|
set_current_page(session_page_index);
|
||||||
return true;
|
|
||||||
} else {
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ArdourStartup::initial_button_activated ()
|
ArdourStartup::initial_button_activated ()
|
||||||
{
|
{
|
||||||
set_current_page(session_page_index);
|
if (session_page_index != -1) {
|
||||||
|
set_current_page(session_page_index);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -716,7 +715,7 @@ ArdourStartup::populate_session_templates ()
|
||||||
static bool
|
static bool
|
||||||
lost_name_entry_focus (GdkEventFocus*)
|
lost_name_entry_focus (GdkEventFocus*)
|
||||||
{
|
{
|
||||||
cerr << "lost focus\n";
|
// cerr << "lost focus\n";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -892,7 +891,7 @@ ArdourStartup::setup_new_session_page ()
|
||||||
void
|
void
|
||||||
ArdourStartup::new_name_mapped ()
|
ArdourStartup::new_name_mapped ()
|
||||||
{
|
{
|
||||||
cerr << "Grab new name focus\n";
|
// cerr << "Grab new name focus\n";
|
||||||
new_name_entry.grab_focus ();
|
new_name_entry.grab_focus ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -117,7 +117,7 @@ class ArdourStartup : public Gtk::Assistant {
|
||||||
Gtk::VBox ic_vbox;
|
Gtk::VBox ic_vbox;
|
||||||
Gtk::RadioButton ic_new_session_button;
|
Gtk::RadioButton ic_new_session_button;
|
||||||
Gtk::RadioButton ic_existing_session_button;
|
Gtk::RadioButton ic_existing_session_button;
|
||||||
bool initial_button_press(GdkEventButton *);
|
void initial_button_clicked();
|
||||||
void initial_button_activated();
|
void initial_button_activated();
|
||||||
|
|
||||||
/* monitoring choices */
|
/* monitoring choices */
|
||||||
|
|
|
||||||
|
|
@ -709,9 +709,8 @@ StepEntry::load_bindings ()
|
||||||
bindings.set_action_map (myactions);
|
bindings.set_action_map (myactions);
|
||||||
|
|
||||||
sys::path binding_file;
|
sys::path binding_file;
|
||||||
SearchPath spath = ardour_search_path() + user_config_directory() + system_config_search_path();
|
|
||||||
|
|
||||||
if (find_file_in_search_path (spath, "step_editing.bindings", binding_file)) {
|
if (find_file_in_search_path (ardour_config_search_path(), "step_editing.bindings", binding_file)) {
|
||||||
bindings.load (binding_file.to_string());
|
bindings.load (binding_file.to_string());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -36,6 +36,7 @@
|
||||||
#include "ardour/filesystem_paths.h"
|
#include "ardour/filesystem_paths.h"
|
||||||
#include "ardour/profile.h"
|
#include "ardour/profile.h"
|
||||||
|
|
||||||
|
#include "ardour_button.h"
|
||||||
#include "theme_manager.h"
|
#include "theme_manager.h"
|
||||||
#include "rgb_macros.h"
|
#include "rgb_macros.h"
|
||||||
#include "ardour_ui.h"
|
#include "ardour_ui.h"
|
||||||
|
|
@ -52,10 +53,11 @@ sigc::signal<void> ColorsChanged;
|
||||||
sigc::signal<void,uint32_t> ColorChanged;
|
sigc::signal<void,uint32_t> ColorChanged;
|
||||||
|
|
||||||
ThemeManager::ThemeManager()
|
ThemeManager::ThemeManager()
|
||||||
: ArdourWindow (_("Theme Manager")),
|
: ArdourWindow (_("Theme Manager"))
|
||||||
dark_button (_("Dark Theme")),
|
, dark_button (_("Dark Theme"))
|
||||||
light_button (_("Light Theme")),
|
, light_button (_("Light Theme"))
|
||||||
reset_button (_("Restore Defaults"))
|
, reset_button (_("Restore Defaults"))
|
||||||
|
, flat_buttons (_("Draw \"flat\" buttons"))
|
||||||
{
|
{
|
||||||
set_title (_("Theme Manager"));
|
set_title (_("Theme Manager"));
|
||||||
|
|
||||||
|
|
@ -90,6 +92,7 @@ ThemeManager::ThemeManager()
|
||||||
vbox->set_homogeneous (false);
|
vbox->set_homogeneous (false);
|
||||||
vbox->pack_start (theme_selection_hbox, PACK_SHRINK);
|
vbox->pack_start (theme_selection_hbox, PACK_SHRINK);
|
||||||
vbox->pack_start (reset_button, PACK_SHRINK);
|
vbox->pack_start (reset_button, PACK_SHRINK);
|
||||||
|
vbox->pack_start (flat_buttons, PACK_SHRINK);
|
||||||
vbox->pack_start (scroller);
|
vbox->pack_start (scroller);
|
||||||
add (*vbox);
|
add (*vbox);
|
||||||
|
|
||||||
|
|
@ -103,6 +106,7 @@ ThemeManager::ThemeManager()
|
||||||
dark_button.signal_toggled().connect (sigc::mem_fun (*this, &ThemeManager::on_dark_theme_button_toggled));
|
dark_button.signal_toggled().connect (sigc::mem_fun (*this, &ThemeManager::on_dark_theme_button_toggled));
|
||||||
light_button.signal_toggled().connect (sigc::mem_fun (*this, &ThemeManager::on_light_theme_button_toggled));
|
light_button.signal_toggled().connect (sigc::mem_fun (*this, &ThemeManager::on_light_theme_button_toggled));
|
||||||
reset_button.signal_clicked().connect (sigc::mem_fun (*this, &ThemeManager::reset_canvas_colors));
|
reset_button.signal_clicked().connect (sigc::mem_fun (*this, &ThemeManager::reset_canvas_colors));
|
||||||
|
flat_buttons.signal_toggled().connect (sigc::mem_fun (*this, &ThemeManager::on_flat_buttons_toggled));
|
||||||
|
|
||||||
set_size_request (-1, 400);
|
set_size_request (-1, 400);
|
||||||
setup_theme ();
|
setup_theme ();
|
||||||
|
|
@ -202,13 +206,9 @@ load_rc_file (const string& filename, bool themechange)
|
||||||
{
|
{
|
||||||
sys::path rc_file_path;
|
sys::path rc_file_path;
|
||||||
|
|
||||||
SearchPath spath (ardour_search_path());
|
if (!find_file_in_search_path (ardour_config_search_path(), filename, rc_file_path)) {
|
||||||
spath += user_config_directory();
|
|
||||||
spath += system_config_search_path();
|
|
||||||
|
|
||||||
if (!find_file_in_search_path (spath, filename, rc_file_path)) {
|
|
||||||
warning << string_compose (_("Unable to find UI style file %1 in search path %2. %3 will look strange"),
|
warning << string_compose (_("Unable to find UI style file %1 in search path %2. %3 will look strange"),
|
||||||
filename, spath.to_string(), PROGRAM_NAME)
|
filename, ardour_config_search_path().to_string(), PROGRAM_NAME)
|
||||||
<< endmsg;
|
<< endmsg;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -230,6 +230,16 @@ load_rc_file (const string& filename, bool themechange)
|
||||||
|
|
||||||
#define HACK_PROFILE_IS_SAE() (getenv("ARDOUR_SAE")!=0)
|
#define HACK_PROFILE_IS_SAE() (getenv("ARDOUR_SAE")!=0)
|
||||||
|
|
||||||
|
void
|
||||||
|
ThemeManager::on_flat_buttons_toggled ()
|
||||||
|
{
|
||||||
|
ARDOUR_UI::config()->flat_buttons.set (flat_buttons.get_active());
|
||||||
|
ARDOUR_UI::config()->set_dirty ();
|
||||||
|
ArdourButton::set_flat_buttons (flat_buttons.get_active());
|
||||||
|
/* force a redraw */
|
||||||
|
gtk_rc_reset_styles (gtk_settings_get_default());
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ThemeManager::on_dark_theme_button_toggled()
|
ThemeManager::on_dark_theme_button_toggled()
|
||||||
{
|
{
|
||||||
|
|
@ -337,7 +347,9 @@ ThemeManager::setup_theme ()
|
||||||
} else if (rcfile == "ardour3_ui_light.rc" || rcfile == "ardour3_ui_light_sae.rc") {
|
} else if (rcfile == "ardour3_ui_light.rc" || rcfile == "ardour3_ui_light_sae.rc") {
|
||||||
light_button.set_active();
|
light_button.set_active();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
flat_buttons.set_active (ARDOUR_UI::config()->flat_buttons.get());
|
||||||
|
|
||||||
load_rc_file(rcfile, false);
|
load_rc_file(rcfile, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@ class ThemeManager : public ArdourWindow
|
||||||
|
|
||||||
void on_dark_theme_button_toggled ();
|
void on_dark_theme_button_toggled ();
|
||||||
void on_light_theme_button_toggled ();
|
void on_light_theme_button_toggled ();
|
||||||
|
void on_flat_buttons_toggled ();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct ColorDisplayModelColumns : public Gtk::TreeModel::ColumnRecord {
|
struct ColorDisplayModelColumns : public Gtk::TreeModel::ColumnRecord {
|
||||||
|
|
@ -67,6 +68,7 @@ class ThemeManager : public ArdourWindow
|
||||||
Gtk::RadioButton dark_button;
|
Gtk::RadioButton dark_button;
|
||||||
Gtk::RadioButton light_button;
|
Gtk::RadioButton light_button;
|
||||||
Gtk::Button reset_button;
|
Gtk::Button reset_button;
|
||||||
|
Gtk::CheckButton flat_buttons;
|
||||||
|
|
||||||
bool button_press_event (GdkEventButton*);
|
bool button_press_event (GdkEventButton*);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -75,8 +75,7 @@ UIConfiguration::load_defaults ()
|
||||||
rcfile = "ardour3_ui_default.conf";
|
rcfile = "ardour3_ui_default.conf";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (find_file_in_search_path (ardour_search_path() + system_config_search_path(),
|
if (find_file_in_search_path (ardour_config_search_path(), rcfile, default_ui_rc_file) ) {
|
||||||
rcfile, default_ui_rc_file) ) {
|
|
||||||
XMLTree tree;
|
XMLTree tree;
|
||||||
found = 1;
|
found = 1;
|
||||||
|
|
||||||
|
|
@ -107,8 +106,7 @@ UIConfiguration::load_state ()
|
||||||
|
|
||||||
sys::path default_ui_rc_file;
|
sys::path default_ui_rc_file;
|
||||||
|
|
||||||
if ( find_file_in_search_path (ardour_search_path() + system_config_search_path(),
|
if ( find_file_in_search_path (ardour_config_search_path(), "ardour3_ui_default.conf", default_ui_rc_file)) {
|
||||||
"ardour3_ui_default.conf", default_ui_rc_file) ) {
|
|
||||||
XMLTree tree;
|
XMLTree tree;
|
||||||
found = true;
|
found = true;
|
||||||
|
|
||||||
|
|
@ -129,8 +127,7 @@ UIConfiguration::load_state ()
|
||||||
|
|
||||||
sys::path user_ui_rc_file;
|
sys::path user_ui_rc_file;
|
||||||
|
|
||||||
if (find_file_in_search_path (ardour_search_path() + user_config_directory(),
|
if (find_file_in_search_path (ardour_config_search_path(), "ardour3_ui.conf", user_ui_rc_file)) {
|
||||||
"ardour3_ui.conf", user_ui_rc_file)) {
|
|
||||||
XMLTree tree;
|
XMLTree tree;
|
||||||
found = true;
|
found = true;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,2 +1,3 @@
|
||||||
UI_CONFIG_VARIABLE(std::string, ui_rc_file, "ui-rc-file", "ardour3_ui_dark.rc")
|
UI_CONFIG_VARIABLE(std::string, ui_rc_file, "ui-rc-file", "ardour3_ui_dark.rc")
|
||||||
|
UI_CONFIG_VARIABLE(bool, flat_buttons, "flat-buttons", false)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -494,8 +494,7 @@ get_xpm (std::string name)
|
||||||
{
|
{
|
||||||
if (!xpm_map[name]) {
|
if (!xpm_map[name]) {
|
||||||
|
|
||||||
SearchPath spath(ARDOUR::ardour_search_path());
|
SearchPath spath(ARDOUR::ardour_data_search_path());
|
||||||
spath += ARDOUR::system_data_search_path();
|
|
||||||
|
|
||||||
spath.add_subdirectory_to_paths("pixmaps");
|
spath.add_subdirectory_to_paths("pixmaps");
|
||||||
|
|
||||||
|
|
@ -521,15 +520,14 @@ get_icon_path (const char* cname)
|
||||||
string name = cname;
|
string name = cname;
|
||||||
name += X_(".png");
|
name += X_(".png");
|
||||||
|
|
||||||
SearchPath spath(ARDOUR::ardour_search_path());
|
SearchPath spath(ARDOUR::ardour_data_search_path());
|
||||||
spath += ARDOUR::system_data_search_path();
|
|
||||||
|
|
||||||
spath.add_subdirectory_to_paths("icons");
|
spath.add_subdirectory_to_paths("icons");
|
||||||
|
|
||||||
sys::path data_file_path;
|
sys::path data_file_path;
|
||||||
|
|
||||||
if (!find_file_in_search_path (spath, name, data_file_path)) {
|
if (!find_file_in_search_path (spath, name, data_file_path)) {
|
||||||
fatal << string_compose (_("cannot find icon image for %1"), name) << endmsg;
|
fatal << string_compose (_("cannot find icon image for %1 using %2"), name, spath.to_string()) << endmsg;
|
||||||
}
|
}
|
||||||
|
|
||||||
return data_file_path.to_string();
|
return data_file_path.to_string();
|
||||||
|
|
|
||||||
|
|
@ -406,9 +406,7 @@ def build(bld):
|
||||||
'VERSIONSTRING="' + bld.env['VERSION'] + '"',
|
'VERSIONSTRING="' + bld.env['VERSION'] + '"',
|
||||||
'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
|
'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
|
||||||
'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
|
'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
|
||||||
'MODULE_DIR="' + os.path.normpath(bld.env['LIBDIR']) + '"',
|
'LOCALEDIR="' + os.path.join(os.path.normpath(bld.env['DATADIR']), 'locale') + '"',
|
||||||
'LOCALEDIR="' + os.path.join(os.path.normpath(bld.env['DATADIR']),
|
|
||||||
'locale') + '"',
|
|
||||||
'PROGRAM_NAME="' + bld.env['PROGRAM_NAME'] + '"'
|
'PROGRAM_NAME="' + bld.env['PROGRAM_NAME'] + '"'
|
||||||
]
|
]
|
||||||
obj.includes += ['../libs']
|
obj.includes += ['../libs']
|
||||||
|
|
@ -450,6 +448,8 @@ def build(bld):
|
||||||
wrapper_subst_dict = {
|
wrapper_subst_dict = {
|
||||||
'INSTALL_PREFIX' : bld.env['PREFIX'],
|
'INSTALL_PREFIX' : bld.env['PREFIX'],
|
||||||
'LIBDIR' : os.path.normpath(bld.env['LIBDIR']),
|
'LIBDIR' : os.path.normpath(bld.env['LIBDIR']),
|
||||||
|
'DATADIR' : os.path.normpath(bld.env['DATADIR']),
|
||||||
|
'SYSCONFDIR' : os.path.normpath(bld.env['SYSCONFDIR']),
|
||||||
'LIBS' : 'build/libs',
|
'LIBS' : 'build/libs',
|
||||||
'VERSION' : '3.0',
|
'VERSION' : '3.0',
|
||||||
'EXECUTABLE' : 'build/gtk2_ardour/ardour-3.0'
|
'EXECUTABLE' : 'build/gtk2_ardour/ardour-3.0'
|
||||||
|
|
@ -645,8 +645,6 @@ def build(bld):
|
||||||
|
|
||||||
# Default UI configuration
|
# Default UI configuration
|
||||||
bld.install_files('${SYSCONFDIR}/ardour3', 'ardour3_ui_default.conf')
|
bld.install_files('${SYSCONFDIR}/ardour3', 'ardour3_ui_default.conf')
|
||||||
# Generic widget style mappings
|
|
||||||
bld.install_files('${SYSCONFDIR}/ardour3', 'ardour3_widgets.rc')
|
|
||||||
|
|
||||||
# Default export stuff
|
# Default export stuff
|
||||||
bld.install_files('${SYSCONFDIR}/ardour3/export', bld.path.ant_glob('export/*.format'))
|
bld.install_files('${SYSCONFDIR}/ardour3/export', bld.path.ant_glob('export/*.format'))
|
||||||
|
|
|
||||||
|
|
@ -99,6 +99,7 @@ class Bundle : public PBD::ScopedConnectionList
|
||||||
void connect (boost::shared_ptr<Bundle>, AudioEngine &);
|
void connect (boost::shared_ptr<Bundle>, AudioEngine &);
|
||||||
void disconnect (boost::shared_ptr<Bundle>, AudioEngine &);
|
void disconnect (boost::shared_ptr<Bundle>, AudioEngine &);
|
||||||
bool connected_to (boost::shared_ptr<Bundle>, AudioEngine &);
|
bool connected_to (boost::shared_ptr<Bundle>, AudioEngine &);
|
||||||
|
bool connected_to_anything (AudioEngine &);
|
||||||
bool has_same_ports (boost::shared_ptr<Bundle>) const;
|
bool has_same_ports (boost::shared_ptr<Bundle>) const;
|
||||||
uint32_t type_channel_to_overall (DataType, uint32_t) const;
|
uint32_t type_channel_to_overall (DataType, uint32_t) const;
|
||||||
uint32_t overall_channel_to_type (DataType, uint32_t) const;
|
uint32_t overall_channel_to_type (DataType, uint32_t) const;
|
||||||
|
|
|
||||||
|
|
@ -35,13 +35,20 @@ namespace ARDOUR {
|
||||||
* @return the path to the directory that contains the system wide ardour
|
* @return the path to the directory that contains the system wide ardour
|
||||||
* modules.
|
* modules.
|
||||||
*/
|
*/
|
||||||
PBD::sys::path ardour_module_directory ();
|
PBD::sys::path ardour_dll_directory ();
|
||||||
|
|
||||||
PBD::SearchPath ardour_search_path ();
|
/**
|
||||||
|
* @return the search path to be used when looking for per-system
|
||||||
|
* configuration files. This may include user configuration files.
|
||||||
|
*/
|
||||||
|
PBD::SearchPath ardour_config_search_path ();
|
||||||
|
|
||||||
PBD::SearchPath system_config_search_path ();
|
/**
|
||||||
|
* @return the search path to be used when looking for data files
|
||||||
PBD::SearchPath system_data_search_path ();
|
* that could be shared by systems (h/w and configuration independent
|
||||||
|
* files, such as icons, XML files, etc)
|
||||||
|
*/
|
||||||
|
PBD::SearchPath ardour_data_search_path ();
|
||||||
|
|
||||||
} // namespace ARDOUR
|
} // namespace ARDOUR
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -106,6 +106,7 @@ generate_inverse_coefficient_curve (boost::shared_ptr<Evoral::ControlList> dst,
|
||||||
static void
|
static void
|
||||||
generate_db_fade (boost::shared_ptr<Evoral::ControlList> dst, double len, int num_steps, float dB_drop)
|
generate_db_fade (boost::shared_ptr<Evoral::ControlList> dst, double len, int num_steps, float dB_drop)
|
||||||
{
|
{
|
||||||
|
dst->clear ();
|
||||||
dst->fast_simple_add (0, 1);
|
dst->fast_simple_add (0, 1);
|
||||||
|
|
||||||
//generate a fade-out curve by successively applying a gain drop
|
//generate a fade-out curve by successively applying a gain drop
|
||||||
|
|
@ -1019,6 +1020,8 @@ AudioRegion::set_fade_in (FadeShape shape, framecnt_t len)
|
||||||
generate_db_fade (c1, len, 10, -1); // start off with a slow fade
|
generate_db_fade (c1, len, 10, -1); // start off with a slow fade
|
||||||
generate_db_fade (c2, len, 10, -80); // end with a fast fade
|
generate_db_fade (c2, len, 10, -80); // end with a fast fade
|
||||||
merge_curves (_fade_in, c1, c2);
|
merge_curves (_fade_in, c1, c2);
|
||||||
|
reverse_curve (c3, _fade_in);
|
||||||
|
_fade_in->copy_events (*c3);
|
||||||
generate_inverse_power_curve (_inverse_fade_in, _fade_in);
|
generate_inverse_power_curve (_inverse_fade_in, _fade_in);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
@ -1032,20 +1035,22 @@ AudioRegion::set_fade_in (FadeShape shape, framecnt_t len)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FadeSymmetric:
|
case FadeSymmetric:
|
||||||
// starts kind of like a constant power but has a slower fadeout
|
//start with a nearly linear cuve
|
||||||
// however it is NOT constant power and there will be a level drop in the middle of the crossfade
|
_fade_in->fast_simple_add (0, 1);
|
||||||
c1->fast_simple_add (0.0, 1.0);
|
_fade_in->fast_simple_add (0.5*len, 0.6);
|
||||||
for ( int i = 1; i < 9; i++ ) {
|
//now generate a fade-out curve by successively applying a gain drop
|
||||||
float dist = (float)i/10.0;
|
const float breakpoint = 0.7; //linear for first 70%
|
||||||
c1->fast_simple_add ((len * dist), cos(dist*M_PI/10.0));
|
const int num_steps = 9;
|
||||||
|
for (int i = 2; i < num_steps; i++) {
|
||||||
|
float coeff = (1.0-breakpoint);
|
||||||
|
for (int j = 0; j < i; j++) {
|
||||||
|
coeff *= 0.5; //6dB drop per step
|
||||||
|
}
|
||||||
|
_fade_in->fast_simple_add (len* (breakpoint+((1.0-breakpoint)*(double)i/(double)num_steps)), coeff);
|
||||||
}
|
}
|
||||||
c1->fast_simple_add (len, VERY_SMALL_SIGNAL);
|
_fade_in->fast_simple_add (len, VERY_SMALL_SIGNAL);
|
||||||
|
reverse_curve (c3, _fade_in);
|
||||||
//curve 2 is a slow fade at end
|
_fade_in->copy_events (*c3);
|
||||||
generate_db_fade (c2, len, 10, -30 );
|
|
||||||
|
|
||||||
merge_curves (c3, c1, c2);
|
|
||||||
reverse_curve (_fade_in, c3);
|
|
||||||
reverse_curve (_inverse_fade_in, _fade_in );
|
reverse_curve (_inverse_fade_in, _fade_in );
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -1084,13 +1089,13 @@ AudioRegion::set_fade_out (FadeShape shape, framecnt_t len)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FadeFast:
|
case FadeFast:
|
||||||
generate_db_fade (_fade_out, len, 10, -60 );
|
generate_db_fade (_fade_out, len, 10, -60);
|
||||||
generate_inverse_power_curve (_inverse_fade_out, _fade_out);
|
generate_inverse_power_curve (_inverse_fade_out, _fade_out);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FadeSlow:
|
case FadeSlow:
|
||||||
generate_db_fade (c1, len, 10, -1 ); //start off with a slow fade
|
generate_db_fade (c1, len, 10, -1); //start off with a slow fade
|
||||||
generate_db_fade (c2, len, 10, -80 ); //end with a fast fade
|
generate_db_fade (c2, len, 10, -80); //end with a fast fade
|
||||||
merge_curves (_fade_out, c1, c2);
|
merge_curves (_fade_out, c1, c2);
|
||||||
generate_inverse_power_curve (_inverse_fade_out, _fade_out);
|
generate_inverse_power_curve (_inverse_fade_out, _fade_out);
|
||||||
break;
|
break;
|
||||||
|
|
@ -1108,19 +1113,21 @@ AudioRegion::set_fade_out (FadeShape shape, framecnt_t len)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case FadeSymmetric:
|
case FadeSymmetric:
|
||||||
//starts kind of like a constant power but has a slower fadeout
|
//start with a nearly linear cuve
|
||||||
//however it is NOT constant power and there will be a level drop in the middle of the crossfade
|
_fade_out->fast_simple_add (0, 1);
|
||||||
c1->fast_simple_add (0.0, 1.0);
|
_fade_out->fast_simple_add (0.5*len, 0.6);
|
||||||
for ( int i = 1; i < 9; i++ ) {
|
|
||||||
float dist = (float)i/10.0;
|
//now generate a fade-out curve by successively applying a gain drop
|
||||||
c1->fast_simple_add ((len * dist), cos(dist*M_PI/10.0)); //cheesy way of making a flat line
|
const float breakpoint = 0.7; //linear for first 70%
|
||||||
|
const int num_steps = 9;
|
||||||
|
for (int i = 2; i < num_steps; i++) {
|
||||||
|
float coeff = (1.0-breakpoint);
|
||||||
|
for (int j = 0; j < i; j++) {
|
||||||
|
coeff *= 0.5; //6dB drop per step
|
||||||
|
}
|
||||||
|
_fade_out->fast_simple_add (len* (breakpoint+((1.0-breakpoint)*(double)i/(double)num_steps)), coeff);
|
||||||
}
|
}
|
||||||
c1->fast_simple_add (len, VERY_SMALL_SIGNAL);
|
_fade_out->fast_simple_add (len, VERY_SMALL_SIGNAL);
|
||||||
|
|
||||||
//curve 2 is a slow fade at end
|
|
||||||
generate_db_fade (c2, len, 10, -30);
|
|
||||||
|
|
||||||
merge_curves (_fade_out, c1, c2);
|
|
||||||
reverse_curve (_inverse_fade_out, _fade_out);
|
reverse_curve (_inverse_fade_out, _fade_out);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -1875,12 +1882,20 @@ AudioRegion::get_single_other_xfade_region (bool start) const
|
||||||
framecnt_t
|
framecnt_t
|
||||||
AudioRegion::verify_xfade_bounds (framecnt_t len, bool start)
|
AudioRegion::verify_xfade_bounds (framecnt_t len, bool start)
|
||||||
{
|
{
|
||||||
|
/* this is called from a UI to check on whether a new proposed
|
||||||
|
length for an xfade is legal or not. it returns the legal
|
||||||
|
length corresponding to @a len which may be shorter than or
|
||||||
|
equal to @a len itself.
|
||||||
|
*/
|
||||||
|
|
||||||
boost::shared_ptr<Region> other = get_single_other_xfade_region (start);
|
boost::shared_ptr<Region> other = get_single_other_xfade_region (start);
|
||||||
framecnt_t maxlen;
|
framecnt_t maxlen;
|
||||||
|
|
||||||
if (!other) {
|
if (!other) {
|
||||||
/* zero or > 2 regions here, don't care about len */
|
/* zero or > 2 regions here, don't care about len, but
|
||||||
return len;
|
it can't be longer than the region itself.
|
||||||
|
*/
|
||||||
|
return min (length(), len);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* we overlap a single region. clamp the length of an xfade to
|
/* we overlap a single region. clamp the length of an xfade to
|
||||||
|
|
@ -1894,7 +1909,7 @@ AudioRegion::verify_xfade_bounds (framecnt_t len, bool start)
|
||||||
maxlen = last_frame() - other->earliest_possible_position();
|
maxlen = last_frame() - other->earliest_possible_position();
|
||||||
}
|
}
|
||||||
|
|
||||||
return min (maxlen, len);
|
return min (length(), min (maxlen, len));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -440,6 +440,34 @@ Bundle::connected_to (boost::shared_ptr<Bundle> other, AudioEngine & engine)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** This must not be called in code executed as a response to a JACK event,
|
||||||
|
* as it uses jack_port_get_all_connections().
|
||||||
|
* @return true if any of this bundle's channels are connected to anything.
|
||||||
|
*/
|
||||||
|
bool
|
||||||
|
Bundle::connected_to_anything (AudioEngine& engine)
|
||||||
|
{
|
||||||
|
for (uint32_t i = 0; i < nchannels().n_total(); ++i) {
|
||||||
|
Bundle::PortList const & ports = channel_ports (i);
|
||||||
|
|
||||||
|
for (uint32_t j = 0; j < ports.size(); ++j) {
|
||||||
|
/* ports[j] may not be an Ardour port, so use JACK directly
|
||||||
|
rather than doing it with Port.
|
||||||
|
*/
|
||||||
|
jack_port_t* jp = jack_port_by_name (engine.jack(), ports[j].c_str());
|
||||||
|
if (jp) {
|
||||||
|
const char ** c = jack_port_get_all_connections (engine.jack(), jp);
|
||||||
|
if (c) {
|
||||||
|
jack_free (c);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Bundle::set_ports_are_inputs ()
|
Bundle::set_ports_are_inputs ()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -210,7 +210,7 @@ ControlProtocolManager::discover_control_protocols ()
|
||||||
dylib_extension_pattern, cp_modules);
|
dylib_extension_pattern, cp_modules);
|
||||||
|
|
||||||
DEBUG_TRACE (DEBUG::ControlProtocols,
|
DEBUG_TRACE (DEBUG::ControlProtocols,
|
||||||
string_compose (_("looking for control protocols in %1"), control_protocol_search_path().to_string()));
|
string_compose (_("looking for control protocols in %1\n"), control_protocol_search_path().to_string()));
|
||||||
|
|
||||||
for (vector<sys::path>::iterator i = cp_modules.begin(); i != cp_modules.end(); ++i) {
|
for (vector<sys::path>::iterator i = cp_modules.begin(); i != cp_modules.end(); ++i) {
|
||||||
control_protocol_discover ((*i).to_string());
|
control_protocol_discover ((*i).to_string());
|
||||||
|
|
@ -222,12 +222,14 @@ ControlProtocolManager::control_protocol_discover (string path)
|
||||||
{
|
{
|
||||||
ControlProtocolDescriptor* descriptor;
|
ControlProtocolDescriptor* descriptor;
|
||||||
|
|
||||||
/* don't load shared objects that are just symlinks to the real thing.
|
#ifdef __APPLE__
|
||||||
|
/* don't load OS X shared objects that are just symlinks to the real thing.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (Glib::file_test (path, Glib::FILE_TEST_IS_SYMLINK)) {
|
if (path.find (".dylib") && Glib::file_test (path, Glib::FILE_TEST_IS_SYMLINK)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if ((descriptor = get_descriptor (path)) != 0) {
|
if ((descriptor = get_descriptor (path)) != 0) {
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -17,6 +17,8 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
#include <glibmm/miscutils.h>
|
#include <glibmm/miscutils.h>
|
||||||
|
|
||||||
#include "ardour/control_protocol_search_path.h"
|
#include "ardour/control_protocol_search_path.h"
|
||||||
|
|
@ -36,7 +38,7 @@ control_protocol_search_path ()
|
||||||
{
|
{
|
||||||
SearchPath spath (user_config_directory ());
|
SearchPath spath (user_config_directory ());
|
||||||
|
|
||||||
spath += ardour_module_directory ();
|
spath += ardour_dll_directory ();
|
||||||
spath.add_subdirectory_to_paths (surfaces_dir_name);
|
spath.add_subdirectory_to_paths (surfaces_dir_name);
|
||||||
|
|
||||||
bool surfaces_path_defined = false;
|
bool surfaces_path_defined = false;
|
||||||
|
|
|
||||||
|
|
@ -17,10 +17,11 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
#include "pbd/error.h"
|
#include "pbd/error.h"
|
||||||
#include "pbd/compose.h"
|
#include "pbd/compose.h"
|
||||||
#include "pbd/filesystem_paths.h"
|
#include "pbd/strsplit.h"
|
||||||
|
|
||||||
#include <glibmm/miscutils.h>
|
#include <glibmm/miscutils.h>
|
||||||
#include <glibmm/fileutils.h>
|
#include <glibmm/fileutils.h>
|
||||||
|
|
@ -90,38 +91,72 @@ user_config_directory ()
|
||||||
}
|
}
|
||||||
|
|
||||||
sys::path
|
sys::path
|
||||||
ardour_module_directory ()
|
ardour_dll_directory ()
|
||||||
{
|
{
|
||||||
sys::path module_directory(MODULE_DIR);
|
std::string s = Glib::getenv("ARDOUR_DLL_PATH");
|
||||||
module_directory /= "ardour3";
|
if (s.empty()) {
|
||||||
return module_directory;
|
std::cerr << _("ARDOUR_DLL_PATH not set in environment - exiting\n");
|
||||||
|
::exit (1);
|
||||||
|
}
|
||||||
|
return sys::path (s);
|
||||||
}
|
}
|
||||||
|
|
||||||
SearchPath
|
SearchPath
|
||||||
ardour_search_path ()
|
ardour_config_search_path ()
|
||||||
{
|
{
|
||||||
SearchPath spath_env(Glib::getenv("ARDOUR_PATH"));
|
static bool have_path = false;
|
||||||
return spath_env;
|
static SearchPath search_path;
|
||||||
|
|
||||||
|
if (!have_path) {
|
||||||
|
SearchPath sp (user_config_directory());
|
||||||
|
|
||||||
|
std::string s = Glib::getenv("ARDOUR_CONFIG_PATH");
|
||||||
|
if (s.empty()) {
|
||||||
|
std::cerr << _("ARDOUR_CONFIG_PATH not set in environment - exiting\n");
|
||||||
|
::exit (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<string> ss;
|
||||||
|
split (s, ss, ':');
|
||||||
|
for (std::vector<string>::iterator i = ss.begin(); i != ss.end(); ++i) {
|
||||||
|
sp += sys::path (*i);
|
||||||
|
}
|
||||||
|
|
||||||
|
search_path = sp;
|
||||||
|
have_path = true;
|
||||||
|
std::cerr << "CONFIG PATH: " << search_path.to_string() << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
return search_path;
|
||||||
}
|
}
|
||||||
|
|
||||||
SearchPath
|
SearchPath
|
||||||
system_config_search_path ()
|
ardour_data_search_path ()
|
||||||
{
|
{
|
||||||
SearchPath config_path(system_config_directories());
|
static bool have_path = false;
|
||||||
|
static SearchPath search_path;
|
||||||
|
|
||||||
config_path.add_subdirectory_to_paths("ardour3");
|
if (!have_path) {
|
||||||
|
SearchPath sp (user_config_directory());
|
||||||
|
|
||||||
|
std::string s = Glib::getenv("ARDOUR_DATA_PATH");
|
||||||
|
if (s.empty()) {
|
||||||
|
std::cerr << _("ARDOUR_DATA_PATH not set in environment - exiting\n");
|
||||||
|
::exit (1);
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<string> ss;
|
||||||
|
split (s, ss, ':');
|
||||||
|
for (std::vector<string>::iterator i = ss.begin(); i != ss.end(); ++i) {
|
||||||
|
sp += sys::path (*i);
|
||||||
|
}
|
||||||
|
|
||||||
|
search_path = sp;
|
||||||
|
have_path = true;
|
||||||
|
std::cerr << "DATA PATH: " << search_path.to_string() << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
return config_path;
|
return search_path;
|
||||||
}
|
|
||||||
|
|
||||||
SearchPath
|
|
||||||
system_data_search_path ()
|
|
||||||
{
|
|
||||||
SearchPath data_path(system_data_directories());
|
|
||||||
|
|
||||||
data_path.add_subdirectory_to_paths("ardour3");
|
|
||||||
|
|
||||||
return data_path;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace ARDOUR
|
} // namespace ARDOUR
|
||||||
|
|
|
||||||
|
|
@ -321,17 +321,6 @@ ARDOUR::init (bool use_windows_vst, bool try_optimization)
|
||||||
AUPluginInfo::load_cached_info ();
|
AUPluginInfo::load_cached_info ();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* Make VAMP look in our library ahead of anything else */
|
|
||||||
|
|
||||||
char *p = getenv ("VAMP_PATH");
|
|
||||||
string vamppath = VAMP_DIR;
|
|
||||||
if (p) {
|
|
||||||
vamppath += ':';
|
|
||||||
vamppath += p;
|
|
||||||
}
|
|
||||||
setenv ("VAMP_PATH", vamppath.c_str(), 1);
|
|
||||||
|
|
||||||
|
|
||||||
setup_hardware_optimization (try_optimization);
|
setup_hardware_optimization (try_optimization);
|
||||||
|
|
||||||
SourceFactory::init ();
|
SourceFactory::init ();
|
||||||
|
|
@ -404,7 +393,7 @@ void
|
||||||
ARDOUR::find_bindings_files (map<string,string>& files)
|
ARDOUR::find_bindings_files (map<string,string>& files)
|
||||||
{
|
{
|
||||||
vector<sys::path> found;
|
vector<sys::path> found;
|
||||||
SearchPath spath = ardour_search_path() + user_config_directory() + system_config_search_path();
|
SearchPath spath = ardour_config_search_path();
|
||||||
|
|
||||||
if (getenv ("ARDOUR_SAE")) {
|
if (getenv ("ARDOUR_SAE")) {
|
||||||
Glib::PatternSpec pattern("*SAE-*.bindings");
|
Glib::PatternSpec pattern("*SAE-*.bindings");
|
||||||
|
|
|
||||||
|
|
@ -564,6 +564,7 @@ Session::import_audiofiles (ImportStatus& status)
|
||||||
/* flush the final length(s) to the header(s) */
|
/* flush the final length(s) to the header(s) */
|
||||||
|
|
||||||
for (Sources::iterator x = all_new_sources.begin(); x != all_new_sources.end(); ) {
|
for (Sources::iterator x = all_new_sources.begin(); x != all_new_sources.end(); ) {
|
||||||
|
|
||||||
if ((afs = boost::dynamic_pointer_cast<AudioFileSource>(*x)) != 0) {
|
if ((afs = boost::dynamic_pointer_cast<AudioFileSource>(*x)) != 0) {
|
||||||
afs->update_header((*x)->natural_position(), *now, xnow);
|
afs->update_header((*x)->natural_position(), *now, xnow);
|
||||||
afs->done_with_peakfile_writes ();
|
afs->done_with_peakfile_writes ();
|
||||||
|
|
@ -574,6 +575,15 @@ Session::import_audiofiles (ImportStatus& status)
|
||||||
Analyser::queue_source_for_analysis (boost::static_pointer_cast<Source>(*x), false);
|
Analyser::queue_source_for_analysis (boost::static_pointer_cast<Source>(*x), false);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* imported, copied files cannot be written or removed
|
||||||
|
*/
|
||||||
|
|
||||||
|
boost::shared_ptr<FileSource> fs = boost::dynamic_pointer_cast<FileSource>(*x);
|
||||||
|
if (fs) {
|
||||||
|
fs->mark_immutable ();
|
||||||
|
fs->mark_nonremovable ();
|
||||||
|
}
|
||||||
|
|
||||||
/* don't create tracks for empty MIDI sources (channels) */
|
/* don't create tracks for empty MIDI sources (channels) */
|
||||||
|
|
||||||
|
|
@ -590,8 +600,12 @@ Session::import_audiofiles (ImportStatus& status)
|
||||||
|
|
||||||
std::copy (all_new_sources.begin(), all_new_sources.end(), std::back_inserter(status.sources));
|
std::copy (all_new_sources.begin(), all_new_sources.end(), std::back_inserter(status.sources));
|
||||||
} else {
|
} else {
|
||||||
// this can throw...but it seems very unlikely
|
try {
|
||||||
std::for_each (all_new_sources.begin(), all_new_sources.end(), remove_file_source);
|
std::for_each (all_new_sources.begin(), all_new_sources.end(), remove_file_source);
|
||||||
|
} catch (...) {
|
||||||
|
error << _("Failed to remove some files after failed/cancelled import operation") << endmsg;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
status.done = true;
|
status.done = true;
|
||||||
|
|
|
||||||
|
|
@ -1061,7 +1061,6 @@
|
||||||
"$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_PROJECT_3)",
|
"$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_PROJECT_3)",
|
||||||
"$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_PROJECT_4)",
|
"$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_PROJECT_4)",
|
||||||
"$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_PROJECT_5)",
|
"$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_PROJECT_5)",
|
||||||
NO_POSIX_MEMALIGN,
|
|
||||||
);
|
);
|
||||||
GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_PROJECT_1 = "PACKAGE=\"\\\"libardour\\\"\"";
|
GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_PROJECT_1 = "PACKAGE=\"\\\"libardour\\\"\"";
|
||||||
GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_PROJECT_2 = "CONFIG_DIR=\"\\\"/Library/Application\\ Support/Ardour/config\\\"\"";
|
GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_PROJECT_2 = "CONFIG_DIR=\"\\\"/Library/Application\\ Support/Ardour/config\\\"\"";
|
||||||
|
|
@ -1110,7 +1109,6 @@
|
||||||
"$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_PROJECT_3)",
|
"$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_PROJECT_3)",
|
||||||
"$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_PROJECT_4)",
|
"$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_PROJECT_4)",
|
||||||
"$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_PROJECT_5)",
|
"$(GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_PROJECT_5)",
|
||||||
NO_POSIX_MEMALIGN,
|
|
||||||
);
|
);
|
||||||
GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_PROJECT_1 = "PACKAGE=\"\\\"libardour\\\"\"";
|
GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_PROJECT_1 = "PACKAGE=\"\\\"libardour\\\"\"";
|
||||||
GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_PROJECT_2 = "CONFIG_DIR=\"\\\"/Library/Application\\ Support/Ardour/config\\\"\"";
|
GCC_PREPROCESSOR_DEFINITIONS_QUOTED_FOR_PROJECT_2 = "CONFIG_DIR=\"\\\"/Library/Application\\ Support/Ardour/config\\\"\"";
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ midi_patch_search_path ()
|
||||||
{
|
{
|
||||||
SearchPath spath (user_config_directory ());
|
SearchPath spath (user_config_directory ());
|
||||||
|
|
||||||
spath += ardour_module_directory ();
|
spath += ardour_dll_directory ();
|
||||||
spath.add_subdirectory_to_paths(midi_patch_dir_name);
|
spath.add_subdirectory_to_paths(midi_patch_dir_name);
|
||||||
|
|
||||||
bool midi_patch_path_defined = false;
|
bool midi_patch_path_defined = false;
|
||||||
|
|
|
||||||
|
|
@ -36,7 +36,7 @@ panner_search_path ()
|
||||||
{
|
{
|
||||||
SearchPath spath (user_config_directory ());
|
SearchPath spath (user_config_directory ());
|
||||||
|
|
||||||
spath += ardour_module_directory ();
|
spath += ardour_dll_directory ();
|
||||||
spath.add_subdirectory_to_paths(panner_dir_name);
|
spath.add_subdirectory_to_paths(panner_dir_name);
|
||||||
|
|
||||||
bool panner_path_defined = false;
|
bool panner_path_defined = false;
|
||||||
|
|
|
||||||
|
|
@ -84,7 +84,7 @@ RCConfiguration::load_state ()
|
||||||
|
|
||||||
/* load system configuration first */
|
/* load system configuration first */
|
||||||
|
|
||||||
if (find_file_in_search_path (ardour_search_path() + system_config_search_path(), "ardour_system.rc", system_rc_file)) {
|
if (find_file_in_search_path (ardour_config_search_path(), "ardour_system.rc", system_rc_file)) {
|
||||||
string rcfile = system_rc_file.to_string();
|
string rcfile = system_rc_file.to_string();
|
||||||
|
|
||||||
/* stupid XML Parser hates empty files */
|
/* stupid XML Parser hates empty files */
|
||||||
|
|
@ -115,7 +115,7 @@ RCConfiguration::load_state ()
|
||||||
|
|
||||||
sys::path user_rc_file;
|
sys::path user_rc_file;
|
||||||
|
|
||||||
if (find_file_in_search_path (ardour_search_path() + user_config_directory(), "ardour.rc", user_rc_file)) {
|
if (find_file_in_search_path (ardour_config_search_path(), "ardour.rc", user_rc_file)) {
|
||||||
string rcfile = user_rc_file.to_string();
|
string rcfile = user_rc_file.to_string();
|
||||||
|
|
||||||
/* stupid XML parser hates empty files */
|
/* stupid XML parser hates empty files */
|
||||||
|
|
|
||||||
|
|
@ -8,15 +8,20 @@ if [ ! -f './tempo.cc' ]; then
|
||||||
exit 1;
|
exit 1;
|
||||||
fi
|
fi
|
||||||
|
|
||||||
srcdir=`pwd`
|
cd ../..
|
||||||
cd ../../build
|
top=`pwd`
|
||||||
|
cd build
|
||||||
|
|
||||||
libs='libs'
|
libs='libs'
|
||||||
|
|
||||||
export LD_LIBRARY_PATH=$libs/audiographer:$libs/vamp-sdk:$libs/surfaces:$libs/surfaces/control_protocol:$libs/ardour:$libs/midi++2:$libs/pbd:$libs/rubberband:$libs/soundtouch:$libs/gtkmm2ext:$libs/appleutility:$libs/taglib:$libs/evoral:$libs/evoral/src/libsmf:$libs/timecode:/usr/local/lib:/usr/local/lib64:$LD_LIBRARY_PATH
|
export LD_LIBRARY_PATH=$libs/audiographer:$libs/vamp-sdk:$libs/surfaces:$libs/surfaces/control_protocol:$libs/ardour:$libs/midi++2:$libs/pbd:$libs/rubberband:$libs/soundtouch:$libs/gtkmm2ext:$libs/appleutility:$libs/taglib:$libs/evoral:$libs/evoral/src/libsmf:$libs/timecode:/usr/local/lib:/usr/local/lib64:$LD_LIBRARY_PATH
|
||||||
|
|
||||||
|
export ARDOUR_CONFIG_PATH=$top:$top/gtk2_ardour:$libs/..:$libs/../gtk2_ardour
|
||||||
export ARDOUR_PANNER_PATH=$libs/panners/2in2out:$libs/panners/1in2out:$libs/panners/vbap
|
export ARDOUR_PANNER_PATH=$libs/panners/2in2out:$libs/panners/1in2out:$libs/panners/vbap
|
||||||
export ARDOUR_SURFACES_PATH=$libs/surfaces/osc:$libs/surfaces/generic_midi:$libs/surfaces/tranzport:$libs/surfaces/powermate:$libs/surfaces/mackie
|
export ARDOUR_SURFACES_PATH=$libs/surfaces/osc:$libs/surfaces/generic_midi:$libs/surfaces/tranzport:$libs/surfaces/powermate:$libs/surfaces/mackie
|
||||||
|
export ARDOUR_MCP_PATH="../mcp"
|
||||||
|
export ARDOUR_DLL_PATH=$libs
|
||||||
|
export ARDOUR_DATA_PATH=$top/gtk2_ardour:$top/build/gtk2_ardour:.
|
||||||
|
|
||||||
if [ "$1" == "--debug" ]; then
|
if [ "$1" == "--debug" ]; then
|
||||||
gdb ./libs/ardour/run-tests
|
gdb ./libs/ardour/run-tests
|
||||||
|
|
|
||||||
|
|
@ -925,7 +925,7 @@ Session::load_state (string snapshot_name)
|
||||||
/* no version implies very old version of Ardour */
|
/* no version implies very old version of Ardour */
|
||||||
Stateful::loading_state_version = 1000;
|
Stateful::loading_state_version = 1000;
|
||||||
} else {
|
} else {
|
||||||
if (prop->value().find ('.')) {
|
if (prop->value().find ('.') != string::npos) {
|
||||||
/* old school version format */
|
/* old school version format */
|
||||||
if (prop->value()[0] == '2') {
|
if (prop->value()[0] == '2') {
|
||||||
Stateful::loading_state_version = 2000;
|
Stateful::loading_state_version = 2000;
|
||||||
|
|
|
||||||
|
|
@ -339,7 +339,7 @@ SndFileSource::read_unlocked (Sample *dst, framepos_t start, framecnt_t cnt) con
|
||||||
if (ret != file_cnt) {
|
if (ret != file_cnt) {
|
||||||
char errbuf[256];
|
char errbuf[256];
|
||||||
sf_error_str (0, errbuf, sizeof (errbuf) - 1);
|
sf_error_str (0, errbuf, sizeof (errbuf) - 1);
|
||||||
error << string_compose(_("SndFileSource: @ %1 could not read %2 within %3 (%4) (len = %5)"), start, file_cnt, _name.val().substr (1), errbuf, _length) << endl;
|
error << string_compose(_("SndFileSource: @ %1 could not read %2 within %3 (%4) (len = %5, ret was %6)"), start, file_cnt, _name.val().substr (1), errbuf, _length, ret) << endl;
|
||||||
}
|
}
|
||||||
_descriptor->release ();
|
_descriptor->release ();
|
||||||
return ret;
|
return ret;
|
||||||
|
|
@ -585,7 +585,7 @@ SndFileSource::set_header_timeline_position ()
|
||||||
_broadcast_info->set_time_reference (_timeline_position);
|
_broadcast_info->set_time_reference (_timeline_position);
|
||||||
|
|
||||||
SNDFILE* sf = _descriptor->allocate ();
|
SNDFILE* sf = _descriptor->allocate ();
|
||||||
|
|
||||||
if (sf == 0 || !_broadcast_info->write_to_file (sf)) {
|
if (sf == 0 || !_broadcast_info->write_to_file (sf)) {
|
||||||
error << string_compose (_("cannot set broadcast info for audio file %1 (%2); dropping broadcast info for this file"),
|
error << string_compose (_("cannot set broadcast info for audio file %1 (%2); dropping broadcast info for this file"),
|
||||||
_path, _broadcast_info->get_error())
|
_path, _broadcast_info->get_error())
|
||||||
|
|
|
||||||
|
|
@ -19,32 +19,20 @@ using namespace PBD;
|
||||||
|
|
||||||
namespace ARDOUR {
|
namespace ARDOUR {
|
||||||
|
|
||||||
sys::path
|
SearchPath
|
||||||
system_template_directory ()
|
template_search_path ()
|
||||||
{
|
{
|
||||||
SearchPath spath(system_data_search_path());
|
SearchPath spath (ardour_data_search_path());
|
||||||
spath.add_subdirectory_to_paths(templates_dir_name);
|
spath.add_subdirectory_to_paths(templates_dir_name);
|
||||||
|
return spath;
|
||||||
// just return the first directory in the search path that exists
|
|
||||||
SearchPath::const_iterator i = std::find_if(spath.begin(), spath.end(), sys::exists);
|
|
||||||
|
|
||||||
if (i == spath.end()) return sys::path();
|
|
||||||
|
|
||||||
return *i;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sys::path
|
SearchPath
|
||||||
system_route_template_directory ()
|
route_template_search_path ()
|
||||||
{
|
{
|
||||||
SearchPath spath(system_data_search_path());
|
SearchPath spath (ardour_data_search_path());
|
||||||
spath.add_subdirectory_to_paths(route_templates_dir_name);
|
spath.add_subdirectory_to_paths(route_templates_dir_name);
|
||||||
|
return spath;
|
||||||
// just return the first directory in the search path that exists
|
|
||||||
SearchPath::const_iterator i = std::find_if(spath.begin(), spath.end(), sys::exists);
|
|
||||||
|
|
||||||
if (i == spath.end()) return sys::path();
|
|
||||||
|
|
||||||
return *i;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sys::path
|
sys::path
|
||||||
|
|
@ -61,7 +49,7 @@ user_route_template_directory ()
|
||||||
{
|
{
|
||||||
sys::path p(user_config_directory());
|
sys::path p(user_config_directory());
|
||||||
p /= route_templates_dir_name;
|
p /= route_templates_dir_name;
|
||||||
|
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -100,8 +88,7 @@ find_session_templates (vector<TemplateInfo>& template_names)
|
||||||
{
|
{
|
||||||
vector<string *> *templates;
|
vector<string *> *templates;
|
||||||
PathScanner scanner;
|
PathScanner scanner;
|
||||||
SearchPath spath (system_template_directory());
|
SearchPath spath (template_search_path());
|
||||||
spath += user_template_directory ();
|
|
||||||
|
|
||||||
templates = scanner (spath.to_string(), template_filter, 0, true, true);
|
templates = scanner (spath.to_string(), template_filter, 0, true, true);
|
||||||
|
|
||||||
|
|
@ -137,8 +124,7 @@ find_route_templates (vector<TemplateInfo>& template_names)
|
||||||
{
|
{
|
||||||
vector<string *> *templates;
|
vector<string *> *templates;
|
||||||
PathScanner scanner;
|
PathScanner scanner;
|
||||||
SearchPath spath (system_route_template_directory());
|
SearchPath spath (route_template_search_path());
|
||||||
spath += user_route_template_directory ();
|
|
||||||
|
|
||||||
templates = scanner (spath.to_string(), route_template_filter, 0, false, true);
|
templates = scanner (spath.to_string(), route_template_filter, 0, false, true);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -367,11 +367,7 @@ def build(bld):
|
||||||
'PACKAGE="' + I18N_PACKAGE + '"',
|
'PACKAGE="' + I18N_PACKAGE + '"',
|
||||||
'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
|
'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
|
||||||
'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
|
'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
|
||||||
'MODULE_DIR="' + os.path.normpath(bld.env['LIBDIR']) + '"',
|
'LOCALEDIR="' + os.path.join(os.path.normpath(bld.env['DATADIR']), 'locale') + '"',
|
||||||
'LOCALEDIR="' + os.path.join(
|
|
||||||
os.path.normpath(bld.env['DATADIR']), 'locale') + '"',
|
|
||||||
'VAMP_DIR="' + os.path.join(
|
|
||||||
os.path.normpath(bld.env['LIBDIR']), 'ardour3', 'vamp') + '"',
|
|
||||||
'PROGRAM_NAME="' + bld.env['PROGRAM_NAME'] + '"'
|
'PROGRAM_NAME="' + bld.env['PROGRAM_NAME'] + '"'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
@ -456,7 +452,6 @@ def build(bld):
|
||||||
'PACKAGE="libardour3test"',
|
'PACKAGE="libardour3test"',
|
||||||
'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
|
'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
|
||||||
'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
|
'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
|
||||||
'MODULE_DIR="' + os.path.normpath(bld.env['LIBDIR']) + '"',
|
|
||||||
'LOCALEDIR="' + os.path.join(
|
'LOCALEDIR="' + os.path.join(
|
||||||
os.path.normpath(bld.env['DATADIR']), 'locale') + '"',
|
os.path.normpath(bld.env['DATADIR']), 'locale') + '"',
|
||||||
'VAMP_DIR="' + os.path.join(
|
'VAMP_DIR="' + os.path.join(
|
||||||
|
|
@ -488,7 +483,6 @@ def build(bld):
|
||||||
'PACKAGE="libardour3profile"',
|
'PACKAGE="libardour3profile"',
|
||||||
'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
|
'DATA_DIR="' + os.path.normpath(bld.env['DATADIR']) + '"',
|
||||||
'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
|
'CONFIG_DIR="' + os.path.normpath(bld.env['SYSCONFDIR']) + '"',
|
||||||
'MODULE_DIR="' + os.path.normpath(bld.env['LIBDIR']) + '"',
|
|
||||||
'LOCALEDIR="' + os.path.join(
|
'LOCALEDIR="' + os.path.join(
|
||||||
os.path.normpath(bld.env['DATADIR']), 'locale') + '"',
|
os.path.normpath(bld.env['DATADIR']), 'locale') + '"',
|
||||||
'VAMP_DIR="' + os.path.join(
|
'VAMP_DIR="' + os.path.join(
|
||||||
|
|
|
||||||
|
|
@ -1,61 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (C) 2007 Tim Mayberry
|
|
||||||
|
|
||||||
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
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <glib.h>
|
|
||||||
|
|
||||||
#include "pbd/filesystem_paths.h"
|
|
||||||
|
|
||||||
namespace PBD {
|
|
||||||
|
|
||||||
std::vector<sys::path>
|
|
||||||
system_data_directories ()
|
|
||||||
{
|
|
||||||
std::vector<sys::path> tmp;
|
|
||||||
const char * const * dirs;
|
|
||||||
|
|
||||||
dirs = g_get_system_data_dirs ();
|
|
||||||
|
|
||||||
if (dirs == NULL) return tmp;
|
|
||||||
|
|
||||||
for (int i = 0; dirs[i] != NULL; ++i)
|
|
||||||
{
|
|
||||||
tmp.push_back(dirs[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
std::vector<sys::path>
|
|
||||||
system_config_directories ()
|
|
||||||
{
|
|
||||||
std::vector<sys::path> tmp;
|
|
||||||
const char * const * dirs;
|
|
||||||
|
|
||||||
dirs = g_get_system_config_dirs ();
|
|
||||||
|
|
||||||
if (dirs == NULL) return tmp;
|
|
||||||
|
|
||||||
for (int i = 0; dirs[i] != NULL; ++i)
|
|
||||||
{
|
|
||||||
tmp.push_back(dirs[i]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return tmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
} // namespace PBD
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
#include <cstring> // for memset
|
#include <cstring> // for memset
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
#include "pbd/fpu.h"
|
#include "pbd/fpu.h"
|
||||||
#include "pbd/error.h"
|
#include "pbd/error.h"
|
||||||
|
|
@ -67,7 +68,7 @@ FPU::FPU ()
|
||||||
|
|
||||||
if (cpuflags & (1 << 24)) {
|
if (cpuflags & (1 << 24)) {
|
||||||
|
|
||||||
char* fxbuf = 0;
|
char** fxbuf = 0;
|
||||||
|
|
||||||
/* DAZ wasn't available in the first version of SSE. Since
|
/* DAZ wasn't available in the first version of SSE. Since
|
||||||
setting a reserved bit in MXCSR causes a general protection
|
setting a reserved bit in MXCSR causes a general protection
|
||||||
|
|
@ -79,38 +80,41 @@ FPU::FPU ()
|
||||||
supported, otherwise, it isn't.
|
supported, otherwise, it isn't.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef NO_POSIX_MEMALIGN
|
#ifndef HAVE_POSIX_MEMALIGN
|
||||||
if ((fxbuf = (char *) malloc(512)) == 0)
|
fxbuf = (char **) malloc (sizeof (char *));
|
||||||
|
assert (fxbuf);
|
||||||
|
*fxbuf = (char *) malloc (512);
|
||||||
|
assert (*fxbuf);
|
||||||
#else
|
#else
|
||||||
if (posix_memalign ((void**)&fxbuf, 16, 512))
|
posix_memalign ((void **) &fxbuf, 16, sizeof (char *));
|
||||||
|
assert (fxbuf);
|
||||||
|
posix_memalign ((void **) fxbuf, 16, 512);
|
||||||
|
assert (*fxbuf);
|
||||||
#endif
|
#endif
|
||||||
{
|
|
||||||
error << _("cannot allocate 16 byte aligned buffer for h/w feature detection") << endmsg;
|
memset (*fxbuf, 0, 512);
|
||||||
} else {
|
|
||||||
|
asm volatile (
|
||||||
memset (fxbuf, 0, 512);
|
"fxsave (%0)"
|
||||||
|
:
|
||||||
asm volatile (
|
: "r" (*fxbuf)
|
||||||
"fxsave (%0)"
|
: "memory"
|
||||||
:
|
);
|
||||||
: "r" (fxbuf)
|
|
||||||
: "memory"
|
uint32_t mxcsr_mask = *((uint32_t*) &((*fxbuf)[28]));
|
||||||
);
|
|
||||||
|
/* if the mask is zero, set its default value (from intel specs) */
|
||||||
uint32_t mxcsr_mask = *((uint32_t*) &fxbuf[28]);
|
|
||||||
|
if (mxcsr_mask == 0) {
|
||||||
/* if the mask is zero, set its default value (from intel specs) */
|
mxcsr_mask = 0xffbf;
|
||||||
|
|
||||||
if (mxcsr_mask == 0) {
|
|
||||||
mxcsr_mask = 0xffbf;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mxcsr_mask & (1<<6)) {
|
|
||||||
_flags = Flags (_flags | HasDenormalsAreZero);
|
|
||||||
}
|
|
||||||
|
|
||||||
free (fxbuf);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mxcsr_mask & (1<<6)) {
|
||||||
|
_flags = Flags (_flags | HasDenormalsAreZero);
|
||||||
|
}
|
||||||
|
|
||||||
|
free (*fxbuf);
|
||||||
|
free (fxbuf);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@ static const int CPU_CACHE_ALIGN = 16; /* arguably 32 on most arches, but it mat
|
||||||
|
|
||||||
int cache_aligned_malloc (void** memptr, size_t size)
|
int cache_aligned_malloc (void** memptr, size_t size)
|
||||||
{
|
{
|
||||||
#ifdef NO_POSIX_MEMALIGN
|
#ifndef HAVE_POSIX_MEMALIGN
|
||||||
if (((*memptr) = malloc (size)) == 0) {
|
if (((*memptr) = malloc (size)) == 0) {
|
||||||
fatal << string_compose (_("Memory allocation error: malloc (%1 * %2) failed (%3)"),
|
fatal << string_compose (_("Memory allocation error: malloc (%1 * %2) failed (%3)"),
|
||||||
CPU_CACHE_ALIGN, size, strerror (errno)) << endmsg;
|
CPU_CACHE_ALIGN, size, strerror (errno)) << endmsg;
|
||||||
|
|
|
||||||
|
|
@ -1,34 +0,0 @@
|
||||||
/*
|
|
||||||
Copyright (C) 2007 Tim Mayberry
|
|
||||||
|
|
||||||
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
|
|
||||||
the Free Software Foundation; either version 2 of the License, or
|
|
||||||
(at your option) any later version.
|
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful,
|
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
GNU General Public License for more details.
|
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License
|
|
||||||
along with this program; if not, write to the Free Software
|
|
||||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef PBD_FILESYSTEM_PATHS_INCLUDED
|
|
||||||
#define PBD_FILESYSTEM_PATHS_INCLUDED
|
|
||||||
|
|
||||||
#include <vector>
|
|
||||||
|
|
||||||
#include "pbd/filesystem.h"
|
|
||||||
|
|
||||||
namespace PBD {
|
|
||||||
|
|
||||||
std::vector<sys::path> system_data_directories ();
|
|
||||||
|
|
||||||
std::vector<sys::path> system_config_directories ();
|
|
||||||
|
|
||||||
} // namespace PBD
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
@ -110,6 +110,11 @@ public:
|
||||||
|
|
||||||
ScopedConnection& operator= (UnscopedConnection const & o)
|
ScopedConnection& operator= (UnscopedConnection const & o)
|
||||||
{
|
{
|
||||||
|
if (_c == o) {
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
|
disconnect ();
|
||||||
_c = o;
|
_c = o;
|
||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,14 @@ using namespace std;
|
||||||
|
|
||||||
CPPUNIT_TEST_SUITE_REGISTRATION (SignalsTest);
|
CPPUNIT_TEST_SUITE_REGISTRATION (SignalsTest);
|
||||||
|
|
||||||
|
void
|
||||||
|
SignalsTest::setUp ()
|
||||||
|
{
|
||||||
|
if (!Glib::thread_supported ()) {
|
||||||
|
Glib::thread_init ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
class Emitter {
|
class Emitter {
|
||||||
public:
|
public:
|
||||||
void emit () {
|
void emit () {
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@ class SignalsTest : public CppUnit::TestFixture
|
||||||
CPPUNIT_TEST_SUITE_END ();
|
CPPUNIT_TEST_SUITE_END ();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
void setUp ();
|
||||||
void testEmission ();
|
void testEmission ();
|
||||||
void testDestruction ();
|
void testDestruction ();
|
||||||
void testScopedConnectionList ();
|
void testScopedConnectionList ();
|
||||||
|
|
|
||||||
|
|
@ -43,8 +43,7 @@ def configure(conf):
|
||||||
conf.check(function_name='getmntent', header_name='mntent.h', define_name='HAVE_GETMNTENT',mandatory=False)
|
conf.check(function_name='getmntent', header_name='mntent.h', define_name='HAVE_GETMNTENT',mandatory=False)
|
||||||
conf.check(header_name='execinfo.h', define_name='HAVE_EXECINFO',mandatory=False)
|
conf.check(header_name='execinfo.h', define_name='HAVE_EXECINFO',mandatory=False)
|
||||||
conf.check(header_name='unistd.h', define_name='HAVE_UNISTD',mandatory=False)
|
conf.check(header_name='unistd.h', define_name='HAVE_UNISTD',mandatory=False)
|
||||||
if conf.check_cc(function_name='posix_memalign', header_name='stdlib.h', cflags='-D_XOPEN_SOURCE=600',mandatory=False) == False:
|
conf.check_cc(function_name='posix_memalign', header_name='stdlib.h', cflags='-D_XOPEN_SOURCE=600', define_name='HAVE_POSIX_MEMALIGN', mandatory=False)
|
||||||
conf.define ('NO_POSIX_MEMALIGN',1)
|
|
||||||
|
|
||||||
conf.write_config_header('libpbd-config.h', remove=False)
|
conf.write_config_header('libpbd-config.h', remove=False)
|
||||||
|
|
||||||
|
|
@ -55,7 +54,7 @@ def configure(conf):
|
||||||
|
|
||||||
def build(bld):
|
def build(bld):
|
||||||
|
|
||||||
# Make signal.h using signal.h.py
|
# Make signals_generated.h using signals.py
|
||||||
bld(rule = 'python ${SRC} ${TGT}', source = 'pbd/signals.py', target = 'pbd/signals_generated.h')
|
bld(rule = 'python ${SRC} ${TGT}', source = 'pbd/signals.py', target = 'pbd/signals_generated.h')
|
||||||
|
|
||||||
# Library
|
# Library
|
||||||
|
|
@ -80,7 +79,6 @@ def build(bld):
|
||||||
epa.cc
|
epa.cc
|
||||||
error.cc
|
error.cc
|
||||||
filesystem.cc
|
filesystem.cc
|
||||||
filesystem_paths.cc
|
|
||||||
file_manager.cc
|
file_manager.cc
|
||||||
file_utils.cc
|
file_utils.cc
|
||||||
fpu.cc
|
fpu.cc
|
||||||
|
|
|
||||||
|
|
@ -114,7 +114,7 @@ system_midi_map_search_path ()
|
||||||
return spath_env;
|
return spath_env;
|
||||||
}
|
}
|
||||||
|
|
||||||
SearchPath spath (system_data_search_path());
|
SearchPath spath (ardour_data_search_path());
|
||||||
spath.add_subdirectory_to_paths(midi_map_dir_name);
|
spath.add_subdirectory_to_paths(midi_map_dir_name);
|
||||||
|
|
||||||
// just return the first directory in the search path that exists
|
// just return the first directory in the search path that exists
|
||||||
|
|
|
||||||
|
|
@ -421,7 +421,7 @@ static const char* const devinfo_dir_name = "mcp";
|
||||||
static const char* const devinfo_suffix = ".device";
|
static const char* const devinfo_suffix = ".device";
|
||||||
|
|
||||||
static SearchPath
|
static SearchPath
|
||||||
system_devinfo_search_path ()
|
devinfo_search_path ()
|
||||||
{
|
{
|
||||||
bool devinfo_path_defined = false;
|
bool devinfo_path_defined = false;
|
||||||
sys::path spath_env (Glib::getenv (devinfo_env_variable_name, devinfo_path_defined));
|
sys::path spath_env (Glib::getenv (devinfo_env_variable_name, devinfo_path_defined));
|
||||||
|
|
@ -430,21 +430,12 @@ system_devinfo_search_path ()
|
||||||
return spath_env;
|
return spath_env;
|
||||||
}
|
}
|
||||||
|
|
||||||
SearchPath spath (system_data_search_path());
|
SearchPath spath (ardour_data_search_path());
|
||||||
spath.add_subdirectory_to_paths(devinfo_dir_name);
|
spath.add_subdirectory_to_paths(devinfo_dir_name);
|
||||||
|
|
||||||
return spath;
|
return spath;
|
||||||
}
|
}
|
||||||
|
|
||||||
static sys::path
|
|
||||||
user_devinfo_directory ()
|
|
||||||
{
|
|
||||||
sys::path p(user_config_directory());
|
|
||||||
p /= devinfo_dir_name;
|
|
||||||
|
|
||||||
return p;
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
devinfo_filter (const string &str, void */*arg*/)
|
devinfo_filter (const string &str, void */*arg*/)
|
||||||
{
|
{
|
||||||
|
|
@ -459,8 +450,7 @@ DeviceInfo::reload_device_info ()
|
||||||
vector<string> s;
|
vector<string> s;
|
||||||
vector<string *> *devinfos;
|
vector<string *> *devinfos;
|
||||||
PathScanner scanner;
|
PathScanner scanner;
|
||||||
SearchPath spath (system_devinfo_search_path());
|
SearchPath spath (devinfo_search_path());
|
||||||
spath += user_devinfo_directory ();
|
|
||||||
|
|
||||||
devinfos = scanner (spath.to_string(), devinfo_filter, 0, false, true);
|
devinfos = scanner (spath.to_string(), devinfo_filter, 0, false, true);
|
||||||
device_info.clear ();
|
device_info.clear ();
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ static const char* const devprofile_dir_name = "mcp";
|
||||||
static const char* const devprofile_suffix = ".profile";
|
static const char* const devprofile_suffix = ".profile";
|
||||||
|
|
||||||
static SearchPath
|
static SearchPath
|
||||||
system_devprofile_search_path ()
|
devprofile_search_path ()
|
||||||
{
|
{
|
||||||
bool devprofile_path_defined = false;
|
bool devprofile_path_defined = false;
|
||||||
sys::path spath_env (Glib::getenv (devprofile_env_variable_name, devprofile_path_defined));
|
sys::path spath_env (Glib::getenv (devprofile_env_variable_name, devprofile_path_defined));
|
||||||
|
|
@ -65,7 +65,7 @@ system_devprofile_search_path ()
|
||||||
return spath_env;
|
return spath_env;
|
||||||
}
|
}
|
||||||
|
|
||||||
SearchPath spath (system_data_search_path());
|
SearchPath spath (ardour_data_search_path());
|
||||||
spath.add_subdirectory_to_paths(devprofile_dir_name);
|
spath.add_subdirectory_to_paths(devprofile_dir_name);
|
||||||
|
|
||||||
return spath;
|
return spath;
|
||||||
|
|
@ -94,8 +94,7 @@ DeviceProfile::reload_device_profiles ()
|
||||||
vector<string> s;
|
vector<string> s;
|
||||||
vector<string *> *devprofiles;
|
vector<string *> *devprofiles;
|
||||||
PathScanner scanner;
|
PathScanner scanner;
|
||||||
SearchPath spath (system_devprofile_search_path());
|
SearchPath spath (devprofile_search_path());
|
||||||
spath += user_devprofile_directory ();
|
|
||||||
|
|
||||||
devprofiles = scanner (spath.to_string(), devprofile_filter, 0, false, true);
|
devprofiles = scanner (spath.to_string(), devprofile_filter, 0, false, true);
|
||||||
device_profiles.clear ();
|
device_profiles.clear ();
|
||||||
|
|
|
||||||
|
|
@ -40,8 +40,8 @@ Meter::factory (Surface& surface, int id, const char* name, Group& group)
|
||||||
return m;
|
return m;
|
||||||
}
|
}
|
||||||
|
|
||||||
MidiByteArray
|
void
|
||||||
Meter::update_message (float dB)
|
Meter::send_update (Surface& surface, float dB)
|
||||||
{
|
{
|
||||||
float def = 0.0f; /* Meter deflection %age */
|
float def = 0.0f; /* Meter deflection %age */
|
||||||
|
|
||||||
|
|
@ -75,12 +75,13 @@ Meter::update_message (float dB)
|
||||||
if (def > 100.0f) {
|
if (def > 100.0f) {
|
||||||
if (!overload_on) {
|
if (!overload_on) {
|
||||||
overload_on = true;
|
overload_on = true;
|
||||||
msg << MidiByteArray (2, 0xd0, (id() << 4) | 0xe);
|
surface.write (MidiByteArray (2, 0xd0, (id() << 4) | 0xe));
|
||||||
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (overload_on) {
|
if (overload_on) {
|
||||||
overload_on = false;
|
overload_on = false;
|
||||||
msg << MidiByteArray (2, 0xd0, (id() << 4) | 0xf);
|
surface.write (MidiByteArray (2, 0xd0, (id() << 4) | 0xf));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -90,9 +91,12 @@ Meter::update_message (float dB)
|
||||||
|
|
||||||
if (last_segment_value_sent != segment) {
|
if (last_segment_value_sent != segment) {
|
||||||
last_segment_value_sent = segment;
|
last_segment_value_sent = segment;
|
||||||
msg << MidiByteArray (2, 0xD0, (id()<<4) | segment);
|
surface.write (MidiByteArray (2, 0xD0, (id()<<4) | segment));
|
||||||
}
|
}
|
||||||
|
|
||||||
return msg;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MidiByteArray
|
||||||
|
Meter::zero ()
|
||||||
|
{
|
||||||
|
return MidiByteArray (2, 0xD0, (id()<<4 | 0));
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -35,9 +35,9 @@ public:
|
||||||
, last_segment_value_sent (-1)
|
, last_segment_value_sent (-1)
|
||||||
, overload_on (false) {}
|
, overload_on (false) {}
|
||||||
|
|
||||||
MidiByteArray update_message (float dB);
|
void send_update (Surface&, float dB);
|
||||||
|
|
||||||
MidiByteArray zero() { return update_message (-99999999.0); }
|
MidiByteArray zero();
|
||||||
|
|
||||||
static Control* factory (Surface&, int id, const char*, Group&);
|
static Control* factory (Surface&, int id, const char*, Group&);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -163,7 +163,9 @@ Strip::set_route (boost::shared_ptr<Route> r, bool /*with_messages*/)
|
||||||
|
|
||||||
set_vpot_parameter (PanAzimuthAutomation);
|
set_vpot_parameter (PanAzimuthAutomation);
|
||||||
|
|
||||||
_route->solo_control()->Changed.connect(route_connections, MISSING_INVALIDATOR, boost::bind (&Strip::notify_solo_changed, this), ui_context());
|
_route->solo_changed.connect (route_connections, MISSING_INVALIDATOR, boost::bind (&Strip::notify_solo_changed, this), ui_context());
|
||||||
|
_route->listen_changed.connect (route_connections, MISSING_INVALIDATOR, boost::bind (&Strip::notify_solo_changed, this), ui_context());
|
||||||
|
|
||||||
_route->mute_control()->Changed.connect(route_connections, MISSING_INVALIDATOR, boost::bind (&Strip::notify_mute_changed, this), ui_context());
|
_route->mute_control()->Changed.connect(route_connections, MISSING_INVALIDATOR, boost::bind (&Strip::notify_mute_changed, this), ui_context());
|
||||||
|
|
||||||
boost::shared_ptr<Pannable> pannable = _route->pannable();
|
boost::shared_ptr<Pannable> pannable = _route->pannable();
|
||||||
|
|
@ -239,7 +241,7 @@ void
|
||||||
Strip::notify_solo_changed ()
|
Strip::notify_solo_changed ()
|
||||||
{
|
{
|
||||||
if (_route && _solo) {
|
if (_route && _solo) {
|
||||||
_surface->write (_solo->set_state (_route->soloed() ? on : off));
|
_surface->write (_solo->set_state ((_route->soloed() || _route->listening_via_monitor()) ? on : off));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -687,7 +689,7 @@ Strip::update_meter ()
|
||||||
{
|
{
|
||||||
if (_meter) {
|
if (_meter) {
|
||||||
float dB = const_cast<PeakMeter&> (_route->peak_meter()).peak_power (0);
|
float dB = const_cast<PeakMeter&> (_route->peak_meter()).peak_power (0);
|
||||||
_surface->write (_meter->update_message (dB));
|
_meter->send_update (*_surface, dB);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -191,8 +191,7 @@ OSC::start ()
|
||||||
|
|
||||||
PBD::sys::path url_file;
|
PBD::sys::path url_file;
|
||||||
|
|
||||||
if (find_file_in_search_path (ardour_search_path() + system_config_search_path(),
|
if (find_file_in_search_path (ardour_config_search_path(), "osc_url", url_file)) {
|
||||||
"osc_url", url_file)) {
|
|
||||||
|
|
||||||
_osc_url_file = url_file.to_string();
|
_osc_url_file = url_file.to_string();
|
||||||
ofstream urlfile;
|
ofstream urlfile;
|
||||||
|
|
|
||||||
|
|
@ -44,9 +44,9 @@ def configure(conf):
|
||||||
for i in children:
|
for i in children:
|
||||||
sub_config_and_use(conf, i)
|
sub_config_and_use(conf, i)
|
||||||
|
|
||||||
autowaf.check_pkg(conf, 'libusb-1.0', uselib_store='USB', mandatory=False)
|
#autowaf.check_pkg(conf, 'libusb-1.0', uselib_store='USB', mandatory=False)
|
||||||
if Options.options.tranzport and conf.is_defined('HAVE_USB'):
|
#if Options.options.tranzport and conf.is_defined('HAVE_USB'):
|
||||||
conf.define('BUILD_TRANZPORT', 1)
|
# conf.define('BUILD_TRANZPORT', 1)
|
||||||
|
|
||||||
conf.check_cc (header_name='linux/input.h', define_name='BUILD_POWERMATE',mandatory=False)
|
conf.check_cc (header_name='linux/input.h', define_name='BUILD_POWERMATE',mandatory=False)
|
||||||
autowaf.check_pkg (conf, 'liblo', mandatory=False, uselib_store="LO", atleast_version="0.24")
|
autowaf.check_pkg (conf, 'liblo', mandatory=False, uselib_store="LO", atleast_version="0.24")
|
||||||
|
|
|
||||||
14
mcp/cmc.device
Normal file
14
mcp/cmc.device
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
<MackieProtocolDevice>
|
||||||
|
<Name value="Steinberg CMC series"/>
|
||||||
|
<Strips value="1"/>
|
||||||
|
<Extenders value="0"/>
|
||||||
|
<MasterFader value="yes"/>
|
||||||
|
<SegmentedDisplay value="no"/>
|
||||||
|
<TimecodeDisplay value="no"/>
|
||||||
|
<TwoCharacterDisplay value="no"/>
|
||||||
|
<GlobalControls value="yes"/>
|
||||||
|
<JogWheel value="yes"/>
|
||||||
|
<TouchSenseFaders value="yes"/>
|
||||||
|
<usesIPMIDI value="no"/>
|
||||||
|
<NoHandShake value="yes"/>
|
||||||
|
</MackieProtocolDevice>
|
||||||
18
mcp/wscript
Normal file
18
mcp/wscript
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
top = '.'
|
||||||
|
out = 'build'
|
||||||
|
|
||||||
|
def configure(conf):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def build(bld):
|
||||||
|
devinfo = bld.path.ant_glob ('*.device')
|
||||||
|
profiles = bld.path.ant_glob ('*.profile')
|
||||||
|
bld.install_files (os.path.join(bld.env['DATADIR'], 'ardour3', 'mcp'), devinfo)
|
||||||
|
bld.install_files (os.path.join(bld.env['DATADIR'], 'ardour3', 'mcp'), profiles)
|
||||||
|
|
||||||
|
def options(opt):
|
||||||
|
pass
|
||||||
16
patchfiles/wscript
Normal file
16
patchfiles/wscript
Normal file
|
|
@ -0,0 +1,16 @@
|
||||||
|
#!/usr/bin/python
|
||||||
|
|
||||||
|
import os
|
||||||
|
|
||||||
|
top = '.'
|
||||||
|
out = 'build'
|
||||||
|
|
||||||
|
def configure(conf):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def build(bld):
|
||||||
|
patchfiles = bld.path.ant_glob ('*.midnam')
|
||||||
|
bld.install_files (os.path.join(bld.env['DATADIR'], 'ardour3', 'patchfiles'), patchfiles)
|
||||||
|
|
||||||
|
def options(opt):
|
||||||
|
pass
|
||||||
|
|
@ -1,5 +1,7 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
|
# This is Linux-specific startup script for a bundled version of Ardour
|
||||||
|
|
||||||
while [ $# -gt 0 ] ; do
|
while [ $# -gt 0 ] ; do
|
||||||
echo "arg = $1"
|
echo "arg = $1"
|
||||||
case $1 in
|
case $1 in
|
||||||
|
|
@ -11,9 +13,9 @@ while [ $# -gt 0 ] ; do
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
#LD_LIBRARY_PATH needs to be set (empty) so that epa can swap between the original and the bundled version
|
# LD_LIBRARY_PATH needs to be set here so that epa can swap between the original and the bundled version
|
||||||
|
# (the original one will be stored in PREBUNDLE_ENV)
|
||||||
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
|
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
|
||||||
|
|
||||||
export PREBUNDLE_ENV="$(env)"
|
export PREBUNDLE_ENV="$(env)"
|
||||||
|
|
||||||
BIN_DIR=$(dirname $(readlink -f $0))
|
BIN_DIR=$(dirname $(readlink -f $0))
|
||||||
|
|
@ -35,12 +37,13 @@ export ARDOUR_BUNDLED=true
|
||||||
|
|
||||||
%ENV%
|
%ENV%
|
||||||
|
|
||||||
export GTK_PATH=$INSTALL_DIR/libs/clearlooks${GTK_PATH:+:$GTK_PATH}
|
# Disable extra modules from being loaded by gtk (example, libcanberra-gtk-module.so)
|
||||||
export GTK_MODULES="" # Disable extra modules from being loaded by gtk (example, libcanberra-gtk-module.so)
|
export GTK_MODULES=""
|
||||||
|
# Set this so that the executable will find all the right libraries inside the bundle
|
||||||
export LD_LIBRARY_PATH=$INSTALL_DIR/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
|
export LD_LIBRARY_PATH=$INSTALL_DIR/lib${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}
|
||||||
|
|
||||||
# create install-location-dependent config files for Pango and GDK image loaders
|
# create install-location-dependent config files for Pango and GDK image loaders
|
||||||
# We have to do this every time because its possible that BIN_DIR has changed
|
# We have to do this every time because its possible that LIB_DIR has changed
|
||||||
|
|
||||||
sed "s?@ROOTDIR@/modules?$LIB_DIR/modules?" < $ETC_DIR/pango.modules.in > $USER_ARDOUR_DIR/pango.modules
|
sed "s?@ROOTDIR@/modules?$LIB_DIR/modules?" < $ETC_DIR/pango.modules.in > $USER_ARDOUR_DIR/pango.modules
|
||||||
sed "s?@ROOTDIR@/loaders?$LIB_DIR/loaders?" < $ETC_DIR/gdk-pixbuf.loaders.in > $USER_ARDOUR_DIR/gdk-pixbuf.loaders
|
sed "s?@ROOTDIR@/loaders?$LIB_DIR/loaders?" < $ETC_DIR/gdk-pixbuf.loaders.in > $USER_ARDOUR_DIR/gdk-pixbuf.loaders
|
||||||
|
|
|
||||||
|
|
@ -144,16 +144,20 @@ APPLIB=$APPDIR/lib
|
||||||
Libraries=$APPLIB
|
Libraries=$APPLIB
|
||||||
Etc=$APPDIR/etc
|
Etc=$APPDIR/etc
|
||||||
Shared=$APPDIR/share
|
Shared=$APPDIR/share
|
||||||
|
|
||||||
Plugins=$APPLIB/plugins
|
Plugins=$APPLIB/plugins
|
||||||
Surfaces=$APPLIB/surfaces
|
Surfaces=$APPLIB/surfaces
|
||||||
Panners=$APPLIB/panners
|
Panners=$APPLIB/panners
|
||||||
ExportFormats=$Shared/export
|
|
||||||
Locale=$Shared/locale
|
|
||||||
MidiMaps=$Shared/midi_maps
|
|
||||||
MackieControl=$Shared/mcp
|
|
||||||
Modules=$Libraries/modules
|
Modules=$Libraries/modules
|
||||||
Loaders=$Libraries/loaders
|
Loaders=$Libraries/loaders
|
||||||
|
|
||||||
|
Templates=$Shared/templates
|
||||||
|
ExportFormats=$Shared/export
|
||||||
|
Locale=$Shared/locale
|
||||||
|
MidiMaps=$Shared/midi_maps
|
||||||
|
PatchFiles=$Shared/patchfiles
|
||||||
|
MackieControl=$Shared/mcp
|
||||||
|
|
||||||
if [ x$PRINT_SYSDEPS != x ] ; then
|
if [ x$PRINT_SYSDEPS != x ] ; then
|
||||||
#
|
#
|
||||||
|
|
@ -187,9 +191,11 @@ mkdir -p $Shared
|
||||||
mkdir -p $Locale
|
mkdir -p $Locale
|
||||||
mkdir -p $Surfaces
|
mkdir -p $Surfaces
|
||||||
mkdir -p $MidiMaps
|
mkdir -p $MidiMaps
|
||||||
|
mkdir -p $PatchFiles
|
||||||
mkdir -p $MackieControl
|
mkdir -p $MackieControl
|
||||||
mkdir -p $ExportFormats
|
mkdir -p $ExportFormats
|
||||||
mkdir -p $Panners
|
mkdir -p $Panners
|
||||||
|
mkdir -p $Templates
|
||||||
mkdir -p $Shared/templates
|
mkdir -p $Shared/templates
|
||||||
mkdir -p $Shared/doc
|
mkdir -p $Shared/doc
|
||||||
|
|
||||||
|
|
@ -466,6 +472,13 @@ for x in $BUILD_ROOT/../midi_maps/*.map ; do
|
||||||
echo Copied MIDI map $x
|
echo Copied MIDI map $x
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# MIDNAM Patch Files
|
||||||
|
# got to be careful with names here
|
||||||
|
for x in $BUILD_ROOT/../patchfiles/*.midnam ; do
|
||||||
|
cp "$x" $PatchFiles
|
||||||
|
echo Copied MIDNAM file "$x"
|
||||||
|
done
|
||||||
|
|
||||||
# MackieControl data
|
# MackieControl data
|
||||||
# got to be careful with names here
|
# got to be careful with names here
|
||||||
for x in $BUILD_ROOT/../mcp/*.device $BUILD_ROOT/../mcp/*.profile ; do
|
for x in $BUILD_ROOT/../mcp/*.device $BUILD_ROOT/../mcp/*.profile ; do
|
||||||
|
|
@ -473,6 +486,13 @@ for x in $BUILD_ROOT/../mcp/*.device $BUILD_ROOT/../mcp/*.profile ; do
|
||||||
echo Copied Mackie Control file $x
|
echo Copied Mackie Control file $x
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# Templates
|
||||||
|
for f in $BUILD_ROOT/../templates/* ; do
|
||||||
|
if [ -d "$f" ] ; then
|
||||||
|
echo Template: $f ; cp -r "$f" $Templates ;
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
# ExportFormats
|
# ExportFormats
|
||||||
# got to be careful with names here
|
# got to be careful with names here
|
||||||
for x in $BUILD_ROOT/../export/*.preset $BUILD_ROOT/../export/*.format ; do
|
for x in $BUILD_ROOT/../export/*.preset $BUILD_ROOT/../export/*.format ; do
|
||||||
|
|
@ -515,7 +535,6 @@ while [ true ] ; do
|
||||||
# do not include libjack
|
# do not include libjack
|
||||||
deps=`LD_LIBRARY_PATH=$OURLIBS${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} ldd $file | awk '{print $3}'`
|
deps=`LD_LIBRARY_PATH=$OURLIBS${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} ldd $file | awk '{print $3}'`
|
||||||
|
|
||||||
# LD_LIBRARY_PATH=$OURLIBS${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} ldd $file | egrep "(/opt/|/local/|libs/|/usr/lib|/gtk)" | grep -v 'libjack\.'
|
|
||||||
echo -n "."
|
echo -n "."
|
||||||
for dep in $deps ; do
|
for dep in $deps ; do
|
||||||
if test "not" = ${dep}; then
|
if test "not" = ${dep}; then
|
||||||
|
|
@ -534,9 +553,13 @@ while [ true ] ; do
|
||||||
if echo $dep | grep -qs "^/lib/" ; then continue; fi
|
if echo $dep | grep -qs "^/lib/" ; then continue; fi
|
||||||
# don't include jack
|
# don't include jack
|
||||||
if echo $dep | grep -qs libjack ; then continue; fi
|
if echo $dep | grep -qs libjack ; then continue; fi
|
||||||
|
# don't include ALSA
|
||||||
|
if echo $dep | grep -qs libasound ; then continue; fi
|
||||||
# don't include any X Window libraries
|
# don't include any X Window libraries
|
||||||
if echo $dep | grep -qs libX ; then continue; fi
|
if echo $dep | grep -qs libX\. ; then continue; fi
|
||||||
if echo $dep | grep -qs libxcb ; then continue; fi
|
if echo $dep | grep -qs libxcb ; then continue; fi
|
||||||
|
if echo $dep | grep -qs libICE\. ; then continue; fi
|
||||||
|
if echo $dep | grep -qs libSM\. ; then continue; fi
|
||||||
# don't include libc
|
# don't include libc
|
||||||
if echo $dep | grep -qs 'libc\.' ; then continue; fi
|
if echo $dep | grep -qs 'libc\.' ; then continue; fi
|
||||||
# don't include libstdc++
|
# don't include libstdc++
|
||||||
|
|
@ -597,10 +620,10 @@ cp $BUILD_ROOT/gtk2_ardour/ardour3*.rc $Etc
|
||||||
cp ../../gtk2_ardour/ardour3_ui_default.conf $Etc/ardour3_ui_default.conf
|
cp ../../gtk2_ardour/ardour3_ui_default.conf $Etc/ardour3_ui_default.conf
|
||||||
cp ../../gtk2_ardour/ardour3_ui_default.conf $Etc/ardour3_ui.conf
|
cp ../../gtk2_ardour/ardour3_ui_default.conf $Etc/ardour3_ui.conf
|
||||||
cp ../../instant.xml $Etc/instant.xml
|
cp ../../instant.xml $Etc/instant.xml
|
||||||
cp -r ../../gtk2_ardour/icons $Etc
|
|
||||||
cp -r ../../gtk2_ardour/pixmaps $Etc
|
|
||||||
cp ../../gtk2_ardour/step_editing.bindings $Etc
|
cp ../../gtk2_ardour/step_editing.bindings $Etc
|
||||||
cp ../../gtk2_ardour/mixer.bindings $Etc
|
cp ../../gtk2_ardour/mixer.bindings $Etc
|
||||||
|
cp -r ../../gtk2_ardour/icons $Shared
|
||||||
|
cp -r ../../gtk2_ardour/pixmaps $Shared
|
||||||
|
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
@ -614,8 +637,6 @@ fi
|
||||||
# share stuff
|
# share stuff
|
||||||
|
|
||||||
cp -R ../../gtk2_ardour/splash.png $Shared
|
cp -R ../../gtk2_ardour/splash.png $Shared
|
||||||
# currently no templates
|
|
||||||
#cp ../../templates/*.template $Shared/templates/
|
|
||||||
|
|
||||||
# go through and recursively remove any .svn dirs in the bundle
|
# go through and recursively remove any .svn dirs in the bundle
|
||||||
for svndir in `find $APPDIR -name .svn -type d`; do
|
for svndir in `find $APPDIR -name .svn -type d`; do
|
||||||
|
|
|
||||||
|
|
@ -377,7 +377,7 @@ else
|
||||||
fi
|
fi
|
||||||
|
|
||||||
PGM_EXEC_PATH="${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/${PGM_EXEC_FILE}"
|
PGM_EXEC_PATH="${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/bin/${PGM_EXEC_FILE}"
|
||||||
ICON_PATH="${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/etc/icons"
|
ICON_PATH="${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/share/icons"
|
||||||
MENU_FILE_PATH="${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/share"
|
MENU_FILE_PATH="${INSTALL_DEST_BASE}/${PGM_FULL_NAME}/share"
|
||||||
|
|
||||||
################################
|
################################
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
# script for pulling together a MacOSX app bundle.
|
# script for pulling together a MacOSX app bundle.
|
||||||
|
|
||||||
GTKQUARTZ_ROOT=$HOME/gtk/inst
|
GTKQUARTZ_ROOT=$HOME/gtk/inst
|
||||||
|
ARDOURSTACK_ROOT=$HOME/a3/inst
|
||||||
|
|
||||||
if pkg-config --modversion gtk+-2.0 | grep -s 2.22 ; then
|
if pkg-config --modversion gtk+-2.0 | grep -s 2.22 ; then
|
||||||
# older GTK
|
# older GTK
|
||||||
|
|
@ -95,18 +96,27 @@ echo "Info string is $info_string"
|
||||||
|
|
||||||
APPDIR=${APPNAME}.app
|
APPDIR=${APPNAME}.app
|
||||||
APPROOT=$APPDIR/Contents
|
APPROOT=$APPDIR/Contents
|
||||||
Frameworks=$APPROOT/Frameworks
|
Frameworks=$APPROOT/lib
|
||||||
Resources=$APPROOT/Resources
|
Resources=$APPROOT/Resources
|
||||||
Plugins=$APPROOT/Plugins
|
#
|
||||||
Surfaces=$APPROOT/Surfaces
|
# Since this is OS X, don't try to distinguish between etc and shared
|
||||||
Panners=$APPROOT/Panners
|
# (machine dependent and independent data) - just put everything
|
||||||
MidiMaps=$APPROOT/MidiMaps
|
# into Resources.
|
||||||
MCP=$APPROOT/MCP
|
#
|
||||||
ExportFormats=$APPROOT/ExportFormats
|
Shared=$Resources
|
||||||
Templates=$APPROOT/Templates
|
Etc=$Resources
|
||||||
Shared=$Resources/share
|
|
||||||
Etc=$Resources/etc
|
|
||||||
Locale=$Resources/locale
|
Locale=$Resources/locale
|
||||||
|
#
|
||||||
|
# Bundled Plugins live in a top level folder
|
||||||
|
#
|
||||||
|
Plugins=$APPROOT/Plugins
|
||||||
|
Surfaces=$Frameworks/surfaces
|
||||||
|
Panners=$Frameworks/panners
|
||||||
|
MidiMaps=$Shared/midi_maps
|
||||||
|
ExportFormats=$Shared/export
|
||||||
|
Templates=$Shared/templates
|
||||||
|
PatchFiles=$Shared/patchfiles
|
||||||
|
MackieControl=$Shared/mcp
|
||||||
|
|
||||||
if [ x$PRINT_SYSDEPS != x ] ; then
|
if [ x$PRINT_SYSDEPS != x ] ; then
|
||||||
#
|
#
|
||||||
|
|
@ -141,6 +151,7 @@ mkdir -p $Templates
|
||||||
mkdir -p $Frameworks/modules
|
mkdir -p $Frameworks/modules
|
||||||
mkdir -p $Shared/templates
|
mkdir -p $Shared/templates
|
||||||
mkdir -p $Etc
|
mkdir -p $Etc
|
||||||
|
mkdir -p $MackieControl
|
||||||
|
|
||||||
# maybe set variables
|
# maybe set variables
|
||||||
env=""
|
env=""
|
||||||
|
|
@ -280,35 +291,60 @@ cat > pangorc <<EOF
|
||||||
[Pango]
|
[Pango]
|
||||||
ModulesPath=$GTKQUARTZ_ROOT/lib/pango/1.6.0/modules
|
ModulesPath=$GTKQUARTZ_ROOT/lib/pango/1.6.0/modules
|
||||||
EOF
|
EOF
|
||||||
env PANGO_RC_FILE=pangorc $GTKQUARTZ_ROOT/bin/pango-querymodules | sed "s?$GTKQUARTZ_ROOT/lib/pango/1.6.0/modules/?@executable_path/../Frameworks/modules/?" > $Resources/pango.modules
|
env PANGO_RC_FILE=pangorc $GTKQUARTZ_ROOT/bin/pango-querymodules | sed "s?$GTKQUARTZ_ROOT/lib/pango/1.6.0/modules/?@executable_path/../lib/modules/?" > $Resources/pango.modules
|
||||||
rm pangorc
|
rm pangorc
|
||||||
|
|
||||||
# generate a new GDK pixbufs loaders file
|
# generate a new GDK pixbufs loaders file
|
||||||
gdk-pixbuf-query-loaders | sed "s?$GDKPIXBUF_LOADERS/?@executable_path/../Frameworks/modules/?" > $Resources/gdk-pixbuf.loaders
|
gdk-pixbuf-query-loaders | sed "s?$GDKPIXBUF_LOADERS/?@executable_path/../lib/modules/?" > $Resources/gdk-pixbuf.loaders
|
||||||
|
|
||||||
# this one is special - we will set GTK_PATH to $Frameworks/clearlooks
|
# this one is special - we will set GTK_PATH to $Frameworks/clearlooks
|
||||||
cp $BUILD_ROOT/libs/clearlooks-newer/libclearlooks.dylib $Frameworks
|
cp $BUILD_ROOT/libs/clearlooks-newer/libclearlooks.dylib $Frameworks
|
||||||
mkdir -p $Frameworks/clearlooks/engines
|
mkdir -p $Frameworks/clearlooks/engines
|
||||||
(cd $Frameworks/clearlooks/engines && ln -s $BUILD_ROOT/libclearlooks.dylib libclearlooks.dylib && ln -s ../../libclearlooks.dylib libclearlooks.so)
|
(cd $Frameworks/clearlooks/engines && ln -s $BUILD_ROOT/libclearlooks.dylib libclearlooks.dylib && ln -s ../../libclearlooks.dylib libclearlooks.so)
|
||||||
|
|
||||||
|
# Control Surface shared libraries
|
||||||
cp $BUILD_ROOT/libs/surfaces/*/libardour_*.dylib $Surfaces
|
cp $BUILD_ROOT/libs/surfaces/*/libardour_*.dylib $Surfaces
|
||||||
|
# hack ... move libardour_cp back into Frameworks
|
||||||
|
mv $Surfaces/libardourcp*.dylib $Frameworks
|
||||||
|
|
||||||
|
# Panners
|
||||||
cp $BUILD_ROOT/libs/panners/*/lib*.dylib $Panners
|
cp $BUILD_ROOT/libs/panners/*/lib*.dylib $Panners
|
||||||
(cd ../../export &&
|
|
||||||
for f in *.preset ; do
|
|
||||||
echo ExportFormat: $f; cp "$f" ../tools/osx_packaging/$ExportFormats ;
|
|
||||||
done)
|
|
||||||
(cd $BUILD_ROOT/../templates && \
|
|
||||||
for f in * ; do
|
|
||||||
if [ -d "$f" ] ; then
|
|
||||||
echo Template: $f ; cp -r "$f" ../tools/osx_packaging/$Templates ;
|
|
||||||
fi
|
|
||||||
done)
|
|
||||||
|
|
||||||
# MIDI maps
|
|
||||||
cp ../../midi_maps/*.map $MidiMaps
|
|
||||||
|
|
||||||
# Mackie support files
|
# Export Formats/Presets
|
||||||
cp ../../mcp/*.{device,profile} $MCP
|
for f in $BUILD_ROOT/../export/*.preset $BUILD_ROOT/../export/*.format ; do
|
||||||
|
echo ExportFormat: $f
|
||||||
|
cp "$f" $ExportFormats ;
|
||||||
|
done
|
||||||
|
|
||||||
|
# Session and Route templates
|
||||||
|
for f in $BUILD_ROOT/../templates/* ; do
|
||||||
|
if [ -d "$f" ] ; then
|
||||||
|
echo Template: $f
|
||||||
|
cp -r "$f" $Templates ;
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# MidiMaps
|
||||||
|
# got to be careful with names here
|
||||||
|
for x in $BUILD_ROOT/../midi_maps/*.map ; do
|
||||||
|
cp "$x" $MidiMaps
|
||||||
|
echo Copied MIDI map $x
|
||||||
|
done
|
||||||
|
|
||||||
|
# MIDNAM Patch Files
|
||||||
|
# got to be careful with names here
|
||||||
|
for x in $BUILD_ROOT/../patchfiles/*.midnam ; do
|
||||||
|
cp "$x" $PatchFiles
|
||||||
|
echo Copied MIDNAM file "$x"
|
||||||
|
done
|
||||||
|
|
||||||
|
# MackieControl data
|
||||||
|
# got to be careful with names here
|
||||||
|
for x in $BUILD_ROOT/../mcp/*.device $BUILD_ROOT/../mcp/*.profile ; do
|
||||||
|
cp "$x" $MackieControl
|
||||||
|
echo Copied Mackie Control file $x
|
||||||
|
done
|
||||||
|
|
||||||
# VAMP plugins that we use
|
# VAMP plugins that we use
|
||||||
cp $BUILD_ROOT/libs/vamp-plugins/libardourvampplugins.dylib $Frameworks
|
cp $BUILD_ROOT/libs/vamp-plugins/libardourvampplugins.dylib $Frameworks
|
||||||
|
|
@ -319,7 +355,7 @@ while [ true ] ; do
|
||||||
if ! file $file | grep -qs Mach-O ; then
|
if ! file $file | grep -qs Mach-O ; then
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
deps=`otool -L $file | awk '{print $1}' | egrep "($GTKQUARTZ_ROOT|/opt/|/local/|libs/)" | grep -v 'libjack\.'`
|
deps=`otool -L $file | awk '{print $1}' | egrep "($GTKQUARTZ_ROOT|$ARDOURSTACK_ROOT|/opt/|/local/|libs/)" | grep -v 'libjack\.'`
|
||||||
# echo -n "."
|
# echo -n "."
|
||||||
for dep in $deps ; do
|
for dep in $deps ; do
|
||||||
base=`basename $dep`
|
base=`basename $dep`
|
||||||
|
|
@ -390,9 +426,9 @@ fi
|
||||||
for exe in $executables; do
|
for exe in $executables; do
|
||||||
EXE=$APPROOT/MacOS/$exe
|
EXE=$APPROOT/MacOS/$exe
|
||||||
changes=""
|
changes=""
|
||||||
for lib in `otool -L $EXE | egrep "($GTKQUARTZ_ROOT|/opt/|/local/|libs/)" | awk '{print $1}' | grep -v 'libjack\.'` ; do
|
for lib in `otool -L $EXE | egrep "($GTKQUARTZ_ROOT|$ARDOURSTACK_ROOT|/opt/|/local/|libs/)" | awk '{print $1}' | grep -v 'libjack\.'` ; do
|
||||||
base=`basename $lib`
|
base=`basename $lib`
|
||||||
changes="$changes -change $lib @executable_path/../Frameworks/$base"
|
changes="$changes -change $lib @executable_path/../lib/$base"
|
||||||
done
|
done
|
||||||
if test "x$changes" != "x" ; then
|
if test "x$changes" != "x" ; then
|
||||||
install_name_tool $changes $EXE
|
install_name_tool $changes $EXE
|
||||||
|
|
@ -416,12 +452,12 @@ for libdir in $Frameworks $Frameworks/modules $Surfaces $Panners ; do
|
||||||
# change all the dependencies
|
# change all the dependencies
|
||||||
|
|
||||||
changes=""
|
changes=""
|
||||||
for lib in `otool -L $dylib | egrep "($GTKQUARTZ_ROOT|/opt/|/local/|libs/)" | awk '{print $1}' | grep -v 'libjack\.'` ; do
|
for lib in `otool -L $dylib | egrep "($GTKQUARTZ_ROOT|$ARDOURSTACK_ROOT|/opt/|/local/|libs/)" | awk '{print $1}' | grep -v 'libjack\.'` ; do
|
||||||
base=`basename $lib`
|
base=`basename $lib`
|
||||||
if echo $lib | grep -s libbase; then
|
if echo $lib | grep -s libbase; then
|
||||||
changes="$changes -change $lib @executable_path/../$libbase/$base"
|
changes="$changes -change $lib @executable_path/../$libbase/$base"
|
||||||
else
|
else
|
||||||
changes="$changes -change $lib @executable_path/../Frameworks/$base"
|
changes="$changes -change $lib @executable_path/../lib/$base"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
|
||||||
63
wscript
63
wscript
|
|
@ -8,7 +8,7 @@ import subprocess
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
# Variables for 'waf dist'
|
# Variables for 'waf dist'
|
||||||
VERSION = '3.0beta3'
|
VERSION = '3.0beta4'
|
||||||
APPNAME = 'Ardour3'
|
APPNAME = 'Ardour3'
|
||||||
|
|
||||||
# Mandatory variables
|
# Mandatory variables
|
||||||
|
|
@ -36,6 +36,7 @@ children = [
|
||||||
'templates',
|
'templates',
|
||||||
'export',
|
'export',
|
||||||
'midi_maps',
|
'midi_maps',
|
||||||
|
'mcp',
|
||||||
'manual'
|
'manual'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
@ -232,11 +233,6 @@ def set_compiler_flags (conf,opt):
|
||||||
if not build_host_supports_sse:
|
if not build_host_supports_sse:
|
||||||
print("\nWarning: you are building Ardour with SSE support even though your system does not support these instructions. (This may not be an error, especially if you are a package maintainer)")
|
print("\nWarning: you are building Ardour with SSE support even though your system does not support these instructions. (This may not be an error, especially if you are a package maintainer)")
|
||||||
|
|
||||||
# check this even if we aren't using FPU optimization
|
|
||||||
if not conf.is_defined('HAVE_POSIX_MEMALIGN'):
|
|
||||||
optimization_flags.append("-DNO_POSIX_MEMALIGN")
|
|
||||||
debug_flags.append("-DNO_POSIX_MEMALIGN")
|
|
||||||
|
|
||||||
# end optimization section
|
# end optimization section
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
@ -408,8 +404,8 @@ def options(opt):
|
||||||
help='Raise a floating point exception if a denormal is detected')
|
help='Raise a floating point exception if a denormal is detected')
|
||||||
opt.add_option('--test', action='store_true', default=False, dest='build_tests',
|
opt.add_option('--test', action='store_true', default=False, dest='build_tests',
|
||||||
help="Build unit tests")
|
help="Build unit tests")
|
||||||
opt.add_option('--tranzport', action='store_true', default=False, dest='tranzport',
|
#opt.add_option('--tranzport', action='store_true', default=False, dest='tranzport',
|
||||||
help='Compile with support for Frontier Designs Tranzport (if libusb is available)')
|
# help='Compile with support for Frontier Designs Tranzport (if libusb is available)')
|
||||||
opt.add_option('--universal', action='store_true', default=False, dest='universal',
|
opt.add_option('--universal', action='store_true', default=False, dest='universal',
|
||||||
help='Compile as universal binary (OS X ONLY, requires that external libraries are universal)')
|
help='Compile as universal binary (OS X ONLY, requires that external libraries are universal)')
|
||||||
opt.add_option('--generic', action='store_true', default=False, dest='generic',
|
opt.add_option('--generic', action='store_true', default=False, dest='generic',
|
||||||
|
|
@ -463,16 +459,21 @@ def configure(conf):
|
||||||
print('Please use a different version or re-configure with --debug')
|
print('Please use a different version or re-configure with --debug')
|
||||||
exit (1)
|
exit (1)
|
||||||
|
|
||||||
if sys.platform == 'darwin':
|
# libintl may or may not be trivially locatable. On OS X this is always
|
||||||
|
# true. On Linux it will depend on whether we're on a normal Linux distro,
|
||||||
|
# in which case libintl.h is going to be available in /usr/include and
|
||||||
|
# the library itself is part of glibc, or on a bare-bones build system
|
||||||
|
# where we need to pick it up from the GTK dependency stack.
|
||||||
|
#
|
||||||
|
if not os.path.isfile ('/usr/include/libintl.h'):
|
||||||
|
# XXXX hack hack hack
|
||||||
|
prefinclude = ''.join ([ '-I', os.path.expanduser ('~/gtk/inst/include') ])
|
||||||
|
preflib = ''.join ([ '-L', os.path.expanduser ('~/gtk/inst/lib') ])
|
||||||
|
conf.env.append_value('CFLAGS', [ prefinclude ])
|
||||||
|
conf.env.append_value('CXXFLAGS', [prefinclude ])
|
||||||
|
conf.env.append_value('LINKFLAGS', [ preflib ])
|
||||||
|
|
||||||
# libintl may or may not be trivially locatable
|
if sys.platform == 'darwin':
|
||||||
if not os.path.isfile ('/usr/include/libintl.h'):
|
|
||||||
# XXXX hack hack hack
|
|
||||||
prefinclude = ''.join ([ '-I', os.path.expanduser ('~/gtk/inst/include') ])
|
|
||||||
preflib = ''.join ([ '-L', os.path.expanduser ('~/gtk/inst/lib') ])
|
|
||||||
conf.env.append_value('CFLAGS', [ prefinclude ])
|
|
||||||
conf.env.append_value('CXXFLAGS', [prefinclude ])
|
|
||||||
conf.env.append_value('LINKFLAGS', [ preflib ])
|
|
||||||
|
|
||||||
# this is required, potentially, for anything we link and then relocate into a bundle
|
# this is required, potentially, for anything we link and then relocate into a bundle
|
||||||
conf.env.append_value('LINKFLAGS', [ '-Xlinker', '-headerpad_max_install_names' ])
|
conf.env.append_value('LINKFLAGS', [ '-Xlinker', '-headerpad_max_install_names' ])
|
||||||
|
|
@ -487,12 +488,6 @@ def configure(conf):
|
||||||
conf.define ('TOP_MENUBAR',1)
|
conf.define ('TOP_MENUBAR',1)
|
||||||
conf.define ('GTKOSX',1)
|
conf.define ('GTKOSX',1)
|
||||||
|
|
||||||
#
|
|
||||||
# need this on OS X to pick up long long variants of several math functions
|
|
||||||
#
|
|
||||||
|
|
||||||
conf.env.append_value('CXXFLAGS_APPLEUTILITY', '-I../libs')
|
|
||||||
#
|
|
||||||
# Define OSX as a uselib to use when compiling
|
# Define OSX as a uselib to use when compiling
|
||||||
# on Darwin to add all applicable flags at once
|
# on Darwin to add all applicable flags at once
|
||||||
#
|
#
|
||||||
|
|
@ -501,10 +496,13 @@ def configure(conf):
|
||||||
conf.env.append_value('CXXFLAGS_OSX', '-mmacosx-version-min=10.4')
|
conf.env.append_value('CXXFLAGS_OSX', '-mmacosx-version-min=10.4')
|
||||||
conf.env.append_value('CFLAGS_OSX', '-mmacosx-version-min=10.4')
|
conf.env.append_value('CFLAGS_OSX', '-mmacosx-version-min=10.4')
|
||||||
|
|
||||||
|
# It would be nice to be able to use this to force back-compatibility with 10.4
|
||||||
|
# but even by the time of 11, the 10.4 SDK is no longer available in any normal
|
||||||
|
# way.
|
||||||
|
#
|
||||||
#conf.env.append_value('CXXFLAGS_OSX', "-isysroot /Developer/SDKs/MacOSX10.4u.sdk")
|
#conf.env.append_value('CXXFLAGS_OSX', "-isysroot /Developer/SDKs/MacOSX10.4u.sdk")
|
||||||
#conf.env.append_value('CFLAGS_OSX', "-isysroot /Developer/SDKs/MacOSX10.4u.sdk")
|
#conf.env.append_value('CFLAGS_OSX', "-isysroot /Developer/SDKs/MacOSX10.4u.sdk")
|
||||||
#conf.env.append_value('LINKFLAGS_OSX', "-isysroot /Developer/SDKs/MacOSX10.4u.sdk")
|
#conf.env.append_value('LINKFLAGS_OSX', "-sysroot /Developer/SDKs/MacOSX10.4u.sdk")
|
||||||
|
|
||||||
#conf.env.append_value('LINKFLAGS_OSX', "-sysroot /Developer/SDKs/MacOSX10.4u.sdk")
|
#conf.env.append_value('LINKFLAGS_OSX', "-sysroot /Developer/SDKs/MacOSX10.4u.sdk")
|
||||||
|
|
||||||
conf.env.append_value('CXXFLAGS_OSX', "-msse")
|
conf.env.append_value('CXXFLAGS_OSX', "-msse")
|
||||||
|
|
@ -613,8 +611,8 @@ def configure(conf):
|
||||||
conf.env['ENABLE_NLS'] = True
|
conf.env['ENABLE_NLS'] = True
|
||||||
if opts.build_tests:
|
if opts.build_tests:
|
||||||
conf.env['BUILD_TESTS'] = opts.build_tests
|
conf.env['BUILD_TESTS'] = opts.build_tests
|
||||||
if opts.tranzport:
|
#if opts.tranzport:
|
||||||
conf.env['TRANZPORT'] = 1
|
# conf.env['TRANZPORT'] = 1
|
||||||
if opts.windows_vst:
|
if opts.windows_vst:
|
||||||
conf.define('WINDOWS_VST_SUPPORT', 1)
|
conf.define('WINDOWS_VST_SUPPORT', 1)
|
||||||
conf.env['WINDOWS_VST_SUPPORT'] = True
|
conf.env['WINDOWS_VST_SUPPORT'] = True
|
||||||
|
|
@ -692,8 +690,7 @@ const char* const ardour_config_info = "\\n\\
|
||||||
write_config_text('Samplerate', conf.is_defined('HAVE_SAMPLERATE'))
|
write_config_text('Samplerate', conf.is_defined('HAVE_SAMPLERATE'))
|
||||||
# write_config_text('Soundtouch', conf.is_defined('HAVE_SOUNDTOUCH'))
|
# write_config_text('Soundtouch', conf.is_defined('HAVE_SOUNDTOUCH'))
|
||||||
write_config_text('Translation', opts.nls)
|
write_config_text('Translation', opts.nls)
|
||||||
write_config_text('SoundGrid support', opts.soundgrid)
|
# write_config_text('Tranzport', opts.tranzport)
|
||||||
write_config_text('Tranzport', opts.tranzport)
|
|
||||||
write_config_text('Unit tests', conf.env['BUILD_TESTS'])
|
write_config_text('Unit tests', conf.env['BUILD_TESTS'])
|
||||||
write_config_text('Universal binary', opts.universal)
|
write_config_text('Universal binary', opts.universal)
|
||||||
write_config_text('Generic x86 CPU', opts.generic)
|
write_config_text('Generic x86 CPU', opts.generic)
|
||||||
|
|
@ -763,11 +760,3 @@ def i18n_po(bld):
|
||||||
def i18n_mo(bld):
|
def i18n_mo(bld):
|
||||||
bld.recurse (i18n_children)
|
bld.recurse (i18n_children)
|
||||||
|
|
||||||
def install_not_supported(bld):
|
|
||||||
print ('Installing Ardour 3 is currently unsupported. Run it via the command ./ardev from within the gtk2_ardour directory.')
|
|
||||||
sys.exit (1)
|
|
||||||
|
|
||||||
from waflib import Build
|
|
||||||
class install(Build.InstallContext):
|
|
||||||
cmd = 'install'
|
|
||||||
fun = 'install_not_supported'
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue