fix(runtime): ScriptedArtboard origin fix (#11395) 88f2054b8a

Co-authored-by: Philip Chung <philterdesign@gmail.com>
This commit is contained in:
philter
2026-01-07 21:29:24 +00:00
parent be323ebe74
commit 5b1100d31e
7 changed files with 34 additions and 3 deletions

View File

@@ -1 +1 @@
a4e9d504691a12f5ef14a7c4b72ad28fb249945a
88f2054b8ab978cc7aeae5115f83a6aaeca27480

View File

@@ -219,10 +219,12 @@ int ScriptedArtboard::pushData(lua_State* L)
int ScriptedArtboard::instance(lua_State* L)
{
auto artboardInstance = artboard()->instance();
artboardInstance->frameOrigin(false);
lua_newrive<ScriptedArtboard>(L,
L,
m_scriptReffedArtboard->file(),
artboard()->instance());
std::move(artboardInstance));
return 1;
}

View File

@@ -39,10 +39,12 @@ void ScriptedObject::setArtboardInput(std::string name, Artboard* artboard)
auto state = m_state->state;
rive_lua_pushRef(state, m_self);
auto artboardInstance = artboard->instance();
artboardInstance->frameOrigin(false);
lua_newrive<ScriptedArtboard>(state,
state,
ref_rcp(scriptAsset()->file()),
artboard->instance());
std::move(artboardInstance));
lua_setfield(state, -2, name.c_str());
rive_lua_pop(state, 1);
addScriptedDirt(ComponentDirt::ScriptUpdate);

View File

@@ -310,4 +310,31 @@ TEST_CASE("script instances Artboard input", "[silver]")
}
CHECK(silver.matches("script_artboards"));
}
TEST_CASE("script instances Artboard input with proper origin", "[silver]")
{
rive::SerializingFactory silver;
auto file = ReadRiveFile("assets/script_artboard_origin_test.riv", &silver);
auto artboard = file->artboardNamed("Artboard");
silver.frameSize(artboard->width(), artboard->height());
REQUIRE(artboard != nullptr);
auto stateMachine = artboard->stateMachineAt(0);
stateMachine->advanceAndApply(0.1f);
auto renderer = silver.makeRenderer();
artboard->draw(renderer.get());
int frames = 60;
for (int i = 0; i < frames; i++)
{
silver.addFrame();
stateMachine->advanceAndApply(0.016f);
artboard->draw(renderer.get());
}
CHECK(silver.matches("script_artboards_origin"));
}

Binary file not shown.