[core][Qt] Use Qt for UTF16, since codecvt is not always available

This commit is contained in:
Thiago Marcos P. Santos
2016-12-20 15:06:56 -02:00
committed by Thiago Marcos P. Santos
parent cbf28083e6
commit 181b3635f1
8 changed files with 40 additions and 8 deletions

View File

@@ -79,6 +79,7 @@ macro(mbgl_platform_core)
PRIVATE platform/android/src/logging_android.cpp
PRIVATE platform/default/string_stdlib.cpp
PRIVATE platform/default/bidi.cpp
PRIVATE platform/default/utf.cpp
# Image handling
PRIVATE platform/default/image.cpp

16
platform/default/utf.cpp Normal file
View File

@@ -0,0 +1,16 @@
#include <mbgl/util/utf.hpp>
#include <memory>
#include <locale>
#include <codecvt>
namespace mbgl {
namespace util {
std::u16string utf8_to_utf16::convert(std::string const& utf8) {
std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> converter;
return converter.from_bytes(utf8);
}
} // namespace util
} // namespace mbgl

View File

@@ -41,6 +41,7 @@ macro(mbgl_platform_core)
PRIVATE platform/darwin/src/nsthread.mm
PRIVATE platform/darwin/src/string_nsstring.mm
PRIVATE platform/default/bidi.cpp
PRIVATE platform/default/utf.cpp
# Image handling
PRIVATE platform/darwin/src/image.mm

View File

@@ -72,6 +72,7 @@ macro(mbgl_platform_core)
PRIVATE platform/default/string_stdlib.cpp
PRIVATE platform/default/thread.cpp
PRIVATE platform/default/bidi.cpp
PRIVATE platform/default/utf.cpp
# Image handling
PRIVATE platform/default/image.cpp

View File

@@ -37,6 +37,7 @@ macro(mbgl_platform_core)
PRIVATE platform/darwin/src/nsthread.mm
PRIVATE platform/darwin/src/string_nsstring.mm
PRIVATE platform/default/bidi.cpp
PRIVATE platform/default/utf.cpp
# Image handling
PRIVATE platform/darwin/src/image.mm

View File

@@ -48,6 +48,7 @@ set(MBGL_QT_FILES
PRIVATE platform/qt/src/string_stdlib.cpp
PRIVATE platform/qt/src/timer.cpp
PRIVATE platform/qt/src/timer_impl.hpp
PRIVATE platform/qt/src/utf.cpp
)
include_directories(

17
platform/qt/src/utf.cpp Normal file
View File

@@ -0,0 +1,17 @@
#include <mbgl/util/utf.hpp>
#include <QString>
namespace mbgl {
namespace util {
std::u16string utf8_to_utf16::convert(std::string const& utf8) {
auto utf16 = QString::fromUtf8(utf8.data(), utf8.length());
// Newers Qt have QString::toStdU16String(), but this is how it is
// implemented. Do it here to keep compatibility with older versions.
return std::u16string(reinterpret_cast<const char16_t*>(utf16.utf16()), utf16.length());
}
} // namespace util
} // namespace mbgl

View File

@@ -1,19 +1,13 @@
#pragma once
#include <memory>
#include <locale>
#include <codecvt>
#include <string>
namespace mbgl {
namespace util {
class utf8_to_utf16 {
public:
static std::u16string convert(std::string const& utf8) {
std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> converter;
return converter.from_bytes(utf8);
}
static std::u16string convert(std::string const&);
};
} // namespace util