summaryrefslogtreecommitdiff
path: root/libs/ardour/speakers.cc
diff options
context:
space:
mode:
authorTim Mayberry <mojofunk@gmail.com>2016-08-25 23:12:58 +1000
committerTim Mayberry <mojofunk@gmail.com>2017-04-19 09:36:49 +1000
commitd1382a20ac73a9dbeea97f97760f3bc82333ddc5 (patch)
tree7d7ef4773f7914a6c470f1f69954dc83c4bf625f /libs/ardour/speakers.cc
parentcd5847300396cb68c9ef393128c7cceb488483fd (diff)
Use XMLNode::get/set_property API in ARDOUR::Speakers class
This will improve the precision of the float conversions and negate the need for a LocaleGuard
Diffstat (limited to 'libs/ardour/speakers.cc')
-rw-r--r--libs/ardour/speakers.cc36
1 files changed, 9 insertions, 27 deletions
diff --git a/libs/ardour/speakers.cc b/libs/ardour/speakers.cc
index 624ad5cee1..1d0bfad778 100644
--- a/libs/ardour/speakers.cc
+++ b/libs/ardour/speakers.cc
@@ -17,7 +17,6 @@
*/
#include "pbd/error.h"
-#include "pbd/convert.h"
#include "pbd/locale_guard.h"
#include "ardour/speaker.h"
@@ -244,18 +243,14 @@ XMLNode&
Speakers::get_state ()
{
XMLNode* node = new XMLNode (X_("Speakers"));
- char buf[32];
LocaleGuard lg;
for (vector<Speaker>::const_iterator i = _speakers.begin(); i != _speakers.end(); ++i) {
XMLNode* speaker = new XMLNode (X_("Speaker"));
- snprintf (buf, sizeof (buf), "%.12g", (*i).angles().azi);
- speaker->add_property (X_("azimuth"), buf);
- snprintf (buf, sizeof (buf), "%.12g", (*i).angles().ele);
- speaker->add_property (X_("elevation"), buf);
- snprintf (buf, sizeof (buf), "%.12g", (*i).angles().length);
- speaker->add_property (X_("distance"), buf);
+ speaker->set_property (X_("azimuth"), (*i).angles().azi);
+ speaker->set_property (X_("elevation"), (*i).angles().ele);
+ speaker->set_property (X_("distance"), (*i).angles().length);
node->add_child_nocopy (*speaker);
}
@@ -267,32 +262,19 @@ int
Speakers::set_state (const XMLNode& node, int /*version*/)
{
XMLNodeConstIterator i;
- XMLProperty const * prop;
- double a, e, d;
LocaleGuard lg;
- int n = 0;
_speakers.clear ();
- for (i = node.children().begin(); i != node.children().end(); ++i, ++n) {
+ for (i = node.children().begin(); i != node.children().end(); ++i) {
if ((*i)->name() == X_("Speaker")) {
- if ((prop = (*i)->property (X_("azimuth"))) == 0) {
- warning << _("Speaker information is missing azimuth - speaker ignored") << endmsg;
+ double a, e, d;
+ if (!(*i)->get_property (X_("azimuth"), a) ||
+ !(*i)->get_property (X_("elevation"), e) ||
+ !(*i)->get_property (X_("distance"), d)) {
+ warning << _("Speaker information is missing - speaker ignored") << endmsg;
continue;
}
- a = atof (prop->value());
-
- if ((prop = (*i)->property (X_("elevation"))) == 0) {
- warning << _("Speaker information is missing elevation - speaker ignored") << endmsg;
- continue;
- }
- e = atof (prop->value());
-
- if ((prop = (*i)->property (X_("distance"))) == 0) {
- warning << _("Speaker information is missing distance - speaker ignored") << endmsg;
- continue;
- }
- d = atof (prop->value());
add_speaker (AngularVector (a, e, d));
}