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
30 vector<PathCommand> m_PathType;
31 vector<Vec2D> m_PathPoints;
36 Shape* shape() { return m_Shape; }
38 void reset() override;
39 void addRenderPath(RenderPath* path, const Mat2D& transform) override;
40 void fillRule(FillRule value) override;
41 void moveTo(float x, float y) override;
42 void lineTo(float x, float y) override;
43 void cubicTo(float ox, float oy, float ix, float iy, float x, float y) override;
44 virtual void close() override;
51 GradientStop(unsigned int color, float stop) : color(color), stop(stop)
56 class TvgGradientBuilder
59 std::vector<GradientStop> stops;
61 virtual ~TvgGradientBuilder() {}
62 TvgGradientBuilder(float sx, float sy, float ex, float ey) :
63 sx(sx), sy(sy), ex(ex), ey(ey)
67 virtual void make(TvgPaint* paint) = 0;
70 class TvgRadialGradientBuilder : public TvgGradientBuilder
73 TvgRadialGradientBuilder(float sx, float sy, float ex, float ey) :
74 TvgGradientBuilder(sx, sy, ex, ey)
77 void make(TvgPaint* paint) override;
80 class TvgLinearGradientBuilder : public TvgGradientBuilder
83 TvgLinearGradientBuilder(float sx, float sy, float ex, float ey) :
84 TvgGradientBuilder(sx, sy, ex, ey)
87 void make(TvgPaint* paint) override;
90 class TvgRenderPaint : public RenderPaint
94 TvgGradientBuilder* m_GradientBuilder;
97 TvgPaint* paint() { return &m_Paint; }
99 void style(RenderPaintStyle style) override;
100 void color(unsigned int value) override;
101 void thickness(float value) override;
102 void join(StrokeJoin value) override;
103 void cap(StrokeCap value) override;
104 void blendMode(BlendMode value) override;
106 void linearGradient(float sx, float sy, float ex, float ey) override;
107 void radialGradient(float sx, float sy, float ex, float ey) override;
108 void addStop(unsigned int color, float stop) override;
109 void completeGradient() override;
112 class TvgRenderer : public Renderer
118 Mat2D m_SaveTransform;
121 TvgRenderer(Canvas* canvas) : m_Canvas(canvas) {}
122 void save() override;
123 void restore() override;
124 void transform(const Mat2D& transform) override;
125 void drawPath(RenderPath* path, RenderPaint* paint) override;
126 void clipPath(RenderPath* path) override;