#ifndef _RIVE_DRAWABLE_HPP_
#define _RIVE_DRAWABLE_HPP_
#include "rive/generated/drawable_base.hpp"
#include "rive/renderer.hpp"
#include <vector>

namespace rive
{
	class ClippingShape;
	class Artboard;
	class DrawRules;

	class Drawable : public DrawableBase
	{
		friend class Artboard;

	private:
		std::vector<ClippingShape*> m_ClippingShapes;

		/// Used exclusively by the artboard;
		DrawRules* flattenedDrawRules = nullptr;
		Drawable* prev = nullptr;
		Drawable* next = nullptr;

	public:
		BlendMode blendMode() const { return (BlendMode)blendModeValue(); }
		bool clip(Renderer* renderer) const;
		virtual void draw(Renderer* renderer) = 0;
		void addClippingShape(ClippingShape* shape);
		inline const std::vector<ClippingShape*>& clippingShapes() const
		{
			return m_ClippingShapes;
		}

		const inline bool isHidden() const
		{
			// For now we have a single drawable flag, when we have more we can
			// make an actual enum for this.
			return (drawableFlags() & 0x1) == 0x1;
		}
	};
} // namespace rive

#endif