From 965bfcfaac27218f06019aa078030a1ec9924c22 Mon Sep 17 00:00:00 2001 From: Rinigus Date: Sat, 7 Oct 2017 15:56:50 +0300 Subject: [qt] add ResourceTransform API --- platform/qt/include/qmapboxgl.hpp | 6 ++++++ platform/qt/src/qmapboxgl.cpp | 34 ++++++++++++++++++++++++++++++++++ platform/qt/src/qmapboxgl_p.hpp | 7 +++++++ 3 files changed, 47 insertions(+) diff --git a/platform/qt/include/qmapboxgl.hpp b/platform/qt/include/qmapboxgl.hpp index e2fb283989..ce9cf1778c 100644 --- a/platform/qt/include/qmapboxgl.hpp +++ b/platform/qt/include/qmapboxgl.hpp @@ -10,6 +10,8 @@ #include #include +#include + class QMapboxGLPrivate; // This header follows the Qt coding style: https://wiki.qt.io/Qt_Coding_Style @@ -59,6 +61,9 @@ public: QString apiBaseUrl() const; void setApiBaseUrl(const QString &); + std::function resourceTransform() const; + void setResourceTransform(std::function &); + private: GLContextMode m_contextMode; ConstrainMode m_constrainMode; @@ -69,6 +74,7 @@ private: QString m_assetPath; QString m_accessToken; QString m_apiBaseUrl; + std::function m_resourceTransform; }; struct Q_DECL_EXPORT QMapboxGLCameraOptions { diff --git a/platform/qt/src/qmapboxgl.cpp b/platform/qt/src/qmapboxgl.cpp index e79c6af56a..105e1d8513 100644 --- a/platform/qt/src/qmapboxgl.cpp +++ b/platform/qt/src/qmapboxgl.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #if QT_VERSION >= 0x050000 #include @@ -361,6 +362,27 @@ void QMapboxGLSettings::setApiBaseUrl(const QString& url) m_apiBaseUrl = url; } +/*! + Returns resource transformation callback used to transform requested URLs. +*/ +std::function QMapboxGLSettings::resourceTransform() const +{ + return m_resourceTransform; +} + +/*! + Sets the resource transformation callback. + + When given, resource transformation callback will be used to transform the + requested resource URLs before they are requested from internet. This can be + used add or remove custom parameters, or reroute certain requests to other + servers or endpoints. +*/ +void QMapboxGLSettings::setResourceTransform(std::function &transform) +{ + m_resourceTransform = transform; +} + /*! \class QMapboxGL \brief The QMapboxGL class is a Qt wrapper for the Mapbox GL Native engine. @@ -1499,6 +1521,18 @@ QMapboxGLPrivate::QMapboxGLPrivate(QMapboxGL *q, const QMapboxGLSettings &settin settings.cacheDatabaseMaximumSize())) , threadPool(mbgl::sharedThreadPool()) { + // Setup resource transform if needed + if (settings.resourceTransform()) { + m_resourceTransform = + std::make_unique< mbgl::Actor >( *mbgl::Scheduler::GetCurrent(), + [callback = settings.resourceTransform()] + (mbgl::Resource::Kind , const std::string&& url_) -> std::string { + return callback(std::move(url_)); + } + ); + fileSourceObj->setResourceTransform(m_resourceTransform->self()); + } + // Setup and connect the renderer frontend frontend = std::make_unique( std::make_unique(*this, pixelRatio, *fileSourceObj, *threadPool, diff --git a/platform/qt/src/qmapboxgl_p.hpp b/platform/qt/src/qmapboxgl_p.hpp index eb86870c10..5e12b44a20 100644 --- a/platform/qt/src/qmapboxgl_p.hpp +++ b/platform/qt/src/qmapboxgl_p.hpp @@ -3,15 +3,19 @@ #include "qmapboxgl.hpp" #include "qmapboxgl_renderer_frontend_p.hpp" +#include #include #include #include #include #include +#include #include #include +#include + class QMapboxGLPrivate : public QObject, public mbgl::RendererBackend, public mbgl::MapObserver { Q_OBJECT @@ -68,4 +72,7 @@ signals: void needsRendering(); void mapChanged(QMapboxGL::MapChange); void copyrightsChanged(const QString ©rightsHtml); + +private: + std::unique_ptr< mbgl::Actor > m_resourceTransform; }; -- cgit v1.2.1