#ifndef _RIVE_PATH_COMPOSER_HPP_
#define _RIVE_PATH_COMPOSER_HPP_
#include "rive/component.hpp"
namespace rive {
class Shape;
class CommandPath;
class RenderPath;
class PathComposer : public Component {
private:
    Shape* m_Shape;
    std::unique_ptr<CommandPath> m_LocalPath;
    std::unique_ptr<CommandPath> m_WorldPath;

public:
    PathComposer(Shape* shape);
    Shape* shape() const { return m_Shape; }
    void buildDependencies() override;
    void update(ComponentDirt value) override;

    CommandPath* localPath() const { return m_LocalPath.get(); }
    CommandPath* worldPath() const { return m_WorldPath.get(); }
};
} // namespace rive
#endif
