#ifndef _RIVE_SKIA_RENDERER_HPP_
#define _RIVE_SKIA_RENDERER_HPP_

#include "rive/renderer.hpp"

class SkCanvas;

namespace rive {
    class SkiaRenderer : public Renderer {
    protected:
        SkCanvas* m_Canvas;

    public:
        SkiaRenderer(SkCanvas* canvas) : m_Canvas(canvas) {}
        void save() override;
        void restore() override;
        void transform(const Mat2D& transform) override;
        void clipPath(RenderPath* path) override;
        void drawPath(RenderPath* path, RenderPaint* paint) override;
        void drawImage(const RenderImage*, BlendMode, float opacity) override;
        void drawImageMesh(const RenderImage*,
                           rcp<RenderBuffer> vertices_f32,
                           rcp<RenderBuffer> uvCoords_f32,
                           rcp<RenderBuffer> indices_u16,
                           BlendMode,
                           float opacity) override;
    };
} // namespace rive
#endif
