#ifndef _RIVE_STROKE_HPP_
#define _RIVE_STROKE_HPP_
#include "rive/generated/shapes/paint/stroke_base.hpp"
#include "rive/shapes/path_space.hpp"
namespace rive
{
	class StrokeEffect;
	class Stroke : public StrokeBase
	{
	private:
		StrokeEffect* m_Effect = nullptr;

	public:
		RenderPaint* initRenderPaint(ShapePaintMutator* mutator) override;
		PathSpace pathSpace() const override;
		void draw(Renderer* renderer, CommandPath* path) override;
		void addStrokeEffect(StrokeEffect* effect);
		bool hasStrokeEffect() { return m_Effect != nullptr; }
		void invalidateEffects();
		bool isVisible() const override;

	protected:
		void thicknessChanged() override;
		void capChanged() override;
		void joinChanged() override;
	};
} // namespace rive

#endif