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