#ifndef _RIVE_SHAPE_PAINT_MUTATOR_HPP_
#define _RIVE_SHAPE_PAINT_MUTATOR_HPP_

namespace rive
{
    class Component;
    class RenderPaint;
    class ShapePaintMutator
    {
    private:
        float m_RenderOpacity = 1.0f;
        RenderPaint* m_RenderPaint = nullptr;
        /// The Component providing this ShapePaintMutator interface.
        Component* m_Component = nullptr;

    protected:
        /// Hook up this paint mutator as the mutator for the shape paint
        /// expected to be the parent.
        bool initPaintMutator(Component* component);
        virtual void renderOpacityChanged() = 0;

        RenderPaint* renderPaint() const { return m_RenderPaint; }

        virtual bool internalIsTranslucent() const = 0;

    public:
        float renderOpacity() const { return m_RenderOpacity; }
        void renderOpacity(float value);

        Component* component() const { return m_Component; }
        
        bool isTranslucent() const {
            return m_RenderOpacity < 1 || this->internalIsTranslucent();
        }
    };
} // namespace rive
#endif
