Set global locale when parsing with nanosvg - fixes SVG display issues when locale is not English

This commit is contained in:
Vas Crabb 2019-11-05 18:36:51 +11:00
parent addf59de2f
commit 76a2e99d6b

View File

@ -15,8 +15,11 @@
#include <nanosvg/src/nanosvg.h>
#include <nanosvg/src/nanosvgrast.h>
#include <clocale>
#include <set>
//**************************************************************************
// DEBUGGING
//**************************************************************************
@ -91,10 +94,17 @@ private:
screen_device::svg_renderer::svg_renderer(memory_region *region)
{
// nanosvg makes assumptions about the global locale
char *s = new char[region->bytes()+1];
memcpy(s, region->base(), region->bytes());
s[region->bytes()] = 0;
const char *const lcctype(std::setlocale(LC_CTYPE, nullptr));
const char *const lcnumeric(std::setlocale(LC_NUMERIC, nullptr));
std::setlocale(LC_CTYPE, "C");
std::setlocale(LC_NUMERIC, "C");
m_image = nsvgParse(s, "px", 72);
std::setlocale(LC_CTYPE, lcctype);
std::setlocale(LC_NUMERIC, lcnumeric);
delete[] s;
m_rasterizer = nsvgCreateRasterizer();