summaryrefslogtreecommitdiff
path: root/platform
diff options
context:
space:
mode:
authorBruno de Oliveira Abinader <bruno@mapbox.com>2016-12-12 16:50:48 +0200
committerBruno de Oliveira Abinader <bruno@mapbox.com>2016-12-12 22:34:52 +0200
commitb65b2f1c299eb545ae0dab454c51f11c5833fdd8 (patch)
treedc5d610af16e4a4397bfc5dc7651073e1490fe03 /platform
parentc0e18ad80c56d6197cb0e5f1e29384ad54491dbb (diff)
downloadqtlocation-mapboxgl-b65b2f1c299eb545ae0dab454c51f11c5833fdd8.tar.gz
[qt] Skip ICU if WITH_QT_I18N is set
Diffstat (limited to 'platform')
-rw-r--r--platform/qt/config.cmake12
-rw-r--r--platform/qt/qt.cmake2
-rw-r--r--platform/qt/src/bidi.cpp56
3 files changed, 67 insertions, 3 deletions
diff --git a/platform/qt/config.cmake b/platform/qt/config.cmake
index f6b7d509f8..f2beedcfa2 100644
--- a/platform/qt/config.cmake
+++ b/platform/qt/config.cmake
@@ -2,7 +2,6 @@ include(platform/qt/qt.cmake)
mason_use(sqlite VERSION 3.14.2)
mason_use(gtest VERSION 1.7.0${MASON_CXXABI_SUFFIX})
-mason_use(icu VERSION 58.1)
if(NOT WITH_QT_DECODERS)
mason_use(libjpeg-turbo VERSION 1.5.0)
@@ -10,6 +9,10 @@ if(NOT WITH_QT_DECODERS)
mason_use(webp VERSION 0.5.1)
endif()
+if(NOT WITH_QT_I18N)
+ mason_use(icu VERSION 58.1)
+endif()
+
macro(mbgl_platform_core)
target_sources(mbgl-core
${MBGL_QT_FILES}
@@ -40,7 +43,12 @@ macro(mbgl_platform_core)
add_definitions(-DQT_IMAGE_DECODERS)
endif()
- target_add_mason_package(mbgl-core PRIVATE icu)
+ if(NOT WITH_QT_I18N)
+ target_sources(mbgl-core PRIVATE platform/default/bidi.cpp)
+ target_add_mason_package(mbgl-core PRIVATE icu)
+ else()
+ target_sources(mbgl-core PRIVATE platform/qt/src/bidi.cpp)
+ endif()
endmacro()
diff --git a/platform/qt/qt.cmake b/platform/qt/qt.cmake
index c640ca5689..2950e1fb15 100644
--- a/platform/qt/qt.cmake
+++ b/platform/qt/qt.cmake
@@ -2,6 +2,7 @@
# support `mason` (i.e. Yocto). Do not add any `mason` macro.
option(WITH_QT_DECODERS "Use builtin Qt image decoders" OFF)
+option(WITH_QT_I18N "Use builtin Qt i18n support" OFF)
option(WITH_QT_4 "Use Qt4 instead of Qt5" OFF)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fvisibility=hidden -D__QT__")
@@ -29,7 +30,6 @@ set(MBGL_QT_FILES
# Misc
PRIVATE platform/default/logging_stderr.cpp
- PRIVATE platform/default/bidi.cpp
# Thread pool
PRIVATE platform/default/mbgl/util/default_thread_pool.cpp
diff --git a/platform/qt/src/bidi.cpp b/platform/qt/src/bidi.cpp
new file mode 100644
index 0000000000..99f09e8ef8
--- /dev/null
+++ b/platform/qt/src/bidi.cpp
@@ -0,0 +1,56 @@
+#include <memory>
+
+#include <mbgl/text/bidi.hpp>
+
+#include <QString>
+
+namespace mbgl {
+
+class BiDiImpl {
+public:
+ QString string;
+};
+
+std::u16string applyArabicShaping(const std::u16string& input) {
+ QString utf16string = QString::fromStdU16String(input);
+ return utf16string.toStdU16String();
+}
+
+ProcessedBiDiText::ProcessedBiDiText(BiDi& p_bidi) : bidi(p_bidi) {
+}
+
+void ProcessedBiDiText::mergeParagraphLineBreaks(std::set<int32_t>& lineBreakPoints) {
+ lineBreakPoints.insert(impl->string.length());
+}
+
+std::vector<std::u16string>
+ProcessedBiDiText::applyLineBreaking(std::set<int32_t> lineBreakPoints) {
+ mergeParagraphLineBreaks(lineBreakPoints);
+
+ std::vector<std::u16string> transformedLines;
+ int32_t start = 0;
+ for (int32_t lineBreakPoint : lineBreakPoints) {
+ transformedLines.push_back(bidi.getLine(start, lineBreakPoint));
+ start = lineBreakPoint;
+ }
+
+ return transformedLines;
+}
+
+BiDi::BiDi() : impl(std::make_unique<BiDiImpl>())
+{
+}
+
+BiDi::~BiDi() {
+}
+
+ProcessedBiDiText BiDi::processText(const std::u16string& input) {
+ impl->string = QString::fromStdU16String(input);
+ return ProcessedBiDiText(*this);
+}
+
+std::u16string BiDi::getLine(int32_t start, int32_t end) {
+ return impl->string.mid(start, end - start).toStdU16String();
+}
+
+} // end namespace mbgl