/*
 * Copyright 2022 Rive
 */

#include "viewer/viewer_host.hpp"
#include "viewer/viewer_content.hpp"

#ifdef RIVE_RENDERER_TESS

#include "rive/tess/sokol/sokol_tess_renderer.hpp"
#include "viewer/tess/viewer_sokol_factory.hpp"

class TessViewerHost : public ViewerHost {
public:
    std::unique_ptr<rive::SokolTessRenderer> m_renderer;

    bool init(sg_pass_action*, int width, int height) override {
        m_renderer = std::make_unique<rive::SokolTessRenderer>();
        m_renderer->orthographicProjection(0.0f, width, height, 0.0f, 0.0f, 1.0f);
        return true;
    }

    void handleResize(int width, int height) override {
        m_renderer->orthographicProjection(0.0f, width, height, 0.0f, 0.0f, 1.0f);
    }

    void afterDefaultPass(ViewerContent* content, double elapsed) override {
        if (content) {
            content->handleDraw(m_renderer.get(), elapsed);
        }
    }
};

std::unique_ptr<ViewerHost> ViewerHost::Make() { return std::make_unique<TessViewerHost>(); }

rive::Factory* ViewerHost::Factory() {
    static ViewerSokolFactory sokolFactory;
    return &sokolFactory;
}

#endif
