chore: add more scripted converter features (#10939) 5f3da40291

Co-authored-by: hernan <hernan@rive.app>
This commit is contained in:
bodymovin
2025-10-30 21:24:08 +00:00
parent 153e8fb2b5
commit 972141d736
9 changed files with 173 additions and 9 deletions

View File

@@ -1 +1 @@
1a7500295d7f56ea72c605d886aa95816c29eed7
5f3da4029184f77d7287d455803458f5646bdec9

View File

@@ -0,0 +1,20 @@
{
"name": "ScriptedDataConverter",
"key": {
"int": 629,
"string": "scripteddataconverter"
},
"extends": "data_bind/converters/data_converter.json",
"properties": {
"scriptAssetId": {
"type": "Id",
"typeRuntime": "uint",
"initialValue": "Core.missingId",
"initialValueRuntime": "-1",
"key": {
"int": 892,
"string": "scriptassetid"
}
}
}
}

View File

@@ -208,6 +208,7 @@
#include "rive/script_input_string.hpp"
#include "rive/script_input_trigger.hpp"
#include "rive/script_input_viewmodel_property.hpp"
#include "rive/scripted/scripted_data_converter.hpp"
#include "rive/scripted/scripted_drawable.hpp"
#include "rive/shapes/clipping_shape.hpp"
#include "rive/shapes/contour_mesh_vertex.hpp"
@@ -430,6 +431,8 @@ public:
return new Solo();
case ScriptedDrawableBase::typeKey:
return new ScriptedDrawable();
case ScriptedDataConverterBase::typeKey:
return new ScriptedDataConverter();
case ScriptInputNumberBase::typeKey:
return new ScriptInputNumber();
case NestedArtboardLayoutBase::typeKey:
@@ -928,6 +931,9 @@ public:
case ScriptedDrawableBase::scriptAssetIdPropertyKey:
object->as<ScriptedDrawableBase>()->scriptAssetId(value);
break;
case ScriptedDataConverterBase::scriptAssetIdPropertyKey:
object->as<ScriptedDataConverterBase>()->scriptAssetId(value);
break;
case NestedArtboardLayoutBase::instanceWidthUnitsValuePropertyKey:
object->as<NestedArtboardLayoutBase>()->instanceWidthUnitsValue(
value);
@@ -1528,6 +1534,9 @@ public:
case DataEnumValueBase::valuePropertyKey:
object->as<DataEnumValueBase>()->value(value);
break;
case DataConverterBase::namePropertyKey:
object->as<DataConverterBase>()->name(value);
break;
case AnimationBase::namePropertyKey:
object->as<AnimationBase>()->name(value);
break;
@@ -1546,9 +1555,6 @@ public:
case CustomPropertyStringBase::propertyValuePropertyKey:
object->as<CustomPropertyStringBase>()->propertyValue(value);
break;
case DataConverterBase::namePropertyKey:
object->as<DataConverterBase>()->name(value);
break;
case DataConverterStringPadBase::textPropertyKey:
object->as<DataConverterStringPadBase>()->text(value);
break;
@@ -2511,6 +2517,8 @@ public:
return object->as<SoloBase>()->activeComponentId();
case ScriptedDrawableBase::scriptAssetIdPropertyKey:
return object->as<ScriptedDrawableBase>()->scriptAssetId();
case ScriptedDataConverterBase::scriptAssetIdPropertyKey:
return object->as<ScriptedDataConverterBase>()->scriptAssetId();
case NestedArtboardLayoutBase::instanceWidthUnitsValuePropertyKey:
return object->as<NestedArtboardLayoutBase>()
->instanceWidthUnitsValue();
@@ -2943,6 +2951,8 @@ public:
return object->as<DataEnumValueBase>()->key();
case DataEnumValueBase::valuePropertyKey:
return object->as<DataEnumValueBase>()->value();
case DataConverterBase::namePropertyKey:
return object->as<DataConverterBase>()->name();
case AnimationBase::namePropertyKey:
return object->as<AnimationBase>()->name();
case StateMachineComponentBase::namePropertyKey:
@@ -2956,8 +2966,6 @@ public:
return object->as<OpenUrlEventBase>()->url();
case CustomPropertyStringBase::propertyValuePropertyKey:
return object->as<CustomPropertyStringBase>()->propertyValue();
case DataConverterBase::namePropertyKey:
return object->as<DataConverterBase>()->name();
case DataConverterStringPadBase::textPropertyKey:
return object->as<DataConverterStringPadBase>()->text();
case DataConverterToStringBase::colorFormatPropertyKey:
@@ -3598,6 +3606,7 @@ public:
case NestedAnimationBase::animationIdPropertyKey:
case SoloBase::activeComponentIdPropertyKey:
case ScriptedDrawableBase::scriptAssetIdPropertyKey:
case ScriptedDataConverterBase::scriptAssetIdPropertyKey:
case NestedArtboardLayoutBase::instanceWidthUnitsValuePropertyKey:
case NestedArtboardLayoutBase::instanceHeightUnitsValuePropertyKey:
case NestedArtboardLayoutBase::instanceWidthScaleTypePropertyKey:
@@ -3785,13 +3794,13 @@ public:
case ComponentBase::namePropertyKey:
case DataEnumValueBase::keyPropertyKey:
case DataEnumValueBase::valuePropertyKey:
case DataConverterBase::namePropertyKey:
case AnimationBase::namePropertyKey:
case StateMachineComponentBase::namePropertyKey:
case KeyFrameStringBase::valuePropertyKey:
case TransitionValueStringComparatorBase::valuePropertyKey:
case OpenUrlEventBase::urlPropertyKey:
case CustomPropertyStringBase::propertyValuePropertyKey:
case DataConverterBase::namePropertyKey:
case DataConverterStringPadBase::textPropertyKey:
case DataConverterToStringBase::colorFormatPropertyKey:
case BindablePropertyStringBase::propertyValuePropertyKey:
@@ -4176,6 +4185,8 @@ public:
return object->is<SoloBase>();
case ScriptedDrawableBase::scriptAssetIdPropertyKey:
return object->is<ScriptedDrawableBase>();
case ScriptedDataConverterBase::scriptAssetIdPropertyKey:
return object->is<ScriptedDataConverterBase>();
case NestedArtboardLayoutBase::instanceWidthUnitsValuePropertyKey:
return object->is<NestedArtboardLayoutBase>();
case NestedArtboardLayoutBase::instanceHeightUnitsValuePropertyKey:
@@ -4541,6 +4552,8 @@ public:
return object->is<DataEnumValueBase>();
case DataEnumValueBase::valuePropertyKey:
return object->is<DataEnumValueBase>();
case DataConverterBase::namePropertyKey:
return object->is<DataConverterBase>();
case AnimationBase::namePropertyKey:
return object->is<AnimationBase>();
case StateMachineComponentBase::namePropertyKey:
@@ -4553,8 +4566,6 @@ public:
return object->is<OpenUrlEventBase>();
case CustomPropertyStringBase::propertyValuePropertyKey:
return object->is<CustomPropertyStringBase>();
case DataConverterBase::namePropertyKey:
return object->is<DataConverterBase>();
case DataConverterStringPadBase::textPropertyKey:
return object->is<DataConverterStringPadBase>();
case DataConverterToStringBase::colorFormatPropertyKey:

View File

@@ -0,0 +1,71 @@
#ifndef _RIVE_SCRIPTED_DATA_CONVERTER_BASE_HPP_
#define _RIVE_SCRIPTED_DATA_CONVERTER_BASE_HPP_
#include "rive/core/field_types/core_uint_type.hpp"
#include "rive/data_bind/converters/data_converter.hpp"
namespace rive
{
class ScriptedDataConverterBase : public DataConverter
{
protected:
typedef DataConverter Super;
public:
static const uint16_t typeKey = 629;
/// Helper to quickly determine if a core object extends another without
/// RTTI at runtime.
bool isTypeOf(uint16_t typeKey) const override
{
switch (typeKey)
{
case ScriptedDataConverterBase::typeKey:
case DataConverterBase::typeKey:
return true;
default:
return false;
}
}
uint16_t coreType() const override { return typeKey; }
static const uint16_t scriptAssetIdPropertyKey = 892;
protected:
uint32_t m_ScriptAssetId = -1;
public:
inline uint32_t scriptAssetId() const { return m_ScriptAssetId; }
void scriptAssetId(uint32_t value)
{
if (m_ScriptAssetId == value)
{
return;
}
m_ScriptAssetId = value;
scriptAssetIdChanged();
}
Core* clone() const override;
void copy(const ScriptedDataConverterBase& object)
{
m_ScriptAssetId = object.m_ScriptAssetId;
DataConverter::copy(object);
}
bool deserialize(uint16_t propertyKey, BinaryReader& reader) override
{
switch (propertyKey)
{
case scriptAssetIdPropertyKey:
m_ScriptAssetId = CoreUintType::deserialize(reader);
return true;
}
return DataConverter::deserialize(propertyKey, reader);
}
protected:
virtual void scriptAssetIdChanged() {}
};
} // namespace rive
#endif

View File

@@ -125,6 +125,10 @@ enum class LuaAtoms : int16_t
alpha,
getNumber,
getTrigger,
getString,
getBoolean,
getColor,
getList,
addListener,
removeListener,
fire,

View File

@@ -0,0 +1,13 @@
#ifndef _RIVE_SCRIPTED_DATA_CONVERTER_HPP_
#define _RIVE_SCRIPTED_DATA_CONVERTER_HPP_
#include "rive/generated/scripted/scripted_data_converter_base.hpp"
#include <stdio.h>
namespace rive
{
class ScriptedDataConverter : public ScriptedDataConverterBase
{
public:
};
} // namespace rive
#endif

View File

@@ -0,0 +1,11 @@
#include "rive/generated/scripted/scripted_data_converter_base.hpp"
#include "rive/scripted/scripted_data_converter.hpp"
using namespace rive;
Core* ScriptedDataConverterBase::clone() const
{
auto cloned = new ScriptedDataConverter();
cloned->copy(*this);
return cloned;
}

View File

@@ -424,6 +424,36 @@ static int vm_namecall(lua_State* L)
return vm->pushValue(name,
ViewModelInstanceTriggerBase::typeKey);
}
case (int)LuaAtoms::getString:
{
size_t namelen = 0;
const char* name = luaL_checklstring(L, 2, &namelen);
assert(vm->state() == L);
return vm->pushValue(name,
ViewModelInstanceStringBase::typeKey);
}
case (int)LuaAtoms::getBoolean:
{
size_t namelen = 0;
const char* name = luaL_checklstring(L, 2, &namelen);
assert(vm->state() == L);
return vm->pushValue(name,
ViewModelInstanceBooleanBase::typeKey);
}
case (int)LuaAtoms::getColor:
{
size_t namelen = 0;
const char* name = luaL_checklstring(L, 2, &namelen);
assert(vm->state() == L);
return vm->pushValue(name, ViewModelInstanceColorBase::typeKey);
}
case (int)LuaAtoms::getList:
{
size_t namelen = 0;
const char* name = luaL_checklstring(L, 2, &namelen);
assert(vm->state() == L);
return vm->pushValue(name, ViewModelInstanceListBase::typeKey);
}
default:
break;
}

View File

@@ -83,6 +83,10 @@ std::unordered_map<std::string, int16_t> atoms = {
{"alpha", (int16_t)LuaAtoms::alpha},
{"getNumber", (int16_t)LuaAtoms::getNumber},
{"getTrigger", (int16_t)LuaAtoms::getTrigger},
{"getString", (int16_t)LuaAtoms::getString},
{"getBoolean", (int16_t)LuaAtoms::getBoolean},
{"getColor", (int16_t)LuaAtoms::getColor},
{"getList", (int16_t)LuaAtoms::getList},
{"addListener", (int16_t)LuaAtoms::addListener},
{"removeListener", (int16_t)LuaAtoms::removeListener},
{"fire", (int16_t)LuaAtoms::fire},