mirror of
https://github.com/rive-app/rive-cpp.git
synced 2026-01-18 21:21:17 +01:00
chore: add more scripted converter features (#10939) 5f3da40291
Co-authored-by: hernan <hernan@rive.app>
This commit is contained in:
@@ -1 +1 @@
|
||||
1a7500295d7f56ea72c605d886aa95816c29eed7
|
||||
5f3da4029184f77d7287d455803458f5646bdec9
|
||||
|
||||
20
dev/defs/scripted/scripted_data_converter.json
Normal file
20
dev/defs/scripted/scripted_data_converter.json
Normal 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"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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:
|
||||
|
||||
@@ -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
|
||||
@@ -125,6 +125,10 @@ enum class LuaAtoms : int16_t
|
||||
alpha,
|
||||
getNumber,
|
||||
getTrigger,
|
||||
getString,
|
||||
getBoolean,
|
||||
getColor,
|
||||
getList,
|
||||
addListener,
|
||||
removeListener,
|
||||
fire,
|
||||
|
||||
13
include/rive/scripted/scripted_data_converter.hpp
Normal file
13
include/rive/scripted/scripted_data_converter.hpp
Normal 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
|
||||
11
src/generated/scripted/scripted_data_converter_base.cpp
Normal file
11
src/generated/scripted/scripted_data_converter_base.cpp
Normal 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;
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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},
|
||||
|
||||
Reference in New Issue
Block a user