diff options
author | Ivo van Dongen <info@ivovandongen.nl> | 2017-10-09 16:49:29 +0300 |
---|---|---|
committer | Ivo van Dongen <info@ivovandongen.nl> | 2017-10-31 10:05:18 +0200 |
commit | 8a58ef81c026068e7979f31378ba36e34e935d9f (patch) | |
tree | a169be434441da10054ae14a257d81a04e327f63 | |
parent | 311ca6ef24e60b3097b51d8efbd7a03cee4ead99 (diff) | |
download | qtlocation-mapboxgl-8a58ef81c026068e7979f31378ba36e34e935d9f.tar.gz |
[default] map snapshotter - add function to get screen coordinate from latlng for snapshot
- Wraps the TransformState for the snapshot so that the snapshotter itself is free to be re-used or destroyed
-rw-r--r-- | platform/default/mbgl/map/map_snapshotter.cpp | 21 | ||||
-rw-r--r-- | platform/default/mbgl/map/map_snapshotter.hpp | 4 |
2 files changed, 23 insertions, 2 deletions
diff --git a/platform/default/mbgl/map/map_snapshotter.cpp b/platform/default/mbgl/map/map_snapshotter.cpp index e542e2fb54..3e930c31f1 100644 --- a/platform/default/mbgl/map/map_snapshotter.cpp +++ b/platform/default/mbgl/map/map_snapshotter.cpp @@ -3,9 +3,11 @@ #include <mbgl/actor/actor_ref.hpp> #include <mbgl/gl/headless_frontend.hpp> #include <mbgl/map/map.hpp> +#include <mbgl/map/transform_state.hpp> #include <mbgl/storage/file_source.hpp> #include <mbgl/style/style.hpp> #include <mbgl/util/event.hpp> +#include <mbgl/map/transform.hpp> namespace mbgl { @@ -62,7 +64,24 @@ MapSnapshotter::Impl::Impl(FileSource& fileSource, void MapSnapshotter::Impl::snapshot(ActorRef<MapSnapshotter::Callback> callback) { map.renderStill([this, callback = std::move(callback)] (std::exception_ptr error) mutable { - callback.invoke(&MapSnapshotter::Callback::operator(), error, error ? PremultipliedImage() : frontend.readStillImage()); + + // Create lambda that captures the current transform state + // and can be used to translate for geographic to screen + // coordinates + assert (frontend.getTransformState()); + PointForFn pointForFn { [=, center=map.getLatLng(), transformState = *frontend.getTransformState()] (const LatLng& latLng) { + LatLng unwrappedLatLng = latLng.wrapped(); + unwrappedLatLng.unwrapForShortestPath(center); + Transform transform { transformState }; + return transform.latLngToScreenCoordinate(unwrappedLatLng); + }}; + + callback.invoke( + &MapSnapshotter::Callback::operator(), + error, + error ? PremultipliedImage() : frontend.readStillImage(), + std::move(pointForFn) + ); }); } diff --git a/platform/default/mbgl/map/map_snapshotter.hpp b/platform/default/mbgl/map/map_snapshotter.hpp index 2450fa7612..b3cfb3058f 100644 --- a/platform/default/mbgl/map/map_snapshotter.hpp +++ b/platform/default/mbgl/map/map_snapshotter.hpp @@ -3,6 +3,7 @@ #include <mbgl/util/image.hpp> #include <mbgl/util/thread.hpp> #include <mbgl/util/optional.hpp> +#include <mbgl/util/geo.hpp> #include <exception> #include <memory> @@ -46,7 +47,8 @@ public: void setRegion(const LatLngBounds&); LatLngBounds getRegion() const; - using Callback = std::function<void (std::exception_ptr, PremultipliedImage)>; + using PointForFn = std::function<ScreenCoordinate (const LatLng&)>; + using Callback = std::function<void (std::exception_ptr, PremultipliedImage, PointForFn)>; void snapshot(ActorRef<Callback>); private: |