#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);
    }
  }
}