/*
 * Copyright 2022 Rive
 */

#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
