#include "rive/shapes/paint/fill.hpp"
#include "rive/shapes/shape_paint_container.hpp"

using namespace rive;

PathFlags Fill::pathFlags() const
{
    return (FillRule)fillRule() == FillRule::clockwise
               ? PathFlags::localClockwise
               : PathFlags::local;
}

RenderPaint* Fill::initRenderPaint(ShapePaintMutator* mutator)
{
    auto renderPaint = Super::initRenderPaint(mutator);
    renderPaint->style(RenderPaintStyle::fill);
    return renderPaint;
}

void Fill::applyTo(RenderPaint* renderPaint, float opacityModifier)
{
    renderPaint->style(RenderPaintStyle::fill);
    renderPaint->shader(nullptr);
    m_PaintMutator->applyTo(renderPaint, opacityModifier);
}

ShapePaintPath* Fill::pickPath(ShapePaintContainer* shape) const
{
    if ((FillRule)fillRule() == FillRule::clockwise)
    {
        return shape->localClockwisePath();
    }
    return shape->localPath();
}

void Fill::buildDependencies()
{
    if (effects()->size() > 0)
    {
        auto container = ShapePaintContainer::from(parent());
        if (container != nullptr)
        {
            container->pathBuilder()->addDependent(this);
        }
    }
}