1 #ifndef _RIVE_THORVG_RENDERER_HPP_
2 #define _RIVE_THORVG_RENDERER_HPP_
6 #include "renderer.hpp"
17 tvg::Fill *gradientFill;
18 tvg::StrokeJoin join = tvg::StrokeJoin::Bevel;
19 tvg::StrokeCap cap = tvg::StrokeCap::Butt;
20 RenderPaintStyle style;
23 TvgPaint() : isGradient(false), gradientApplied(false) {}
26 class TvgRenderPath : public RenderPath
34 Shape* shape() { return m_Shape; }
36 void reset() override;
37 void addRenderPath(RenderPath* path, const Mat2D& transform) override;
38 void fillRule(FillRule value) override;
39 void moveTo(float x, float y) override;
40 void lineTo(float x, float y) override;
41 void cubicTo(float ox, float oy, float ix, float iy, float x, float y) override;
42 virtual void close() override;
49 GradientStop(unsigned int color, float stop) : color(color), stop(stop)
54 class TvgGradientBuilder
57 std::vector<GradientStop> stops;
59 virtual ~TvgGradientBuilder() {}
60 TvgGradientBuilder(float sx, float sy, float ex, float ey) :
61 sx(sx), sy(sy), ex(ex), ey(ey)
65 virtual void make(TvgPaint* paint) = 0;
68 class TvgRadialGradientBuilder : public TvgGradientBuilder
71 TvgRadialGradientBuilder(float sx, float sy, float ex, float ey) :
72 TvgGradientBuilder(sx, sy, ex, ey)
75 void make(TvgPaint* paint) override;
78 class TvgLinearGradientBuilder : public TvgGradientBuilder
81 TvgLinearGradientBuilder(float sx, float sy, float ex, float ey) :
82 TvgGradientBuilder(sx, sy, ex, ey)
85 void make(TvgPaint* paint) override;
88 class TvgRenderPaint : public RenderPaint
92 TvgGradientBuilder* m_GradientBuilder;
95 TvgPaint* paint() { return &m_Paint; }
97 void style(RenderPaintStyle style) override;
98 void color(unsigned int value) override;
99 void thickness(float value) override;
100 void join(StrokeJoin value) override;
101 void cap(StrokeCap value) override;
102 void blendMode(BlendMode value) override;
104 void linearGradient(float sx, float sy, float ex, float ey) override;
105 void radialGradient(float sx, float sy, float ex, float ey) override;
106 void addStop(unsigned int color, float stop) override;
107 void completeGradient() override;
110 class TvgRenderer : public Renderer
116 Mat2D m_SaveTransform;
119 TvgRenderer(Canvas* canvas) : m_Canvas(canvas) {}
120 void save() override;
121 void restore() override;
122 void transform(const Mat2D& transform) override;
123 void drawPath(RenderPath* path, RenderPaint* paint) override;
124 void clipPath(RenderPath* path) override;