summaryrefslogtreecommitdiff
path: root/platform/qt/src/qmapboxgl_renderer_observer.hpp
blob: 78dd6b91d64fabd8439bb8fa6a5beb5d91c34c66 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#pragma once

#include <mbgl/actor/actor.hpp>
#include <mbgl/actor/actor_ref.hpp>
#include <mbgl/actor/mailbox.hpp>
#include <mbgl/renderer/renderer_observer.hpp>
#include <mbgl/util/run_loop.hpp>

#include <memory>

// Forwards RendererObserver signals to the given
// Delegate RendererObserver on the given RunLoop
class QMapboxGLRendererObserver : public mbgl::RendererObserver {
public:
    QMapboxGLRendererObserver(mbgl::util::RunLoop& mapRunLoop, mbgl::RendererObserver& delegate_)
        : mailbox(std::make_shared<mbgl::Mailbox>(mapRunLoop))
        , delegate(delegate_, mailbox) {
    }

    ~QMapboxGLRendererObserver() {
        mailbox->close();
    }

    void onInvalidate() final {
        delegate.invoke(&mbgl::RendererObserver::onInvalidate);
    }

    void onResourceError(std::exception_ptr err) final {
        delegate.invoke(&mbgl::RendererObserver::onResourceError, err);
    }

    void onWillStartRenderingMap() final {
        delegate.invoke(&mbgl::RendererObserver::onWillStartRenderingMap);
    }

    void onWillStartRenderingFrame() final {
        delegate.invoke(&mbgl::RendererObserver::onWillStartRenderingFrame);
    }

    void onDidFinishRenderingFrame(RenderMode mode, bool repaintNeeded, bool placementChanged) final {
        delegate.invoke(&mbgl::RendererObserver::onDidFinishRenderingFrame, mode, repaintNeeded, placementChanged);
    }

    void onDidFinishRenderingMap() final {
        delegate.invoke(&mbgl::RendererObserver::onDidFinishRenderingMap);
    }

private:
    std::shared_ptr<mbgl::Mailbox> mailbox;
    mbgl::ActorRef<mbgl::RendererObserver> delegate;
};