summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2009-10-01 16:35:55 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2009-10-01 16:35:55 +0000
commit02487b57e746e1e52ef970bf111916c6c6026cd3 (patch)
treef543126dad28a54b878714d69d1a10f08702e385
parent8a43a2308381a035004de6043150c2a3a79222b7 (diff)
LADSPA log parameters default values set appropriately and handle localized decimal indicator in BarController (from robsch)
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@5704 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--libs/ardour/ladspa_plugin.cc26
-rw-r--r--libs/gtkmm2ext/barcontroller.cc24
2 files changed, 41 insertions, 9 deletions
diff --git a/libs/ardour/ladspa_plugin.cc b/libs/ardour/ladspa_plugin.cc
index 6a27b8571a..8d81519050 100644
--- a/libs/ardour/ladspa_plugin.cc
+++ b/libs/ardour/ladspa_plugin.cc
@@ -182,34 +182,44 @@ LadspaPlugin::default_value (uint32_t port)
ret = prh[port].LowerBound;
bounds_given = true;
sr_scaling = true;
- earlier_hint = true;
}
/* FIXME: add support for logarithmic defaults */
else if (LADSPA_IS_HINT_DEFAULT_LOW(prh[port].HintDescriptor)) {
- ret = prh[port].LowerBound * 0.75f + prh[port].UpperBound * 0.25f;
+ if (LADSPA_IS_HINT_LOGARITHMIC(prh[port].HintDescriptor)) {
+ ret = exp(log(prh[port].LowerBound) * 0.75f + log(prh[port].UpperBound) * 0.25f);
+ }
+ else {
+ ret = prh[port].LowerBound * 0.75f + prh[port].UpperBound * 0.25f;
+ }
bounds_given = true;
sr_scaling = true;
- earlier_hint = true;
}
else if (LADSPA_IS_HINT_DEFAULT_MIDDLE(prh[port].HintDescriptor)) {
- ret = prh[port].LowerBound * 0.50f + prh[port].UpperBound * 0.50f;
+ if (LADSPA_IS_HINT_LOGARITHMIC(prh[port].HintDescriptor)) {
+ ret = exp(log(prh[port].LowerBound) * 0.5f + log(prh[port].UpperBound) * 0.5f);
+ }
+ else {
+ ret = prh[port].LowerBound * 0.5f + prh[port].UpperBound * 0.5f;
+ }
bounds_given = true;
sr_scaling = true;
- earlier_hint = true;
}
else if (LADSPA_IS_HINT_DEFAULT_HIGH(prh[port].HintDescriptor)) {
- ret = prh[port].LowerBound * 0.25f + prh[port].UpperBound * 0.75f;
+ if (LADSPA_IS_HINT_LOGARITHMIC(prh[port].HintDescriptor)) {
+ ret = exp(log(prh[port].LowerBound) * 0.25f + log(prh[port].UpperBound) * 0.75f);
+ }
+ else {
+ ret = prh[port].LowerBound * 0.25f + prh[port].UpperBound * 0.75f;
+ }
bounds_given = true;
sr_scaling = true;
- earlier_hint = true;
}
else if (LADSPA_IS_HINT_DEFAULT_MAXIMUM(prh[port].HintDescriptor)) {
ret = prh[port].UpperBound;
bounds_given = true;
sr_scaling = true;
- earlier_hint = true;
}
else if (LADSPA_IS_HINT_DEFAULT_0(prh[port].HintDescriptor)) {
ret = 0.0f;
diff --git a/libs/gtkmm2ext/barcontroller.cc b/libs/gtkmm2ext/barcontroller.cc
index 1af639ec6c..775e6b4a8d 100644
--- a/libs/gtkmm2ext/barcontroller.cc
+++ b/libs/gtkmm2ext/barcontroller.cc
@@ -109,6 +109,7 @@ BarController::entry_input (double* new_value)
// extract a double from the string and take its log
Entry *entry = dynamic_cast<Entry *>(&spinner);
stringstream stream(entry->get_text());
+ stream.imbue(std::locale(""));
double value;
stream >> value;
@@ -134,12 +135,33 @@ BarController::entry_output ()
}
// generate the exponential and turn it into a string
+ // convert to correct locale.
+
stringstream stream;
+ string str;
+ size_t found;
+
+ // Gtk.Entry does not like the thousands separator, so we have to
+ // remove it after conversion from float to string.
+
+ stream.imbue(std::locale(""));
stream.precision(spinner.get_digits());
+
stream << fixed << exp(spinner.get_adjustment()->get_value());
+ str=stream.str();
+
+ // find thousands separators, remove them
+ found = str.find(use_facet<numpunct<char> >(std::locale("")).thousands_sep());
+ while(found != str.npos) {
+ str.erase(found,1);
+
+ //find next
+ found = str.find(use_facet<numpunct<char> >(std::locale("")).thousands_sep());
+ }
+
Entry *entry = dynamic_cast<Entry *>(&spinner);
- entry->set_text(stream.str());
+ entry->set_text(str);
return true;
}