"boot" messages; more AU fixes; new SAE ui.conf file

git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@3049 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2008-02-13 16:38:14 +00:00
parent b248526fe3
commit 35b9bf0567
17 changed files with 294 additions and 142 deletions

View File

@ -0,0 +1,95 @@
<?xml version="1.0" encoding="UTF-8"?>
<Ardour>
<Canvas>
<Option name="active crossfade" value="e8ed3d77"/>
<Option name="audio bus base" value="dbd1ea68"/>
<Option name="audio track base" value="c6d3d868"/>
<Option name="automation line" value="44bc59ff"/>
<Option name="automation track fill" value="a0a0ce68"/>
<Option name="automation track outline" value="282828ff"/>
<Option name="cdmarkerbar" value="9090a3ff"/>
<Option name="clipped waveform" value="ff0000e5"/>
<Option name="control point fill" value="000000ff"/>
<Option name="control point outline" value="000000ff"/>
<Option name="control point selected" value="00ff00ff"/>
<Option name="control point" value="ff0000ff"/>
<Option name="crossfade editor base" value="282d49ff"/>
<Option name="crossfade editor line shading" value="00a0d154"/>
<Option name="crossfade editor line" value="000000ff"/>
<Option name="crossfade editor point fill" value="00ff00ff"/>
<Option name="crossfade editor point outline" value="0000ffff"/>
<Option name="crossfade editor wave" value="ffffff28"/>
<Option name="crossfade line" value="000000ff"/>
<Option name="EditPoint" value="0000ffff"/>
<Option name="EnteredAutomationLine" value="dd6363ff"/>
<Option name="entered control point outline" value="ff0000ee"/>
<Option name="entered control point selected" value="ff3535ff"/>
<Option name="entered control point" value="000000cc"/>
<Option name="EnteredGainLine" value="dd6363ff"/>
<Option name="EnteredMarker" value="dd6363ff"/>
<Option name="FrameHandle" value="7c00ff96"/>
<Option name="GainLineInactive" value="9fbca4c5"/>
<Option name="GainLine" value="00bc20ff"/>
<Option name="GhostTrackBase" value="44007c7f"/>
<Option name="GhostTrackWaveClip" value="ff000000"/>
<Option name="GhostTrackWave" value="02fd004c"/>
<Option name="GhostTrackZeroLine" value="e500e566"/>
<Option name="ImageTrack" value="ddddd8ff"/>
<Option name="inactive crossfade" value="e8ed3d77"/>
<Option name="location cd marker" value="1ee8c4ff"/>
<Option name="location loop" value="35964fff"/>
<Option name="location marker" value="c4f411ff"/>
<Option name="location punch" value="7c3a3aff"/>
<Option name="location range" value="497a59ff"/>
<Option name="marker bar separator" value="30303088"/>
<Option name="markerbar" value="9898a3ff"/>
<Option name="MarkerDragLine" value="004f00f9"/>
<Option name="marker label" value="000000ff"/>
<Option name="MarkerTrack" value="ddddd8ff"/>
<Option name="MeasureLineBar" value="8c8c988c"/>
<Option name="MeasureLineBeat" value="72727266"/>
<Option name="meterbar" value="666672ff"/>
<Option name="MeterColorBase" value="0000ffff"/>
<Option name="MeterColorClip" value="ff0000ff"/>
<Option name="MeterColorMid" value="73f9baff"/>
<Option name="MeterColorTop" value="00fd5dff"/>
<Option name="MeterMarker" value="f2425bff"/>
<Option name="midi bus base" value="ff0000ee"/>
<Option name="midi track base" value="ff8f8f3d"/>
<Option name="NameHighlightFill" value="0000ffff"/>
<Option name="NameHighlightOutline" value="7c00ff96"/>
<Option name="PlayHead" value="ff0000ff"/>
<Option name="processor automation line" value="7aa3f9ff"/>
<Option name="PunchLine" value="a80000ff"/>
<Option name="RangeDragBarRect" value="969696c6"/>
<Option name="RangeDragRect" value="82c696c6"/>
<Option name="rangemarker bar" value="7f7f8cff"/>
<Option name="RecordingRect" value="e5c6c6ff"/>
<Option name="region base" value="99a7b584"/>
<Option name="RubberBandRect" value="c6c6c659"/>
<Option name="selected crossfade editor line" value="00dbdbff"/>
<Option name="selected crossfade editor wave" value="f9ea14a0"/>
<Option name="selected region base" value="130505ff"/>
<Option name="selected waveform fill" value="e6e6fac8"/>
<Option name="selected waveform outline" value="1a1a1acc"/>
<Option name="SelectionRect" value="e8f4d377"/>
<Option name="Selection" value="636363b2"/>
<Option name="tempo bar" value="72727fff"/>
<Option name="TempoMarker" value="f2425bff"/>
<Option name="TimeAxisFrame" value="000000cb"/>
<Option name="time-stretch-fill" value="e2b5b596"/>
<Option name="time-stretch-outline" value="63636396"/>
<Option name="TransportDragRect" value="969696c6"/>
<Option name="TransportLoopRect" value="1e7728f9"/>
<Option name="TransportMarkerBar" value="8c8c96ff"/>
<Option name="TransportPunchRect" value="6d2828e5"/>
<Option name="TrimHandleLocked" value="ea0f0f28"/>
<Option name="TrimHandle" value="1900ff44"/>
<Option name="verbose canvas cursor" value="f4f214bc"/>
<Option name="VestigialFrame" value="00000092"/>
<Option name="waveform fill" value="3d475378"/>
<Option name="waveform outline" value="0f0f0fcc"/>
<Option name="ZeroLine" value="bdbdbd8d"/>
<Option name="ZoomRect" value="c6d1b26d"/>
</Canvas>
</Ardour>

View File

@ -162,10 +162,6 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[])
_auto_display_errors = false;
#endif
if (getenv ("ARDOUR_DEBUG_UPDATES")) {
gdk_window_set_debug_updates (true);
}
about = 0;
splash = 0;

View File

@ -4371,39 +4371,40 @@ Editor::get_regions_for_action (RegionSelection& rs, bool allow_entered)
rs.add (entered_regionview);
return;
}
}
} else {
use_regions_at = false;
}
rs = selection->regions;
} else {
/* consider adding the entered regionview */
/* no regions selected, so get all regions at the edit point across
all selected tracks.
*/
if (allow_entered && entered_regionview && (mouse_mode == Editing::MouseObject)) {
/* only add the entered regionview if its not selected OR
(we're not going to use regions at edit point OR its track is not selected)
this avoids duplicate regions ending up in "rs"
*/
if (!selection->selected (entered_regionview) &&
(!use_regions_at || !selection->selected (&entered_regionview->get_time_axis_view()))) {
rs.add (entered_regionview);
}
}
if (use_regions_at) {
/* nothing selected, so get all regions at the edit point across
all selected tracks
*/
if (!selection->tracks.empty()) {
nframes64_t where = get_preferred_edit_position();
get_regions_at (rs, where, selection->tracks);
/* if the entered regionview wasn't selected and neither was its track
then add it.
*/
if (!selection->selected (entered_regionview) &&
!selection->selected (&entered_regionview->get_time_axis_view())) {
rs.add (entered_regionview);
}
}
} else {
/* just use the selected regions */
rs = selection->regions;
/* if the entered regionview wasn't selected and we allow this sort of thing,
then add it.
*/
if (allow_entered && entered_regionview && !selection->selected (entered_regionview)) {
rs.add (entered_regionview);
}
}
}

View File

@ -2062,7 +2062,7 @@ public:
void get_regions_at (RegionSelection&, nframes64_t where, const TrackSelection& ts) const;
void get_regions_after (RegionSelection&, nframes64_t where, const TrackSelection& ts) const;
void get_regions_for_action (RegionSelection&, bool allowed_entered_regionview = true);
void get_regions_for_action (RegionSelection&, bool allowed_entered_regionview = false);
sigc::connection fast_screen_update_connection;
gint start_updating ();

View File

@ -402,6 +402,7 @@ RedirectBox::insert_plugin_chosen (boost::shared_ptr<Plugin> plugin)
if (_route->add_redirect (redirect, this, &err_streams)) {
weird_plugin_dialog (*plugin, err_streams, _route);
} else {
redirect->set_active (true, 0);
redirect->active_changed.connect (bind (mem_fun (*this, &RedirectBox::show_redirect_active_r), boost::weak_ptr<Redirect>(redirect)));
}
}

View File

@ -3,6 +3,7 @@
#include <pbd/failed_constructor.h>
#include <ardour/ardour.h>
#include "gui_thread.h"
#include "splash.h"
#include "i18n.h"
@ -50,6 +51,8 @@ Splash::Splash ()
set_default_size (pixbuf->get_width(), pixbuf->get_height());
the_splash = this;
ARDOUR::BootMessage.connect (mem_fun (*this, &Splash::boot_message));
}
void
@ -93,11 +96,18 @@ Splash::expose (GdkEventExpose* ev)
Glib::RefPtr<Gtk::Style> style = darea.get_style();
Glib::RefPtr<Gdk::GC> white = style->get_white_gc();
cerr << "redraw in expose\n";
window->draw_layout (white, 10, pixbuf->get_height() - 30, layout);
return true;
}
void
Splash::boot_message (std::string msg)
{
message (msg);
}
void
Splash::message (const string& msg)
{
@ -107,5 +117,9 @@ Splash::message (const string& msg)
layout->set_markup (str);
darea.queue_draw ();
get_window()->process_updates (true);
Glib::RefPtr<Gdk::Window> win = get_window();
if (win) {
win->process_updates (true);
}
}

View File

@ -50,6 +50,8 @@ class Splash : public Gtk::Window
Glib::RefPtr<Gdk::Pixbuf> pixbuf;
Gtk::DrawingArea darea;
Glib::RefPtr<Pango::Layout> layout;
void boot_message (std::string);
};
#endif /* __ardour_gtk_splash_h__ */

View File

@ -57,10 +57,19 @@ int
UIConfiguration::load_defaults ()
{
int found = 0;
std::string rcfile = find_config_file ("ardour2_ui_default.conf");
if (rcfile.length())
{
std::string rcfile;
const char* ui_conf;
ui_conf = getenv ("ARDOUR_UI_CONF");
if (ui_conf && ui_conf[0] != '\0') {
rcfile = find_config_file (ui_conf);
} else {
rcfile = find_config_file ("ardour2_ui_default.conf");
}
if (rcfile.length()) {
XMLTree tree;
found = 1;

View File

@ -43,6 +43,7 @@ namespace ARDOUR {
extern OSC* osc;
static const nframes_t max_frames = JACK_MAX_FRAMES;
extern sigc::signal<void,std::string> BootMessage;
int init (bool with_vst, bool try_optimization);
int cleanup ();

View File

@ -52,6 +52,7 @@ struct AUParameterDescriptor : public Plugin::ParameterDescriptor {
AudioUnitScope scope;
AudioUnitElement element;
float default_value;
bool automatable;
};
class AUPlugin : public ARDOUR::Plugin
@ -113,7 +114,6 @@ class AUPlugin : public ARDOUR::Plugin
private:
boost::shared_ptr<CAComponent> comp;
boost::shared_ptr<CAAudioUnit> unit;
AUParamInfo* param_info;
AudioStreamBasicDescription streamFormat;
bool initialized;
@ -128,6 +128,7 @@ class AUPlugin : public ARDOUR::Plugin
int set_input_format ();
int set_stream_format (int scope, uint32_t cnt);
int _set_block_size (nframes_t nframes);
void discover_parameters ();
std::vector<std::pair<uint32_t, uint32_t> > parameter_map;
uint32_t current_maxbuf;
@ -135,7 +136,7 @@ class AUPlugin : public ARDOUR::Plugin
nframes_t cb_offset;
vector<Sample*>* current_buffers;
nframes_t frames_processed;
std::vector<AUParameterDescriptor> descriptors;
};

View File

@ -59,7 +59,6 @@ AUPlugin::AUPlugin (AudioEngine& engine, Session& session, boost::shared_ptr<CAC
Plugin (engine, session),
comp (_comp),
unit (new CAAudioUnit),
param_info (0),
initialized (false),
buffers (0),
current_maxbuf (0),
@ -110,99 +109,9 @@ AUPlugin::AUPlugin (AudioEngine& engine, Session& session, boost::shared_ptr<CAC
throw failed_constructor();
}
/* discover writable parameters */
cerr << "get param info, there are " << global_elements << " global elements\n";
discover_parameters ();
param_info = new AUParamInfo (unit->AU(), false, false, kAudioUnitScope_Global);
cerr << "discovered " << param_info->NumParams() << " parameters\n";
for (uint32_t i = 0; i < param_info->NumParams(); ++i) {
AUParameterDescriptor d;
d.id = param_info->ParamID (i);
const CAAUParameter* param = param_info->GetParamInfo (d.id);
const AudioUnitParameterInfo& info (param->ParamInfo());
d.scope = param_info->GetScope ();
d.element = param_info->GetElement ();
/* info.units to consider */
/*
kAudioUnitParameterUnit_Generic = 0
kAudioUnitParameterUnit_Indexed = 1
kAudioUnitParameterUnit_Boolean = 2
kAudioUnitParameterUnit_Percent = 3
kAudioUnitParameterUnit_Seconds = 4
kAudioUnitParameterUnit_SampleFrames = 5
kAudioUnitParameterUnit_Phase = 6
kAudioUnitParameterUnit_Rate = 7
kAudioUnitParameterUnit_Hertz = 8
kAudioUnitParameterUnit_Cents = 9
kAudioUnitParameterUnit_RelativeSemiTones = 10
kAudioUnitParameterUnit_MIDINoteNumber = 11
kAudioUnitParameterUnit_MIDIController = 12
kAudioUnitParameterUnit_Decibels = 13
kAudioUnitParameterUnit_LinearGain = 14
kAudioUnitParameterUnit_Degrees = 15
kAudioUnitParameterUnit_EqualPowerCrossfade = 16
kAudioUnitParameterUnit_MixerFaderCurve1 = 17
kAudioUnitParameterUnit_Pan = 18
kAudioUnitParameterUnit_Meters = 19
kAudioUnitParameterUnit_AbsoluteCents = 20
kAudioUnitParameterUnit_Octaves = 21
kAudioUnitParameterUnit_BPM = 22
kAudioUnitParameterUnit_Beats = 23
kAudioUnitParameterUnit_Milliseconds = 24
kAudioUnitParameterUnit_Ratio = 25
*/
/* info.flags to consider */
/*
kAudioUnitParameterFlag_CFNameRelease = (1L << 4)
kAudioUnitParameterFlag_HasClump = (1L << 20)
kAudioUnitParameterFlag_HasName = (1L << 21)
kAudioUnitParameterFlag_DisplayLogarithmic = (1L << 22)
kAudioUnitParameterFlag_IsHighResolution = (1L << 23)
kAudioUnitParameterFlag_NonRealTime = (1L << 24)
kAudioUnitParameterFlag_CanRamp = (1L << 25)
kAudioUnitParameterFlag_ExpertMode = (1L << 26)
kAudioUnitParameterFlag_HasCFNameString = (1L << 27)
kAudioUnitParameterFlag_IsGlobalMeta = (1L << 28)
kAudioUnitParameterFlag_IsElementMeta = (1L << 29)
kAudioUnitParameterFlag_IsReadable = (1L << 30)
kAudioUnitParameterFlag_IsWritable = (1L << 31)
*/
d.integer_step = false;
d.toggled = false;
d.logarithmic = false;
d.sr_dependent = false;
const int len = CFStringGetLength (param->GetName());;
char local_buffer[len*2];
Boolean good = CFStringGetCString(param->GetName(),local_buffer,len*2,kCFStringEncodingMacRoman);
if (!good) {
d.label = "???";
} else {
d.label = local_buffer;
}
d.lower = info.minValue;
d.upper = info.maxValue;
d.default_value = info.defaultValue;
d.step = 1.0;
d.smallstep = 0.1;
d.largestep = 10.0;
d.min_unbound = d.lower;
d.max_unbound = d.upper;
descriptors.push_back (d);
}
Plugin::setup_controls ();
}
AUPlugin::~AUPlugin ()
@ -211,15 +120,124 @@ AUPlugin::~AUPlugin ()
unit->Uninitialize ();
}
if (param_info) {
delete param_info;
}
if (buffers) {
free (buffers);
}
}
void
AUPlugin::discover_parameters ()
{
/* discover writable parameters */
cerr << "get param info, there are " << global_elements << " global elements\n";
AudioUnitScope scopes[] = {
kAudioUnitScope_Global,
kAudioUnitScope_Output,
kAudioUnitScope_Input
};
descriptors.clear ();
for (uint32_t i = 0; i < sizeof (scopes) / sizeof (scopes[0]); ++i) {
AUParamInfo param_info (unit->AU(), false, false, scopes[i]);
cerr << "discovered " << param_info.NumParams() << " parameters in scope " << i << endl;
for (uint32_t i = 0; i < param_info.NumParams(); ++i) {
AUParameterDescriptor d;
d.id = param_info.ParamID (i);
const CAAUParameter* param = param_info.GetParamInfo (d.id);
const AudioUnitParameterInfo& info (param->ParamInfo());
d.scope = param_info.GetScope ();
d.element = param_info.GetElement ();
/* info.units to consider */
/*
kAudioUnitParameterUnit_Generic = 0
kAudioUnitParameterUnit_Indexed = 1
kAudioUnitParameterUnit_Boolean = 2
kAudioUnitParameterUnit_Percent = 3
kAudioUnitParameterUnit_Seconds = 4
kAudioUnitParameterUnit_SampleFrames = 5
kAudioUnitParameterUnit_Phase = 6
kAudioUnitParameterUnit_Rate = 7
kAudioUnitParameterUnit_Hertz = 8
kAudioUnitParameterUnit_Cents = 9
kAudioUnitParameterUnit_RelativeSemiTones = 10
kAudioUnitParameterUnit_MIDINoteNumber = 11
kAudioUnitParameterUnit_MIDIController = 12
kAudioUnitParameterUnit_Decibels = 13
kAudioUnitParameterUnit_LinearGain = 14
kAudioUnitParameterUnit_Degrees = 15
kAudioUnitParameterUnit_EqualPowerCrossfade = 16
kAudioUnitParameterUnit_MixerFaderCurve1 = 17
kAudioUnitParameterUnit_Pan = 18
kAudioUnitParameterUnit_Meters = 19
kAudioUnitParameterUnit_AbsoluteCents = 20
kAudioUnitParameterUnit_Octaves = 21
kAudioUnitParameterUnit_BPM = 22
kAudioUnitParameterUnit_Beats = 23
kAudioUnitParameterUnit_Milliseconds = 24
kAudioUnitParameterUnit_Ratio = 25
*/
/* info.flags to consider */
/*
kAudioUnitParameterFlag_CFNameRelease = (1L << 4)
kAudioUnitParameterFlag_HasClump = (1L << 20)
kAudioUnitParameterFlag_HasName = (1L << 21)
kAudioUnitParameterFlag_DisplayLogarithmic = (1L << 22)
kAudioUnitParameterFlag_IsHighResolution = (1L << 23)
kAudioUnitParameterFlag_NonRealTime = (1L << 24)
kAudioUnitParameterFlag_CanRamp = (1L << 25)
kAudioUnitParameterFlag_ExpertMode = (1L << 26)
kAudioUnitParameterFlag_HasCFNameString = (1L << 27)
kAudioUnitParameterFlag_IsGlobalMeta = (1L << 28)
kAudioUnitParameterFlag_IsElementMeta = (1L << 29)
kAudioUnitParameterFlag_IsReadable = (1L << 30)
kAudioUnitParameterFlag_IsWritable = (1L << 31)
*/
d.integer_step = (info.unit & kAudioUnitParameterUnit_Indexed);
d.toggled = (info.unit & kAudioUnitParameterUnit_Boolean);
d.sr_dependent = (info.unit & kAudioUnitParameterUnit_SampleFrames);
d.automatable = !(info.flags & kAudioUnitParameterFlag_NonRealTime);
d.logarithmic = (info.flags & kAudioUnitParameterFlag_DisplayLogarithmic);
const int len = CFStringGetLength (param->GetName());;
char local_buffer[len*2];
Boolean good = CFStringGetCString(param->GetName(),local_buffer,len*2,kCFStringEncodingMacRoman);
if (!good) {
d.label = "???";
} else {
d.label = local_buffer;
}
d.lower = info.minValue;
d.upper = info.maxValue;
d.default_value = info.defaultValue;
d.step = 1.0;
d.smallstep = 0.1;
d.largestep = 10.0;
d.min_unbound = 0; // lower is bound
d.max_unbound = 0; // upper is bound
descriptors.push_back (d);
}
}
}
string
AUPlugin::unique_id () const
{
@ -235,7 +253,7 @@ AUPlugin::label () const
uint32_t
AUPlugin::parameter_count () const
{
return param_info->NumParams ();
return descriptors.size();
}
float
@ -508,7 +526,9 @@ AUPlugin::automatable() const
set<uint32_t> automates;
for (uint32_t i = 0; i < descriptors.size(); ++i) {
automates.insert (i);
if (descriptors[i].automatable) {
automates.insert (i);
}
}
return automates;

View File

@ -94,6 +94,8 @@ Change ARDOUR::PositionChanged = ARDOUR::new_change ();
Change ARDOUR::NameChanged = ARDOUR::new_change ();
Change ARDOUR::BoundsChanged = Change (0); // see init(), below
sigc::signal<void,std::string> ARDOUR::BootMessage;
#ifdef HAVE_LIBLO
static int
setup_osc ()
@ -105,6 +107,7 @@ setup_osc ()
osc = new OSC (Config->get_osc_port());
if (Config->get_use_osc ()) {
BootMessage (_("Starting OSC"));
return osc->start ();
} else {
return 0;
@ -120,6 +123,8 @@ setup_midi ()
return 0;
}
BootMessage (_("Configuring MIDI ports"));
for (std::map<string,XMLNode>::iterator i = Config->midi_ports.begin(); i != Config->midi_ports.end(); ++i) {
MIDI::Manager::instance()->add_port (i->second);
}
@ -294,6 +299,8 @@ ARDOUR::init (bool use_vst, bool try_optimization)
lrdf_init();
Library = new AudioLibrary;
BootMessage (_("Loading configuration"));
Config = new Configuration;
if (Config->load_state ()) {

View File

@ -41,6 +41,7 @@
#include <ardour/panner.h>
#include <ardour/dB.h>
#include <ardour/mix.h>
#include <ardour/profile.h>
#include "i18n.h"
@ -916,8 +917,8 @@ Route::add_redirect (boost::shared_ptr<Redirect> redirect, void *src, uint32_t*
reset_panner ();
}
redirects_changed (src); /* EMIT SIGNAL */
return 0;
}

View File

@ -1380,6 +1380,8 @@ Session::load_routes (const XMLNode& node)
return -1;
}
BootMessage (string_compose (_("Loaded track/bus %1"), route->name()));
new_routes.push_back (route);
}

View File

@ -8,7 +8,7 @@ void
disable_screen_updates ()
{
#ifdef GTKOSX
NSDisableScreenUpdates ();
// NSDisableScreenUpdates ();
#endif
}
@ -16,6 +16,6 @@ void
enable_screen_updates ()
{
#ifdef GTKOSX
NSEnableScreenUpdates();
// NSEnableScreenUpdates();
#endif
}

View File

@ -1,4 +1,4 @@
#ifndef __ardour_svn_revision_h__
#define __ardour_svn_revision_h__
static const char* ardour_svn_revision = "3045";
static const char* ardour_svn_revision = "3046";
#endif

View File

@ -86,6 +86,7 @@ if test x$SAE != x ; then
# current default for SAE version is German keyboard layout
#
env="$env<key>ARDOUR_KEYBOARD_LAYOUT</key><string>de</string>"
env="$env<key>ARDOUR_UI_CONF</key><string>ardour2_ui_sae.conf</string>"
fi
#
@ -201,6 +202,7 @@ cp ../../gtk2_ardour/ardour-sae-de.bindings $Resources
cp ../../gtk2_ardour/ardour.menus $Resources
cp ../../gtk2_ardour/ardour-sae.menus $Resources
cp ../../ardour_system.rc $Resources
cp ../../gtk2_ardour/ardour2_ui_sae.conf $Resources
cp ../../gtk2_ardour/ardour2_ui_default.conf $Resources
cp ../../gtk2_ardour/ardour2_ui_light.rc $Resources
cp ../../gtk2_ardour/ardour2_ui_dark.rc $Resources