blob: 06095758d77ba87a608c89e84c53dc717f9fafb9 [file] [edit]
/*
* Copyright 2024 Rive
*/
#include "rive/animation/focus_action_target.hpp"
#include "rive/animation/listener_invocation.hpp"
#include "rive/animation/state_machine_instance.hpp"
#include "rive/artboard.hpp"
#include "rive/focus_data.hpp"
#include "rive/node.hpp"
using namespace rive;
void FocusActionTarget::perform(StateMachineInstance* stateMachineInstance,
const ListenerInvocation& invocation) const
{
(void)invocation;
auto target = stateMachineInstance->artboard()->resolve(targetId());
if (target == nullptr || !target->is<Node>())
{
return;
}
auto node = target->as<Node>();
FocusData* focusData = nullptr;
// Find FocusData child of the node
for (auto child : node->children())
{
if (child->is<FocusData>())
{
focusData = child->as<FocusData>();
break;
}
}
if (focusData != nullptr)
{
stateMachineInstance->setFocus(focusData);
}
}