Merge branch 'windows' of git.ardour.org:ardour/ardour into windows
This commit is contained in:
commit
5f15bc9f9f
@ -37,9 +37,8 @@
|
||||
#include <unistd.h>
|
||||
#include <time.h>
|
||||
|
||||
#include <sys/resource.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/sysctl.h>
|
||||
#include <glib.h>
|
||||
#include <glib/gstdio.h>
|
||||
|
||||
#include <gtkmm/messagedialog.h>
|
||||
#include <gtkmm/accelmap.h>
|
||||
@ -3398,15 +3397,23 @@ ARDOUR_UI::start_video_server (Gtk::Window* float_window, bool popup_msg)
|
||||
if (icsd_docroot.empty()) {icsd_docroot = X_("/");}
|
||||
|
||||
struct stat sb;
|
||||
if (!lstat (icsd_docroot.c_str(), &sb) == 0 || !S_ISDIR(sb.st_mode)) {
|
||||
if (!g_lstat (icsd_docroot.c_str(), &sb) == 0 || !S_ISDIR(sb.st_mode)) {
|
||||
warning << _("Specified docroot is not an existing directory.") << endmsg;
|
||||
continue;
|
||||
}
|
||||
if ( (!lstat (icsd_exec.c_str(), &sb) == 0)
|
||||
#ifndef WIN32
|
||||
if ( (!g_lstat (icsd_exec.c_str(), &sb) == 0)
|
||||
|| (sb.st_mode & (S_IXUSR|S_IXGRP|S_IXOTH)) == 0 ) {
|
||||
warning << _("Given Video Server is not an executable file.") << endmsg;
|
||||
continue;
|
||||
}
|
||||
#else
|
||||
if ( (!g_lstat (icsd_exec.c_str(), &sb) == 0)
|
||||
|| (sb.st_mode & (S_IXUSR)) == 0 ) {
|
||||
warning << _("Given Video Server is not an executable file.") << endmsg;
|
||||
continue;
|
||||
}
|
||||
#endif
|
||||
|
||||
char **argp;
|
||||
argp=(char**) calloc(9,sizeof(char*));
|
||||
|
@ -617,11 +617,10 @@ ARDOUR_UI::click_button_clicked (GdkEventButton* ev)
|
||||
return false;
|
||||
}
|
||||
|
||||
RefPtr<Action> act = ActionManager::get_action (X_("Common"), X_("ToggleRCOptionsEditor"));
|
||||
RefPtr<Action> act = ActionManager::get_action (X_("Window"), X_("toggle-rc-options-editor"));
|
||||
assert (act);
|
||||
|
||||
RefPtr<ToggleAction> tact = RefPtr<ToggleAction>::cast_dynamic (act);
|
||||
tact->set_active ();
|
||||
act->activate();
|
||||
|
||||
rc_option_editor->set_current_page (_("Misc"));
|
||||
return true;
|
||||
|
@ -27,6 +27,10 @@
|
||||
#include "ardour/audioengine.h"
|
||||
#include "ardour/automation_watch.h"
|
||||
|
||||
#ifdef interface
|
||||
#undef interface
|
||||
#endif
|
||||
|
||||
#include "actions.h"
|
||||
#include "add_route_dialog.h"
|
||||
#include "add_video_dialog.h"
|
||||
|
@ -658,7 +658,7 @@ AUPluginUI::parent_cocoa_window ()
|
||||
|
||||
/* move the au_view down so that it doesn't overlap the top_box contents */
|
||||
|
||||
NSPoint origin = { 0, a.height };
|
||||
NSPoint origin = { 0, static_cast<CGFloat> (a.height) };
|
||||
|
||||
[au_view setFrameOrigin:origin];
|
||||
[view addSubview:au_view positioned:NSWindowBelow relativeTo:nil];
|
||||
|
@ -997,18 +997,18 @@ AudioClock::set_slave_info ()
|
||||
|
||||
switch (sync_src) {
|
||||
case JACK:
|
||||
_left_layout->set_markup (string_compose ("<span size=\"%1\">"TXTSPAN"%2</span></span>",
|
||||
_left_layout->set_markup (string_compose ("<span size=\"%1\">" TXTSPAN "%2</span></span>",
|
||||
INFO_FONT_SIZE, sync_source_to_string(sync_src, true)));
|
||||
_right_layout->set_text ("");
|
||||
break;
|
||||
case MIDIClock:
|
||||
if (slave) {
|
||||
_left_layout->set_markup (string_compose ("<span size=\"%1\">"TXTSPAN"%2</span></span>",
|
||||
_left_layout->set_markup (string_compose ("<span size=\"%1\">" TXTSPAN "%2</span></span>",
|
||||
INFO_FONT_SIZE, sync_source_to_string(sync_src, true)));
|
||||
_right_layout->set_markup (string_compose ("<span size=\"%1\">"TXTSPAN"%2</span></span>",
|
||||
_right_layout->set_markup (string_compose ("<span size=\"%1\">" TXTSPAN "%2</span></span>",
|
||||
INFO_FONT_SIZE, slave->approximate_current_delta()));
|
||||
} else {
|
||||
_left_layout->set_markup (string_compose ("<span size=\"%1\">"TXTSPAN"%2</span></span>",
|
||||
_left_layout->set_markup (string_compose ("<span size=\"%1\">" TXTSPAN "%2</span></span>",
|
||||
INFO_FONT_SIZE, _("--pending--")));
|
||||
_right_layout->set_text ("");
|
||||
}
|
||||
@ -1020,21 +1020,21 @@ AudioClock::set_slave_info ()
|
||||
TimecodeSlave* tcslave;
|
||||
if ((tcslave = dynamic_cast<TimecodeSlave*>(_session->slave())) != 0) {
|
||||
matching = (tcslave->apparent_timecode_format() == _session->config.get_timecode_format());
|
||||
_left_layout->set_markup (string_compose ("<span size=\"%1\">"TXTSPAN"%2</span><span foreground=\"%3\">%4</span></span>",
|
||||
_left_layout->set_markup (string_compose ("<span size=\"%1\">" TXTSPAN "%2</span><span foreground=\"%3\">%4</span></span>",
|
||||
INFO_FONT_SIZE, sync_source_to_string(sync_src, true)[0], (matching?"green":"red"),
|
||||
dynamic_cast<TimecodeSlave*>(slave)->approximate_current_position()));
|
||||
_right_layout->set_markup (string_compose ("<span size=\"%1\">"TXTSPAN"%2</span></span>",
|
||||
_right_layout->set_markup (string_compose ("<span size=\"%1\">" TXTSPAN "%2</span></span>",
|
||||
INFO_FONT_SIZE, slave->approximate_current_delta()));
|
||||
}
|
||||
} else {
|
||||
_left_layout->set_markup (string_compose ("<span size=\"%1\">"TXTSPAN"%2</span></span>",
|
||||
_left_layout->set_markup (string_compose ("<span size=\"%1\">" TXTSPAN "%2</span></span>",
|
||||
INFO_FONT_SIZE, _("--pending--")));
|
||||
_right_layout->set_text ("");
|
||||
}
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
_left_layout->set_markup (string_compose ("<span size=\"%1\">"TXTSPAN"INT/%2</span></span>",
|
||||
_left_layout->set_markup (string_compose ("<span size=\"%1\">" TXTSPAN "INT/%2</span></span>",
|
||||
INFO_FONT_SIZE, sync_source_to_string(sync_src, true)));
|
||||
_right_layout->set_text ("");
|
||||
}
|
||||
@ -1079,17 +1079,17 @@ AudioClock::set_frames (framepos_t when, bool /*force*/)
|
||||
sprintf (buf, "%" PRId64 "Hz", rate);
|
||||
}
|
||||
|
||||
_left_layout->set_markup (string_compose ("<span size=\"%1\">"TXTSPAN"%2 </span><span foreground=\"green\">%3</span></span>",
|
||||
_left_layout->set_markup (string_compose ("<span size=\"%1\">" TXTSPAN "%2 </span><span foreground=\"green\">%3</span></span>",
|
||||
INFO_FONT_SIZE, _("SR"), buf));
|
||||
|
||||
float vid_pullup = _session->config.get_video_pullup();
|
||||
|
||||
if (vid_pullup == 0.0) {
|
||||
_right_layout->set_markup (string_compose ("<span size=\"%1\">"TXTSPAN"%2 </span><span foreground=\"green\">off</span></span>",
|
||||
_right_layout->set_markup (string_compose ("<span size=\"%1\">" TXTSPAN "%2 </span><span foreground=\"green\">off</span></span>",
|
||||
INFO_FONT_SIZE, _("Pull")));
|
||||
} else {
|
||||
sprintf (buf, _("%+.4f%%"), vid_pullup);
|
||||
_right_layout->set_markup (string_compose ("<span size=\"%1\">"TXTSPAN"%2 </span><span foreground=\"green\">%3</span></span>",
|
||||
_right_layout->set_markup (string_compose ("<span size=\"%1\">" TXTSPAN "%2 </span><span foreground=\"green\">%3</span></span>",
|
||||
INFO_FONT_SIZE, _("Pull"), buf));
|
||||
}
|
||||
}
|
||||
@ -1233,11 +1233,11 @@ AudioClock::set_bbt (framepos_t when, bool /*force*/)
|
||||
TempoMetric m (_session->tempo_map().metric_at (pos));
|
||||
|
||||
sprintf (buf, "%-5.1f", m.tempo().beats_per_minute());
|
||||
_left_layout->set_markup (string_compose ("<span size=\"%1\">"TXTSPAN"%3</span> <span foreground=\"green\">%2</span></span>",
|
||||
_left_layout->set_markup (string_compose ("<span size=\"%1\">" TXTSPAN "%3</span> <span foreground=\"green\">%2</span></span>",
|
||||
INFO_FONT_SIZE, buf, _("Tempo")));
|
||||
|
||||
sprintf (buf, "%g/%g", m.meter().divisions_per_bar(), m.meter().note_divisor());
|
||||
_right_layout->set_markup (string_compose ("<span size=\"%1\">"TXTSPAN"%3</span> <span foreground=\"green\">%2</span></span>",
|
||||
_right_layout->set_markup (string_compose ("<span size=\"%1\">" TXTSPAN "%3</span> <span foreground=\"green\">%2</span></span>",
|
||||
INFO_FONT_SIZE, buf, _("Meter")));
|
||||
}
|
||||
}
|
||||
|
@ -35,7 +35,7 @@
|
||||
/* POSIX guarantees casting between void* and function pointers, ISO C doesn't
|
||||
* We can work around warnings by going one step deeper in our casts
|
||||
*/
|
||||
#ifdef _POSIX_VERSION
|
||||
#if defined(_POSIX_VERSION) || defined(__MINGW32__)
|
||||
#define POSIX_FUNC_PTR_CAST(type, object) *((type*) &(object))
|
||||
#endif // _POSIX_VERSION
|
||||
|
||||
|
@ -112,7 +112,7 @@ set_language_preference ()
|
||||
break;
|
||||
}
|
||||
}
|
||||
NSRange r = { 0, count };
|
||||
NSRange r = { 0, static_cast<NSUInteger> (count) };
|
||||
setenv ("LANGUAGE", [[[languages subarrayWithRange:r] componentsJoinedByString:@":"] UTF8String], 0);
|
||||
cout << "LANGUAGE set to " << getenv ("LANGUAGE") << endl;
|
||||
}
|
||||
|
@ -373,11 +373,11 @@ Editor::popup_ruler_menu (framepos_t where, ItemType t)
|
||||
ruler_items.push_back (MenuElem (_("Timeline height")));
|
||||
static_cast<MenuItem*>(&ruler_items.back())->set_sensitive(false);
|
||||
ruler_items.push_back (CheckMenuElem (_("Large"), sigc::bind ( sigc::mem_fun(*this, &Editor::set_video_timeline_height), 6)));
|
||||
if (videotl_bar_height == 6) { static_cast<CheckMenuItem*>(&ruler_items.back())->set_active(true);}
|
||||
if (videotl_bar_height == 6) { static_cast<Gtk::CheckMenuItem*>(&ruler_items.back())->set_active(true);}
|
||||
ruler_items.push_back (CheckMenuElem (_("Normal"), sigc::bind ( sigc::mem_fun(*this, &Editor::set_video_timeline_height), 4)));
|
||||
if (videotl_bar_height == 4) { static_cast<CheckMenuItem*>(&ruler_items.back())->set_active(true);}
|
||||
if (videotl_bar_height == 4) { static_cast<Gtk::CheckMenuItem*>(&ruler_items.back())->set_active(true);}
|
||||
ruler_items.push_back (CheckMenuElem (_("Small"), sigc::bind ( sigc::mem_fun(*this, &Editor::set_video_timeline_height), 3)));
|
||||
if (videotl_bar_height == 3) { static_cast<CheckMenuItem*>(&ruler_items.back())->set_active(true);}
|
||||
if (videotl_bar_height == 3) { static_cast<Gtk::CheckMenuItem*>(&ruler_items.back())->set_active(true);}
|
||||
ruler_items.push_back (SeparatorElem ());
|
||||
|
||||
ruler_items.push_back (MenuElem (_("Align Video Track")));
|
||||
@ -385,7 +385,7 @@ Editor::popup_ruler_menu (framepos_t where, ItemType t)
|
||||
|
||||
ruler_items.push_back (CheckMenuElem (_("Lock")));
|
||||
{
|
||||
CheckMenuItem* vtl_lock = static_cast<CheckMenuItem*>(&ruler_items.back());
|
||||
Gtk::CheckMenuItem* vtl_lock = static_cast<Gtk::CheckMenuItem*>(&ruler_items.back());
|
||||
vtl_lock->set_active(is_video_timeline_locked());
|
||||
vtl_lock->signal_activate().connect (sigc::mem_fun(*this, &Editor::toggle_video_timeline_locked));
|
||||
}
|
||||
|
@ -586,7 +586,7 @@ ExportVideoDialog::encode_pass (int pass)
|
||||
}
|
||||
|
||||
std::string preset = preset_combo.get_active_text();
|
||||
FFSettings ffs ; /* = transcoder->default_encoder_settings(); */
|
||||
TranscodeFfmpeg::FFSettings ffs ; /* = transcoder->default_encoder_settings(); */
|
||||
ffs.clear();
|
||||
|
||||
if (fps_checkbox.get_active()) {
|
||||
@ -742,7 +742,7 @@ ExportVideoDialog::encode_pass (int pass)
|
||||
transcoder->set_avoffset(av_offset / (double)_session->nominal_frame_rate());
|
||||
}
|
||||
|
||||
FFSettings meta = transcoder->default_meta_data();
|
||||
TranscodeFfmpeg::FFSettings meta = transcoder->default_meta_data();
|
||||
if (meta_checkbox.get_active()) {
|
||||
ARDOUR::SessionMetadata * session_data = ARDOUR::SessionMetadata::Metadata();
|
||||
if (session_data->year() > 0 ) {
|
||||
|
@ -60,6 +60,7 @@ using namespace Gtkmm2ext;
|
||||
using namespace Gtk;
|
||||
using namespace std;
|
||||
using Gtkmm2ext::Keyboard;
|
||||
using namespace ArdourMeter;
|
||||
|
||||
GainMeterBase::GainMeterBase (Session* s, bool horizontal, int fader_length, int fader_girth)
|
||||
: gain_adjustment (gain_to_slider_position_with_max (1.0, Config->get_max_gain()), 0.0, 1.0, 0.01, 0.1)
|
||||
|
@ -42,7 +42,7 @@ GroupTabs::GroupTabs ()
|
||||
, _dragging (0)
|
||||
, _dragging_new_tab (0)
|
||||
{
|
||||
|
||||
add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK|Gdk::POINTER_MOTION_MASK);
|
||||
}
|
||||
|
||||
GroupTabs::~GroupTabs ()
|
||||
@ -175,6 +175,8 @@ GroupTabs::on_motion_notify_event (GdkEventMotion* ev)
|
||||
set_dirty ();
|
||||
queue_draw ();
|
||||
|
||||
gdk_event_request_motions(ev);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -35,18 +35,42 @@ using namespace PBD;
|
||||
using namespace Gtk;
|
||||
using namespace Gtkmm2ext;
|
||||
using namespace std;
|
||||
|
||||
using namespace ArdourMeter;
|
||||
|
||||
static const int max_pattern_metric_size = 1026;
|
||||
|
||||
sigc::signal<void> ResetAllPeakDisplays;
|
||||
sigc::signal<void,ARDOUR::Route*> ResetRoutePeakDisplays;
|
||||
sigc::signal<void,ARDOUR::RouteGroup*> ResetGroupPeakDisplays;
|
||||
sigc::signal<void> RedrawMetrics;
|
||||
sigc::signal<void> ArdourMeter::ResetAllPeakDisplays;
|
||||
sigc::signal<void,ARDOUR::Route*> ArdourMeter::ResetRoutePeakDisplays;
|
||||
sigc::signal<void,ARDOUR::RouteGroup*> ArdourMeter::ResetGroupPeakDisplays;
|
||||
sigc::signal<void> ArdourMeter::RedrawMetrics;
|
||||
|
||||
sigc::signal<void, int, ARDOUR::RouteGroup*, ARDOUR::MeterType> SetMeterTypeMulti;
|
||||
sigc::signal<void, int, ARDOUR::RouteGroup*, ARDOUR::MeterType> ArdourMeter::SetMeterTypeMulti;
|
||||
|
||||
cairo_pattern_t*
|
||||
namespace ArdourMeter {
|
||||
typedef std::map<std::string,cairo_pattern_t*> TickPatterns;
|
||||
typedef std::map<std::string,cairo_pattern_t*> MetricPatterns;
|
||||
}
|
||||
|
||||
static ArdourMeter::TickPatterns ticks_patterns;
|
||||
static ArdourMeter::MetricPatterns metric_patterns;
|
||||
|
||||
const std::string
|
||||
ArdourMeter::meter_type_string (ARDOUR::MeterType mt)
|
||||
{
|
||||
switch (mt) {
|
||||
case MeterPeak:
|
||||
return _("Peak");
|
||||
break;
|
||||
case MeterKrms:
|
||||
return _("RMS + Peak");
|
||||
break;
|
||||
default:
|
||||
return _("???");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static cairo_pattern_t*
|
||||
meter_render_ticks (Gtk::Widget& w, vector<ARDOUR::DataType> types)
|
||||
{
|
||||
Glib::RefPtr<Gdk::Window> win (w.get_window());
|
||||
@ -195,7 +219,7 @@ meter_render_ticks (Gtk::Widget& w, vector<ARDOUR::DataType> types)
|
||||
}
|
||||
|
||||
|
||||
cairo_pattern_t*
|
||||
static cairo_pattern_t*
|
||||
meter_render_metrics (Gtk::Widget& w, vector<DataType> types)
|
||||
{
|
||||
Glib::RefPtr<Gdk::Window> win (w.get_window());
|
||||
@ -340,11 +364,11 @@ meter_render_metrics (Gtk::Widget& w, vector<DataType> types)
|
||||
snprintf (buf, sizeof (buf), "%+2d", j->first);
|
||||
pos = height - (gint) floor (height * fraction);
|
||||
if (tickleft) {
|
||||
cairo_move_to(cr, width-2.5, pos + .5);
|
||||
cairo_move_to(cr, width-1.5, pos + .5);
|
||||
cairo_line_to(cr, width, pos + .5);
|
||||
} else {
|
||||
cairo_move_to(cr, 0, pos + .5);
|
||||
cairo_line_to(cr, 2.5, pos + .5);
|
||||
cairo_line_to(cr, 1.5, pos + .5);
|
||||
}
|
||||
cairo_stroke (cr);
|
||||
break;
|
||||
@ -374,7 +398,7 @@ meter_render_metrics (Gtk::Widget& w, vector<DataType> types)
|
||||
p = min (p, height - th);
|
||||
p = max (p, 0);
|
||||
|
||||
cairo_move_to (cr, width-4-tw, p);
|
||||
cairo_move_to (cr, width-3-tw, p);
|
||||
pango_cairo_show_layout (cr, layout->gobj());
|
||||
}
|
||||
}
|
||||
@ -407,10 +431,8 @@ meter_render_metrics (Gtk::Widget& w, vector<DataType> types)
|
||||
}
|
||||
|
||||
|
||||
typedef std::map<std::string,cairo_pattern_t*> TickPatterns;
|
||||
static TickPatterns ticks_patterns;
|
||||
|
||||
gint meter_expose_ticks (GdkEventExpose *ev, std::vector<ARDOUR::DataType> types, Gtk::DrawingArea *mta)
|
||||
gint
|
||||
ArdourMeter::meter_expose_ticks (GdkEventExpose *ev, std::vector<ARDOUR::DataType> types, Gtk::DrawingArea *mta)
|
||||
{
|
||||
Glib::RefPtr<Gdk::Window> win (mta->get_window());
|
||||
cairo_t* cr;
|
||||
@ -446,10 +468,8 @@ gint meter_expose_ticks (GdkEventExpose *ev, std::vector<ARDOUR::DataType> types
|
||||
return true;
|
||||
}
|
||||
|
||||
typedef std::map<std::string,cairo_pattern_t*> MetricPatterns;
|
||||
static MetricPatterns metric_patterns;
|
||||
|
||||
gint meter_expose_metrics (GdkEventExpose *ev, std::vector<ARDOUR::DataType> types, Gtk::DrawingArea *mma)
|
||||
gint
|
||||
ArdourMeter::meter_expose_metrics (GdkEventExpose *ev, std::vector<ARDOUR::DataType> types, Gtk::DrawingArea *mma)
|
||||
{
|
||||
Glib::RefPtr<Gdk::Window> win (mma->get_window());
|
||||
cairo_t* cr;
|
||||
@ -485,7 +505,8 @@ gint meter_expose_metrics (GdkEventExpose *ev, std::vector<ARDOUR::DataType> typ
|
||||
return true;
|
||||
}
|
||||
|
||||
void meter_clear_pattern_cache(int which) {
|
||||
void
|
||||
ArdourMeter::meter_clear_pattern_cache(int which) {
|
||||
MetricPatterns::iterator i = metric_patterns.begin();
|
||||
TickPatterns::iterator j = ticks_patterns.begin();
|
||||
|
||||
|
@ -27,6 +27,9 @@
|
||||
#include "gtkmm2ext/cairo_widget.h"
|
||||
|
||||
#include <sigc++/signal.h>
|
||||
|
||||
namespace ArdourMeter {
|
||||
|
||||
extern sigc::signal<void> ResetAllPeakDisplays;
|
||||
extern sigc::signal<void,ARDOUR::Route*> ResetRoutePeakDisplays;
|
||||
extern sigc::signal<void,ARDOUR::RouteGroup*> ResetGroupPeakDisplays;
|
||||
@ -34,13 +37,14 @@ extern sigc::signal<void> RedrawMetrics;
|
||||
|
||||
extern sigc::signal<void, int, ARDOUR::RouteGroup*, ARDOUR::MeterType> SetMeterTypeMulti;
|
||||
|
||||
cairo_pattern_t* meter_render_ticks (Gtk::Widget& w, std::vector<ARDOUR::DataType> types);
|
||||
cairo_pattern_t* meter_render_metrics (Gtk::Widget& w, std::vector<ARDOUR::DataType> types);
|
||||
|
||||
gint meter_expose_ticks (GdkEventExpose *ev, std::vector<ARDOUR::DataType> types, Gtk::DrawingArea *mta);
|
||||
gint meter_expose_metrics (GdkEventExpose *ev, std::vector<ARDOUR::DataType> types, Gtk::DrawingArea *mma);
|
||||
|
||||
void meter_clear_pattern_cache(int which=7);
|
||||
|
||||
const std::string meter_type_string (ARDOUR::MeterType);
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -52,6 +52,7 @@ using namespace PBD;
|
||||
using namespace Gtk;
|
||||
using namespace Gtkmm2ext;
|
||||
using namespace std;
|
||||
using namespace ArdourMeter;
|
||||
|
||||
PBD::Signal1<void,MeterStrip*> MeterStrip::CatchDeletion;
|
||||
PBD::Signal0<void> MeterStrip::MetricChanged;
|
||||
@ -570,16 +571,19 @@ MeterStrip::popup_level_meter_menu (GdkEventButton* ev)
|
||||
RadioMenuItem::Group group;
|
||||
|
||||
_suspend_menu_callbacks = true;
|
||||
add_level_meter_item (items, group, _("Peak"), MeterPeak);
|
||||
add_level_meter_item (items, group, _("RMS + Peak"), MeterKrms);
|
||||
add_level_meter_item (items, group, ArdourMeter::meter_type_string(MeterPeak), MeterPeak);
|
||||
add_level_meter_item (items, group, ArdourMeter::meter_type_string(MeterKrms), MeterKrms);
|
||||
|
||||
MeterType cmt = _route->meter_type();
|
||||
const std::string cmn = ArdourMeter::meter_type_string(cmt);
|
||||
|
||||
items.push_back (SeparatorElem());
|
||||
items.push_back (MenuElem (_("Change all in Group to Peak"), sigc::bind (SetMeterTypeMulti, -1, _route->route_group(), MeterPeak)));
|
||||
items.push_back (MenuElem (_("Change all in Group to RMS + Peak"), sigc::bind (SetMeterTypeMulti, -1, _route->route_group(), MeterKrms)));
|
||||
items.push_back (MenuElem (_("Change all to Peak"), sigc::bind (SetMeterTypeMulti, 0, _route->route_group(), MeterPeak)));
|
||||
items.push_back (MenuElem (_("Change all to RMS + Peak"), sigc::bind (SetMeterTypeMulti, 0, _route->route_group(), MeterKrms)));
|
||||
items.push_back (MenuElem (_("Change same track-type to Peak"), sigc::bind (SetMeterTypeMulti, _strip_type, _route->route_group(), MeterPeak)));
|
||||
items.push_back (MenuElem (_("Change same track-type to RMS + Peak"), sigc::bind (SetMeterTypeMulti, _strip_type, _route->route_group(), MeterKrms)));
|
||||
items.push_back (MenuElem (string_compose(_("Change all in Group to %1"), cmn),
|
||||
sigc::bind (SetMeterTypeMulti, -1, _route->route_group(), cmt)));
|
||||
items.push_back (MenuElem (string_compose(_("Change all to %1"), cmn),
|
||||
sigc::bind (SetMeterTypeMulti, 0, _route->route_group(), cmt)));
|
||||
items.push_back (MenuElem (string_compose(_("Change same track-type to %1"), cmn),
|
||||
sigc::bind (SetMeterTypeMulti, _strip_type, _route->route_group(), cmt)));
|
||||
|
||||
m->popup (ev->button, ev->time);
|
||||
_suspend_menu_callbacks = false;
|
||||
|
@ -62,6 +62,7 @@ using namespace Gtk;
|
||||
using namespace Glib;
|
||||
using namespace Gtkmm2ext;
|
||||
using namespace std;
|
||||
using namespace ArdourMeter;
|
||||
|
||||
using PBD::atoi;
|
||||
|
||||
|
@ -19,8 +19,6 @@
|
||||
#include <cstdlib>
|
||||
#include <cmath>
|
||||
|
||||
#include <strings.h> // for ffs(3)
|
||||
|
||||
#include <algorithm>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
@ -28,6 +26,7 @@
|
||||
#include <sigc++/bind.h>
|
||||
|
||||
#include "pbd/error.h"
|
||||
#include "pbd/ffs.h"
|
||||
#include "pbd/stl_delete.h"
|
||||
#include "pbd/whitespace.h"
|
||||
#include "pbd/basename.h"
|
||||
@ -1491,7 +1490,7 @@ MidiTimeAxisView::playback_channel_mode_changed ()
|
||||
_playback_channel_status.set_markup (string_compose ("<b>%1</b>: <i>%2</i>", _("Play"), _("some")));
|
||||
break;
|
||||
case ForceChannel:
|
||||
_playback_channel_status.set_markup (string_compose ("<b>%1</b>: <i>%2>%3</i>", _("Play"), _("all"), ffs (midi_track()->get_playback_channel_mask())));
|
||||
_playback_channel_status.set_markup (string_compose ("<b>%1</b>: <i>%2>%3</i>", _("Play"), _("all"), PBD::ffs (midi_track()->get_playback_channel_mask())));
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -1507,7 +1506,7 @@ MidiTimeAxisView::capture_channel_mode_changed ()
|
||||
_capture_channel_status.set_markup (string_compose ("<b>%1</b>: <i>%2</i>", _("Rec"), _("some")));
|
||||
break;
|
||||
case ForceChannel:
|
||||
_capture_channel_status.set_markup (string_compose ("<b>%1</b>: <i>%2>%3</i>", _("Rec"), _("all"), ffs (midi_track()->get_capture_channel_mask())));
|
||||
_capture_channel_status.set_markup (string_compose ("<b>%1</b>: <i>%2>%3</i>", _("Rec"), _("all"), PBD::ffs (midi_track()->get_capture_channel_mask())));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -71,6 +71,7 @@ using namespace PBD;
|
||||
using namespace Gtk;
|
||||
using namespace Gtkmm2ext;
|
||||
using namespace std;
|
||||
using namespace ArdourMeter;
|
||||
|
||||
int MixerStrip::scrollbar_height = 0;
|
||||
PBD::Signal1<void,MixerStrip*> MixerStrip::CatchDeletion;
|
||||
@ -2132,8 +2133,8 @@ MixerStrip::popup_level_meter_menu (GdkEventButton* ev)
|
||||
RadioMenuItem::Group tgroup;
|
||||
items.push_back (SeparatorElem());
|
||||
|
||||
add_level_meter_item_type (items, tgroup, _("Peak"), MeterPeak);
|
||||
add_level_meter_item_type (items, tgroup, _("RMS + Peak"), MeterKrms);
|
||||
add_level_meter_item_type (items, tgroup, ArdourMeter::meter_type_string(MeterPeak), MeterPeak);
|
||||
add_level_meter_item_type (items, tgroup, ArdourMeter::meter_type_string(MeterKrms), MeterKrms);
|
||||
|
||||
int _strip_type;
|
||||
if (_route->is_master()) {
|
||||
@ -2151,13 +2152,16 @@ MixerStrip::popup_level_meter_menu (GdkEventButton* ev)
|
||||
_strip_type = 1;
|
||||
}
|
||||
|
||||
MeterType cmt = _route->meter_type();
|
||||
const std::string cmn = ArdourMeter::meter_type_string(cmt);
|
||||
|
||||
items.push_back (SeparatorElem());
|
||||
items.push_back (MenuElem (_("Change all in Group to Peak"), sigc::bind (SetMeterTypeMulti, -1, _route->route_group(), MeterPeak)));
|
||||
items.push_back (MenuElem (_("Change all in Group to RMS + Peak"), sigc::bind (SetMeterTypeMulti, -1, _route->route_group(), MeterKrms)));
|
||||
items.push_back (MenuElem (_("Change all to Peak"), sigc::bind (SetMeterTypeMulti, 0, _route->route_group(), MeterPeak)));
|
||||
items.push_back (MenuElem (_("Change all to RMS + Peak"), sigc::bind (SetMeterTypeMulti, 0, _route->route_group(), MeterKrms)));
|
||||
items.push_back (MenuElem (_("Change same track-type to Peak"), sigc::bind (SetMeterTypeMulti, _strip_type, _route->route_group(), MeterPeak)));
|
||||
items.push_back (MenuElem (_("Change same track-type to RMS + Peak"), sigc::bind (SetMeterTypeMulti, _strip_type, _route->route_group(), MeterKrms)));
|
||||
items.push_back (MenuElem (string_compose(_("Change all in Group to %1"), cmn),
|
||||
sigc::bind (SetMeterTypeMulti, -1, _route->route_group(), cmt)));
|
||||
items.push_back (MenuElem (string_compose(_("Change all to %1"), cmn),
|
||||
sigc::bind (SetMeterTypeMulti, 0, _route->route_group(), cmt)));
|
||||
items.push_back (MenuElem (string_compose(_("Change same track-type to %1"), cmn),
|
||||
sigc::bind (SetMeterTypeMulti, _strip_type, _route->route_group(), cmt)));
|
||||
|
||||
m->popup (ev->button, ev->time);
|
||||
_suspend_menu_callbacks = false;
|
||||
|
1447
gtk2_ardour/po/ru.po
1447
gtk2_ardour/po/ru.po
File diff suppressed because it is too large
Load Diff
@ -655,10 +655,14 @@ PluginInsertProcessorEntry::SplittingIcon::on_expose_event (GdkEventExpose* ev)
|
||||
{
|
||||
cairo_t* cr = gdk_cairo_create (get_window()->gobj());
|
||||
|
||||
cairo_rectangle (cr, ev->area.x, ev->area.y, ev->area.width, ev->area.height);
|
||||
cairo_clip (cr);
|
||||
|
||||
cairo_set_line_width (cr, 1);
|
||||
|
||||
double const width = ev->area.width;
|
||||
double const height = ev->area.height;
|
||||
Gtk::Allocation a = get_allocation();
|
||||
double const width = a.get_width();
|
||||
double const height = a.get_height();
|
||||
|
||||
Gdk::Color const bg = get_style()->get_bg (STATE_NORMAL);
|
||||
cairo_set_source_rgb (cr, bg.get_red_p (), bg.get_green_p (), bg.get_blue_p ());
|
||||
|
@ -189,33 +189,33 @@ ArdourStartup::ready_without_display () const
|
||||
void
|
||||
ArdourStartup::setup_prerelease_page ()
|
||||
{
|
||||
VBox* vbox = manage (new VBox);
|
||||
Label* label = manage (new Label);
|
||||
label->set_markup (_("<b>Welcome to this BETA release of Ardour 3.0</b>\n\n\
|
||||
Ardour 3.0 has been released for Linux but because of the lack of testers,\n\
|
||||
VBox* vbox = manage (new VBox);
|
||||
Label* label = manage (new Label);
|
||||
label->set_markup (string_compose (_("<b>Welcome to this BETA release of Ardour %1</b>\n\n\
|
||||
Ardour %1 has been released for Linux but because of the lack of testers,\n\
|
||||
it is still at the beta stage on OS X. So, a few guidelines:\n\
|
||||
\n\
|
||||
1) Please do <b>NOT</b> use this software with the expectation that it is stable or reliable\n\
|
||||
though it may be so, depending on your workflow.\n\
|
||||
3) <b>Please do NOT use the forums at ardour.org to report issues</b>.\n\
|
||||
4) Please <b>DO</b> use the bugtracker at http://tracker.ardour.org/ to report issues\n\
|
||||
making sure to note the product version number as 3.0-beta.\n\
|
||||
5) Please <b>DO</b> use the ardour-users mailing list to discuss ideas and pass on comments.\n\
|
||||
6) Please <b>DO</b> join us on IRC for real time discussions about ardour3. You\n\
|
||||
2) <b>Please do NOT use the forums at ardour.org to report issues</b>.\n\
|
||||
3) Please <b>DO</b> use the bugtracker at http://tracker.ardour.org/ to report issues\n\
|
||||
making sure to note the product version number as %1-beta.\n\
|
||||
4) Please <b>DO</b> use the ardour-users mailing list to discuss ideas and pass on comments.\n\
|
||||
5) Please <b>DO</b> join us on IRC for real time discussions about ardour3. You\n\
|
||||
can get there directly from Ardour via the Help->Chat menu option.\n\
|
||||
\n\
|
||||
Full information on all the above can be found on the support page at\n\
|
||||
\n\
|
||||
http://ardour.org/support\n\
|
||||
"));
|
||||
"), VERSIONSTRING));
|
||||
|
||||
vbox->set_border_width (12);
|
||||
vbox->pack_start (*label, false, false, 12);
|
||||
vbox->show_all ();
|
||||
|
||||
append_page (*vbox);
|
||||
set_page_type (*vbox, ASSISTANT_PAGE_CONTENT);
|
||||
set_page_title (*vbox, _("This is a BETA RELEASE"));
|
||||
vbox->set_border_width (12);
|
||||
vbox->pack_start (*label, false, false, 12);
|
||||
vbox->show_all ();
|
||||
|
||||
append_page (*vbox);
|
||||
set_page_type (*vbox, ASSISTANT_PAGE_CONTENT);
|
||||
set_page_title (*vbox, _("This is a BETA RELEASE"));
|
||||
set_page_complete (*vbox, true);
|
||||
}
|
||||
|
||||
@ -917,6 +917,7 @@ ArdourStartup::setup_new_session_page ()
|
||||
if (more_new_session_options_button.get_active()) {
|
||||
set_page_type (session_vbox, ASSISTANT_PAGE_CONTENT);
|
||||
}
|
||||
session_hbox.show_all();
|
||||
}
|
||||
|
||||
void
|
||||
@ -1092,6 +1093,7 @@ ArdourStartup::setup_existing_session_page ()
|
||||
|
||||
set_page_title (session_vbox, _("Select a session"));
|
||||
set_page_type (session_vbox, ASSISTANT_PAGE_CONFIRM);
|
||||
session_hbox.show_all();
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -410,6 +410,7 @@ TimeAxisView::controls_ebox_motion (GdkEventMotion* ev)
|
||||
maybe_set_cursor (ev->y);
|
||||
}
|
||||
|
||||
gdk_event_request_motions(ev);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -261,10 +261,10 @@ TranscodeFfmpeg::probe ()
|
||||
return true;
|
||||
}
|
||||
|
||||
FFSettings
|
||||
TranscodeFfmpeg::FFSettings
|
||||
TranscodeFfmpeg::default_encoder_settings ()
|
||||
{
|
||||
FFSettings ffs;
|
||||
TranscodeFfmpeg::FFSettings ffs;
|
||||
ffs.clear();
|
||||
ffs["-vcodec"] = "mpeg4";
|
||||
ffs["-acodec"] = "ac3";
|
||||
@ -273,10 +273,10 @@ TranscodeFfmpeg::default_encoder_settings ()
|
||||
return ffs;
|
||||
}
|
||||
|
||||
FFSettings
|
||||
TranscodeFfmpeg::FFSettings
|
||||
TranscodeFfmpeg::default_meta_data ()
|
||||
{
|
||||
FFSettings ffm;
|
||||
TranscodeFfmpeg::FFSettings ffm;
|
||||
ffm.clear();
|
||||
ffm["comment"] = "Created with ardour";
|
||||
return ffm;
|
||||
@ -308,7 +308,7 @@ TranscodeFfmpeg::format_metadata (std::string key, std::string value)
|
||||
}
|
||||
|
||||
bool
|
||||
TranscodeFfmpeg::encode (std::string outfile, std::string inf_a, std::string inf_v, FFSettings ffs, FFSettings meta, bool map)
|
||||
TranscodeFfmpeg::encode (std::string outfile, std::string inf_a, std::string inf_v, TranscodeFfmpeg::FFSettings ffs, TranscodeFfmpeg::FFSettings meta, bool map)
|
||||
{
|
||||
#define MAX_FFMPEG_ENCODER_ARGS (100)
|
||||
char **argp;
|
||||
@ -327,11 +327,11 @@ TranscodeFfmpeg::encode (std::string outfile, std::string inf_a, std::string inf
|
||||
argp[a++] = strdup("-i");
|
||||
argp[a++] = strdup(inf_a.c_str());
|
||||
|
||||
for(FFSettings::const_iterator it = ffs.begin(); it != ffs.end(); ++it) {
|
||||
for(TranscodeFfmpeg::FFSettings::const_iterator it = ffs.begin(); it != ffs.end(); ++it) {
|
||||
argp[a++] = strdup(it->first.c_str());
|
||||
argp[a++] = strdup(it->second.c_str());
|
||||
}
|
||||
for(FFSettings::const_iterator it = meta.begin(); it != meta.end(); ++it) {
|
||||
for(TranscodeFfmpeg::FFSettings::const_iterator it = meta.begin(); it != meta.end(); ++it) {
|
||||
argp[a++] = strdup("-metadata");
|
||||
argp[a++] = format_metadata(it->first.c_str(), it->second.c_str());
|
||||
}
|
||||
|
@ -24,14 +24,6 @@
|
||||
#include "ardour/types.h"
|
||||
#include "system_exec.h"
|
||||
|
||||
/* TODO: use a namespace here ? */
|
||||
struct FFAudioStream {
|
||||
std::string name;
|
||||
std::string stream_id;
|
||||
uint32_t channels;
|
||||
};
|
||||
typedef std::vector<FFAudioStream> AudioStreams;
|
||||
typedef std::map<std::string,std::string> FFSettings;
|
||||
|
||||
/** @class TranscodeFfmpeg
|
||||
* @brief wrapper around ffmpeg and ffprobe command-line utils
|
||||
@ -46,6 +38,15 @@ class TranscodeFfmpeg : public sigc::trackable
|
||||
{
|
||||
public:
|
||||
|
||||
struct FFAudioStream {
|
||||
std::string name;
|
||||
std::string stream_id;
|
||||
uint32_t channels;
|
||||
};
|
||||
typedef std::vector<FFAudioStream> FFAudioStreams;
|
||||
typedef std::map<std::string,std::string> FFSettings;
|
||||
|
||||
|
||||
/** instantiate a new transcoder. If a file-name is given, the file's
|
||||
* attributes (fps, duration, geometry etc) are read.
|
||||
*
|
||||
@ -110,7 +111,7 @@ class TranscodeFfmpeg : public sigc::trackable
|
||||
ARDOUR::framecnt_t get_duration() { return m_duration; }
|
||||
std::string get_codec() { return m_codec; }
|
||||
|
||||
AudioStreams get_audio() { return m_audio; }
|
||||
FFAudioStreams get_audio() { return m_audio; }
|
||||
|
||||
/** override file duration used with the \ref Progress signal.
|
||||
* @param d duration in video-frames = length_in_seconds * get_fps()
|
||||
@ -145,7 +146,7 @@ class TranscodeFfmpeg : public sigc::trackable
|
||||
bool ffexecok;
|
||||
bool probeok;
|
||||
|
||||
AudioStreams m_audio;
|
||||
FFAudioStreams m_audio;
|
||||
|
||||
char *format_metadata (std::string, std::string);
|
||||
void ffmpegparse_v (std::string d, size_t s);
|
||||
|
@ -90,7 +90,7 @@ TranscodeVideoDialog::TranscodeVideoDialog (Session* s, std::string infile)
|
||||
|
||||
int w = 0, h = 0;
|
||||
m_aspect = 4.0/3.0;
|
||||
AudioStreams as; as.clear();
|
||||
TranscodeFfmpeg::FFAudioStreams as; as.clear();
|
||||
|
||||
path_hbox->pack_start (path_label, false, false, 3);
|
||||
path_hbox->pack_start (path_entry, true, true, 3);
|
||||
@ -229,7 +229,7 @@ TranscodeVideoDialog::TranscodeVideoDialog (Session* s, std::string infile)
|
||||
t->attach (audio_combo, 1, 4, 2, 3);
|
||||
audio_combo.append_text("No audio");
|
||||
if (as.size() > 0) {
|
||||
for (AudioStreams::iterator it = as.begin(); it < as.end(); ++it) {
|
||||
for (TranscodeFfmpeg::FFAudioStreams::iterator it = as.begin(); it < as.end(); ++it) {
|
||||
audio_combo.append_text((*it).name);
|
||||
}
|
||||
}
|
||||
|
@ -151,7 +151,7 @@ class ProxyWithConstructor: public ProxyBase {
|
||||
: ProxyBase (name, menu_name) , creator (c) {}
|
||||
|
||||
ProxyWithConstructor (const std::string& name, const std::string& menu_name, const boost::function<T*()>& c, const XMLNode* node)
|
||||
: ProxyBase (name, menu_name, node) , creator (c) {}
|
||||
: ProxyBase (name, menu_name, *node) , creator (c) {}
|
||||
|
||||
Gtk::Window* get (bool create = false) {
|
||||
if (!_window) {
|
||||
@ -198,7 +198,7 @@ class Proxy : public ProxyBase {
|
||||
: ProxyBase (name, menu_name) {}
|
||||
|
||||
Proxy (const std::string& name, const std::string& menu_name, const XMLNode* node)
|
||||
: ProxyBase (name, menu_name, node) {}
|
||||
: ProxyBase (name, menu_name, *node) {}
|
||||
|
||||
Gtk::Window* get (bool create = false) {
|
||||
if (!_window) {
|
||||
|
@ -20,6 +20,8 @@
|
||||
#ifndef __ardour_midi_track_h__
|
||||
#define __ardour_midi_track_h__
|
||||
|
||||
#include "pbd/ffs.h"
|
||||
|
||||
#include "ardour/track.h"
|
||||
#include "ardour/midi_ring_buffer.h"
|
||||
|
||||
@ -183,7 +185,7 @@ private:
|
||||
/* if mode is ForceChannel, force mask to the lowest set channel or 1 if no
|
||||
* channels are set.
|
||||
*/
|
||||
#define force_mask(mode,mask) (((mode) == ForceChannel) ? (((mask) ? (1<<(ffs((mask))-1)) : 1)) : mask)
|
||||
#define force_mask(mode,mask) (((mode) == ForceChannel) ? (((mask) ? (1<<(PBD::ffs((mask))-1)) : 1)) : mask)
|
||||
|
||||
void _set_playback_channel_mode(ChannelMode mode, uint16_t mask) {
|
||||
mask = force_mask (mode, mask);
|
||||
|
@ -325,6 +325,9 @@ AudioTrack::roll (pframes_t nframes, framepos_t start_frame, framepos_t end_fram
|
||||
|
||||
if (!_active) {
|
||||
silence (nframes);
|
||||
if (_meter_point == MeterInput && (_monitoring & MonitorInput || _diskstream->record_enabled())) {
|
||||
_meter->reset();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -354,7 +357,7 @@ AudioTrack::roll (pframes_t nframes, framepos_t start_frame, framepos_t end_fram
|
||||
|
||||
fill_buffers_with_input (bufs, _input, nframes);
|
||||
|
||||
if (_meter_point == MeterInput) {
|
||||
if (_meter_point == MeterInput && (_monitoring & MonitorInput || _diskstream->record_enabled())) {
|
||||
_meter->run (bufs, start_frame, end_frame, nframes, true);
|
||||
}
|
||||
|
||||
|
@ -1717,6 +1717,7 @@ AUPlugin::set_state(const XMLNode& node, int version)
|
||||
return -1;
|
||||
}
|
||||
|
||||
#ifndef NO_PLUGIN_STATE
|
||||
if (node.children().empty()) {
|
||||
return -1;
|
||||
}
|
||||
@ -1752,6 +1753,7 @@ AUPlugin::set_state(const XMLNode& node, int version)
|
||||
}
|
||||
CFRelease (propertyList);
|
||||
}
|
||||
#endif
|
||||
|
||||
Plugin::set_state (node, version);
|
||||
return ret;
|
||||
|
@ -1568,7 +1568,7 @@ AudioEngine::stop_process_thread (jack_native_thread_t thread)
|
||||
* Jack 2 _jack arg is not used so it should be OK
|
||||
*/
|
||||
|
||||
#ifdef USING_JACK2_EXPANSION_OF_JACK_API
|
||||
#if defined(USING_JACK2_EXPANSION_OF_JACK_API) || defined(WIN32)
|
||||
if (jack_client_stop_thread (_jack, thread) != 0) {
|
||||
error << "AudioEngine: cannot stop process thread" << endmsg;
|
||||
return false;
|
||||
|
@ -1645,7 +1645,9 @@ IO::process_input (boost::shared_ptr<Processor> proc, framepos_t start_frame, fr
|
||||
}
|
||||
|
||||
_buffers.get_jack_port_addresses (_ports, nframes);
|
||||
proc->run (_buffers, start_frame, end_frame, nframes, true);
|
||||
if (proc) {
|
||||
proc->run (_buffers, start_frame, end_frame, nframes, true);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -46,12 +46,6 @@ void Kmeterdsp::process (float *p, int n)
|
||||
|
||||
float s, t, z1, z2;
|
||||
|
||||
if (_flag) // Display thread has read the rms value.
|
||||
{
|
||||
_rms = 0;
|
||||
_flag = false;
|
||||
}
|
||||
|
||||
// Get filter state.
|
||||
z1 = _z1;
|
||||
z2 = _z2;
|
||||
@ -88,9 +82,18 @@ void Kmeterdsp::process (float *p, int n)
|
||||
_z1 = z1 + 1e-20f;
|
||||
_z2 = z2 + 1e-20f;
|
||||
|
||||
// Adjust RMS value and update maximum since last read().
|
||||
s = sqrtf (2 * z2);
|
||||
if (s > _rms) _rms = s;
|
||||
|
||||
if (_flag) // Display thread has read the rms value.
|
||||
{
|
||||
_rms = s;
|
||||
_flag = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
// Adjust RMS value and update maximum since last read().
|
||||
if (s > _rms) _rms = s;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -40,6 +40,7 @@
|
||||
#include "pbd/compose.h"
|
||||
#include "pbd/error.h"
|
||||
#include "pbd/xml++.h"
|
||||
#include "pbd/stacktrace.h"
|
||||
|
||||
#include "midi++/manager.h"
|
||||
|
||||
@ -372,6 +373,7 @@ LadspaPlugin::set_state (const XMLNode& node, int version)
|
||||
return set_state_2X (node, version);
|
||||
}
|
||||
|
||||
#ifndef NO_PLUGIN_STATE
|
||||
XMLNodeList nodes;
|
||||
XMLProperty *prop;
|
||||
XMLNodeConstIterator iter;
|
||||
@ -379,6 +381,7 @@ LadspaPlugin::set_state (const XMLNode& node, int version)
|
||||
const char *port;
|
||||
const char *data;
|
||||
uint32_t port_id;
|
||||
#endif
|
||||
LocaleGuard lg (X_("POSIX"));
|
||||
|
||||
if (node.name() != state_node_name()) {
|
||||
@ -386,6 +389,8 @@ LadspaPlugin::set_state (const XMLNode& node, int version)
|
||||
return -1;
|
||||
}
|
||||
|
||||
#ifndef NO_PLUGIN_STATE
|
||||
|
||||
nodes = node.children ("Port");
|
||||
|
||||
for (iter = nodes.begin(); iter != nodes.end(); ++iter) {
|
||||
@ -408,6 +413,7 @@ LadspaPlugin::set_state (const XMLNode& node, int version)
|
||||
sscanf (port, "%" PRIu32, &port_id);
|
||||
set_parameter (port_id, atof(data));
|
||||
}
|
||||
#endif
|
||||
|
||||
latency_compute_run ();
|
||||
|
||||
@ -417,6 +423,7 @@ LadspaPlugin::set_state (const XMLNode& node, int version)
|
||||
int
|
||||
LadspaPlugin::set_state_2X (const XMLNode& node, int /* version */)
|
||||
{
|
||||
#ifndef NO_PLUGIN_STATE
|
||||
XMLNodeList nodes;
|
||||
XMLProperty *prop;
|
||||
XMLNodeConstIterator iter;
|
||||
@ -424,6 +431,7 @@ LadspaPlugin::set_state_2X (const XMLNode& node, int /* version */)
|
||||
const char *port;
|
||||
const char *data;
|
||||
uint32_t port_id;
|
||||
#endif
|
||||
LocaleGuard lg (X_("POSIX"));
|
||||
|
||||
if (node.name() != state_node_name()) {
|
||||
@ -431,6 +439,7 @@ LadspaPlugin::set_state_2X (const XMLNode& node, int /* version */)
|
||||
return -1;
|
||||
}
|
||||
|
||||
#ifndef NO_PLUGIN_STATE
|
||||
nodes = node.children ("port");
|
||||
|
||||
for(iter = nodes.begin(); iter != nodes.end(); ++iter){
|
||||
@ -455,6 +464,7 @@ LadspaPlugin::set_state_2X (const XMLNode& node, int /* version */)
|
||||
}
|
||||
|
||||
latency_compute_run ();
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -113,6 +113,8 @@ public:
|
||||
LV2World ();
|
||||
~LV2World ();
|
||||
|
||||
void load_bundled_plugins();
|
||||
|
||||
LilvWorld* world;
|
||||
|
||||
LilvNode* atom_AtomPort;
|
||||
@ -141,6 +143,9 @@ public:
|
||||
LilvNode* time_Position;
|
||||
LilvNode* ui_GtkUI;
|
||||
LilvNode* ui_external;
|
||||
|
||||
private:
|
||||
bool _bundle_checked;
|
||||
};
|
||||
|
||||
static LV2World _world;
|
||||
@ -1229,6 +1234,8 @@ LV2Plugin::set_state(const XMLNode& node, int version)
|
||||
return -1;
|
||||
}
|
||||
|
||||
#ifndef NO_PLUGIN_STATE
|
||||
|
||||
if (version < 3000) {
|
||||
nodes = node.children("port");
|
||||
} else {
|
||||
@ -1284,6 +1291,7 @@ LV2Plugin::set_state(const XMLNode& node, int version)
|
||||
}
|
||||
|
||||
latency_compute_run();
|
||||
#endif
|
||||
|
||||
return Plugin::set_state(node, version);
|
||||
}
|
||||
@ -1904,27 +1912,10 @@ static bool lv2_filter (const string& str, void *arg)
|
||||
|
||||
LV2World::LV2World()
|
||||
: world(lilv_world_new())
|
||||
, _bundle_checked(false)
|
||||
{
|
||||
lilv_world_load_all(world);
|
||||
|
||||
cout << "Scanning folders for bundled LV2s: " << ARDOUR::lv2_bundled_search_path().to_string() << endl;
|
||||
PathScanner scanner;
|
||||
vector<string *> *plugin_objects = scanner (ARDOUR::lv2_bundled_search_path().to_string(), lv2_filter, 0, true, true);
|
||||
if (plugin_objects) {
|
||||
for ( vector<string *>::iterator x = plugin_objects->begin(); x != plugin_objects->end (); ++x) {
|
||||
#ifdef WINDOWS
|
||||
string uri = "file:///" + **x + "/";
|
||||
#else
|
||||
string uri = "file://" + **x + "/";
|
||||
#endif
|
||||
LilvNode *node = lilv_new_uri(world, uri.c_str());
|
||||
lilv_world_load_bundle(world, node);
|
||||
lilv_node_free(node);
|
||||
}
|
||||
}
|
||||
delete (plugin_objects);
|
||||
|
||||
|
||||
atom_AtomPort = lilv_new_uri(world, LV2_ATOM__AtomPort);
|
||||
atom_Chunk = lilv_new_uri(world, LV2_ATOM__Chunk);
|
||||
atom_Sequence = lilv_new_uri(world, LV2_ATOM__Sequence);
|
||||
@ -1983,6 +1974,31 @@ LV2World::~LV2World()
|
||||
lilv_node_free(atom_AtomPort);
|
||||
}
|
||||
|
||||
void
|
||||
LV2World::load_bundled_plugins()
|
||||
{
|
||||
if (!_bundle_checked) {
|
||||
cout << "Scanning folders for bundled LV2s: " << ARDOUR::lv2_bundled_search_path().to_string() << endl;
|
||||
PathScanner scanner;
|
||||
vector<string *> *plugin_objects = scanner (ARDOUR::lv2_bundled_search_path().to_string(), lv2_filter, 0, true, true);
|
||||
if (plugin_objects) {
|
||||
for ( vector<string *>::iterator x = plugin_objects->begin(); x != plugin_objects->end (); ++x) {
|
||||
#ifdef WINDOWS
|
||||
string uri = "file:///" + **x + "/";
|
||||
#else
|
||||
string uri = "file://" + **x + "/";
|
||||
#endif
|
||||
LilvNode *node = lilv_new_uri(world, uri.c_str());
|
||||
lilv_world_load_bundle(world, node);
|
||||
lilv_node_free(node);
|
||||
}
|
||||
}
|
||||
delete (plugin_objects);
|
||||
|
||||
_bundle_checked = true;
|
||||
}
|
||||
}
|
||||
|
||||
LV2PluginInfo::LV2PluginInfo (const void* c_plugin)
|
||||
: _c_plugin(c_plugin)
|
||||
{
|
||||
@ -2014,6 +2030,8 @@ LV2PluginInfo::load(Session& session)
|
||||
PluginInfoList*
|
||||
LV2PluginInfo::discover()
|
||||
{
|
||||
_world.load_bundled_plugins();
|
||||
|
||||
PluginInfoList* plugs = new PluginInfoList;
|
||||
const LilvPlugins* plugins = lilv_world_get_all_plugins(_world.world);
|
||||
|
||||
|
@ -116,6 +116,10 @@ PeakMeter::reset ()
|
||||
for (size_t i = 0; i < _peak_signal.size(); ++i) {
|
||||
_peak_signal[i] = 0.0f;
|
||||
}
|
||||
|
||||
for (size_t n = 0; n < _kmeter.size(); ++n) {
|
||||
_kmeter[n]->reset();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -26,10 +26,10 @@
|
||||
#include <fcntl.h>
|
||||
#include <cstdlib>
|
||||
#include <ctime>
|
||||
#include <strings.h> // for ffs(3)
|
||||
#include <sys/stat.h>
|
||||
|
||||
#include "pbd/error.h"
|
||||
#include "pbd/ffs.h"
|
||||
#include "pbd/basename.h"
|
||||
#include <glibmm/threads.h>
|
||||
#include "pbd/xml++.h"
|
||||
@ -438,7 +438,7 @@ MidiDiskstream::process (BufferSet& bufs, framepos_t transport_frame, pframes_t
|
||||
break;
|
||||
case ForceChannel:
|
||||
if (ev.is_channel_event()) {
|
||||
ev.set_channel (ffs(mask) - 1);
|
||||
ev.set_channel (PBD::ffs(mask) - 1);
|
||||
}
|
||||
_capture_buf->write(transport_frame + loop_offset + ev.time(),
|
||||
ev.type(), ev.size(), ev.buffer());
|
||||
|
@ -17,8 +17,7 @@
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#include <strings.h> // for ffs(3)
|
||||
|
||||
#include "pbd/ffs.h"
|
||||
#include "pbd/enumwriter.h"
|
||||
#include "pbd/convert.h"
|
||||
#include "evoral/midi_util.h"
|
||||
@ -330,6 +329,9 @@ MidiTrack::roll (pframes_t nframes, framepos_t start_frame, framepos_t end_frame
|
||||
|
||||
if (!_active) {
|
||||
silence (nframes);
|
||||
if (_meter_point == MeterInput && (_monitoring & MonitorInput || _diskstream->record_enabled())) {
|
||||
_meter->reset();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -354,7 +356,7 @@ MidiTrack::roll (pframes_t nframes, framepos_t start_frame, framepos_t end_frame
|
||||
|
||||
fill_buffers_with_input (bufs, _input, nframes);
|
||||
|
||||
if (_meter_point == MeterInput) {
|
||||
if (_meter_point == MeterInput && (_monitoring & MonitorInput || _diskstream->record_enabled())) {
|
||||
_meter->run (bufs, start_frame, end_frame, nframes, true);
|
||||
}
|
||||
|
||||
@ -504,7 +506,7 @@ MidiTrack::filter_channels (BufferSet& bufs, ChannelMode mode, uint32_t mask)
|
||||
}
|
||||
break;
|
||||
case ForceChannel:
|
||||
ev.set_channel (ffs (mask) - 1);
|
||||
ev.set_channel (PBD::ffs (mask) - 1);
|
||||
++e;
|
||||
break;
|
||||
case AllChannels:
|
||||
|
@ -397,7 +397,7 @@ Plugin::get_state ()
|
||||
add_state (root);
|
||||
#else
|
||||
if (!seen_get_state_message) {
|
||||
info << string_compose (_("Saving AudioUnit settings is not supported in this build of %1. Consider paying for a newer version"),
|
||||
info << string_compose (_("Saving plugin settings is not supported in this build of %1. Consider paying for the full version"),
|
||||
PROGRAM_NAME)
|
||||
<< endmsg;
|
||||
seen_get_state_message = true;
|
||||
|
@ -882,7 +882,12 @@ PluginInsert::set_control_ids (const XMLNode& node, int version)
|
||||
|
||||
if ((prop = (*iter)->property (X_("parameter"))) != 0) {
|
||||
uint32_t p = atoi (prop->value());
|
||||
|
||||
/* this may create the new controllable */
|
||||
|
||||
boost::shared_ptr<Evoral::Control> c = control (Evoral::Parameter (PluginAutomation, 0, p));
|
||||
|
||||
#ifndef NO_PLUGIN_STATE
|
||||
if (!c) {
|
||||
continue;
|
||||
}
|
||||
@ -890,6 +895,7 @@ PluginInsert::set_control_ids (const XMLNode& node, int version)
|
||||
if (ac) {
|
||||
ac->set_state (**iter, version);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -2562,21 +2562,10 @@ Route::set_processor_state (const XMLNode& node)
|
||||
continue;
|
||||
}
|
||||
|
||||
#ifndef NO_PLUGIN_STATE
|
||||
if (processor->set_state (**niter, Stateful::current_state_version) != 0) {
|
||||
/* This processor could not be configured. Turn it into a UnknownProcessor */
|
||||
processor.reset (new UnknownProcessor (_session, **niter));
|
||||
}
|
||||
#else
|
||||
if (boost::dynamic_pointer_cast<PluginInsert>(processor)) {
|
||||
if (processor->set_state (**niter, Stateful::current_state_version) != 0) {
|
||||
/* This processor could not be configured. Turn it into a UnknownProcessor */
|
||||
processor.reset (new UnknownProcessor (_session, **niter));
|
||||
}
|
||||
} else {
|
||||
/* plugin, but ::set_state() not * allowed no message here - things will get too verbose */
|
||||
}
|
||||
#endif
|
||||
|
||||
/* we have to note the monitor send here, otherwise a new one will be created
|
||||
and the state of this one will be lost.
|
||||
|
@ -347,6 +347,9 @@ Track::no_roll (pframes_t nframes, framepos_t start_frame, framepos_t end_frame,
|
||||
|
||||
if (!_active) {
|
||||
silence (nframes);
|
||||
if (_meter_point == MeterInput && (_monitoring & MonitorInput || _diskstream->record_enabled())) {
|
||||
_meter->reset();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -405,8 +408,39 @@ Track::no_roll (pframes_t nframes, framepos_t start_frame, framepos_t end_frame,
|
||||
if (be_silent) {
|
||||
|
||||
if (_meter_point == MeterInput) {
|
||||
/* still need input monitoring */
|
||||
_input->process_input (_meter, start_frame, end_frame, nframes);
|
||||
/* still need input monitoring and metering */
|
||||
|
||||
bool const track_rec = _diskstream->record_enabled ();
|
||||
bool const auto_input = _session.config.get_auto_input ();
|
||||
bool const software_monitor = Config->get_monitoring_model() == SoftwareMonitoring;
|
||||
bool const tape_machine_mode = Config->get_tape_machine_mode ();
|
||||
bool no_meter = false;
|
||||
|
||||
/* this needs a proper K-map
|
||||
* and should be separated into a function similar to monitoring_state()
|
||||
* that also handles roll() states in audio_track.cc, midi_track.cc and route.cc
|
||||
*
|
||||
* see http://www.oofus.co.uk/ardour/Ardour3MonitorModesV3.pdf
|
||||
*/
|
||||
if (!auto_input && !track_rec) {
|
||||
no_meter=true;
|
||||
}
|
||||
else if (tape_machine_mode && !track_rec && auto_input) {
|
||||
no_meter=true;
|
||||
}
|
||||
else if (!software_monitor && tape_machine_mode && !track_rec) {
|
||||
no_meter=true;
|
||||
}
|
||||
else if (!software_monitor && !tape_machine_mode && !track_rec && !auto_input) {
|
||||
no_meter=true;
|
||||
}
|
||||
|
||||
if (no_meter) {
|
||||
_meter->reset();
|
||||
_input->process_input (boost::shared_ptr<Processor>(), start_frame, end_frame, nframes);
|
||||
} else {
|
||||
_input->process_input (_meter, start_frame, end_frame, nframes);
|
||||
}
|
||||
}
|
||||
|
||||
passthru_silence (start_frame, end_frame, nframes, 0);
|
||||
@ -945,6 +979,14 @@ Track::set_monitoring (MonitorChoice mc)
|
||||
MeterState
|
||||
Track::metering_state () const
|
||||
{
|
||||
return (_diskstream->record_enabled() || _meter_point == MeterInput) ? MeteringInput : MeteringRoute;
|
||||
bool rv;
|
||||
if (_session.transport_rolling ()) {
|
||||
// audio_track.cc || midi_track.cc roll() runs meter IFF:
|
||||
rv = _meter_point == MeterInput && (_monitoring & MonitorInput || _diskstream->record_enabled());
|
||||
} else {
|
||||
// track no_roll() always metering if
|
||||
rv = _meter_point == MeterInput;
|
||||
}
|
||||
return rv ? MeteringInput : MeteringRoute;
|
||||
}
|
||||
|
||||
|
@ -197,14 +197,15 @@ int
|
||||
VSTPlugin::set_state (const XMLNode& node, int version)
|
||||
{
|
||||
LocaleGuard lg (X_("POSIX"));
|
||||
int ret = -1;
|
||||
|
||||
if (node.name() != state_node_name()) {
|
||||
error << _("Bad node sent to VSTPlugin::set_state") << endmsg;
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifndef NO_PLUGIN_STATE
|
||||
XMLNode* child;
|
||||
int ret = -1;
|
||||
|
||||
if ((child = find_named_node (node, X_("chunk"))) != 0) {
|
||||
|
||||
@ -237,6 +238,7 @@ VSTPlugin::set_state (const XMLNode& node, int version)
|
||||
ret = 0;
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
Plugin::set_state (node, version);
|
||||
return ret;
|
||||
|
@ -3,6 +3,7 @@
|
||||
|
||||
#include "flag_field.h"
|
||||
|
||||
#include <cstdlib>
|
||||
#include <string>
|
||||
|
||||
#ifdef __GNUC__
|
||||
@ -25,7 +26,7 @@ struct DebugUtils
|
||||
char * res = abi::__cxa_demangle (typeid(obj).name(), 0, 0, &status);
|
||||
if (status == 0) {
|
||||
std::string s(res);
|
||||
free (res);
|
||||
std::free (res);
|
||||
return s;
|
||||
}
|
||||
#endif
|
||||
|
@ -123,7 +123,7 @@ public:
|
||||
return time() < o.time();
|
||||
}
|
||||
|
||||
if (bank != o.bank()) {
|
||||
if (bank() != o.bank()) {
|
||||
return bank() < o.bank();
|
||||
}
|
||||
|
||||
|
@ -24,6 +24,10 @@
|
||||
#include <stdint.h>
|
||||
#include <cstdio>
|
||||
|
||||
#if __clang__
|
||||
#include "evoral/Note.hpp"
|
||||
#endif
|
||||
|
||||
#include "pbd/compose.h"
|
||||
#include "pbd/error.h"
|
||||
|
||||
|
@ -23,6 +23,8 @@
|
||||
#include <algorithm>
|
||||
#include <cstring>
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <gdkmm/rectangle.h>
|
||||
#include <gtkmm2ext/fastmeter.h>
|
||||
#include <gtkmm2ext/utils.h>
|
||||
@ -37,6 +39,7 @@ using namespace std;
|
||||
|
||||
int FastMeter::min_pattern_metric_size = 16;
|
||||
int FastMeter::max_pattern_metric_size = 1024;
|
||||
bool FastMeter::no_rgba_overlay = false;
|
||||
|
||||
FastMeter::Pattern10Map FastMeter::vm_pattern_cache;
|
||||
FastMeter::PatternBgMap FastMeter::vb_pattern_cache;
|
||||
@ -61,6 +64,7 @@ FastMeter::FastMeter (long hold, unsigned long dimen, Orientation o, int len,
|
||||
last_peak_rect.height = 0;
|
||||
|
||||
highlight = false;
|
||||
no_rgba_overlay = ! Glib::getenv("NO_METER_SHADE").empty();
|
||||
|
||||
_clr[0] = clr0;
|
||||
_clr[1] = clr1;
|
||||
@ -173,7 +177,7 @@ FastMeter::generate_meter_pattern (
|
||||
cairo_pattern_add_color_stop_rgb (pat, 1.0,
|
||||
r/255.0, g/255.0, b/255.0);
|
||||
|
||||
if (shade) {
|
||||
if (shade && !no_rgba_overlay) {
|
||||
cairo_pattern_t* shade_pattern = cairo_pattern_create_linear (0.0, 0.0, width, 0.0);
|
||||
cairo_pattern_add_color_stop_rgba (shade_pattern, 0, 1.0, 1.0, 1.0, 0.2);
|
||||
cairo_pattern_add_color_stop_rgba (shade_pattern, 1, 0.0, 0.0, 0.0, 0.3);
|
||||
@ -221,7 +225,7 @@ FastMeter::generate_meter_background (
|
||||
cairo_pattern_add_color_stop_rgb (pat, 1.0,
|
||||
r0/255.0, g0/255.0, b0/255.0);
|
||||
|
||||
if (shade) {
|
||||
if (shade && !no_rgba_overlay) {
|
||||
cairo_pattern_t* shade_pattern = cairo_pattern_create_linear (0.0, 0.0, width, 0.0);
|
||||
cairo_pattern_add_color_stop_rgba (shade_pattern, 0.0, 1.0, 1.0, 1.0, 0.15);
|
||||
cairo_pattern_add_color_stop_rgba (shade_pattern, 0.6, 0.0, 0.0, 0.0, 0.10);
|
||||
@ -417,7 +421,8 @@ FastMeter::vertical_expose (GdkEventExpose* ev)
|
||||
|
||||
cairo_set_source (cr, fgpattern->cobj());
|
||||
cairo_rectangle (cr, 1, last_peak_rect.y, pixwidth, last_peak_rect.height);
|
||||
if (bright_hold) {
|
||||
|
||||
if (bright_hold && !no_rgba_overlay) {
|
||||
cairo_fill_preserve (cr);
|
||||
cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 0.3);
|
||||
}
|
||||
|
@ -96,6 +96,8 @@ private:
|
||||
bool vertical_expose (GdkEventExpose*);
|
||||
void queue_vertical_redraw (const Glib::RefPtr<Gdk::Window>&, float);
|
||||
|
||||
static bool no_rgba_overlay;
|
||||
|
||||
static Cairo::RefPtr<Cairo::Pattern> generate_meter_pattern (
|
||||
int w, int h, int *clr, float *stp, bool shade);
|
||||
static Cairo::RefPtr<Cairo::Pattern> request_vertical_meter (
|
||||
|
@ -48,6 +48,9 @@ PersistentTooltip::~PersistentTooltip ()
|
||||
bool
|
||||
PersistentTooltip::enter (GdkEventCrossing *)
|
||||
{
|
||||
if (_timeout.connected()) {
|
||||
leave(NULL);
|
||||
}
|
||||
_timeout = Glib::signal_timeout().connect (sigc::mem_fun (*this, &PersistentTooltip::timeout), 500);
|
||||
return false;
|
||||
}
|
||||
|
35
libs/pbd/ffs.cc
Normal file
35
libs/pbd/ffs.cc
Normal file
@ -0,0 +1,35 @@
|
||||
/*
|
||||
Copyright (C) 2013 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 "pbd/ffs.h"
|
||||
|
||||
#include <strings.h>
|
||||
|
||||
namespace PBD {
|
||||
int
|
||||
ffs (int x)
|
||||
{
|
||||
#if defined(WIN32) && defined(__GNUC__)
|
||||
return __builtin_ffs(x);
|
||||
#else
|
||||
return ffs(x);
|
||||
#endif
|
||||
}
|
||||
|
||||
}
|
@ -38,7 +38,7 @@ PBD::canonical_path (const std::string& path)
|
||||
{
|
||||
#ifdef COMPILER_MINGW
|
||||
return path;
|
||||
#endif
|
||||
#else
|
||||
char buf[PATH_MAX+1];
|
||||
|
||||
if (!realpath (path.c_str(), buf) && (errno != ENOENT)) {
|
||||
@ -46,6 +46,7 @@ PBD::canonical_path (const std::string& path)
|
||||
}
|
||||
|
||||
return string (buf);
|
||||
#endif
|
||||
}
|
||||
|
||||
string
|
||||
|
27
libs/pbd/pbd/ffs.h
Normal file
27
libs/pbd/pbd/ffs.h
Normal file
@ -0,0 +1,27 @@
|
||||
/*
|
||||
Copyright (C) 2013 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 __libpbd_ffs_h__
|
||||
#define __libpbd_ffs_h__
|
||||
|
||||
namespace PBD {
|
||||
int ffs(int x);
|
||||
}
|
||||
|
||||
#endif /* __libpbd_ffs_h__ */
|
@ -20,11 +20,19 @@
|
||||
#ifndef __libmisc_stl_delete_h__
|
||||
#define __libmisc_stl_delete_h__
|
||||
|
||||
|
||||
#if __clang__ && __APPLE__ && __cplusplus >= 201103L
|
||||
#include <vector>
|
||||
#ifndef _CPP_VECTOR
|
||||
#define _CPP_VECTOR
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* To actually use any of these deletion functions, you need to
|
||||
first include the revelant container type header.
|
||||
*/
|
||||
#if defined(_CPP_VECTOR) || defined(_GLIBCXX_VECTOR) || defined(__SGI_STL_VECTOR)
|
||||
template<class T> void vector_delete (std::vector<T *> *vec)
|
||||
template<class T> void vector_delete (std::vector<T *> *vec)
|
||||
{
|
||||
typename std::vector<T *>::iterator i;
|
||||
|
||||
|
@ -45,6 +45,7 @@ libpbd_sources = [
|
||||
'enums.cc',
|
||||
'epa.cc',
|
||||
'error.cc',
|
||||
'ffs.cc',
|
||||
'file_manager.cc',
|
||||
'file_utils.cc',
|
||||
'fpu.cc',
|
||||
|
66
msvc_extra_headers/je-test.h
Normal file
66
msvc_extra_headers/je-test.h
Normal file
@ -0,0 +1,66 @@
|
||||
#ifndef _TARGETSXS_H_
|
||||
#define _TARGETSXS_H_
|
||||
|
||||
#pragma warning( disable : 4996 )
|
||||
|
||||
#ifndef HAVE_LV2
|
||||
#define HAVE_SUIL
|
||||
#define HAVE_LV2
|
||||
/* Comment out the above lines to build Mixbus without LV2 support */
|
||||
#endif
|
||||
|
||||
#ifndef VST_SUPPORT
|
||||
#define VST_SUPPORT
|
||||
/* Comment out the above line to build Mixbus without VST support */
|
||||
#endif
|
||||
|
||||
#ifndef JACK_32_64
|
||||
#define JACK_32_64
|
||||
/* Shouldn't really be needed but make sure that any structs we
|
||||
obtain from libjack will have 1-byte packing alignment where
|
||||
necessary (belt & braces approach to be on the safe side) */
|
||||
#endif
|
||||
|
||||
#ifdef _DEBUG
|
||||
#define _SECURE_SCL 1
|
||||
#define _HAS_ITERATOR_DEBUGGING 1
|
||||
/* #define to zero for a more conventional Debug build */
|
||||
#endif
|
||||
|
||||
#ifndef __midl
|
||||
#if defined(_DEBUG) || defined (DEBUG)
|
||||
/* Experimental - link to the lowest DebugCRT so we can run on another system */
|
||||
#define _SXS_ASSEMBLY_VERSION "8.0.50727.42"
|
||||
#else
|
||||
#define _SXS_ASSEMBLY_VERSION "8.0.50727.6195"
|
||||
#endif
|
||||
#define _CRT_ASSEMBLY_VERSION _SXS_ASSEMBLY_VERSION
|
||||
#define _MFC_ASSEMBLY_VERSION _SXS_ASSEMBLY_VERSION
|
||||
#define _ATL_ASSEMBLY_VERSION _SXS_ASSEMBLY_VERSION
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
__declspec(selectany) int _forceCRTManifest;
|
||||
__declspec(selectany) int _forceMFCManifest;
|
||||
__declspec(selectany) int _forceAtlDllManifest;
|
||||
__declspec(selectany) int _forceCRTManifestRTM;
|
||||
__declspec(selectany) int _forceMFCManifestRTM;
|
||||
__declspec(selectany) int _forceAtlDllManifestRTM;
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/* 'stdint.h' conflicts with various other libraries so
|
||||
let's #include stdint.h first to ensure one consistent
|
||||
implementation for commonly used integer types. */
|
||||
#include <stdint.h>
|
||||
|
||||
#if (BUILDING_ARDOUR)
|
||||
#if defined(_MSC_VER) && !defined(__MINGW__) && !defined(__MINGW32__)
|
||||
#include <ardourext/misc.h>
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif /*_TARGETSXS_H_*/
|
20
wscript
20
wscript
@ -8,7 +8,7 @@ import subprocess
|
||||
import sys
|
||||
|
||||
MAJOR = '3'
|
||||
MINOR = '2'
|
||||
MINOR = '3'
|
||||
VERSION = MAJOR + '.' + MINOR
|
||||
|
||||
APPNAME = 'Ardour' + MAJOR
|
||||
@ -109,6 +109,22 @@ def set_compiler_flags (conf,opt):
|
||||
|
||||
# waf adds -O0 -g itself. thanks waf!
|
||||
is_clang = conf.env['CXX'][0].endswith('clang++')
|
||||
|
||||
if conf.options.cxx11:
|
||||
conf.check_cxx(cxxflags=["-std=c++11"])
|
||||
conf.env.append_unique('CXXFLAGS', ['-std=c++11'])
|
||||
if platform == "darwin":
|
||||
conf.env.append_unique('CXXFLAGS', ['-stdlib=libc++'])
|
||||
conf.env.append_unique('LINKFLAGS', ['-lc++'])
|
||||
# Prevents visibility issues in standard headers
|
||||
conf.define("_DARWIN_C_SOURCE", 1)
|
||||
|
||||
if is_clang and platform == "darwin":
|
||||
# Silence warnings about the non-existing osx clang compiler flags
|
||||
# -compatibility_version and -current_version. These are Waf
|
||||
# generated and not needed with clang
|
||||
conf.env.append_unique ("CXXFLAGS", ["-Qunused-arguments"])
|
||||
|
||||
if opt.gprofile:
|
||||
debug_flags = [ '-pg' ]
|
||||
|
||||
@ -453,6 +469,8 @@ def options(opt):
|
||||
help='directory where Wine\'s Windows header files can be found')
|
||||
opt.add_option('--noconfirm', action='store_true', default=False, dest='noconfirm',
|
||||
help='Do not ask questions that require confirmation during the build')
|
||||
opt.add_option('--cxx11', action='store_true', default=False, dest='cxx11',
|
||||
help='Turn on c++11 compiler flags (-std=c++11)')
|
||||
for i in children:
|
||||
opt.recurse(i)
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user