Allow property conversions: float from int and int from float 54/43054/2
authorKimmo Hoikka <kimmo.hoikka@samsung.com>
Tue, 7 Jul 2015 10:46:01 +0000 (11:46 +0100)
committerKimmo Hoikka <kimmo.hoikka@samsung.com>
Wed, 8 Jul 2015 13:31:18 +0000 (14:31 +0100)
Change-Id: Ic304cfb187cfba6fdd65d34764a6634e4fcd5d43

automated-tests/src/dali/utc-Dali-PropertyValue.cpp
dali/public-api/object/property-value.cpp

index e0f6905c72b9fb65111dc847ff5fdf9355046a92..31274d90774a2ca3efcedba19e3806e8b4fb4960 100644 (file)
@@ -831,6 +831,13 @@ int UtcDaliPropertyValueGetFloatP(void)
   float flow( 0.0f );
   DALI_TEST_EQUALS( 1.1f, value.Get<float>(), TEST_LOCATION );
   DALI_TEST_EQUALS( true, value.Get( flow ), TEST_LOCATION );
+  DALI_TEST_EQUALS( 1.1f, flow, TEST_LOCATION );
+
+  Property::Value intValue(100);
+  DALI_TEST_EQUALS( 100.f, intValue.Get<float>(), TEST_LOCATION );
+  DALI_TEST_EQUALS( true, intValue.Get( flow ), TEST_LOCATION );
+  DALI_TEST_EQUALS( 100.f, flow, TEST_LOCATION );
+
   END_TEST;
 }
 
@@ -853,6 +860,12 @@ int UtcDaliPropertyValueGetIntP(void)
   DALI_TEST_EQUALS( 123, value.Get<int>(), TEST_LOCATION );
   DALI_TEST_EQUALS( true, value.Get( result ), TEST_LOCATION );
   DALI_TEST_EQUALS( 123, result, TEST_LOCATION );
+
+  Property::Value floatValue(21.f);
+  DALI_TEST_EQUALS( 21, floatValue.Get<int>(), TEST_LOCATION );
+  DALI_TEST_EQUALS( true, floatValue.Get( result ), TEST_LOCATION );
+  DALI_TEST_EQUALS( 21, result, TEST_LOCATION );
+
   END_TEST;
 }
 
index 6a46abbf85e842f973351e0b49a3d57da9dbe1e2..0494447519e381833d29f81f10284684934839d7 100644 (file)
@@ -621,10 +621,18 @@ bool Property::Value::Get( bool& booleanValue ) const
 bool Property::Value::Get( float& floatValue ) const
 {
   bool converted = false;
-  if( mImpl && mImpl->type == FLOAT )
+  if( mImpl )
   {
-    floatValue = mImpl->floatValue;
-    converted = true;
+    if( mImpl->type == FLOAT )
+    {
+      floatValue = mImpl->floatValue;
+      converted = true;
+    }
+    else if( IsIntegerType( mImpl->type ) )
+    {
+      floatValue = static_cast< float >( mImpl->integerValue );
+      converted = true;
+    }
   }
   return converted;
 }
@@ -632,10 +640,18 @@ bool Property::Value::Get( float& floatValue ) const
 bool Property::Value::Get( int& integerValue ) const
 {
   bool converted = false;
-  if( mImpl && IsIntegerType( mImpl->type ) )
+  if( mImpl )
   {
-    integerValue = mImpl->integerValue;
-    converted = true;
+    if( IsIntegerType( mImpl->type ) )
+    {
+      integerValue = mImpl->integerValue;
+      converted = true;
+    }
+    else if( mImpl->type == FLOAT )
+    {
+      integerValue = static_cast< int >( mImpl->floatValue );
+      converted = true;
+    }
   }
   return converted;
 }