/*
 * 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
