From 02487b57e746e1e52ef970bf111916c6c6026cd3 Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Thu, 1 Oct 2009 16:35:55 +0000 Subject: 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 --- libs/ardour/ladspa_plugin.cc | 26 ++++++++++++++++++-------- libs/gtkmm2ext/barcontroller.cc | 24 +++++++++++++++++++++++- 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(&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 >(std::locale("")).thousands_sep()); + while(found != str.npos) { + str.erase(found,1); + + //find next + found = str.find(use_facet >(std::locale("")).thousands_sep()); + } + Entry *entry = dynamic_cast(&spinner); - entry->set_text(stream.str()); + entry->set_text(str); return true; } -- cgit v1.2.3