1 #pragma once 2 3 #include <mbgl/actor/actor.hpp> 4 #include <mbgl/actor/actor_ref.hpp> 5 #include <mbgl/actor/mailbox.hpp> 6 #include <mbgl/renderer/renderer_observer.hpp> 7 #include <mbgl/util/run_loop.hpp> 8 9 #include <memory> 10 11 // Forwards RendererObserver signals to the given 12 // Delegate RendererObserver on the given RunLoop 13 class QMapboxGLRendererObserver : public mbgl::RendererObserver { 14 public: QMapboxGLRendererObserver(mbgl::util::RunLoop & mapRunLoop,mbgl::RendererObserver & delegate_)15 QMapboxGLRendererObserver(mbgl::util::RunLoop& mapRunLoop, mbgl::RendererObserver& delegate_) 16 : mailbox(std::make_shared<mbgl::Mailbox>(mapRunLoop)) 17 , delegate(delegate_, mailbox) { 18 } 19 ~QMapboxGLRendererObserver()20 ~QMapboxGLRendererObserver() { 21 mailbox->close(); 22 } 23 onInvalidate()24 void onInvalidate() final { 25 delegate.invoke(&mbgl::RendererObserver::onInvalidate); 26 } 27 onResourceError(std::exception_ptr err)28 void onResourceError(std::exception_ptr err) final { 29 delegate.invoke(&mbgl::RendererObserver::onResourceError, err); 30 } 31 onWillStartRenderingMap()32 void onWillStartRenderingMap() final { 33 delegate.invoke(&mbgl::RendererObserver::onWillStartRenderingMap); 34 } 35 onWillStartRenderingFrame()36 void onWillStartRenderingFrame() final { 37 delegate.invoke(&mbgl::RendererObserver::onWillStartRenderingFrame); 38 } 39 onDidFinishRenderingFrame(RenderMode mode,bool repaintNeeded)40 void onDidFinishRenderingFrame(RenderMode mode, bool repaintNeeded) final { 41 delegate.invoke(&mbgl::RendererObserver::onDidFinishRenderingFrame, mode, repaintNeeded); 42 } 43 onDidFinishRenderingMap()44 void onDidFinishRenderingMap() final { 45 delegate.invoke(&mbgl::RendererObserver::onDidFinishRenderingMap); 46 } 47 48 private: 49 std::shared_ptr<mbgl::Mailbox> mailbox; 50 mbgl::ActorRef<mbgl::RendererObserver> delegate; 51 }; 52