Xxxx databinding add boolean Adding booleans to the list of view model primitives Diffs= e66e242c6 Xxxx databinding add boolean (#7456) Co-authored-by: hernan <hernan@rive.app>
diff --git a/.rive_head b/.rive_head index d6e407c..85b696c 100644 --- a/.rive_head +++ b/.rive_head
@@ -1 +1 @@ -9cd8759a02aaa45684e80a8d77671c1536ab387d +e66e242c649e3e61f12a3adbd824bcd9a7525a53
diff --git a/dev/defs/viewmodel/viewmodel_instance_boolean.json b/dev/defs/viewmodel/viewmodel_instance_boolean.json new file mode 100644 index 0000000..a3ea1d5 --- /dev/null +++ b/dev/defs/viewmodel/viewmodel_instance_boolean.json
@@ -0,0 +1,29 @@ +{ + "name": "ViewModelInstanceBoolean", + "key": { + "int": 449, + "string": "viewmodelinstanceboolean" + }, + "extends": "viewmodel/viewmodel_instance_value.json", + "properties": { + "propertyValue": { + "type": "bool", + "initialValue": "false", + "key": { + "int": 593, + "string": "propertyvalue" + }, + "description": "The boolean value." + }, + "playbackValue": { + "type": "bool", + "initialValue": "false", + "key": { + "int": 594, + "string": "playbackvalue" + }, + "runtime": false, + "coop": false + } + } +} \ No newline at end of file
diff --git a/dev/defs/viewmodel/viewmodel_property_boolean.json b/dev/defs/viewmodel/viewmodel_property_boolean.json new file mode 100644 index 0000000..a770346 --- /dev/null +++ b/dev/defs/viewmodel/viewmodel_property_boolean.json
@@ -0,0 +1,8 @@ +{ + "name": "ViewModelPropertyBoolean", + "key": { + "int": 448, + "string": "viewmodelpropertyboolean" + }, + "extends": "viewmodel/viewmodel_property.json" +} \ No newline at end of file
diff --git a/include/rive/data_bind/context/context_value_boolean.hpp b/include/rive/data_bind/context/context_value_boolean.hpp new file mode 100644 index 0000000..b7a963b --- /dev/null +++ b/include/rive/data_bind/context/context_value_boolean.hpp
@@ -0,0 +1,19 @@ +#ifndef _RIVE_DATA_BIND_CONTEXT_VALUE_BOOLEAN_HPP_ +#define _RIVE_DATA_BIND_CONTEXT_VALUE_BOOLEAN_HPP_ +#include "rive/data_bind/context/context_value.hpp" +namespace rive +{ +class DataBindContextValueBoolean : public DataBindContextValue +{ + +public: + DataBindContextValueBoolean(ViewModelInstanceValue* value); + void apply(Component* component, uint32_t propertyKey) override; + virtual void applyToSource(Component* component, uint32_t propertyKey) override; + +private: + bool m_Value; +}; +} // namespace rive + +#endif \ No newline at end of file
diff --git a/include/rive/generated/core_registry.hpp b/include/rive/generated/core_registry.hpp index b073d8a..66dc240 100644 --- a/include/rive/generated/core_registry.hpp +++ b/include/rive/generated/core_registry.hpp
@@ -158,6 +158,7 @@ #include "rive/viewmodel/viewmodel.hpp" #include "rive/viewmodel/viewmodel_component.hpp" #include "rive/viewmodel/viewmodel_instance.hpp" +#include "rive/viewmodel/viewmodel_instance_boolean.hpp" #include "rive/viewmodel/viewmodel_instance_color.hpp" #include "rive/viewmodel/viewmodel_instance_enum.hpp" #include "rive/viewmodel/viewmodel_instance_list.hpp" @@ -167,6 +168,7 @@ #include "rive/viewmodel/viewmodel_instance_value.hpp" #include "rive/viewmodel/viewmodel_instance_viewmodel.hpp" #include "rive/viewmodel/viewmodel_property.hpp" +#include "rive/viewmodel/viewmodel_property_boolean.hpp" #include "rive/viewmodel/viewmodel_property_color.hpp" #include "rive/viewmodel/viewmodel_property_enum.hpp" #include "rive/viewmodel/viewmodel_property_list.hpp" @@ -205,12 +207,16 @@ return new ViewModelPropertyViewModel(); case ViewModelInstanceBase::typeKey: return new ViewModelInstance(); + case ViewModelPropertyBooleanBase::typeKey: + return new ViewModelPropertyBoolean(); case DataEnumBase::typeKey: return new DataEnum(); case ViewModelPropertyEnumBase::typeKey: return new ViewModelPropertyEnum(); case ViewModelPropertyColorBase::typeKey: return new ViewModelPropertyColor(); + case ViewModelInstanceBooleanBase::typeKey: + return new ViewModelInstanceBoolean(); case ViewModelInstanceListBase::typeKey: return new ViewModelInstanceList(); case ViewModelInstanceNumberBase::typeKey: @@ -455,6 +461,9 @@ case ViewModelInstanceListItemBase::useLinkedArtboardPropertyKey: object->as<ViewModelInstanceListItemBase>()->useLinkedArtboard(value); break; + case ViewModelInstanceBooleanBase::propertyValuePropertyKey: + object->as<ViewModelInstanceBooleanBase>()->propertyValue(value); + break; case TransformComponentConstraintBase::offsetPropertyKey: object->as<TransformComponentConstraintBase>()->offset(value); break; @@ -1459,6 +1468,8 @@ { case ViewModelInstanceListItemBase::useLinkedArtboardPropertyKey: return object->as<ViewModelInstanceListItemBase>()->useLinkedArtboard(); + case ViewModelInstanceBooleanBase::propertyValuePropertyKey: + return object->as<ViewModelInstanceBooleanBase>()->propertyValue(); case TransformComponentConstraintBase::offsetPropertyKey: return object->as<TransformComponentConstraintBase>()->offset(); case TransformComponentConstraintBase::doesCopyPropertyKey: @@ -2135,6 +2146,7 @@ switch (propertyKey) { case ViewModelInstanceListItemBase::useLinkedArtboardPropertyKey: + case ViewModelInstanceBooleanBase::propertyValuePropertyKey: case TransformComponentConstraintBase::offsetPropertyKey: case TransformComponentConstraintBase::doesCopyPropertyKey: case TransformComponentConstraintBase::minPropertyKey: @@ -2487,6 +2499,8 @@ { case ViewModelInstanceListItemBase::useLinkedArtboardPropertyKey: return object->is<ViewModelInstanceListItemBase>(); + case ViewModelInstanceBooleanBase::propertyValuePropertyKey: + return object->is<ViewModelInstanceBooleanBase>(); case TransformComponentConstraintBase::offsetPropertyKey: return object->is<TransformComponentConstraintBase>(); case TransformComponentConstraintBase::doesCopyPropertyKey:
diff --git a/include/rive/generated/viewmodel/viewmodel_instance_boolean_base.hpp b/include/rive/generated/viewmodel/viewmodel_instance_boolean_base.hpp new file mode 100644 index 0000000..5841b6c --- /dev/null +++ b/include/rive/generated/viewmodel/viewmodel_instance_boolean_base.hpp
@@ -0,0 +1,71 @@ +#ifndef _RIVE_VIEW_MODEL_INSTANCE_BOOLEAN_BASE_HPP_ +#define _RIVE_VIEW_MODEL_INSTANCE_BOOLEAN_BASE_HPP_ +#include "rive/core/field_types/core_bool_type.hpp" +#include "rive/viewmodel/viewmodel_instance_value.hpp" +namespace rive +{ +class ViewModelInstanceBooleanBase : public ViewModelInstanceValue +{ +protected: + typedef ViewModelInstanceValue Super; + +public: + static const uint16_t typeKey = 449; + + /// Helper to quickly determine if a core object extends another without RTTI + /// at runtime. + bool isTypeOf(uint16_t typeKey) const override + { + switch (typeKey) + { + case ViewModelInstanceBooleanBase::typeKey: + case ViewModelInstanceValueBase::typeKey: + return true; + default: + return false; + } + } + + uint16_t coreType() const override { return typeKey; } + + static const uint16_t propertyValuePropertyKey = 593; + +private: + bool m_PropertyValue = false; + +public: + inline bool propertyValue() const { return m_PropertyValue; } + void propertyValue(bool value) + { + if (m_PropertyValue == value) + { + return; + } + m_PropertyValue = value; + propertyValueChanged(); + } + + Core* clone() const override; + void copy(const ViewModelInstanceBooleanBase& object) + { + m_PropertyValue = object.m_PropertyValue; + ViewModelInstanceValue::copy(object); + } + + bool deserialize(uint16_t propertyKey, BinaryReader& reader) override + { + switch (propertyKey) + { + case propertyValuePropertyKey: + m_PropertyValue = CoreBoolType::deserialize(reader); + return true; + } + return ViewModelInstanceValue::deserialize(propertyKey, reader); + } + +protected: + virtual void propertyValueChanged() {} +}; +} // namespace rive + +#endif \ No newline at end of file
diff --git a/include/rive/generated/viewmodel/viewmodel_property_boolean_base.hpp b/include/rive/generated/viewmodel/viewmodel_property_boolean_base.hpp new file mode 100644 index 0000000..61a8c29 --- /dev/null +++ b/include/rive/generated/viewmodel/viewmodel_property_boolean_base.hpp
@@ -0,0 +1,37 @@ +#ifndef _RIVE_VIEW_MODEL_PROPERTY_BOOLEAN_BASE_HPP_ +#define _RIVE_VIEW_MODEL_PROPERTY_BOOLEAN_BASE_HPP_ +#include "rive/viewmodel/viewmodel_property.hpp" +namespace rive +{ +class ViewModelPropertyBooleanBase : public ViewModelProperty +{ +protected: + typedef ViewModelProperty Super; + +public: + static const uint16_t typeKey = 448; + + /// Helper to quickly determine if a core object extends another without RTTI + /// at runtime. + bool isTypeOf(uint16_t typeKey) const override + { + switch (typeKey) + { + case ViewModelPropertyBooleanBase::typeKey: + case ViewModelPropertyBase::typeKey: + case ViewModelComponentBase::typeKey: + return true; + default: + return false; + } + } + + uint16_t coreType() const override { return typeKey; } + + Core* clone() const override; + +protected: +}; +} // namespace rive + +#endif \ No newline at end of file
diff --git a/include/rive/viewmodel/viewmodel_instance_boolean.hpp b/include/rive/viewmodel/viewmodel_instance_boolean.hpp new file mode 100644 index 0000000..c00c159 --- /dev/null +++ b/include/rive/viewmodel/viewmodel_instance_boolean.hpp
@@ -0,0 +1,14 @@ +#ifndef _RIVE_VIEW_MODEL_INSTANCE_BOOLEAN_HPP_ +#define _RIVE_VIEW_MODEL_INSTANCE_BOOLEAN_HPP_ +#include "rive/generated/viewmodel/viewmodel_instance_boolean_base.hpp" +#include <stdio.h> +namespace rive +{ +class ViewModelInstanceBoolean : public ViewModelInstanceBooleanBase +{ +protected: + void propertyValueChanged() override; +}; +} // namespace rive + +#endif \ No newline at end of file
diff --git a/include/rive/viewmodel/viewmodel_property_boolean.hpp b/include/rive/viewmodel/viewmodel_property_boolean.hpp new file mode 100644 index 0000000..c86fb61 --- /dev/null +++ b/include/rive/viewmodel/viewmodel_property_boolean.hpp
@@ -0,0 +1,13 @@ +#ifndef _RIVE_VIEW_MODEL_PROPERTY_BOOLEAN_HPP_ +#define _RIVE_VIEW_MODEL_PROPERTY_BOOLEAN_HPP_ +#include "rive/generated/viewmodel/viewmodel_property_boolean_base.hpp" +#include <stdio.h> +namespace rive +{ +class ViewModelPropertyBoolean : public ViewModelPropertyBooleanBase +{ +public: +}; +} // namespace rive + +#endif \ No newline at end of file
diff --git a/src/data_bind/context/context_value_boolean.cpp b/src/data_bind/context/context_value_boolean.cpp new file mode 100644 index 0000000..3116aa9 --- /dev/null +++ b/src/data_bind/context/context_value_boolean.cpp
@@ -0,0 +1,26 @@ +#include "rive/data_bind/context/context_value_boolean.hpp" +#include "rive/generated/core_registry.hpp" + +using namespace rive; + +DataBindContextValueBoolean::DataBindContextValueBoolean(ViewModelInstanceValue* value) +{ + m_Source = value; +} + +void DataBindContextValueBoolean::apply(Component* target, uint32_t propertyKey) +{ + CoreRegistry::setBool(target, + propertyKey, + m_Source->as<ViewModelInstanceBoolean>()->propertyValue()); +} + +void DataBindContextValueBoolean::applyToSource(Component* target, uint32_t propertyKey) +{ + auto value = CoreRegistry::getBool(target, propertyKey); + if (m_Value != value) + { + m_Value = value; + m_Source->as<ViewModelInstanceBoolean>()->propertyValue(value); + } +} \ No newline at end of file
diff --git a/src/data_bind/data_bind.cpp b/src/data_bind/data_bind.cpp index 441be60..d6f3ce9 100644 --- a/src/data_bind/data_bind.cpp +++ b/src/data_bind/data_bind.cpp
@@ -3,6 +3,7 @@ #include "rive/artboard.hpp" #include "rive/generated/core_registry.hpp" #include "rive/data_bind/context/context_value.hpp" +#include "rive/data_bind/context/context_value_boolean.hpp" #include "rive/data_bind/context/context_value_number.hpp" #include "rive/data_bind/context/context_value_string.hpp" #include "rive/data_bind/context/context_value_enum.hpp" @@ -66,6 +67,9 @@ case ViewModelInstanceColorBase::typeKey: m_ContextValue = rivestd::make_unique<DataBindContextValueColor>(m_Source); break; + case ViewModelInstanceBooleanBase::typeKey: + m_ContextValue = rivestd::make_unique<DataBindContextValueBoolean>(m_Source); + break; } }
diff --git a/src/generated/viewmodel/viewmodel_instance_boolean_base.cpp b/src/generated/viewmodel/viewmodel_instance_boolean_base.cpp new file mode 100644 index 0000000..641bfec --- /dev/null +++ b/src/generated/viewmodel/viewmodel_instance_boolean_base.cpp
@@ -0,0 +1,11 @@ +#include "rive/generated/viewmodel/viewmodel_instance_boolean_base.hpp" +#include "rive/viewmodel/viewmodel_instance_boolean.hpp" + +using namespace rive; + +Core* ViewModelInstanceBooleanBase::clone() const +{ + auto cloned = new ViewModelInstanceBoolean(); + cloned->copy(*this); + return cloned; +}
diff --git a/src/generated/viewmodel/viewmodel_property_boolean_base.cpp b/src/generated/viewmodel/viewmodel_property_boolean_base.cpp new file mode 100644 index 0000000..0371e8c --- /dev/null +++ b/src/generated/viewmodel/viewmodel_property_boolean_base.cpp
@@ -0,0 +1,11 @@ +#include "rive/generated/viewmodel/viewmodel_property_boolean_base.hpp" +#include "rive/viewmodel/viewmodel_property_boolean.hpp" + +using namespace rive; + +Core* ViewModelPropertyBooleanBase::clone() const +{ + auto cloned = new ViewModelPropertyBoolean(); + cloned->copy(*this); + return cloned; +}
diff --git a/src/viewmodel/viewmodel_instance_boolean.cpp b/src/viewmodel/viewmodel_instance_boolean.cpp new file mode 100644 index 0000000..c4e5599 --- /dev/null +++ b/src/viewmodel/viewmodel_instance_boolean.cpp
@@ -0,0 +1,10 @@ +#include <sstream> +#include <iomanip> +#include <array> + +#include "rive/viewmodel/viewmodel_instance_boolean.hpp" +#include "rive/component_dirt.hpp" + +using namespace rive; + +void ViewModelInstanceBoolean::propertyValueChanged() { addDirt(ComponentDirt::Bindings); } \ No newline at end of file