/*
 * Copyright 2022 Rive
 */

#ifndef _RIVE_HITTEST_COMMAND_PATH_HPP_
#define _RIVE_HITTEST_COMMAND_PATH_HPP_

#include "rive/command_path.hpp"
#include "rive/math/hit_test.hpp"

namespace rive {
    class HitTester;

    class HitTestCommandPath : public CommandPath {
        HitTester m_Tester;
        Mat2D     m_Xform;
        IAABB     m_Area;
        FillRule  m_FillRule = FillRule::nonZero;

    public:

        HitTestCommandPath(const IAABB& area);

        // can call this between calls to move/line/etc.
        void setXform(const Mat2D& xform) { m_Xform = xform; }

        bool wasHit();

        // These 4 are not a good for the hit-tester
        void reset() override;
        void fillRule(FillRule value) override;
        void addPath(CommandPath* path, const Mat2D& transform) override;
        RenderPath* renderPath() override;

        void moveTo(float x, float y) override;
        void lineTo(float x, float y) override;
        void
        cubicTo(float ox, float oy, float ix, float iy, float x, float y) override;
        void close() override;
    };
} // namespace rive
#endif
