/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2018 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
//EXTERNAL INCLUDES
#include <algorithm>
#include <cstring>
+#include <type_traits>
//INTERNAL INCLUDES
#include <dali/public-api/common/constants.h>
-#include <dali/public-api/common/compile-time-assert.h>
#include <dali/internal/common/math.h>
namespace Dali
//Default values for anchor point (CENTER) and parent origin (TOP_LEFT)
static const float gDefaultTransformComponentStaticData[] = { 0.5f, 0.5f, 0.5f, 0.0f, 0.0f, 0.5f, true };
-DALI_COMPILE_TIME_ASSERT( sizeof(gDefaultTransformComponentAnimatableData) == sizeof(TransformComponentAnimatable) );
-DALI_COMPILE_TIME_ASSERT( sizeof(gDefaultTransformComponentStaticData) == sizeof(TransformComponentStatic) );
+static_assert( sizeof(gDefaultTransformComponentAnimatableData) == sizeof(TransformComponentAnimatable), "gDefaultTransformComponentAnimatableData should have the same number of floats as specified in TransformComponentAnimatable" );
+static_assert( sizeof(gDefaultTransformComponentStaticData) == sizeof(TransformComponentStatic), "gDefaultTransformComponentStaticData should have the same number of floats as specified in TransformComponentStatic" );
/**
* @brief Calculates the center position for the transform component
{
//Move the last element to the gap
mComponentCount--;
- unsigned int index = mIds[id];
+ TransformId index = mIds[id];
mTxComponentAnimatable[index] = mTxComponentAnimatable[mComponentCount];
mTxComponentStatic[index] = mTxComponentStatic[mComponentCount];
mInheritanceMode[index] = mInheritanceMode[mComponentCount];
void TransformManager::SetParent( TransformId id, TransformId parentId )
{
DALI_ASSERT_ALWAYS( id != parentId );
- unsigned int index = mIds[id];
+ TransformId index = mIds[id];
mParent[ index ] = parentId;
mComponentDirty[ index ] = true;
mReorder = true;
void TransformManager::SetInheritPosition( TransformId id, bool inherit )
{
- unsigned int index = mIds[id];
+ TransformId index = mIds[id];
if( inherit )
{
mInheritanceMode[ index ] |= INHERIT_POSITION;
void TransformManager::SetInheritScale( TransformId id, bool inherit )
{
- unsigned int index = mIds[id];
+ TransformId index = mIds[id];
if( inherit )
{
mInheritanceMode[ index ] |= INHERIT_SCALE;
void TransformManager::SetInheritOrientation( TransformId id, bool inherit )
{
- unsigned int index = mIds[id];
+ TransformId index = mIds[id];
if( inherit )
{
mInheritanceMode[ index ] |= INHERIT_ORIENTATION;
{
if( DALI_LIKELY( mInheritanceMode[i] != DONT_INHERIT_TRANSFORM && mParent[i] != INVALID_TRANSFORM_ID ) )
{
- const unsigned int& parentIndex = mIds[mParent[i] ];
+ const TransformId& parentIndex = mIds[mParent[i] ];
if( DALI_LIKELY( mInheritanceMode[i] == INHERIT_ALL ) )
{
if( mComponentDirty[i] || mLocalMatrixDirty[parentIndex])
if( (mInheritanceMode[i] & INHERIT_POSITION) == 0 )
{
//Don't inherit position
+ CalculateCenterPosition( centerPosition, mTxComponentStatic[ i ], mTxComponentAnimatable[ i ], mSize[ i ], half, topLeft );
mLocal[i].SetTransformComponents( localScale, localOrientation, Vector3::ZERO );
Matrix::Multiply( mWorld[i], mLocal[i], parentMatrix );
- mWorld[i].SetTranslation( mTxComponentAnimatable[i].mPosition);
+ mWorld[i].SetTranslation( mTxComponentAnimatable[i].mPosition + centerPosition );
}
else
{
mOrderedComponents.Resize(mComponentCount);
TransformId parentId;
- for( size_t i(0); i<mComponentCount; ++i )
+ for( TransformId i = 0; i<mComponentCount; ++i )
{
mOrderedComponents[i].id = mComponentId[i];
mOrderedComponents[i].level = 0u;
}
std::stable_sort( mOrderedComponents.Begin(), mOrderedComponents.End());
- unsigned int previousIndex = 0;
- for( size_t newIndex(0); newIndex<mComponentCount-1; ++newIndex )
+ TransformId previousIndex = 0;
+ for( TransformId newIndex = 0; newIndex < mComponentCount-1; ++newIndex )
{
previousIndex = mIds[mOrderedComponents[newIndex].id];
if( previousIndex != newIndex )
{
case TRANSFORM_PROPERTY_POSITION:
{
- unsigned int index( mIds[id] );
+ TransformId index( mIds[id] );
mComponentDirty[ index ] = true;
return mTxComponentAnimatable[ index ].mPosition;
}
case TRANSFORM_PROPERTY_SCALE:
{
- unsigned int index( mIds[id] );
+ TransformId index( mIds[id] );
mComponentDirty[ index ] = true;
return mTxComponentAnimatable[ index ].mScale;
}
case TRANSFORM_PROPERTY_PARENT_ORIGIN:
{
- unsigned int index( mIds[id] );
+ TransformId index( mIds[id] );
mComponentDirty[ index ] = true;
return mTxComponentStatic[ index ].mParentOrigin;
}
case TRANSFORM_PROPERTY_ANCHOR_POINT:
{
- unsigned int index( mIds[id] );
+ TransformId index( mIds[id] );
mComponentDirty[ index ] = true;
return mTxComponentStatic[ index ].mAnchorPoint;
}
case TRANSFORM_PROPERTY_SIZE:
{
- unsigned int index( mIds[id] );
+ TransformId index( mIds[id] );
mComponentDirty[ index ] = true;
return mSize[ index ];
}
void TransformManager::SetVector3PropertyValue( TransformId id, TransformManagerProperty property, const Vector3& value )
{
- unsigned int index( mIds[id] );
+ TransformId index( mIds[id] );
mComponentDirty[ index ] = true;
switch( property )
void TransformManager::SetVector3PropertyComponentValue( TransformId id, TransformManagerProperty property, float value, unsigned int component )
{
- unsigned int index( mIds[id] );
+ TransformId index( mIds[id] );
mComponentDirty[ index ] = true;
switch( property )
void TransformManager::BakeVector3PropertyValue( TransformId id, TransformManagerProperty property, const Vector3& value )
{
- unsigned int index( mIds[id] );
+ TransformId index( mIds[id] );
mComponentDirty[ index ] = true;
switch( property )
void TransformManager::BakeRelativeVector3PropertyValue( TransformId id, TransformManagerProperty property, const Vector3& value )
{
- unsigned int index( mIds[id] );
+ TransformId index( mIds[id] );
mComponentDirty[ index ] = true;
switch( property )
void TransformManager::BakeMultiplyVector3PropertyValue( TransformId id, TransformManagerProperty property, const Vector3& value )
{
- unsigned int index( mIds[id] );
+ TransformId index( mIds[id] );
mComponentDirty[ index ] = true;
switch( property )
void TransformManager::BakeVector3PropertyComponentValue( TransformId id, TransformManagerProperty property, float value, unsigned int component )
{
- unsigned int index( mIds[id] );
+ TransformId index( mIds[id] );
mComponentDirty[ index ] = true;
switch( property )
void TransformManager::BakeXVector3PropertyValue( TransformId id, TransformManagerProperty property, float value )
{
- unsigned int index( mIds[id] );
+ TransformId index( mIds[id] );
mComponentDirty[ index ] = true;
switch( property )
void TransformManager::BakeYVector3PropertyValue( TransformId id, TransformManagerProperty property, float value )
{
- unsigned int index( mIds[id] );
+ TransformId index( mIds[id] );
mComponentDirty[ index ] = true;
switch( property )
void TransformManager::BakeZVector3PropertyValue( TransformId id, TransformManagerProperty property, float value )
{
- unsigned int index( mIds[id] );
+ TransformId index( mIds[id] );
mComponentDirty[ index ] = true;
switch( property )
Quaternion& TransformManager::GetQuaternionPropertyValue( TransformId id )
{
- unsigned int index( mIds[id] );
+ TransformId index( mIds[id] );
mComponentDirty[ index ] = true;
return mTxComponentAnimatable[ index ].mOrientation;
}
void TransformManager::SetQuaternionPropertyValue( TransformId id, const Quaternion& q )
{
- unsigned int index( mIds[id] );
+ TransformId index( mIds[id] );
mTxComponentAnimatable[ index ].mOrientation = q;
mComponentDirty[ index ] = true;
}
void TransformManager::BakeQuaternionPropertyValue( TransformId id, const Quaternion& q )
{
- unsigned int index( mIds[id] );
+ TransformId index( mIds[id] );
mTxComponentAnimatable[ index ].mOrientation = mTxComponentAnimatableBaseValue[index].mOrientation = q;
mComponentDirty[ index ] = true;
}
void TransformManager::BakeRelativeQuaternionPropertyValue( TransformId id, const Quaternion& q )
{
- unsigned int index( mIds[id] );
+ TransformId index( mIds[id] );
mTxComponentAnimatable[ index ].mOrientation = mTxComponentAnimatableBaseValue[index].mOrientation = mTxComponentAnimatable[ index ].mOrientation * q;
mComponentDirty[ index ] = true;
}
void TransformManager::GetWorldMatrixAndSize( TransformId id, Matrix& worldMatrix, Vector3& size ) const
{
- unsigned int index = mIds[id];
+ TransformId index = mIds[id];
worldMatrix = mWorld[index];
size = mSize[index];
}
void TransformManager::SetPositionUsesAnchorPoint( TransformId id, bool value )
{
- unsigned int index( mIds[ id ] );
+ TransformId index( mIds[ id ] );
mComponentDirty[ index ] = true;
mTxComponentStatic[ index ].mPositionUsesAnchorPoint = value;
}