summaryrefslogtreecommitdiff
path: root/platform/qt
diff options
context:
space:
mode:
Diffstat (limited to 'platform/qt')
-rw-r--r--platform/qt/config.cmake28
-rw-r--r--platform/qt/include/qmapboxgl.hpp6
-rw-r--r--platform/qt/qt.cmake75
-rw-r--r--platform/qt/qt4.cmake25
-rw-r--r--platform/qt/qt5.cmake28
-rw-r--r--platform/qt/src/headless_backend_qt.cpp (renamed from platform/qt/test/headless_backend_qt.cpp)0
-rw-r--r--platform/qt/src/http_request.cpp4
-rw-r--r--platform/qt/src/qmapboxgl.cpp47
-rw-r--r--platform/qt/src/qmapboxgl_p.hpp9
-rw-r--r--platform/qt/src/run_loop.cpp16
-rw-r--r--platform/qt/src/sqlite3.cpp1
-rw-r--r--platform/qt/src/thread_local.cpp4
-rw-r--r--platform/qt/test/qmapboxgl.cpp99
-rw-r--r--platform/qt/test/qmapboxgl.test.cpp77
-rw-r--r--platform/qt/test/qmapboxgl.test.hpp36
15 files changed, 258 insertions, 197 deletions
diff --git a/platform/qt/config.cmake b/platform/qt/config.cmake
index 732fb1de28..a7fdbf3542 100644
--- a/platform/qt/config.cmake
+++ b/platform/qt/config.cmake
@@ -15,7 +15,7 @@ endif()
macro(mbgl_platform_core)
target_sources(mbgl-core
- ${MBGL_QT_FILES}
+ ${MBGL_QT_CORE_FILES}
)
target_include_directories(mbgl-core
@@ -24,7 +24,7 @@ macro(mbgl_platform_core)
)
target_link_libraries(mbgl-core
- ${MBGL_QT_LIBRARIES}
+ ${MBGL_QT_CORE_LIBRARIES}
)
if(NOT WITH_QT_DECODERS)
@@ -50,17 +50,23 @@ macro(mbgl_platform_core)
endmacro()
+
+macro(mbgl_filesource)
+ target_sources(mbgl-filesource
+ ${MBGL_QT_FILESOURCE_FILES}
+ )
+
+ target_link_libraries(mbgl-filesource
+ ${MBGL_QT_FILESOURCE_LIBRARIES}
+ )
+endmacro()
+
+
macro(mbgl_platform_test)
target_sources(mbgl-test
- PRIVATE platform/default/mbgl/gl/headless_frontend.cpp
- PRIVATE platform/default/mbgl/gl/headless_frontend.hpp
- PRIVATE platform/default/mbgl/gl/headless_backend.cpp
- PRIVATE platform/default/mbgl/gl/headless_backend.hpp
- PRIVATE platform/default/mbgl/gl/headless_display.cpp
- PRIVATE platform/default/mbgl/gl/headless_display.hpp
- PRIVATE platform/qt/test/headless_backend_qt.cpp
PRIVATE platform/qt/test/main.cpp
- PRIVATE platform/qt/test/qmapboxgl.cpp
+ PRIVATE platform/qt/test/qmapboxgl.test.cpp
+ PRIVATE platform/qt/test/qmapboxgl.test.cpp
)
set_source_files_properties(
@@ -72,7 +78,7 @@ macro(mbgl_platform_test)
target_link_libraries(mbgl-test
PRIVATE qmapboxgl
- ${MBGL_QT_TEST_LIBRARIES}
+ PRIVATE mbgl-filesource
)
endmacro()
diff --git a/platform/qt/include/qmapboxgl.hpp b/platform/qt/include/qmapboxgl.hpp
index e2fb283989..ebbd949921 100644
--- a/platform/qt/include/qmapboxgl.hpp
+++ b/platform/qt/include/qmapboxgl.hpp
@@ -10,6 +10,8 @@
#include <QString>
#include <QStringList>
+#include <functional>
+
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<std::string(const std::string &&)> resourceTransform() const;
+ void setResourceTransform(const std::function<std::string(const std::string &&)> &);
+
private:
GLContextMode m_contextMode;
ConstrainMode m_constrainMode;
@@ -69,6 +74,7 @@ private:
QString m_assetPath;
QString m_accessToken;
QString m_apiBaseUrl;
+ std::function<std::string(const std::string &&)> m_resourceTransform;
};
struct Q_DECL_EXPORT QMapboxGLCameraOptions {
diff --git a/platform/qt/qt.cmake b/platform/qt/qt.cmake
index 489ae5ed08..2346d7d820 100644
--- a/platform/qt/qt.cmake
+++ b/platform/qt/qt.cmake
@@ -10,22 +10,16 @@ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden -D__QT__")
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
-set(CMAKE_INCLUDE_CURRENT_DIR ON)
-set(MBGL_QT_FILES
- # File source
- PRIVATE platform/default/asset_file_source.cpp
- PRIVATE platform/default/default_file_source.cpp
- PRIVATE platform/default/local_file_source.cpp
- PRIVATE platform/default/online_file_source.cpp
-
- # Offline
- PRIVATE platform/default/mbgl/storage/offline.cpp
- PRIVATE platform/default/mbgl/storage/offline_database.cpp
- PRIVATE platform/default/mbgl/storage/offline_database.hpp
- PRIVATE platform/default/mbgl/storage/offline_download.cpp
- PRIVATE platform/default/mbgl/storage/offline_download.hpp
- PRIVATE platform/default/sqlite3.hpp
+set(MBGL_QT_CORE_FILES
+ # Headless view
+ PRIVATE platform/default/mbgl/gl/headless_frontend.cpp
+ PRIVATE platform/default/mbgl/gl/headless_frontend.hpp
+ PRIVATE platform/default/mbgl/gl/headless_backend.cpp
+ PRIVATE platform/default/mbgl/gl/headless_backend.hpp
+ PRIVATE platform/default/mbgl/gl/headless_display.cpp
+ PRIVATE platform/default/mbgl/gl/headless_display.hpp
+ PRIVATE platform/qt/src/headless_backend_qt.cpp
# Misc
PRIVATE platform/default/logging_stderr.cpp
@@ -42,22 +36,24 @@ set(MBGL_QT_FILES
# Platform integration
PRIVATE platform/qt/src/async_task.cpp
PRIVATE platform/qt/src/async_task_impl.hpp
- PRIVATE platform/qt/src/http_file_source.cpp
- PRIVATE platform/qt/src/http_file_source.hpp
- PRIVATE platform/qt/src/http_request.cpp
- PRIVATE platform/qt/src/http_request.hpp
PRIVATE platform/qt/src/qt_image.cpp
PRIVATE platform/qt/src/run_loop.cpp
PRIVATE platform/qt/src/run_loop_impl.hpp
- PRIVATE platform/qt/src/sqlite3.cpp
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(
- PRIVATE platform/qt/include
+set(MBGL_QT_FILESOURCE_FILES
+ # File source
+ PRIVATE platform/qt/src/http_file_source.cpp
+ PRIVATE platform/qt/src/http_file_source.hpp
+ PRIVATE platform/qt/src/http_request.cpp
+ PRIVATE platform/qt/src/http_request.hpp
+
+ # Database
+ PRIVATE platform/qt/src/sqlite3.cpp
)
# Shared library
@@ -72,6 +68,17 @@ add_library(qmapboxgl SHARED
platform/default/mbgl/util/default_styles.hpp
)
+target_include_directories(qmapboxgl
+ PUBLIC platform/qt/include
+)
+
+target_link_libraries(qmapboxgl
+ PRIVATE mbgl-core
+ PRIVATE mbgl-filesource
+ ${MBGL_QT_CORE_LIBRARIES}
+ ${MBGL_QT_FILESOURCE_LIBRARIES}
+)
+
# C++ app
add_executable(mbgl-qt
platform/qt/app/main.cpp
@@ -80,6 +87,20 @@ add_executable(mbgl-qt
platform/qt/resources/common.qrc
)
+target_compile_options(qmapboxgl
+ PRIVATE -std=c++03
+)
+
+target_link_libraries(mbgl-qt
+ PRIVATE qmapboxgl
+)
+
+if(WITH_QT_4)
+ include(platform/qt/qt4.cmake)
+else()
+ include(platform/qt/qt5.cmake)
+endif()
+
xcode_create_scheme(TARGET mbgl-qt)
if(WITH_QT_4)
@@ -90,22 +111,22 @@ endif()
# OS specific configurations
if (MASON_PLATFORM STREQUAL "osx" OR MASON_PLATFORM STREQUAL "ios")
- list(APPEND MBGL_QT_FILES
+ list(APPEND MBGL_QT_CORE_FILES
PRIVATE platform/darwin/src/nsthread.mm
)
- list(APPEND MBGL_QT_LIBRARIES
+ list(APPEND MBGL_QT_CORE_LIBRARIES
PRIVATE "-framework Foundation"
PRIVATE "-framework OpenGL"
)
elseif (CMAKE_HOST_SYSTEM_NAME STREQUAL "Linux")
- list(APPEND MBGL_QT_FILES
+ list(APPEND MBGL_QT_CORE_FILES
PRIVATE platform/default/thread.cpp
)
- list(APPEND MBGL_QT_LIBRARIES
+ list(APPEND MBGL_QT_CORE_LIBRARIES
PRIVATE -lGL
)
elseif (CMAKE_HOST_SYSTEM_NAME STREQUAL "Windows")
- list(APPEND MBGL_QT_FILES
+ list(APPEND MBGL_QT_CORE_FILES
PRIVATE platform/qt/src/thread.cpp
)
endif()
diff --git a/platform/qt/qt4.cmake b/platform/qt/qt4.cmake
index 66aed87c38..272009c541 100644
--- a/platform/qt/qt4.cmake
+++ b/platform/qt/qt4.cmake
@@ -1,31 +1,20 @@
find_package(Qt4 REQUIRED)
-set(MBGL_QT_LIBRARIES
- PRIVATE Qt4::QtCore
- PRIVATE Qt4::QtGui
- PRIVATE Qt4::QtNetwork
- PRIVATE Qt4::QtOpenGL
- PRIVATE Qt4::QtSql
+set(MBGL_QT_CORE_LIBRARIES
+ PUBLIC Qt4::QtCore
+ PUBLIC Qt4::QtGui
+ PUBLIC Qt4::QtOpenGL
)
-set(MBGL_QT_TEST_LIBRARIES
- PRIVATE Qt4::QtCore
- PRIVATE Qt4::QtOpenGL
+set(MBGL_QT_FILESOURCE_LIBRARIES
+ PUBLIC Qt4::QtNetwork
+ PUBLIC Qt4::QtSql
)
target_compile_options(qmapboxgl
PRIVATE -Wno-inconsistent-missing-override
)
-target_link_libraries(qmapboxgl
- PRIVATE mbgl-core
- PRIVATE Qt4::QtCore
- PRIVATE Qt4::QtGui
- PRIVATE Qt4::QtOpenGL
-)
-
target_link_libraries(mbgl-qt
- PRIVATE qmapboxgl
- PRIVATE Qt4::QtGui
PRIVATE Qt4::QtOpenGL
)
diff --git a/platform/qt/qt5.cmake b/platform/qt/qt5.cmake
index ed51051311..c4af774ba3 100644
--- a/platform/qt/qt5.cmake
+++ b/platform/qt/qt5.cmake
@@ -1,35 +1,21 @@
find_package(Qt5Core REQUIRED)
find_package(Qt5Gui REQUIRED)
-find_package(Qt5Location REQUIRED)
find_package(Qt5Network REQUIRED)
find_package(Qt5OpenGL REQUIRED)
find_package(Qt5Widgets REQUIRED)
find_package(Qt5Sql REQUIRED)
-set(MBGL_QT_LIBRARIES
- PRIVATE Qt5::Core
- PRIVATE Qt5::Gui
- PRIVATE Qt5::Network
- PRIVATE Qt5::Sql
+set(MBGL_QT_CORE_LIBRARIES
+ PUBLIC Qt5::Core
+ PUBLIC Qt5::Gui
+ PUBLIC Qt5::OpenGL
)
-set(MBGL_QT_TEST_LIBRARIES
- PRIVATE Qt5::Core
- PRIVATE Qt5::Gui
- PRIVATE Qt5::Widgets
- PRIVATE Qt5::OpenGL
-)
-
-target_link_libraries(qmapboxgl
- PRIVATE mbgl-core
- PRIVATE Qt5::Core
- PRIVATE Qt5::Gui
- PRIVATE Qt5::Location
- PRIVATE Qt5::Sql
+set(MBGL_QT_FILESOURCE_LIBRARIES
+ PUBLIC Qt5::Network
+ PUBLIC Qt5::Sql
)
target_link_libraries(mbgl-qt
- PRIVATE qmapboxgl
- PRIVATE Qt5::OpenGL
PRIVATE Qt5::Widgets
)
diff --git a/platform/qt/test/headless_backend_qt.cpp b/platform/qt/src/headless_backend_qt.cpp
index 5f95b2f96a..5f95b2f96a 100644
--- a/platform/qt/test/headless_backend_qt.cpp
+++ b/platform/qt/src/headless_backend_qt.cpp
diff --git a/platform/qt/src/http_request.cpp b/platform/qt/src/http_request.cpp
index ef753c3e0e..386a2d9ef4 100644
--- a/platform/qt/src/http_request.cpp
+++ b/platform/qt/src/http_request.cpp
@@ -82,7 +82,9 @@ void HTTPRequest::handleNetworkReply(QNetworkReply *reply)
} else if (header == "etag") {
response.etag = std::string(line.second.constData(), line.second.size());
} else if (header == "cache-control") {
- response.expires = http::CacheControl::parse(line.second.constData()).toTimePoint();
+ const auto cc = http::CacheControl::parse(line.second.constData());
+ response.expires = cc.toTimePoint();
+ response.mustRevalidate = cc.mustRevalidate;
} else if (header == "expires") {
response.expires = util::parseTimestamp(line.second.constData());
} else if (header == "retry-after") {
diff --git a/platform/qt/src/qmapboxgl.cpp b/platform/qt/src/qmapboxgl.cpp
index eeb0bece12..074ef280aa 100644
--- a/platform/qt/src/qmapboxgl.cpp
+++ b/platform/qt/src/qmapboxgl.cpp
@@ -8,6 +8,7 @@
#include <mbgl/annotation/annotation.hpp>
#include <mbgl/map/camera.hpp>
#include <mbgl/map/map.hpp>
+#include <mbgl/math/log2.hpp>
#include <mbgl/math/minmax.hpp>
#include <mbgl/style/style.hpp>
#include <mbgl/style/conversion.hpp>
@@ -28,6 +29,7 @@
#include <mbgl/util/run_loop.hpp>
#include <mbgl/util/shared_thread_pool.hpp>
#include <mbgl/util/traits.hpp>
+#include <mbgl/actor/scheduler.hpp>
#if QT_VERSION >= 0x050000
#include <QGuiApplication>
@@ -361,6 +363,27 @@ void QMapboxGLSettings::setApiBaseUrl(const QString& url)
}
/*!
+ Returns resource transformation callback used to transform requested URLs.
+*/
+std::function<std::string(const std::string &&)> 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(const std::function<std::string(const std::string &&)> &transform)
+{
+ m_resourceTransform = transform;
+}
+
+/*!
\class QMapboxGL
\brief The QMapboxGL class is a Qt wrapper for the Mapbox GL Native engine.
@@ -583,7 +606,7 @@ double QMapboxGL::scale() const
void QMapboxGL::setScale(double scale_, const QPointF &center)
{
- d_ptr->mapObj->setZoom(std::log2(scale_), mbgl::ScreenCoordinate { center.x(), center.y() });
+ d_ptr->mapObj->setZoom(mbgl::util::log2(scale_), mbgl::ScreenCoordinate { center.x(), center.y() });
}
/*!
@@ -991,7 +1014,7 @@ void QMapboxGL::moveBy(const QPointF &offset)
can be used for implementing a pinch gesture.
*/
void QMapboxGL::scaleBy(double scale_, const QPointF &center) {
- d_ptr->mapObj->setZoom(d_ptr->mapObj->getZoom() + std::log2(scale_), mbgl::ScreenCoordinate { center.x(), center.y() });
+ d_ptr->mapObj->setZoom(d_ptr->mapObj->getZoom() + mbgl::util::log2(scale_), mbgl::ScreenCoordinate { center.x(), center.y() });
}
/*!
@@ -1498,13 +1521,25 @@ 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::ResourceTransform> >( *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<QMapboxGLRendererFrontend>(
std::make_unique<mbgl::Renderer>(*this, pixelRatio, *fileSourceObj, *threadPool,
static_cast<mbgl::GLContextMode>(settings.contextMode())),
*this);
connect(frontend.get(), SIGNAL(updated()), this, SLOT(invalidate()));
-
+
mapObj = std::make_unique<mbgl::Map>(
*frontend,
*this, sanitizedSize(size),
@@ -1527,18 +1562,18 @@ QMapboxGLPrivate::~QMapboxGLPrivate()
{
}
-mbgl::Size QMapboxGLPrivate::framebufferSize() const {
+mbgl::Size QMapboxGLPrivate::getFramebufferSize() const {
return sanitizedSize(fbSize);
}
void QMapboxGLPrivate::updateAssumedState() {
assumeFramebufferBinding(fbObject);
- assumeViewport(0, 0, framebufferSize());
+ assumeViewport(0, 0, getFramebufferSize());
}
void QMapboxGLPrivate::bind() {
setFramebufferBinding(fbObject);
- setViewport(0, 0, framebufferSize());
+ setViewport(0, 0, getFramebufferSize());
}
void QMapboxGLPrivate::invalidate()
diff --git a/platform/qt/src/qmapboxgl_p.hpp b/platform/qt/src/qmapboxgl_p.hpp
index 7b0dd8c192..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 <mbgl/actor/actor.hpp>
#include <mbgl/map/map.hpp>
#include <mbgl/renderer/renderer_backend.hpp>
#include <mbgl/util/default_thread_pool.hpp>
#include <mbgl/storage/default_file_source.hpp>
#include <mbgl/util/geo.hpp>
+#include <mbgl/storage/resource_transform.hpp>
#include <QObject>
#include <QSize>
+#include <memory>
+
class QMapboxGLPrivate : public QObject, public mbgl::RendererBackend, public mbgl::MapObserver
{
Q_OBJECT
@@ -20,10 +24,10 @@ public:
explicit QMapboxGLPrivate(QMapboxGL *, const QMapboxGLSettings &, const QSize &size, qreal pixelRatio);
virtual ~QMapboxGLPrivate();
- mbgl::Size framebufferSize() const;
// mbgl::RendererBackend implementation.
void bind() final;
+ mbgl::Size getFramebufferSize() const final;
void updateAssumedState() final;
void activate() final {}
void deactivate() final {}
@@ -68,4 +72,7 @@ signals:
void needsRendering();
void mapChanged(QMapboxGL::MapChange);
void copyrightsChanged(const QString &copyrightsHtml);
+
+private:
+ std::unique_ptr< mbgl::Actor<mbgl::ResourceTransform> > m_resourceTransform;
};
diff --git a/platform/qt/src/run_loop.cpp b/platform/qt/src/run_loop.cpp
index c44f284852..71ea19032a 100644
--- a/platform/qt/src/run_loop.cpp
+++ b/platform/qt/src/run_loop.cpp
@@ -1,6 +1,6 @@
#include "run_loop_impl.hpp"
-#include <mbgl/util/thread_local.hpp>
+#include <mbgl/actor/scheduler.hpp>
#include <QCoreApplication>
@@ -8,13 +8,6 @@
#include <functional>
#include <utility>
-namespace {
-
-using namespace mbgl::util;
-static ThreadLocal<RunLoop>& current = *new ThreadLocal<RunLoop>;
-
-}
-
namespace mbgl {
namespace util {
@@ -27,7 +20,8 @@ void RunLoop::Impl::onWriteEvent(int fd) {
}
RunLoop* RunLoop::Get() {
- return current.get();
+ assert(static_cast<RunLoop*>(Scheduler::GetCurrent()));
+ return static_cast<RunLoop*>(Scheduler::GetCurrent());
}
RunLoop::RunLoop(Type type) : impl(std::make_unique<Impl>()) {
@@ -42,14 +36,14 @@ RunLoop::RunLoop(Type type) : impl(std::make_unique<Impl>()) {
impl->type = type;
- current.set(this);
+ Scheduler::SetCurrent(this);
impl->async = std::make_unique<AsyncTask>(std::bind(&RunLoop::process, this));
}
RunLoop::~RunLoop() {
MBGL_VERIFY_THREAD(tid);
- current.set(nullptr);
+ Scheduler::SetCurrent(nullptr);
}
LOOP_HANDLE RunLoop::getLoopHandle() {
diff --git a/platform/qt/src/sqlite3.cpp b/platform/qt/src/sqlite3.cpp
index 0cd78d85ce..7d47ae552b 100644
--- a/platform/qt/src/sqlite3.cpp
+++ b/platform/qt/src/sqlite3.cpp
@@ -312,6 +312,7 @@ bool Statement::run() {
return impl->query.next();
}
+template bool Statement::get(int);
template int Statement::get(int);
template int64_t Statement::get(int);
template double Statement::get(int);
diff --git a/platform/qt/src/thread_local.cpp b/platform/qt/src/thread_local.cpp
index bf2103c98f..467bfb0d05 100644
--- a/platform/qt/src/thread_local.cpp
+++ b/platform/qt/src/thread_local.cpp
@@ -1,6 +1,6 @@
#include <mbgl/util/thread_local.hpp>
-#include <mbgl/util/run_loop.hpp>
+#include <mbgl/actor/scheduler.hpp>
#include <mbgl/renderer/backend_scope.hpp>
#include <array>
@@ -41,7 +41,7 @@ void ThreadLocal<T>::set(T* ptr) {
impl->local.localData()[0] = ptr;
}
-template class ThreadLocal<RunLoop>;
+template class ThreadLocal<Scheduler>;
template class ThreadLocal<BackendScope>;
template class ThreadLocal<int>; // For unit tests
diff --git a/platform/qt/test/qmapboxgl.cpp b/platform/qt/test/qmapboxgl.cpp
deleted file mode 100644
index 747f8796fa..0000000000
--- a/platform/qt/test/qmapboxgl.cpp
+++ /dev/null
@@ -1,99 +0,0 @@
-#include <mbgl/test/util.hpp>
-#include <mbgl/util/io.hpp>
-
-#include <QApplication>
-#include <QMapbox>
-#include <QMapboxGL>
-
-// We're using QGLFramebufferObject, which is only available in Qt 5 and up.
-#if QT_VERSION >= 0x050000
-
-#include <QGLWidget>
-#include <QGLFramebufferObject>
-
-class QMapboxGLTest : public QObject, public ::testing::Test {
- Q_OBJECT
-
-public:
- QMapboxGLTest() : size(512, 512), fbo((assert(widget.context()->isValid()), widget.makeCurrent(), size)), map(nullptr, settings, size) {
- connect(&map, SIGNAL(mapChanged(QMapboxGL::MapChange)),
- this, SLOT(onMapChanged(QMapboxGL::MapChange)));
- connect(&map, SIGNAL(needsRendering()),
- this, SLOT(onNeedsRendering()));
- map.resize(fbo.size(), fbo.size());
- map.setFramebufferObject(fbo.handle());
- map.setCoordinateZoom(QMapbox::Coordinate(60.170448, 24.942046), 14);
- }
-
- void runUntil(QMapboxGL::MapChange status) {
- changeCallback = [&](QMapboxGL::MapChange change) {
- if (change == status) {
- qApp->exit();
- changeCallback = nullptr;
- }
- };
-
- qApp->exec();
- }
-
-private:
- QGLWidget widget;
- const QSize size;
- QGLFramebufferObject fbo;
-
-protected:
- QMapboxGLSettings settings;
- QMapboxGL map;
-
- std::function<void(QMapboxGL::MapChange)> changeCallback;
-
-private slots:
- void onMapChanged(QMapboxGL::MapChange change) {
- if (changeCallback) {
- changeCallback(change);
- }
- };
-
- void onNeedsRendering() {
- widget.makeCurrent();
- fbo.bind();
- glViewport(0, 0, fbo.width(), fbo.height());
- map.render();
- };
-};
-
-TEST_F(QMapboxGLTest, TEST_DISABLED_ON_CI(styleJson)) {
- QString json = QString::fromStdString(
- mbgl::util::read_file("test/fixtures/resources/style_vector.json"));
-
- map.setStyleJson(json);
- ASSERT_EQ(map.styleJson(), json);
- runUntil(QMapboxGL::MapChangeDidFinishLoadingMap);
-
- map.setStyleJson("invalid json");
- runUntil(QMapboxGL::MapChangeDidFailLoadingMap);
-
- map.setStyleJson("\"\"");
- runUntil(QMapboxGL::MapChangeDidFailLoadingMap);
-
- map.setStyleJson(QString());
- runUntil(QMapboxGL::MapChangeDidFailLoadingMap);
-}
-
-TEST_F(QMapboxGLTest, TEST_DISABLED_ON_CI(styleUrl)) {
- QString url(QMapbox::defaultStyles()[0].first);
-
- map.setStyleUrl(url);
- ASSERT_EQ(map.styleUrl(), url);
- runUntil(QMapboxGL::MapChangeDidFinishLoadingMap);
-
- map.setStyleUrl("invalid://url");
- runUntil(QMapboxGL::MapChangeDidFailLoadingMap);
-
- map.setStyleUrl(QString());
- runUntil(QMapboxGL::MapChangeDidFailLoadingMap);
-}
-
-#include "qmapboxgl.moc"
-
-#endif
diff --git a/platform/qt/test/qmapboxgl.test.cpp b/platform/qt/test/qmapboxgl.test.cpp
new file mode 100644
index 0000000000..c6ae3ed403
--- /dev/null
+++ b/platform/qt/test/qmapboxgl.test.cpp
@@ -0,0 +1,77 @@
+#include "qmapboxgl.test.hpp"
+
+#include <mbgl/util/io.hpp>
+
+#include <QMapbox>
+
+// We're using QGLFramebufferObject, which is only available in Qt 5 and up.
+#if QT_VERSION >= 0x050000
+
+QMapboxGLTest::QMapboxGLTest() : size(512, 512), fbo((assert(widget.context()->isValid()), widget.makeCurrent(), size)), map(nullptr, settings, size) {
+ connect(&map, SIGNAL(mapChanged(QMapboxGL::MapChange)),
+ this, SLOT(onMapChanged(QMapboxGL::MapChange)));
+ connect(&map, SIGNAL(needsRendering()),
+ this, SLOT(onNeedsRendering()));
+ map.resize(fbo.size(), fbo.size());
+ map.setFramebufferObject(fbo.handle());
+ map.setCoordinateZoom(QMapbox::Coordinate(60.170448, 24.942046), 14);
+}
+
+void QMapboxGLTest::runUntil(QMapboxGL::MapChange status) {
+ changeCallback = [&](QMapboxGL::MapChange change) {
+ if (change == status) {
+ qApp->exit();
+ changeCallback = nullptr;
+ }
+ };
+
+ qApp->exec();
+}
+
+void QMapboxGLTest::onMapChanged(QMapboxGL::MapChange change) {
+ if (changeCallback) {
+ changeCallback(change);
+ }
+}
+
+void QMapboxGLTest::onNeedsRendering() {
+ widget.makeCurrent();
+ fbo.bind();
+ glViewport(0, 0, fbo.width(), fbo.height());
+ map.render();
+}
+
+
+TEST_F(QMapboxGLTest, TEST_DISABLED_ON_CI(styleJson)) {
+ QString json = QString::fromStdString(
+ mbgl::util::read_file("test/fixtures/resources/style_vector.json"));
+
+ map.setStyleJson(json);
+ ASSERT_EQ(map.styleJson(), json);
+ runUntil(QMapboxGL::MapChangeDidFinishLoadingMap);
+
+ map.setStyleJson("invalid json");
+ runUntil(QMapboxGL::MapChangeDidFailLoadingMap);
+
+ map.setStyleJson("\"\"");
+ runUntil(QMapboxGL::MapChangeDidFailLoadingMap);
+
+ map.setStyleJson(QString());
+ runUntil(QMapboxGL::MapChangeDidFailLoadingMap);
+}
+
+TEST_F(QMapboxGLTest, TEST_DISABLED_ON_CI(styleUrl)) {
+ QString url(QMapbox::defaultStyles()[0].first);
+
+ map.setStyleUrl(url);
+ ASSERT_EQ(map.styleUrl(), url);
+ runUntil(QMapboxGL::MapChangeDidFinishLoadingMap);
+
+ map.setStyleUrl("invalid://url");
+ runUntil(QMapboxGL::MapChangeDidFailLoadingMap);
+
+ map.setStyleUrl(QString());
+ runUntil(QMapboxGL::MapChangeDidFailLoadingMap);
+}
+
+#endif
diff --git a/platform/qt/test/qmapboxgl.test.hpp b/platform/qt/test/qmapboxgl.test.hpp
new file mode 100644
index 0000000000..04d63610ca
--- /dev/null
+++ b/platform/qt/test/qmapboxgl.test.hpp
@@ -0,0 +1,36 @@
+#include <mbgl/test/util.hpp>
+
+#include <QApplication>
+#include <QMapboxGL>
+
+// We're using QGLFramebufferObject, which is only available in Qt 5 and up.
+#if QT_VERSION >= 0x050000
+
+#include <QGLWidget>
+#include <QGLFramebufferObject>
+
+class QMapboxGLTest : public QObject, public ::testing::Test {
+ Q_OBJECT
+
+public:
+ QMapboxGLTest();
+
+ void runUntil(QMapboxGL::MapChange);
+
+private:
+ QGLWidget widget;
+ const QSize size;
+ QGLFramebufferObject fbo;
+
+protected:
+ QMapboxGLSettings settings;
+ QMapboxGL map;
+
+ std::function<void(QMapboxGL::MapChange)> changeCallback;
+
+private slots:
+ void onMapChanged(QMapboxGL::MapChange);
+ void onNeedsRendering();
+};
+
+#endif