diff --git a/.rive_head b/.rive_head index 5d3e122e..1faf3938 100644 --- a/.rive_head +++ b/.rive_head @@ -1 +1 @@ -ba94f03ad0d0cbcea241f14f72689a2184ed7dcd +3734dc3ab996c24c024129cb5f88d257f241074d diff --git a/include/rive/viewmodel/runtime/viewmodel_instance_artboard_runtime.hpp b/include/rive/viewmodel/runtime/viewmodel_instance_artboard_runtime.hpp index fb512fc7..57bb9010 100644 --- a/include/rive/viewmodel/runtime/viewmodel_instance_artboard_runtime.hpp +++ b/include/rive/viewmodel/runtime/viewmodel_instance_artboard_runtime.hpp @@ -19,6 +19,7 @@ public: ViewModelInstanceValueRuntime(viewModelInstance) {} void value(rcp bindableArtboard); + void viewModelInstance(rcp viewModelInstance); const DataType dataType() override { return DataType::artboard; } #ifdef TESTING diff --git a/include/rive/viewmodel/viewmodel_instance_artboard.hpp b/include/rive/viewmodel/viewmodel_instance_artboard.hpp index ac225037..812d3b55 100644 --- a/include/rive/viewmodel/viewmodel_instance_artboard.hpp +++ b/include/rive/viewmodel/viewmodel_instance_artboard.hpp @@ -18,11 +18,14 @@ protected: public: void asset(rcp value); + void viewModelInstance(rcp value); rcp asset() { return m_bindableArtboard; } void applyValue(DataValueInteger*); + rcp viewModelInstance() { return m_viewModelInstance; } private: rcp m_bindableArtboard = nullptr; + rcp m_viewModelInstance = nullptr; #ifdef WITH_RIVE_TOOLS public: void onChanged(ViewModelArtboardChanged callback) diff --git a/src/nested_artboard.cpp b/src/nested_artboard.cpp index 681c863c..5e04e1ee 100644 --- a/src/nested_artboard.cpp +++ b/src/nested_artboard.cpp @@ -137,7 +137,13 @@ void NestedArtboard::updateArtboard( nestedStateMachine)); // take ownership } nest(artboardInstance.release()); - if (m_dataContext != nullptr && m_viewModelInstance == nullptr) + if (viewModelInstanceArtboard->viewModelInstance()) + { + bindViewModelInstance( + viewModelInstanceArtboard->viewModelInstance(), + m_dataContext); + } + else if (m_dataContext != nullptr && m_viewModelInstance == nullptr) { internalDataContext(m_dataContext); } diff --git a/src/viewmodel/runtime/viewmodel_instance_artboard_runtime.cpp b/src/viewmodel/runtime/viewmodel_instance_artboard_runtime.cpp index 161b3b21..8220449a 100644 --- a/src/viewmodel/runtime/viewmodel_instance_artboard_runtime.cpp +++ b/src/viewmodel/runtime/viewmodel_instance_artboard_runtime.cpp @@ -11,6 +11,13 @@ void ViewModelInstanceArtboardRuntime::value( bindableArtboard); } +void ViewModelInstanceArtboardRuntime::viewModelInstance( + rcp viewModelInstance) +{ + m_viewModelInstanceValue->as() + ->viewModelInstance(viewModelInstance); +} + #ifdef TESTING rcp ViewModelInstanceArtboardRuntime::testing_value() { diff --git a/src/viewmodel/viewmodel_instance_artboard.cpp b/src/viewmodel/viewmodel_instance_artboard.cpp index 5d4465b6..2191c664 100644 --- a/src/viewmodel/viewmodel_instance_artboard.cpp +++ b/src/viewmodel/viewmodel_instance_artboard.cpp @@ -31,4 +31,9 @@ void ViewModelInstanceArtboard::asset(rcp value) void ViewModelInstanceArtboard::applyValue(DataValueInteger* dataValue) { propertyValue(dataValue->value()); +} + +void ViewModelInstanceArtboard::viewModelInstance(rcp value) +{ + m_viewModelInstance = value; } \ No newline at end of file