| #ifndef _RIVE_LIST_PATH_HPP_ | |
| #define _RIVE_LIST_PATH_HPP_ | |
| #include "rive/generated/shapes/list_path_base.hpp" | |
| #include "rive/data_bind/data_bind_list_item_consumer.hpp" | |
| #include "rive/viewmodel/viewmodel_instance_list_item.hpp" | |
| #include "rive/viewmodel/viewmodel_instance_number.hpp" | |
| #include "rive/viewmodel/property_symbol_dependent.hpp" | |
| #include "rive/shapes/vertex.hpp" | |
| #include <stdio.h> | |
| namespace rive | |
| { | |
| class VertexListener; | |
| class VertexPropertyListenerSingle : public PropertySymbolDependentSingle | |
| { | |
| public: | |
| VertexPropertyListenerSingle(Core* vertex, | |
| VertexListener* vertexListener, | |
| ViewModelInstanceValue* instanceValue, | |
| uint16_t propertyKey, | |
| float multiplier); | |
| void writeValue() override; | |
| protected: | |
| float m_multiplier = 1; | |
| }; | |
| class VertexPropertyListenerMulti : public PropertySymbolDependentMulti | |
| { | |
| public: | |
| VertexPropertyListenerMulti(Core* vertex, | |
| VertexListener* vertexListener, | |
| ViewModelInstanceValue* instanceValue, | |
| std::vector<uint16_t> propertyKeys, | |
| float multiplier); | |
| void writeValue() override; | |
| private: | |
| float m_multiplier = 1; | |
| }; | |
| class VertexPropertyListenerPoint : public PropertySymbolDependent | |
| { | |
| public: | |
| ~VertexPropertyListenerPoint(); | |
| VertexPropertyListenerPoint(Core* vertex, | |
| VertexListener* vertexListener, | |
| ViewModelInstanceValue* xValue, | |
| ViewModelInstanceValue* yValue, | |
| uint16_t distKey, | |
| uint16_t rotKey); | |
| void writeValue() override; | |
| private: | |
| ViewModelInstanceValue* m_yValue; | |
| uint16_t m_distKey; | |
| uint16_t m_rotKey; | |
| }; | |
| class VertexListener : public CoreObjectListener | |
| { | |
| public: | |
| VertexListener(Vertex* vertex, rcp<ViewModelInstance> instance, Path* path); | |
| Vertex* vertex() { return m_core->as<Vertex>(); } | |
| void markDirty() override { m_path->markPathDirty(); } | |
| private: | |
| Path* m_path = nullptr; | |
| void createPropertyListener(SymbolType symbolType); | |
| void createInPointPropertyListener(); | |
| void createOutPointPropertyListener(); | |
| PropertySymbolDependent* createSinglePropertyListener( | |
| SymbolType symbolType); | |
| PropertySymbolDependent* createDistancePropertyListener(); | |
| PropertySymbolDependent* createRotationPropertyListener(); | |
| protected: | |
| void createProperties() override; | |
| }; | |
| class ListPath : public ListPathBase, public DataBindListItemConsumer | |
| { | |
| public: | |
| ~ListPath(); | |
| void updateList(std::vector<rcp<ViewModelInstanceListItem>>* list) override; | |
| private: | |
| std::vector<VertexListener*> m_vertexListeners; | |
| }; | |
| } // namespace rive | |
| #endif |