Browse Source

Pass Scalar data types by reference

Michael Ragazzon 4 years ago
parent
commit
28231d57ef

+ 2 - 2
Include/RmlUi/Core/DataTypes.h

@@ -49,8 +49,8 @@ using DataEventFunc = Function<void(DataModelHandle, Event&, const VariantList&)
 template<typename T> using MemberGetFunc = void(T::*)(Variant&);
 template<typename T> using MemberSetFunc = void(T::*)(const Variant&);
 
-template<typename T> using DataTypeGetFunc = void(*)(const T*, Variant&);
-template<typename T> using DataTypeSetFunc = void(*)(T*, const Variant&);
+template<typename T> using DataTypeGetFunc = void(*)(const T&, Variant&);
+template<typename T> using DataTypeSetFunc = void(*)(T&, const Variant&);
 
 template<typename Object, typename ReturnType> using MemberGetterFunc = ReturnType(Object::*)();
 template<typename Object, typename AssignType> using MemberSetterFunc = void(Object::*)(AssignType);

+ 2 - 2
Include/RmlUi/Core/DataVariable.h

@@ -133,14 +133,14 @@ public:
 	{
 		if (!get)
 			return false;
-		get(static_cast<const T*>(ptr), variant);
+		get(*static_cast<const T*>(ptr), variant);
 		return true;
 	}
 	bool Set(void* ptr, const Variant& variant) override
 	{
 		if (!set)
 			return false;
-		set(static_cast<T*>(ptr), variant);
+		set(*static_cast<T*>(ptr), variant);
 		return true;
 	}
 

+ 4 - 6
Samples/basic/databinding/src/main.cpp

@@ -36,8 +36,6 @@
 
 namespace BasicExample {
 
-	using namespace Rml;
-
 	Rml::DataModelHandle model_handle;
 
 	struct MyData {
@@ -194,14 +192,14 @@ namespace InvadersExample {
 
 		// Register a custom getter/setter for the Colourb type.
 		constructor.RegisterScalar<Rml::Colourb>(
-			[](const Rml::Colourb* color, Rml::Variant& variant) {
-				variant = "rgba(" + Rml::ToString(*color) + ')';
+			[](const Rml::Colourb& color, Rml::Variant& variant) {
+				variant = "rgba(" + Rml::ToString(color) + ')';
 			},
-			[](Rml::Colourb* color, const Rml::Variant& variant) {
+			[](Rml::Colourb& color, const Rml::Variant& variant) {
 				Rml::String str = variant.Get<Rml::String>();
 				bool success = false;
 				if (str.size() > 6 && str.substr(0, 5) == "rgba(")
-					success = Rml::TypeConverter<Rml::String, Rml::Colourb>::Convert(str.substr(5), *color);
+					success = Rml::TypeConverter<Rml::String, Rml::Colourb>::Convert(str.substr(5), color);
 				if (!success)
 					Rml::Log::Message(Rml::Log::LT_WARNING, "Invalid color specified: '%s'. Use syntax rgba(R,G,B,A).", str.c_str());
 			}