X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fupdate%2Fmanager%2Ftransform-manager.cpp;h=0d55efedf31e3e95a175e6a096b8b38578e9a2c1;hb=6e5768771c9f9e0667ad8f61430135b7b61bbcab;hp=e9baa271563137421513078069d28dd3051c6c9a;hpb=ef965273f67a17ef2120cf3f0f1072ea0e56878c;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/update/manager/transform-manager.cpp b/dali/internal/update/manager/transform-manager.cpp index e9baa27..0d55efe 100644 --- a/dali/internal/update/manager/transform-manager.cpp +++ b/dali/internal/update/manager/transform-manager.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016 Samsung Electronics Co., Ltd. + * Copyright (c) 2017 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. @@ -42,12 +42,41 @@ namespace static const float gDefaultTransformComponentAnimatableData[] = { 1.0f, 1.0f, 1.0f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f }; //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 }; +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) ); + +/** + * @brief Calculates the center position for the transform component + * @param[out] centerPosition The calculated center-position of the transform component + * @param[in] transformComponentStatic A const reference to the static component transform struct + * @param[in] transformComponentAnimatable A const reference to the animatable component transform struct + * @param[in] size The size of the current transform component + * @param[in] half Halfway point of the transform + * @param[in] topLeft The top-left coords of the transform + */ +inline void CalculateCenterPosition( + Vector3& centerPosition, + const TransformComponentStatic& transformComponentStatic, + const TransformComponentAnimatable& transformComponentAnimatable, + const Vector3& size, + const Vector3& half, + const Vector3& topLeft ) +{ + // Calculate the center-point by applying the scale and rotation on the anchor point. + centerPosition = ( half - transformComponentStatic.mAnchorPoint ) * size * transformComponentAnimatable.mScale; + centerPosition *= transformComponentAnimatable.mOrientation; + + // If the position is ignoring the anchor-point, then remove the anchor-point shift from the position. + if( ! transformComponentStatic.mPositionUsesAnchorPoint ) + { + centerPosition -= ( topLeft - transformComponentStatic.mAnchorPoint ) * size; + } } +} // unnamed namespace + TransformManager::TransformManager() :mComponentCount(0), mReorder(false) @@ -129,7 +158,9 @@ void TransformManager::RemoveTransform(TransformId id) void TransformManager::SetParent( TransformId id, TransformId parentId ) { DALI_ASSERT_ALWAYS( id != parentId ); - mParent[ mIds[id] ] = parentId; + unsigned int index = mIds[id]; + mParent[ index ] = parentId; + mComponentDirty[ index ] = true; mReorder = true; } @@ -209,9 +240,10 @@ void TransformManager::Update() } //Iterate through all components to compute its world matrix - Vector3 anchorPosition; + Vector3 centerPosition; Vector3 localPosition; - Vector3 half( 0.5f,0.5f,0.5f ); + const Vector3 half( 0.5f,0.5f,0.5f ); + const Vector3 topLeft( 0.0f, 0.0f, 0.5f ); for( unsigned int i(0); i