From 100eb61fa4e8a4a83dfbe1c3a17c8468dfb4a1ca Mon Sep 17 00:00:00 2001 From: Alexander Shalamov Date: Mon, 6 May 2019 11:31:23 +0300 Subject: [PATCH] [core] Forward ImageManagerObserver::onRemoveUnusedStyleImages to MapObserver interface --- include/mbgl/map/map_observer.hpp | 3 +++ include/mbgl/renderer/renderer_observer.hpp | 1 + src/mbgl/map/map_impl.cpp | 8 ++++++++ src/mbgl/map/map_impl.hpp | 1 + src/mbgl/renderer/renderer_impl.cpp | 4 ++++ src/mbgl/renderer/renderer_impl.hpp | 1 + 6 files changed, 18 insertions(+) diff --git a/include/mbgl/map/map_observer.hpp b/include/mbgl/map/map_observer.hpp index 75e389df9..a79f5ac82 100644 --- a/include/mbgl/map/map_observer.hpp +++ b/include/mbgl/map/map_observer.hpp @@ -48,6 +48,9 @@ public: virtual void onSourceChanged(style::Source&) {} virtual void onDidBecomeIdle() {} virtual void onStyleImageMissing(const std::string&) {} + // This method should return true if unused image can be removed, + // false otherwise. By default, unused image will be removed. + virtual bool onCanRemoveUnusedStyleImage(const std::string&) { return true; } }; } // namespace mbgl diff --git a/include/mbgl/renderer/renderer_observer.hpp b/include/mbgl/renderer/renderer_observer.hpp index 1a9d3ff9b..4d21a0aae 100644 --- a/include/mbgl/renderer/renderer_observer.hpp +++ b/include/mbgl/renderer/renderer_observer.hpp @@ -35,6 +35,7 @@ public: // Style is missing an image using StyleImageMissingCallback = std::function; virtual void onStyleImageMissing(const std::string&, StyleImageMissingCallback done) { done(); } + virtual void onRemoveUnusedStyleImages(const std::vector&) {} }; } // namespace mbgl diff --git a/src/mbgl/map/map_impl.cpp b/src/mbgl/map/map_impl.cpp index d7c7c00d0..ce36583ab 100644 --- a/src/mbgl/map/map_impl.cpp +++ b/src/mbgl/map/map_impl.cpp @@ -179,4 +179,12 @@ void Map::Impl::onStyleImageMissing(const std::string& id, std::function onUpdate(); } +void Map::Impl::onRemoveUnusedStyleImages(const std::vector& unusedImageIDs) { + for (const auto& unusedImageID : unusedImageIDs) { + if (observer.onCanRemoveUnusedStyleImage(unusedImageID)) { + style->removeImage(unusedImageID); + } + } +} + } // namespace mbgl diff --git a/src/mbgl/map/map_impl.hpp b/src/mbgl/map/map_impl.hpp index 84b43c834..13a68fb25 100644 --- a/src/mbgl/map/map_impl.hpp +++ b/src/mbgl/map/map_impl.hpp @@ -46,6 +46,7 @@ public: void onWillStartRenderingMap() final; void onDidFinishRenderingMap() final; void onStyleImageMissing(const std::string&, std::function) final; + void onRemoveUnusedStyleImages(const std::vector&) final; // Map void jumpTo(const CameraOptions&); diff --git a/src/mbgl/renderer/renderer_impl.cpp b/src/mbgl/renderer/renderer_impl.cpp index 6647cecb9..c32a1589b 100644 --- a/src/mbgl/renderer/renderer_impl.cpp +++ b/src/mbgl/renderer/renderer_impl.cpp @@ -762,4 +762,8 @@ void Renderer::Impl::onStyleImageMissing(const std::string& id, std::functiononStyleImageMissing(id, std::move(done)); } +void Renderer::Impl::onRemoveUnusedStyleImages(const std::vector& unusedImageIDs) { + observer->onRemoveUnusedStyleImages(unusedImageIDs); +} + } // namespace mbgl diff --git a/src/mbgl/renderer/renderer_impl.hpp b/src/mbgl/renderer/renderer_impl.hpp index 270ea4d51..84191b85a 100644 --- a/src/mbgl/renderer/renderer_impl.hpp +++ b/src/mbgl/renderer/renderer_impl.hpp @@ -91,6 +91,7 @@ private: // ImageManagerObserver implementation void onStyleImageMissing(const std::string&, std::function) override; + void onRemoveUnusedStyleImages(const std::vector&) final; void updateFadingTiles();