fixed: the problem is that property animations stop by other property
authorDae Young Ryu <karzia@samsung.com>
Thu, 31 Oct 2013 04:55:04 +0000 (13:55 +0900)
committerDae Young Ryu <karzia@samsung.com>
Thu, 31 Oct 2013 05:29:50 +0000 (14:29 +0900)
Change-Id: I0880b738e7633ff0275d7efccc65aad6ad353e91
Signed-off-by: Dae Young Ryu <karzia@samsung.com>
src/ui/animations/FUiAnim_MeshImpl.cpp
src/ui/animations/FUiAnim_VisualElementEnvironment.cpp
src/ui/animations/FUiAnim_VisualElementImpl.cpp
src/ui/animations/FUiAnim_VisualElementSharedData.cpp
src/ui/inc/FUiAnim_GeometryInfo.h
src/ui/inc/FUiAnim_VisualElementImpl.h
src/ui/inc/FUiAnim_VisualElementSharedData.h

index 668ff8d..7028609 100644 (file)
@@ -726,6 +726,6 @@ _MeshImpl::CreateMeshController(VisualElement* pRootJoint, const FloatMatrix4& b
 _MeshControllerImpl*
 _MeshImpl::GetMeshControllerImpl(void)
 {
-       return __pMeshController->__pMeshController;
+       return (__pMeshController)?__pMeshController->__pMeshController:null;
 }
 }}} //namespace Tizen { namespace Ui { namespace Animations {
index cbdd51d..2da63c7 100644 (file)
@@ -38,270 +38,132 @@ using namespace Tizen::Base;
 namespace Tizen { namespace Ui { namespace Animations
 {
 
-
-const wchar_t* VePropBounds                                                            = L"bounds";
-const wchar_t* VePropContentBounds                                                     = L"contentBounds";
-const wchar_t* VePropContentOpacity                                            = L"contentOpacity";
-const wchar_t* VePropRenderOperation                                           = L"renderOperation";
-const wchar_t* VePropOpacity                                                           = L"opacity";
-const wchar_t* VePropShowState                                                                 = L"showState";
-const wchar_t* VePropAnchor                                                            = L"anchor";
-const wchar_t* VePropAnchorZ                                                           = L"anchorZ";
-const wchar_t* VePropTransform                                                                 = L"transform";
-const wchar_t* VePropChildrenTransform                                                 = L"childrenTransform";
-const wchar_t* VePropZPosition                                                                 = L"zPosition";
-const wchar_t* VePropZOrderGroup                                                       = L"zOrderGroup";
-const wchar_t* VePropClipToParent                                                      = L"clipToParent";
-const wchar_t* VePropClipChildren                                                      = L"clipChildren";
-const wchar_t* VePropSurfaceOpaque                                                     = L"surfaceOpaque";
-const wchar_t* VePropName                                                                      = L"name";
-const wchar_t* VePropPropertyPropagationEnabled                        = L"propertyPropagation";
-const wchar_t* VePropImplicitAnimationEnabled                          = L"implicitAnimation";
+#define DECL_PROPERTY(_STRING,_VAR)\
+       const wchar_t* _VAR = _STRING;  \
+       Tizen::Base::String* p##_VAR=null;
+
+#define DECL_DYNAMIC_PROPERTY(_STRING,_VAR)\
+       const wchar_t* _VAR = _STRING;  \
+       _DynamicKeyString* p##_VAR=null;
+
+
+#define STRING_INIT(_VAR)              p##_VAR = new(std::nothrow) String(_VAR)
+#define DYNAMIC_STRING_INIT(_VAR)              p##_VAR = new(std::nothrow) _DynamicKeyString(_VAR)
+
+DECL_PROPERTY(L"bounds",                                        VePropBounds                                                           )
+DECL_PROPERTY(L"contentBounds",                                 VePropContentBounds                                            )
+DECL_PROPERTY(L"contentOpacity",                                VePropContentOpacity                                           )
+DECL_PROPERTY(L"renderOperation",                               VePropRenderOperation                                          )
+DECL_PROPERTY(L"opacity",                                       VePropOpacity                                                          )
+DECL_PROPERTY(L"showState",                                     VePropShowState                                                        )
+DECL_PROPERTY(L"anchor",                                        VePropAnchor                                                           )
+DECL_PROPERTY(L"anchorZ",                                       VePropAnchorZ                                                          )
+DECL_PROPERTY(L"transform",                                     VePropTransform                                                        )
+DECL_PROPERTY(L"childrenTransform",                             VePropChildrenTransform                                        )
+DECL_PROPERTY(L"zPosition",                                     VePropZPosition                                                        )
+DECL_PROPERTY(L"zOrderGroup",                                   VePropZOrderGroup                                                      )
+DECL_PROPERTY(L"clipToParent",                                  VePropClipToParent                                                     )
+DECL_PROPERTY(L"clipChildren",                                  VePropClipChildren                                                     )
+DECL_PROPERTY(L"surfaceOpaque",                                 VePropSurfaceOpaque                                            )
+DECL_PROPERTY(L"name",                                          VePropName                                                                     )
+DECL_PROPERTY(L"propertyPropagation",                           VePropPropertyPropagationEnabled                       )
+DECL_PROPERTY(L"implicitAnimation",                             VePropImplicitAnimationEnabled                                 )
 
 #if defined(SUPPORT_CUSTOMIZING_ATTACH_DETACH_ANIMATION)
-const wchar_t* VePropActionDetach                                                      = L"detach";
-const wchar_t* VePropActionAttach                                                      = L"attach";
+DECL_PROPERTY(L"detach",                                        VePropActionDetach                                                     )
+DECL_PROPERTY(L"attach",                                        VePropActionAttach                                                     )
 #endif
-const wchar_t* VeSubPropBounds                                                         = L"bounds.";
-const wchar_t* VeSubPropBoundsPosition                                         = L"bounds.position";
-const wchar_t* VeSubPropBoundsSize                                                     = L"bounds.size";
-
-const wchar_t* VeSubPropTransform                                                      = L"transform.";
-const wchar_t* VeSubPropTransformRotationX                                     = L"transform.rotation.x";
-const wchar_t* VeSubPropTransformRotationY                                     = L"transform.rotation.y";
-const wchar_t* VeSubPropTransformRotationZ                                     = L"transform.rotation.z";
-const wchar_t* VeSubPropTransformScaleX                                                = L"transform.scale.x";
-const wchar_t* VeSubPropTransformScaleY                                                = L"transform.scale.y";
-const wchar_t* VeSubPropTransformScaleZ                                                = L"transform.scale.z";
-const wchar_t* VeSubPropTransformTranslationX                          = L"transform.translation.x";
-const wchar_t* VeSubPropTransformTranslationY                          = L"transform.translation.y";
-const wchar_t* VeSubPropTransformTranslationZ                          = L"transform.translation.z";
-const wchar_t* VeSubPropTransformRotationAnchorX                       = L"transform.rotation.anchor.x";
-const wchar_t* VeSubPropTransformRotationAnchorY                       = L"transform.rotation.anchor.y";
-const wchar_t* VeSubPropTransformRotationAnchorZ                       = L"transform.rotation.anchor.z";
-const wchar_t* VeSubPropTransformScaleAnchorX                          = L"transform.scale.anchor.x";
-const wchar_t* VeSubPropTransformScaleAnchorY                          = L"transform.scale.anchor.y";
-const wchar_t* VeSubPropTransformScaleAnchorZ                          = L"transform.scale.anchor.z";
-
-const wchar_t* VeSubPropTransformRotationXY                                    = L"transform.rotation.xy";
-const wchar_t* VeSubPropTransformScaleXY                                       = L"transform.scale.xy";
-const wchar_t* VeSubPropTransformTranslationXY                         = L"transform.translation.xy";
-const wchar_t* VeSubPropTransformRotationAnchorXY                      = L"transform.rotation.anchor.xy";
-const wchar_t* VeSubPropTransformScaleAnchorXY                         = L"transform.scale.anchor.xy";
-
-
-const wchar_t* VeSubPropChildrenTransform                                      = L"childrenTransform.";
-const wchar_t* VeSubPropChildrenTransformRotationX                     = L"childrenTransform.rotation.x";
-const wchar_t* VeSubPropChildrenTransformRotationY                     = L"childrenTransform.rotation.y";
-const wchar_t* VeSubPropChildrenTransformRotationZ                     = L"childrenTransform.rotation.z";
-const wchar_t* VeSubPropChildrenTransformScaleX                                = L"childrenTransform.scale.x";
-const wchar_t* VeSubPropChildrenTransformScaleY                                = L"childrenTransform.scale.y";
-const wchar_t* VeSubPropChildrenTransformScaleZ                                = L"childrenTransform.scale.z";
-const wchar_t* VeSubPropChildrenTransformTranslationX          = L"childrenTransform.translation.x";
-const wchar_t* VeSubPropChildrenTransformTranslationY          = L"childrenTransform.translation.y";
-const wchar_t* VeSubPropChildrenTransformTranslationZ          = L"childrenTransform.translation.z";
-const wchar_t* VeSubPropChildrenTransformRotationAnchorX       = L"childrenTransform.rotation.anchor.x";
-const wchar_t* VeSubPropChildrenTransformRotationAnchorY       = L"childrenTransform.rotation.anchor.y";
-const wchar_t* VeSubPropChildrenTransformRotationAnchorZ       = L"childrenTransform.rotation.anchor.z";
-const wchar_t* VeSubPropChildrenTransformScaleAnchorX          = L"childrenTransform.scale.anchor.x";
-const wchar_t* VeSubPropChildrenTransformScaleAnchorY          = L"childrenTransform.scale.anchor.y";
-const wchar_t* VeSubPropChildrenTransformScaleAnchorZ          = L"childrenTransform.scale.anchor.z";
-
-const wchar_t* VeSubPropChildrenTransformRotationXY                    = L"childrenTransform.rotation.xy";
-const wchar_t* VeSubPropChildrenTransformScaleXY                       = L"childrenTransform.scale.xy";
-const wchar_t* VeSubPropChildrenTransformTranslationXY         = L"childrenTransform.translation.xy";
-const wchar_t* VeSubPropChildrenTransformRotationAnchorXY      = L"childrenTransform.rotation.anchor.xy";
-const wchar_t* VeSubPropChildrenTransformScaleAnchorXY         = L"childrenTransform.scale.anchor.xy";
-
-const wchar_t* VePrivPropShowOpacity                                           = L"__showOpacity";
+
+DECL_PROPERTY(L"bounds.",                                       VeSubPropBounds                                                                )
+DECL_PROPERTY(L"bounds.position",                               VeSubPropBoundsPosition                                                )
+DECL_PROPERTY(L"bounds.size",                                   VeSubPropBoundsSize                                                    )
+
+DECL_PROPERTY(L"transform.",                                    VeSubPropTransform                                                     )
+DECL_PROPERTY(L"transform.rotation.x",                          VeSubPropTransformRotationX                                    )
+DECL_PROPERTY(L"transform.rotation.y",                          VeSubPropTransformRotationY                                    )
+DECL_PROPERTY(L"transform.rotation.z",                          VeSubPropTransformRotationZ                                    )
+DECL_PROPERTY(L"transform.scale.x",                             VeSubPropTransformScaleX                                       )
+DECL_PROPERTY(L"transform.scale.y",                             VeSubPropTransformScaleY                                       )
+DECL_PROPERTY(L"transform.scale.z",                             VeSubPropTransformScaleZ                                       )
+DECL_PROPERTY(L"transform.translation.x",                       VeSubPropTransformTranslationX                         )
+DECL_PROPERTY(L"transform.translation.y",                       VeSubPropTransformTranslationY                         )
+DECL_PROPERTY(L"transform.translation.z",                       VeSubPropTransformTranslationZ                         )
+DECL_PROPERTY(L"transform.rotation.anchor.x",                   VeSubPropTransformRotationAnchorX                      )
+DECL_PROPERTY(L"transform.rotation.anchor.y",                   VeSubPropTransformRotationAnchorY                      )
+DECL_PROPERTY(L"transform.rotation.anchor.z",                   VeSubPropTransformRotationAnchorZ                      )
+DECL_PROPERTY(L"transform.scale.anchor.x",                      VeSubPropTransformScaleAnchorX                         )
+DECL_PROPERTY(L"transform.scale.anchor.y",                      VeSubPropTransformScaleAnchorY                         )
+DECL_PROPERTY(L"transform.scale.anchor.z",                      VeSubPropTransformScaleAnchorZ                         )
+
+DECL_PROPERTY(L"transform.rotation.xy",                         VeSubPropTransformRotationXY                           )
+DECL_PROPERTY(L"transform.scale.xy",                            VeSubPropTransformScaleXY                                      )
+DECL_PROPERTY(L"transform.translation.xy",                      VeSubPropTransformTranslationXY                                )
+DECL_PROPERTY(L"transform.rotation.anchor.xy",                  VeSubPropTransformRotationAnchorXY                     )
+DECL_PROPERTY(L"transform.scale.anchor.xy",                     VeSubPropTransformScaleAnchorXY                                )
+
+
+DECL_PROPERTY(L"childrenTransform.",                            VeSubPropChildrenTransform                                     )
+DECL_PROPERTY(L"childrenTransform.rotation.x",                  VeSubPropChildrenTransformRotationX                    )
+DECL_PROPERTY(L"childrenTransform.rotation.y",                  VeSubPropChildrenTransformRotationY                    )
+DECL_PROPERTY(L"childrenTransform.rotation.z",                  VeSubPropChildrenTransformRotationZ                    )
+DECL_PROPERTY(L"childrenTransform.scale.x",                     VeSubPropChildrenTransformScaleX                       )
+DECL_PROPERTY(L"childrenTransform.scale.y",                     VeSubPropChildrenTransformScaleY                       )
+DECL_PROPERTY(L"childrenTransform.scale.z",                     VeSubPropChildrenTransformScaleZ                       )
+DECL_PROPERTY(L"childrenTransform.translation.x",               VeSubPropChildrenTransformTranslationX         )
+DECL_PROPERTY(L"childrenTransform.translation.y",               VeSubPropChildrenTransformTranslationY         )
+DECL_PROPERTY(L"childrenTransform.translation.z",               VeSubPropChildrenTransformTranslationZ         )
+DECL_PROPERTY(L"childrenTransform.rotation.anchor.x",           VeSubPropChildrenTransformRotationAnchorX      )
+DECL_PROPERTY(L"childrenTransform.rotation.anchor.y",           VeSubPropChildrenTransformRotationAnchorY      )
+DECL_PROPERTY(L"childrenTransform.rotation.anchor.z",           VeSubPropChildrenTransformRotationAnchorZ      )
+DECL_PROPERTY(L"childrenTransform.scale.anchor.x",              VeSubPropChildrenTransformScaleAnchorX         )
+DECL_PROPERTY(L"childrenTransform.scale.anchor.y",              VeSubPropChildrenTransformScaleAnchorY         )
+DECL_PROPERTY(L"childrenTransform.scale.anchor.z",              VeSubPropChildrenTransformScaleAnchorZ         )
+
+DECL_PROPERTY(L"childrenTransform.rotation.xy",                 VeSubPropChildrenTransformRotationXY           )
+DECL_PROPERTY(L"childrenTransform.scale.xy",                    VeSubPropChildrenTransformScaleXY                      )
+DECL_PROPERTY(L"childrenTransform.translation.xy",              VeSubPropChildrenTransformTranslationXY                )
+DECL_PROPERTY(L"childrenTransform.rotation.anchor.xy",          VeSubPropChildrenTransformRotationAnchorXY     )
+DECL_PROPERTY(L"childrenTransform.scale.anchor.xy",             VeSubPropChildrenTransformScaleAnchorXY                )
+
+DECL_PROPERTY(L"__showOpacity",                                 VePrivPropShowOpacity                                          )
+
 
 // 3.0 properties
-const wchar_t* VeMeshPropVertexCount                           = L"mesh.vertex.count";                                 //int
-const wchar_t* VeMeshPropVertex                                                = L"mesh.vertex.#index";                                                //FloatPoint3
-const wchar_t* VeMeshPropColor                                         = L"mesh.color.#index";                                         //Color ( FloatColor will be needed )
-const wchar_t* VeMeshPropTextureCoord                          = L"mesh.textureCoordinates.#index";                    //FloatDimension
-const wchar_t* VeMeshPropNormal                                                = L"mesh.normal.#index";                                                //FloatPoint3
-const wchar_t* VeMeshPropVertexIndex                           = L"mesh.index.#index";                                         //int
-const wchar_t* VeMeshPropBoneCount                                     = L"mesh.bone.count";                                   //int
-const wchar_t* VeMeshPropBone                                          = L"mesh.bone.#index";                                          //FloatMatrix4
-const wchar_t* VeMeshPropBoneIndex                                     = L"mesh.bone.index.#index";                                    //int
-const wchar_t* VeMeshPropBoneWeight                                    = L"mesh.bone.weight.#index";                                   //float
-
-const wchar_t* VeMaterialDiffuse                                       = L"material.diffuse";                                  //FloatVector4
-const wchar_t* VeMaterialSpecular                                      = L"material.specular";                                 //FloatVector4
-const wchar_t* VeMaterialAmbient                                       = L"material.ambient";                                  //FloatVector4
-const wchar_t* VeMaterialEmissive                                      = L"material.emissive";                                 //FloatVector4
-const wchar_t* VeMaterialShiness                                       = L"material.shiness";                                  //float
-
-// is it needed ?
-const wchar_t* VeShadowColor                                           = L"shadow.color";                                              //FloatVector4
-
-const wchar_t* VeLightCount                                                    = L"light.count";                                               //int
-const wchar_t* VeLightType                                                     = L"light.#name.type";                                          //int : LightType
-const wchar_t* VeLightDiffuse                                          = L"light.#name.diffuse";                                       //FloatVector4
-const wchar_t* VeLightSpecular                                         = L"light.#name.specular";                                      //FloatVector4
-const wchar_t* VeLightAmbient                                          = L"light.#name.ambient";                                       //FloatVector4
-const wchar_t* VeLightPosition                                         = L"light.#name.position";                                      //FloatPoint3
-const wchar_t* VeLightDirection                                                = L"light.#name.direction";                                     //FloatVector4
-const wchar_t* VeLightExponent                                         = L"light.#name.exponent";                                      //float
-const wchar_t* VeLightCutOff                                           = L"light.#name.cutOff";                                                //float
-const wchar_t* VeLightConstantAttenuation                      = L"light.#name.constantAttenuation";           //float
-const wchar_t* VeLightLinearAttenuation                                = L"light.#name.linearAttenuation";                     //float
-const wchar_t* VeLightQuadraticAttenuation                     = L"light.#name.quadraticAttenuation";          //float
-
-// need to design
-//const wchar_t* VeShaderUniform                                               = L"Shader#.uniform#.";                                 //...
-
-
-
-String* pVePropBounds                                                          = null;
-String* pVePropContentBounds                                           = null;
-String* pVePropContentOpacity                                          = null;
-String* pVePropRenderOperation                                                 = null;
-String* pVePropOpacity                                                                 = null;
-String* pVePropShowState                                                       = null;
-String* pVePropAnchor                                                          = null;
-String* pVePropAnchorZ                                                                 = null;
-String* pVePropTransform                                                       = null;
-String* pVePropChildrenTransform                                       = null;
-String* pVePropZPosition                                                       = null;
-String* pVePropZOrderGroup                                                     = null;
-String* pVePropClipToParent                                            = null;
-String* pVePropClipChildren                                            = null;
-String* pVePropSurfaceOpaque                                           = null;
-String* pVePropName                                                            = null;
-String* pVePropPropertyPropagationEnabled                      = null;
-String* pVePropImplicitAnimationEnabled                        = null;
 
-#if defined(SUPPORT_CUSTOMIZING_ATTACH_DETACH_ANIMATION)
-String* pVePropActionDetach                                                    = null;
-String* pVePropActionAttach                                                    = null;
-#endif
-String* pVeSubPropBounds                                                       = null;
-String* pVeSubPropBoundsPosition                                       = null;
-String* pVeSubPropBoundsSize                                           = null;
-
-String* pVeSubPropTransform                                                    = null;
-String* pVeSubPropTransformRotationX                           = null;
-String* pVeSubPropTransformRotationY                           = null;
-String* pVeSubPropTransformRotationZ                           = null;
-String* pVeSubPropTransformScaleX                                      = null;
-String* pVeSubPropTransformScaleY                                      = null;
-String* pVeSubPropTransformScaleZ                                      = null;
-String* pVeSubPropTransformTranslationX                                = null;
-String* pVeSubPropTransformTranslationY                                = null;
-String* pVeSubPropTransformTranslationZ                                = null;
-String* pVeSubPropTransformRotationAnchorX                     = null;
-String* pVeSubPropTransformRotationAnchorY                     = null;
-String* pVeSubPropTransformRotationAnchorZ                     = null;
-String* pVeSubPropTransformScaleAnchorX                                = null;
-String* pVeSubPropTransformScaleAnchorY                                = null;
-String* pVeSubPropTransformScaleAnchorZ                                = null;
-
-String* pVeSubPropTransformRotationXY                          = null;
-String* pVeSubPropTransformScaleXY                                     = null;
-String* pVeSubPropTransformTranslationXY                       = null;
-String* pVeSubPropTransformRotationAnchorXY                    = null;
-String* pVeSubPropTransformScaleAnchorXY                       = null;
-
-
-String* pVeSubPropChildrenTransform                                    = null;
-String* pVeSubPropChildrenTransformRotationX           = null;
-String* pVeSubPropChildrenTransformRotationY           = null;
-String* pVeSubPropChildrenTransformRotationZ           = null;
-String* pVeSubPropChildrenTransformScaleX                      = null;
-String* pVeSubPropChildrenTransformScaleY                      = null;
-String* pVeSubPropChildrenTransformScaleZ                      = null;
-String* pVeSubPropChildrenTransformTranslationX                = null;
-String* pVeSubPropChildrenTransformTranslationY                = null;
-String* pVeSubPropChildrenTransformTranslationZ                = null;
-String* pVeSubPropChildrenTransformRotationAnchorX     = null;
-String* pVeSubPropChildrenTransformRotationAnchorY     = null;
-String* pVeSubPropChildrenTransformRotationAnchorZ     = null;
-String* pVeSubPropChildrenTransformScaleAnchorX                = null;
-String* pVeSubPropChildrenTransformScaleAnchorY                = null;
-String* pVeSubPropChildrenTransformScaleAnchorZ                = null;
-
-String* pVeSubPropChildrenTransformRotationXY          = null;
-String* pVeSubPropChildrenTransformScaleXY                     = null;
-String* pVeSubPropChildrenTransformTranslationXY       = null;
-String* pVeSubPropChildrenTransformRotationAnchorXY    = null;
-String* pVeSubPropChildrenTransformScaleAnchorXY       = null;
-
-String* pVePrivPropShowOpacity                                         = null;
-
-
-
-//// 3.0 properties
-//String* pVeMeshPropVertexCount                               = null;
-//String* pVeMeshPropVertex                                    = null;
-//String* pVeMeshPropColor                                     = null;
-//String* pVeMeshPropTextureCoord                              = null;
-//String* pVeMeshPropNormal                                    = null;
-//String* pVeMeshPropVertexIndex                               = null;
-//String* pVeMeshPropBoneCount                         = null;
-//String* pVeMeshPropBone                                              = null;
-//String* pVeMeshPropBoneIndex                         = null;
-//String* pVeMeshPropBoneWeight                                = null;
-
-//String* pVeMaterialDiffuse                                   = null;
-//String* pVeMaterialSpecular                                  = null;
-//String* pVeMaterialAmbient                                   = null;
-//String* pVeMaterialEmissive                                  = null;
-//String* pVeMaterialShiness                                   = null;
-
-//// is it needed ?
-//String* pVeShadowColor                                               = null;
-
-//String* pVeLightCount                                                = null;
-//String* pVeLightType                                         = null;
-//String* pVeLightDiffuse                                              = null;
-//String* pVeLightSpecular                                     = null;
-//String* pVeLightAmbient                                              = null;
-//String* pVeLightPosition                                     = null;
-//String* pVeLightDirection                                    = null;
-//String* pVeLightExponent                                     = null;
-//String* pVeLightCutOff                                               = null;
-//String* pVeLightConstantAttenuation                  = null;
-//String* pVeLightLinearAttenuation                    = null;
-//String* pVeLightQuadraticAttenuation         = null;
 
+DECL_DYNAMIC_PROPERTY(L"mesh.vertex.count",                                            VeMeshPropVertexCount                                           )       //int
+DECL_DYNAMIC_PROPERTY(L"mesh.vertex.#index",                                   VeMeshPropVertex                                                        )       //FloatPoint3
+DECL_DYNAMIC_PROPERTY(L"mesh.color.#index",                                            VeMeshPropColor                                                         )       //Color ( FloatColor will be needed )
+DECL_DYNAMIC_PROPERTY(L"mesh.textureCoordinates.#index",               VeMeshPropTextureCoord                                          )       //FloatDimension
+DECL_DYNAMIC_PROPERTY(L"mesh.normal.#index",                                   VeMeshPropNormal                                                        )       //FloatPoint3
+DECL_DYNAMIC_PROPERTY(L"mesh.index.#index",                                            VeMeshPropVertexIndex                                           )       //int
+DECL_DYNAMIC_PROPERTY(L"mesh.bone.count",                                              VeMeshPropBoneCount                                                     )       //int
+DECL_DYNAMIC_PROPERTY(L"mesh.bone.#index",                                             VeMeshPropBone                                                          )       //FloatMatrix4
+DECL_DYNAMIC_PROPERTY(L"mesh.bone.index.#index",                               VeMeshPropBoneIndex                                                     )       //int
+DECL_DYNAMIC_PROPERTY(L"mesh.bone.weight.#index",                              VeMeshPropBoneWeight                                            )       //float
 
-// 3.0 properties
-_DynamicKeyString* pVeMeshPropVertexCount                              = null;
-_DynamicKeyString* pVeMeshPropVertex                                   = null;
-_DynamicKeyString* pVeMeshPropColor                                    = null;
-_DynamicKeyString* pVeMeshPropTextureCoord                             = null;
-_DynamicKeyString* pVeMeshPropNormal                                   = null;
-_DynamicKeyString* pVeMeshPropVertexIndex                              = null;
-_DynamicKeyString* pVeMeshPropBoneCount                                = null;
-_DynamicKeyString* pVeMeshPropBone                                             = null;
-_DynamicKeyString* pVeMeshPropBoneIndex                                = null;
-_DynamicKeyString* pVeMeshPropBoneWeight                               = null;
-
-_DynamicKeyString* pVeMaterialDiffuse                                  = null;
-_DynamicKeyString* pVeMaterialSpecular                                 = null;
-_DynamicKeyString* pVeMaterialAmbient                                  = null;
-_DynamicKeyString* pVeMaterialEmissive                                 = null;
-_DynamicKeyString* pVeMaterialShiness                                  = null;
-
-// is it needed ?
-_DynamicKeyString* pVeShadowColor                                              = null;
-
-_DynamicKeyString* pVeLightCount                                               = null;
-_DynamicKeyString* pVeLightType                                                = null;
-_DynamicKeyString* pVeLightDiffuse                                             = null;
-_DynamicKeyString* pVeLightSpecular                                    = null;
-_DynamicKeyString* pVeLightAmbient                                             = null;
-_DynamicKeyString* pVeLightPosition                                    = null;
-_DynamicKeyString* pVeLightDirection                                   = null;
-_DynamicKeyString* pVeLightExponent                                    = null;
-_DynamicKeyString* pVeLightCutOff                                              = null;
-_DynamicKeyString* pVeLightConstantAttenuation                 = null;
-_DynamicKeyString* pVeLightLinearAttenuation                   = null;
-_DynamicKeyString* pVeLightQuadraticAttenuation                = null;
-// need to design
-//_DynamicKeyString* pVeShaderUniform                                  = null;
+DECL_DYNAMIC_PROPERTY(L"material.diffuse",                                             VeMaterialDiffuse                                                       )       //FloatVector4
+DECL_DYNAMIC_PROPERTY(L"material.specular",                                            VeMaterialSpecular                                                      )       //FloatVector4
+DECL_DYNAMIC_PROPERTY(L"material.ambient",                                             VeMaterialAmbient                                                       )       //FloatVector4
+DECL_DYNAMIC_PROPERTY(L"material.emissive",                                            VeMaterialEmissive                                                      )       //FloatVector4
+DECL_DYNAMIC_PROPERTY(L"material.shiness",                                             VeMaterialShiness                                                       )       //float
+
+DECL_DYNAMIC_PROPERTY(L"shadow.color",                                                 VeShadowColor                                                           )       //FloatVector4
+
+DECL_DYNAMIC_PROPERTY(L"light.count",                                                  VeLightCount                                                            )       //int
+DECL_DYNAMIC_PROPERTY(L"light.#name.type",                                             VeLightType                                                                     )       //int : LightType
+DECL_DYNAMIC_PROPERTY(L"light.#name.diffuse",                                  VeLightDiffuse                                                          )       //FloatVector4
+DECL_DYNAMIC_PROPERTY(L"light.#name.specular",                                 VeLightSpecular                                                         )       //FloatVector4
+DECL_DYNAMIC_PROPERTY(L"light.#name.ambient",                                  VeLightAmbient                                                          )       //FloatVector4
+DECL_DYNAMIC_PROPERTY(L"light.#name.position",                                 VeLightPosition                                                         )       //FloatPoint3
+DECL_DYNAMIC_PROPERTY(L"light.#name.direction",                                        VeLightDirection                                                        )       //FloatVector4
+DECL_DYNAMIC_PROPERTY(L"light.#name.exponent",                                 VeLightExponent                                                         )       //float
+DECL_DYNAMIC_PROPERTY(L"light.#name.cutOff",                                   VeLightCutOff                                                           )       //float
+DECL_DYNAMIC_PROPERTY(L"light.#name.constantAttenuation",              VeLightConstantAttenuation                                      )       //float
+DECL_DYNAMIC_PROPERTY(L"light.#name.linearAttenuation",                        VeLightLinearAttenuation                                        )       //float
+DECL_DYNAMIC_PROPERTY(L"light.#name.quadraticAttenuation",             VeLightQuadraticAttenuation                                     )       //float
+
+//DECL_DYNAMIC_PROPERTY(L"Shader#.uniform#.",                                  VeShaderUniform                                                         )
 
 
 
@@ -329,150 +191,116 @@ _VisualElementEnvironment::Initialize(void)
 void
 _VisualElementEnvironment::InitializeEnvironment(void)
 {
-       pVePropBounds                                                           = new (std::nothrow) String(VePropBounds);
-       pVePropContentBounds                                            = new (std::nothrow) String(VePropContentBounds);
-       pVePropContentOpacity                                           = new (std::nothrow) String(VePropContentOpacity);
-       pVePropRenderOperation                                          = new (std::nothrow) String(VePropRenderOperation);
-       pVePropOpacity                                                          = new (std::nothrow) String(VePropOpacity);
-       pVePropShowState                                                        = new (std::nothrow) String(VePropShowState);
-       pVePropAnchor                                                           = new (std::nothrow) String(VePropAnchor);
-       pVePropAnchorZ                                                          = new (std::nothrow) String(VePropAnchorZ);
-       pVePropTransform                                                        = new (std::nothrow) String(VePropTransform);
-       pVePropChildrenTransform                                        = new (std::nothrow) String(VePropChildrenTransform);
-       pVePropZPosition                                                        = new (std::nothrow) String(VePropZPosition);
-       pVePropZOrderGroup                                                      = new (std::nothrow) String(VePropZOrderGroup);
-       pVePropClipToParent                                             = new (std::nothrow) String(VePropClipToParent);
-       pVePropClipChildren                                             = new (std::nothrow) String(VePropClipChildren);
-       pVePropSurfaceOpaque                                            = new (std::nothrow) String(VePropSurfaceOpaque);
-       pVePropName                                                             = new (std::nothrow) String(VePropName);
-       pVePropPropertyPropagationEnabled                       = new (std::nothrow) String(VePropPropertyPropagationEnabled);
-       pVePropImplicitAnimationEnabled                         = new (std::nothrow) String(VePropImplicitAnimationEnabled);
+       STRING_INIT(VePropBounds);
+       STRING_INIT(VePropBounds);
+       STRING_INIT(VePropContentBounds);
+       STRING_INIT(VePropContentOpacity);
+       STRING_INIT(VePropRenderOperation);
+       STRING_INIT(VePropOpacity);
+       STRING_INIT(VePropShowState);
+       STRING_INIT(VePropAnchor);
+       STRING_INIT(VePropAnchorZ);
+       STRING_INIT(VePropTransform);
+       STRING_INIT(VePropChildrenTransform);
+       STRING_INIT(VePropZPosition);
+       STRING_INIT(VePropZOrderGroup);
+       STRING_INIT(VePropClipToParent);
+       STRING_INIT(VePropClipChildren);
+       STRING_INIT(VePropSurfaceOpaque);
+       STRING_INIT(VePropName);
+       STRING_INIT(VePropPropertyPropagationEnabled);
+       STRING_INIT(VePropImplicitAnimationEnabled);
 #if defined(SUPPORT_CUSTOMIZING_ATTACH_DETACH_ANIMATION)
-       pVePropActionDetach                                                     = new (std::nothrow) String(VePropActionDetach);
-       pVePropActionAttach                                                     = new (std::nothrow) String(VePropActionAttach);
+       STRING_INIT(VePropActionDetach);
+       STRING_INIT(VePropActionAttach);
 #endif
-       pVeSubPropBounds                                                        = new (std::nothrow) String(VeSubPropBounds);
-       pVeSubPropBoundsPosition                                        = new (std::nothrow) String(VeSubPropBoundsPosition);
-       pVeSubPropBoundsSize                                            = new (std::nothrow) String(VeSubPropBoundsSize);
-
-       pVeSubPropTransform                                                     = new (std::nothrow) String(VeSubPropTransform);
-       pVeSubPropTransformRotationX                            = new (std::nothrow) String(VeSubPropTransformRotationX);
-       pVeSubPropTransformRotationY                            = new (std::nothrow) String(VeSubPropTransformRotationY);
-       pVeSubPropTransformRotationZ                            = new (std::nothrow) String(VeSubPropTransformRotationZ);
-       pVeSubPropTransformScaleX                                       = new (std::nothrow) String(VeSubPropTransformScaleX);
-       pVeSubPropTransformScaleY                                       = new (std::nothrow) String(VeSubPropTransformScaleY);
-       pVeSubPropTransformScaleZ                                       = new (std::nothrow) String(VeSubPropTransformScaleZ);
-       pVeSubPropTransformTranslationX                         = new (std::nothrow) String(VeSubPropTransformTranslationX);
-       pVeSubPropTransformTranslationY                         = new (std::nothrow) String(VeSubPropTransformTranslationY);
-       pVeSubPropTransformTranslationZ                         = new (std::nothrow) String(VeSubPropTransformTranslationZ);
-       pVeSubPropTransformRotationAnchorX                      = new (std::nothrow) String(VeSubPropTransformRotationAnchorX);
-       pVeSubPropTransformRotationAnchorY                      = new (std::nothrow) String(VeSubPropTransformRotationAnchorY);
-       pVeSubPropTransformRotationAnchorZ                      = new (std::nothrow) String(VeSubPropTransformRotationAnchorZ);
-       pVeSubPropTransformScaleAnchorX                         = new (std::nothrow) String(VeSubPropTransformScaleAnchorX);
-       pVeSubPropTransformScaleAnchorY                         = new (std::nothrow) String(VeSubPropTransformScaleAnchorY);
-       pVeSubPropTransformScaleAnchorZ                         = new (std::nothrow) String(VeSubPropTransformScaleAnchorZ);
-
-       pVeSubPropTransformRotationXY                           = new (std::nothrow) String(VeSubPropTransformRotationXY);
-       pVeSubPropTransformScaleXY                                      = new (std::nothrow) String(VeSubPropTransformScaleXY);
-       pVeSubPropTransformTranslationXY                        = new (std::nothrow) String(VeSubPropTransformTranslationXY);
-       pVeSubPropTransformRotationAnchorXY                     = new (std::nothrow) String(VeSubPropTransformRotationAnchorXY);
-       pVeSubPropTransformScaleAnchorXY                        = new (std::nothrow) String(VeSubPropTransformScaleAnchorXY);
-
-
-       pVeSubPropChildrenTransform                                     = new (std::nothrow) String(VeSubPropChildrenTransform);
-       pVeSubPropChildrenTransformRotationX            = new (std::nothrow) String(VeSubPropChildrenTransformRotationX);
-       pVeSubPropChildrenTransformRotationY            = new (std::nothrow) String(VeSubPropChildrenTransformRotationY);
-       pVeSubPropChildrenTransformRotationZ            = new (std::nothrow) String(VeSubPropChildrenTransformRotationZ);
-       pVeSubPropChildrenTransformScaleX                       = new (std::nothrow) String(VeSubPropChildrenTransformScaleX);
-       pVeSubPropChildrenTransformScaleY                       = new (std::nothrow) String(VeSubPropChildrenTransformScaleY);
-       pVeSubPropChildrenTransformScaleZ                       = new (std::nothrow) String(VeSubPropChildrenTransformScaleZ);
-       pVeSubPropChildrenTransformTranslationX         = new (std::nothrow) String(VeSubPropChildrenTransformTranslationX);
-       pVeSubPropChildrenTransformTranslationY         = new (std::nothrow) String(VeSubPropChildrenTransformTranslationY);
-       pVeSubPropChildrenTransformTranslationZ         = new (std::nothrow) String(VeSubPropChildrenTransformTranslationZ);
-       pVeSubPropChildrenTransformRotationAnchorX      = new (std::nothrow) String(VeSubPropChildrenTransformRotationAnchorX);
-       pVeSubPropChildrenTransformRotationAnchorY      = new (std::nothrow) String(VeSubPropChildrenTransformRotationAnchorY);
-       pVeSubPropChildrenTransformRotationAnchorZ      = new (std::nothrow) String(VeSubPropChildrenTransformRotationAnchorZ);
-       pVeSubPropChildrenTransformScaleAnchorX         = new (std::nothrow) String(VeSubPropChildrenTransformScaleAnchorX);
-       pVeSubPropChildrenTransformScaleAnchorY         = new (std::nothrow) String(VeSubPropChildrenTransformScaleAnchorY);
-       pVeSubPropChildrenTransformScaleAnchorZ         = new (std::nothrow) String(VeSubPropChildrenTransformScaleAnchorZ);
-
-       pVeSubPropChildrenTransformRotationXY           = new (std::nothrow) String(VeSubPropChildrenTransformRotationXY);
-       pVeSubPropChildrenTransformScaleXY                      = new (std::nothrow) String(VeSubPropChildrenTransformScaleXY);
-       pVeSubPropChildrenTransformTranslationXY        = new (std::nothrow) String(VeSubPropChildrenTransformTranslationXY);
-       pVeSubPropChildrenTransformRotationAnchorXY     = new (std::nothrow) String(VeSubPropChildrenTransformRotationAnchorXY);
-       pVeSubPropChildrenTransformScaleAnchorXY        = new (std::nothrow) String(VeSubPropChildrenTransformScaleAnchorXY);
-
-       pVePrivPropShowOpacity                                          = new (std::nothrow) String(VePrivPropShowOpacity);
-
-//     // 3.0 properties
-//     pVeMeshPropVertexCount                          = new (std::nothrow) String(VeMeshPropVertexCount);
-//     pVeMeshPropVertex                                       = new (std::nothrow) String(VeMeshPropVertex);
-//     pVeMeshPropColor                                        = new (std::nothrow) String(VeMeshPropColor);
-//     pVeMeshPropTextureCoord                         = new (std::nothrow) String(VeMeshPropTextureCoord);
-//     pVeMeshPropNormal                                       = new (std::nothrow) String(VeMeshPropNormal);
-//     pVeMeshPropVertexIndex                          = new (std::nothrow) String(VeMeshPropVertexIndex);
-//     pVeMeshPropBoneCount                            = new (std::nothrow) String(VeMeshPropBoneCount);
-//     pVeMeshPropBone                                         = new (std::nothrow) String(VeMeshPropBone);
-//     pVeMeshPropBoneIndex                            = new (std::nothrow) String(VeMeshPropBoneIndex);
-//     pVeMeshPropBoneWeight                           = new (std::nothrow) String(VeMeshPropBoneWeight);
-
-//     pVeMaterialDiffuse                                      = new (std::nothrow) String(VeMaterialDiffuse);
-//     pVeMaterialSpecular                                     = new (std::nothrow) String(VeMaterialSpecular);
-//     pVeMaterialAmbient                                      = new (std::nothrow) String(VeMaterialAmbient);
-//     pVeMaterialEmissive                                     = new (std::nothrow) String(VeMaterialEmissive);
-//     pVeMaterialShiness                                      = new (std::nothrow) String(VeMaterialShiness);
-
-//     // is it needed ?                     / is it needed ?
-//     pVeShadowColor                                          = new (std::nothrow) String(VeShadowColor);
-
-//     pVeLightCount                                           = new (std::nothrow) String(VeLightCount);
-//     pVeLightType                                            = new (std::nothrow) String(VeLightType);
-//     pVeLightDiffuse                                         = new (std::nothrow) String(VeLightDiffuse);
-//     pVeLightSpecular                                        = new (std::nothrow) String(VeLightSpecular);
-//     pVeLightAmbient                                         = new (std::nothrow) String(VeLightAmbient);
-//     pVeLightPosition                                        = new (std::nothrow) String(VeLightPosition);
-//     pVeLightDirection                                       = new (std::nothrow) String(VeLightDirection);
-//     pVeLightExponent                                        = new (std::nothrow) String(VeLightExponent);
-//     pVeLightCutOff                                          = new (std::nothrow) String(VeLightCutOff);
-//     pVeLightConstantAttenuation                     = new (std::nothrow) String(VeLightConstantAttenuation);
-//     pVeLightLinearAttenuation                       = new (std::nothrow) String(VeLightLinearAttenuation);
-//     pVeLightQuadraticAttenuation            = new (std::nothrow) String(VeLightQuadraticAttenuation);
-
+       STRING_INIT(VeSubPropBounds);
+       STRING_INIT(VeSubPropBoundsPosition);
+       STRING_INIT(VeSubPropBoundsSize);
+
+       STRING_INIT(VeSubPropTransform);
+       STRING_INIT(VeSubPropTransformRotationX);
+       STRING_INIT(VeSubPropTransformRotationY);
+       STRING_INIT(VeSubPropTransformRotationZ);
+       STRING_INIT(VeSubPropTransformScaleX);
+       STRING_INIT(VeSubPropTransformScaleY);
+       STRING_INIT(VeSubPropTransformScaleZ);
+       STRING_INIT(VeSubPropTransformTranslationX);
+       STRING_INIT(VeSubPropTransformTranslationY);
+       STRING_INIT(VeSubPropTransformTranslationZ);
+       STRING_INIT(VeSubPropTransformRotationAnchorX);
+       STRING_INIT(VeSubPropTransformRotationAnchorY);
+       STRING_INIT(VeSubPropTransformRotationAnchorZ);
+       STRING_INIT(VeSubPropTransformScaleAnchorX);
+       STRING_INIT(VeSubPropTransformScaleAnchorY);
+       STRING_INIT(VeSubPropTransformScaleAnchorZ);
+
+       STRING_INIT(VeSubPropTransformRotationXY);
+       STRING_INIT(VeSubPropTransformScaleXY);
+       STRING_INIT(VeSubPropTransformTranslationXY);
+       STRING_INIT(VeSubPropTransformRotationAnchorXY);
+       STRING_INIT(VeSubPropTransformScaleAnchorXY);
+
+
+       STRING_INIT(VeSubPropChildrenTransform);
+       STRING_INIT(VeSubPropChildrenTransformRotationX);
+       STRING_INIT(VeSubPropChildrenTransformRotationY);
+       STRING_INIT(VeSubPropChildrenTransformRotationZ);
+       STRING_INIT(VeSubPropChildrenTransformScaleX);
+       STRING_INIT(VeSubPropChildrenTransformScaleY);
+       STRING_INIT(VeSubPropChildrenTransformScaleZ);
+       STRING_INIT(VeSubPropChildrenTransformTranslationX);
+       STRING_INIT(VeSubPropChildrenTransformTranslationY);
+       STRING_INIT(VeSubPropChildrenTransformTranslationZ);
+       STRING_INIT(VeSubPropChildrenTransformRotationAnchorX);
+       STRING_INIT(VeSubPropChildrenTransformRotationAnchorY);
+       STRING_INIT(VeSubPropChildrenTransformRotationAnchorZ);
+       STRING_INIT(VeSubPropChildrenTransformScaleAnchorX);
+       STRING_INIT(VeSubPropChildrenTransformScaleAnchorY);
+       STRING_INIT(VeSubPropChildrenTransformScaleAnchorZ);
+
+       STRING_INIT(VeSubPropChildrenTransformRotationXY);
+       STRING_INIT(VeSubPropChildrenTransformScaleXY);
+       STRING_INIT(VeSubPropChildrenTransformTranslationXY);
+       STRING_INIT(VeSubPropChildrenTransformRotationAnchorXY);
+       STRING_INIT(VeSubPropChildrenTransformScaleAnchorXY);
+
+       STRING_INIT(VePrivPropShowOpacity);
 
 
        // 3.0 properties
-       pVeMeshPropVertexCount                          = new (std::nothrow) _DynamicKeyString(VeMeshPropVertexCount);
-       pVeMeshPropVertex                                       = new (std::nothrow) _DynamicKeyString(VeMeshPropVertex);
-       pVeMeshPropColor                                        = new (std::nothrow) _DynamicKeyString(VeMeshPropColor);
-       pVeMeshPropTextureCoord                         = new (std::nothrow) _DynamicKeyString(VeMeshPropTextureCoord);
-       pVeMeshPropNormal                                       = new (std::nothrow) _DynamicKeyString(VeMeshPropNormal);
-       pVeMeshPropVertexIndex                          = new (std::nothrow) _DynamicKeyString(VeMeshPropVertexIndex);
-       pVeMeshPropBoneCount                            = new (std::nothrow) _DynamicKeyString(VeMeshPropBoneCount);
-       pVeMeshPropBone                                         = new (std::nothrow) _DynamicKeyString(VeMeshPropBone);
-       pVeMeshPropBoneIndex                            = new (std::nothrow) _DynamicKeyString(VeMeshPropBoneIndex);
-       pVeMeshPropBoneWeight                           = new (std::nothrow) _DynamicKeyString(VeMeshPropBoneWeight);
-
-       pVeMaterialDiffuse                                      = new (std::nothrow) _DynamicKeyString(VeMaterialDiffuse);
-       pVeMaterialSpecular                                     = new (std::nothrow) _DynamicKeyString(VeMaterialSpecular);
-       pVeMaterialAmbient                                      = new (std::nothrow) _DynamicKeyString(VeMaterialAmbient);
-       pVeMaterialEmissive                                     = new (std::nothrow) _DynamicKeyString(VeMaterialEmissive);
-       pVeMaterialShiness                                      = new (std::nothrow) _DynamicKeyString(VeMaterialShiness);
+       DYNAMIC_STRING_INIT(VeMeshPropVertexCount);
+       DYNAMIC_STRING_INIT(VeMeshPropVertex);
+       DYNAMIC_STRING_INIT(VeMeshPropColor);
+       DYNAMIC_STRING_INIT(VeMeshPropTextureCoord);
+       DYNAMIC_STRING_INIT(VeMeshPropNormal);
+       DYNAMIC_STRING_INIT(VeMeshPropVertexIndex);
+       DYNAMIC_STRING_INIT(VeMeshPropBoneCount);
+       DYNAMIC_STRING_INIT(VeMeshPropBone);
+       DYNAMIC_STRING_INIT(VeMeshPropBoneIndex);
+       DYNAMIC_STRING_INIT(VeMeshPropBoneWeight);
+
+       DYNAMIC_STRING_INIT(VeMaterialDiffuse);
+       DYNAMIC_STRING_INIT(VeMaterialSpecular);
+       DYNAMIC_STRING_INIT(VeMaterialAmbient);
+       DYNAMIC_STRING_INIT(VeMaterialEmissive);
+       DYNAMIC_STRING_INIT(VeMaterialShiness);
 
        // is it needed ?                     / is it needed ?
-       pVeShadowColor                                          = new (std::nothrow) _DynamicKeyString(VeShadowColor);
-
-       pVeLightCount                                           = new (std::nothrow) _DynamicKeyString(VeLightCount);
-       pVeLightType                                            = new (std::nothrow) _DynamicKeyString(VeLightType);
-       pVeLightDiffuse                                         = new (std::nothrow) _DynamicKeyString(VeLightDiffuse);
-       pVeLightSpecular                                        = new (std::nothrow) _DynamicKeyString(VeLightSpecular);
-       pVeLightAmbient                                         = new (std::nothrow) _DynamicKeyString(VeLightAmbient);
-       pVeLightPosition                                        = new (std::nothrow) _DynamicKeyString(VeLightPosition);
-       pVeLightDirection                                       = new (std::nothrow) _DynamicKeyString(VeLightDirection);
-       pVeLightExponent                                        = new (std::nothrow) _DynamicKeyString(VeLightExponent);
-       pVeLightCutOff                                          = new (std::nothrow) _DynamicKeyString(VeLightCutOff);
-       pVeLightConstantAttenuation                     = new (std::nothrow) _DynamicKeyString(VeLightConstantAttenuation);
-       pVeLightLinearAttenuation                       = new (std::nothrow) _DynamicKeyString(VeLightLinearAttenuation);
-       pVeLightQuadraticAttenuation            = new (std::nothrow) _DynamicKeyString(VeLightQuadraticAttenuation);
+       DYNAMIC_STRING_INIT(VeShadowColor);
+
+       DYNAMIC_STRING_INIT(VeLightCount);
+       DYNAMIC_STRING_INIT(VeLightType);
+       DYNAMIC_STRING_INIT(VeLightDiffuse);
+       DYNAMIC_STRING_INIT(VeLightSpecular);
+       DYNAMIC_STRING_INIT(VeLightAmbient);
+       DYNAMIC_STRING_INIT(VeLightPosition);
+       DYNAMIC_STRING_INIT(VeLightDirection);
+       DYNAMIC_STRING_INIT(VeLightExponent);
+       DYNAMIC_STRING_INIT(VeLightCutOff);
+       DYNAMIC_STRING_INIT(VeLightConstantAttenuation);
+       DYNAMIC_STRING_INIT(VeLightLinearAttenuation);
+       DYNAMIC_STRING_INIT(VeLightQuadraticAttenuation);
        // need to design                     / need to design
        //pVeShaderUniform                                      = /pVeShaderUniform                     ;
        __pMethodLock = new _Mutex(true);
@@ -485,116 +313,116 @@ _VisualElementEnvironment::InitializeEnvironment(void)
 
 _VisualElementEnvironment::~_VisualElementEnvironment(void)
 {
-       delete pVePropBounds;
-       delete pVePropContentBounds;
-       delete pVePropContentOpacity;
-       delete pVePropRenderOperation;
-       delete pVePropOpacity;
-       delete pVePropShowState;
-       delete pVePropAnchor;
-       delete pVePropAnchorZ;
-       delete pVePropTransform;
-       delete pVePropChildrenTransform;
-       delete pVePropZPosition;
-       delete pVePropZOrderGroup;
-       delete pVePropClipToParent;
-       delete pVePropClipChildren;
-       delete pVePropSurfaceOpaque;
-       delete pVePropName;
-       delete pVePropPropertyPropagationEnabled;
-       delete pVePropImplicitAnimationEnabled;
+       delete PROP_STRING(VePropBounds);
+       delete PROP_STRING(VePropContentBounds);
+       delete PROP_STRING(VePropContentOpacity);
+       delete PROP_STRING(VePropRenderOperation);
+       delete PROP_STRING(VePropOpacity);
+       delete PROP_STRING(VePropShowState);
+       delete PROP_STRING(VePropAnchor);
+       delete PROP_STRING(VePropAnchorZ);
+       delete PROP_STRING(VePropTransform);
+       delete PROP_STRING(VePropChildrenTransform);
+       delete PROP_STRING(VePropZPosition);
+       delete PROP_STRING(VePropZOrderGroup);
+       delete PROP_STRING(VePropClipToParent);
+       delete PROP_STRING(VePropClipChildren);
+       delete PROP_STRING(VePropSurfaceOpaque);
+       delete PROP_STRING(VePropName);
+       delete PROP_STRING(VePropPropertyPropagationEnabled);
+       delete PROP_STRING(VePropImplicitAnimationEnabled);
 
 #if defined(SUPPORT_CUSTOMIZING_ATTACH_DETACH_ANIMATION)
-       delete pVePropActionDetach;
-       delete pVePropActionAttach;
+       delete PROP_STRING(VePropActionDetach);
+       delete PROP_STRING(VePropActionAttach);
 #endif
 
-       delete pVeSubPropBounds;
-       delete pVeSubPropBoundsPosition;
-       delete pVeSubPropBoundsSize;
-
-       delete pVeSubPropTransform;
-       delete pVeSubPropTransformRotationX;
-       delete pVeSubPropTransformRotationY;
-       delete pVeSubPropTransformRotationZ;
-       delete pVeSubPropTransformScaleX;
-       delete pVeSubPropTransformScaleY;
-       delete pVeSubPropTransformScaleZ;
-       delete pVeSubPropTransformTranslationX;
-       delete pVeSubPropTransformTranslationY;
-       delete pVeSubPropTransformTranslationZ;
-       delete pVeSubPropTransformRotationAnchorX;
-       delete pVeSubPropTransformRotationAnchorY;
-       delete pVeSubPropTransformRotationAnchorZ;
-       delete pVeSubPropTransformScaleAnchorX;
-       delete pVeSubPropTransformScaleAnchorY;
-       delete pVeSubPropTransformScaleAnchorZ;
-
-       delete pVeSubPropTransformRotationXY;
-       delete pVeSubPropTransformScaleXY;
-       delete pVeSubPropTransformTranslationXY;
-       delete pVeSubPropTransformRotationAnchorXY;
-       delete pVeSubPropTransformScaleAnchorXY;
-
-       delete pVeSubPropChildrenTransform;
-       delete pVeSubPropChildrenTransformRotationX;
-       delete pVeSubPropChildrenTransformRotationY;
-       delete pVeSubPropChildrenTransformRotationZ;
-       delete pVeSubPropChildrenTransformScaleX;
-       delete pVeSubPropChildrenTransformScaleY;
-       delete pVeSubPropChildrenTransformScaleZ;
-       delete pVeSubPropChildrenTransformTranslationX;
-       delete pVeSubPropChildrenTransformTranslationY;
-       delete pVeSubPropChildrenTransformTranslationZ;
-       delete pVeSubPropChildrenTransformRotationAnchorX;
-       delete pVeSubPropChildrenTransformRotationAnchorY;
-       delete pVeSubPropChildrenTransformRotationAnchorZ;
-       delete pVeSubPropChildrenTransformScaleAnchorX;
-       delete pVeSubPropChildrenTransformScaleAnchorY;
-       delete pVeSubPropChildrenTransformScaleAnchorZ;
-
-       delete pVeSubPropChildrenTransformRotationXY;
-       delete pVeSubPropChildrenTransformScaleXY;
-       delete pVeSubPropChildrenTransformTranslationXY;
-       delete pVeSubPropChildrenTransformRotationAnchorXY;
-       delete pVeSubPropChildrenTransformScaleAnchorXY;
-
-       delete pVePrivPropShowOpacity;
+       delete PROP_STRING(VeSubPropBounds);
+       delete PROP_STRING(VeSubPropBoundsPosition);
+       delete PROP_STRING(VeSubPropBoundsSize);
+
+       delete PROP_STRING(VeSubPropTransform);
+       delete PROP_STRING(VeSubPropTransformRotationX);
+       delete PROP_STRING(VeSubPropTransformRotationY);
+       delete PROP_STRING(VeSubPropTransformRotationZ);
+       delete PROP_STRING(VeSubPropTransformScaleX);
+       delete PROP_STRING(VeSubPropTransformScaleY);
+       delete PROP_STRING(VeSubPropTransformScaleZ);
+       delete PROP_STRING(VeSubPropTransformTranslationX);
+       delete PROP_STRING(VeSubPropTransformTranslationY);
+       delete PROP_STRING(VeSubPropTransformTranslationZ);
+       delete PROP_STRING(VeSubPropTransformRotationAnchorX);
+       delete PROP_STRING(VeSubPropTransformRotationAnchorY);
+       delete PROP_STRING(VeSubPropTransformRotationAnchorZ);
+       delete PROP_STRING(VeSubPropTransformScaleAnchorX);
+       delete PROP_STRING(VeSubPropTransformScaleAnchorY);
+       delete PROP_STRING(VeSubPropTransformScaleAnchorZ);
+
+       delete PROP_STRING(VeSubPropTransformRotationXY);
+       delete PROP_STRING(VeSubPropTransformScaleXY);
+       delete PROP_STRING(VeSubPropTransformTranslationXY);
+       delete PROP_STRING(VeSubPropTransformRotationAnchorXY);
+       delete PROP_STRING(VeSubPropTransformScaleAnchorXY);
+
+       delete PROP_STRING(VeSubPropChildrenTransform);
+       delete PROP_STRING(VeSubPropChildrenTransformRotationX);
+       delete PROP_STRING(VeSubPropChildrenTransformRotationY);
+       delete PROP_STRING(VeSubPropChildrenTransformRotationZ);
+       delete PROP_STRING(VeSubPropChildrenTransformScaleX);
+       delete PROP_STRING(VeSubPropChildrenTransformScaleY);
+       delete PROP_STRING(VeSubPropChildrenTransformScaleZ);
+       delete PROP_STRING(VeSubPropChildrenTransformTranslationX);
+       delete PROP_STRING(VeSubPropChildrenTransformTranslationY);
+       delete PROP_STRING(VeSubPropChildrenTransformTranslationZ);
+       delete PROP_STRING(VeSubPropChildrenTransformRotationAnchorX);
+       delete PROP_STRING(VeSubPropChildrenTransformRotationAnchorY);
+       delete PROP_STRING(VeSubPropChildrenTransformRotationAnchorZ);
+       delete PROP_STRING(VeSubPropChildrenTransformScaleAnchorX);
+       delete PROP_STRING(VeSubPropChildrenTransformScaleAnchorY);
+       delete PROP_STRING(VeSubPropChildrenTransformScaleAnchorZ);
+
+       delete PROP_STRING(VeSubPropChildrenTransformRotationXY);
+       delete PROP_STRING(VeSubPropChildrenTransformScaleXY);
+       delete PROP_STRING(VeSubPropChildrenTransformTranslationXY);
+       delete PROP_STRING(VeSubPropChildrenTransformRotationAnchorXY);
+       delete PROP_STRING(VeSubPropChildrenTransformScaleAnchorXY);
+
+       delete PROP_STRING(VePrivPropShowOpacity);
 
 
        // 3.0 properties
-       delete pVeMeshPropVertexCount;
-       delete pVeMeshPropVertex;
-       delete pVeMeshPropColor;
-       delete pVeMeshPropTextureCoord;
-       delete pVeMeshPropNormal;
-       delete pVeMeshPropVertexIndex;
-       delete pVeMeshPropBoneCount;
-       delete pVeMeshPropBone;
-       delete pVeMeshPropBoneIndex;
-       delete pVeMeshPropBoneWeight;
-
-       delete pVeMaterialDiffuse;
-       delete pVeMaterialSpecular;
-       delete pVeMaterialAmbient;
-       delete pVeMaterialEmissive;
-       delete pVeMaterialShiness;
+       delete PROP_STRING(VeMeshPropVertexCount);
+       delete PROP_STRING(VeMeshPropVertex);
+       delete PROP_STRING(VeMeshPropColor);
+       delete PROP_STRING(VeMeshPropTextureCoord);
+       delete PROP_STRING(VeMeshPropNormal);
+       delete PROP_STRING(VeMeshPropVertexIndex);
+       delete PROP_STRING(VeMeshPropBoneCount);
+       delete PROP_STRING(VeMeshPropBone);
+       delete PROP_STRING(VeMeshPropBoneIndex);
+       delete PROP_STRING(VeMeshPropBoneWeight);
+
+       delete PROP_STRING(VeMaterialDiffuse);
+       delete PROP_STRING(VeMaterialSpecular);
+       delete PROP_STRING(VeMaterialAmbient);
+       delete PROP_STRING(VeMaterialEmissive);
+       delete PROP_STRING(VeMaterialShiness);
 
        // is it needed ?
-       delete pVeShadowColor;
-
-       delete pVeLightCount;
-       delete pVeLightType;
-       delete pVeLightDiffuse;
-       delete pVeLightSpecular;
-       delete pVeLightAmbient;
-       delete pVeLightPosition;
-       delete pVeLightDirection;
-       delete pVeLightExponent;
-       delete pVeLightCutOff;
-       delete pVeLightConstantAttenuation;
-       delete pVeLightLinearAttenuation;
-       delete pVeLightQuadraticAttenuation;
+       delete PROP_STRING(VeShadowColor);
+
+       delete PROP_STRING(VeLightCount);
+       delete PROP_STRING(VeLightType);
+       delete PROP_STRING(VeLightDiffuse);
+       delete PROP_STRING(VeLightSpecular);
+       delete PROP_STRING(VeLightAmbient);
+       delete PROP_STRING(VeLightPosition);
+       delete PROP_STRING(VeLightDirection);
+       delete PROP_STRING(VeLightExponent);
+       delete PROP_STRING(VeLightCutOff);
+       delete PROP_STRING(VeLightConstantAttenuation);
+       delete PROP_STRING(VeLightLinearAttenuation);
+       delete PROP_STRING(VeLightQuadraticAttenuation);
 
        // need to design
        //pVeShaderUniform;
index 1cb3111..4636a96 100644 (file)
@@ -126,6 +126,12 @@ using namespace Tizen::Ui::Animations;
 
 #define IS_INTERNAL_CLASS(_IMPL)       (likely((_IMPL)->__isInternal))
 #define IS_NEEDED_UPDATE_RENDER_OBJECT(__MODEL)        (((__MODEL)->__isPropertyPropagationEnabled) && ((__MODEL)->__pRenderObject))
+
+#define UPDATE_PROP_FOR_RENDER(FLAGS, _PROP) \
+               {\
+                       __pSharedData->toUpdatePropertiesForRenderObject._PROP = _PROP;\
+                       __pSharedData->toUpdatePropertiesForRenderObject.__updatedProperties|=FLAGS;\
+               }
 namespace {
 
 static const char* STR_ERROR_INVALID_VARIANT_ARG_TYPE = "[E_INVALID_ARG] Invalid argument(s) is used. Variant type is invalid.";
@@ -377,7 +383,7 @@ _VisualElementImpl::_VisualElementImpl(VisualElement& element)
        , __childrenNeedsUpdateProps(UPDATED_PROP_MASK & ~(UPDATED_PROP_CONTENT_MASK|UPDATED_PROP_CHANGE_ZORDER))
        , __invalidatedProps(UPDATED_PROP_MASK & ~(UPDATED_PROP_CONTENT_MASK|UPDATED_PROP_CHANGE_ZORDER))
 //     , __updatedProperties(0)
-//     , __toUpdatePropImmediately(this)
+//     , __toUpdatePropertiesForRenderObject(this)
        , __matrixFromTopValid(false)
        , __matrixFromTopInvertible(true)
        , __matrixToSuperValid(false)
@@ -441,7 +447,7 @@ _VisualElementImpl::_VisualElementImpl(VisualElement& presentation, _VisualEleme
        , __childrenNeedsUpdateProps(UPDATED_PROP_MASK & ~(UPDATED_PROP_CONTENT_MASK|UPDATED_PROP_CHANGE_ZORDER))
        , __invalidatedProps(UPDATED_PROP_MASK & ~(UPDATED_PROP_CONTENT_MASK|UPDATED_PROP_CHANGE_ZORDER))
 //     , __updatedProperties(modelImpl.__updatedProperties)
-//     , __toUpdatePropImmediately(null)
+//     , __toUpdatePropertiesForRenderObject(null)
        , __matrixFromTopValid(false)
        , __matrixFromTopInvertible(true)
        , __matrixToSuperValid(false)
@@ -502,11 +508,11 @@ _VisualElementImpl::~_VisualElementImpl(void)
 
 
 bool
-_VisualElementImpl::CreateImplicitAnimationForShowState(float newState, float currentState, bool bImplicitAnimation)
+_VisualElementImpl::CreateImplicitAnimationForShowState(float newState, float currentState)
 {
 
     bool retValue = true;
-    const String& property = *pVePropShowState;
+       const String& property = *PROP_STRING(VePropShowState);
 
     _AnimationManager* pAnimationManager = _AnimationManager::GetInstance();
 
@@ -514,7 +520,7 @@ _VisualElementImpl::CreateImplicitAnimationForShowState(float newState, float cu
 //    bool bImplicitAnimation = GET_IMPLICIT_FLAGS(UPDATED_PROP_SHOW_STATE);
 
 
-    if (bImplicitAnimation)
+       if (unlikely(pAnimationManager->IsImplicitAnimationEnabled() && __isImplicitAnimationEnabled))
     {
         // WARNING:
                 //     For performance, following must be done only when oldValue != newValue.
@@ -599,143 +605,9 @@ _VisualElementImpl::UpdateRender(void)
        if (!__pSharedData)
                return E_INVALID_STATE;
 
-//    if(__updatedProperties != 0)
-       if (__pSharedData->toUpdatePropImmediately.__updatedProperties != 0)
-    {
-
-
-//#define GET_CURRENT_VAL(_FLAG,__DATA) ((__pSharedData->__toUpdatePropImmediately.__updatedProperties & (_FLAG)) != 0)? __pSharedData->__toUpdatePropImmediately.__DATA : __pRenderObject->__DATA
-#define GET_CURRENT_VAL(_FLAG,__DATA) __pSharedData->toUpdatePropImmediately.__DATA
-#define GET_IMPLICIT_FLAGS(_FLAG)       ((__pSharedData->toUpdatePropImmediately.__implicitAnimation & (_FLAG)) != 0)? true : false
-
-        RENDER_LOCK();
-               if(__pSharedData->toUpdatePropImmediately.__updatedProperties & UPDATED_PROP_BOUNDS)
-        {
-            FloatRectangle currentValue = GET_CURRENT_VAL(UPDATED_PROP_BOUNDS, __bounds);
-
-            __pRenderObject->SetBoundsProperty(currentValue);
-
-        }
-               if(__pSharedData->toUpdatePropImmediately.__updatedProperties & UPDATED_PROP_RENDER_OPERATION)
-        {
-            __pRenderObject->SetRenderOperationProperty(__renderOperation);
-        }
-               if(__pSharedData->toUpdatePropImmediately.__updatedProperties & UPDATED_PROP_CONTENT_BOUNDS)
-        {
-            FloatRectangle currentValue = GET_CURRENT_VAL(UPDATED_PROP_CONTENT_BOUNDS, __contentBounds);
-                __pRenderObject->SetContentBoundsProperty(currentValue);
-
-        }
-               if(__pSharedData->toUpdatePropImmediately.__updatedProperties & UPDATED_PROP_CONTENT_OPACITY)
-        {
-            float currentValue = GET_CURRENT_VAL(UPDATED_PROP_CONTENT_OPACITY, __contentOpacity);
-            __pRenderObject->SetContentOpacityProperty(currentValue);
-
-        }
-               if(__pSharedData->toUpdatePropImmediately.__updatedProperties & UPDATED_PROP_SHOW_STATE)
-        {
-            float currentValue = GET_CURRENT_VAL(UPDATED_PROP_SHOW_STATE, __showOpacity);
-                __pRenderObject->SetShowStateProperty(SHOWOPACITY_VISIBLE(currentValue));
-
-        }
-
-               if(__pSharedData->toUpdatePropImmediately.__updatedProperties & UPDATED_PROP_OPACITY)
-        {
-
-            float currentValue = GET_CURRENT_VAL(UPDATED_PROP_OPACITY, __opacity);
-//            bool bImplicitAnimation = GET_IMPLICIT_FLAGS(UPDATED_PROP_OPACITY);
-            __pRenderObject->SetOpacityProperty(currentValue);
-        }
-
-               if(__pSharedData->toUpdatePropImmediately.__updatedProperties & UPDATED_PROP_ANCHOR)
-        {
-            FloatPoint currentValue = GET_CURRENT_VAL(UPDATED_PROP_ANCHOR, __anchor);
-                __pRenderObject->SetAnchorProperty(currentValue);
-        }
-               if(__pSharedData->toUpdatePropImmediately.__updatedProperties & UPDATED_PROP_ANCHOR_Z)
-        {
-            float currentValue = GET_CURRENT_VAL(UPDATED_PROP_ANCHOR_Z, __anchorZ);
-                __pRenderObject->SetAnchorZProperty(currentValue);
-        }
-               if(__pSharedData->toUpdatePropImmediately.__updatedProperties & UPDATED_PROP_TRANSFORM)
-        {
-            FloatMatrix4 currentValue = GET_CURRENT_VAL(UPDATED_PROP_TRANSFORM, __decomposedTransform.GetTransformMatrix());
-//            bool bImplicitAnimation = GET_IMPLICIT_FLAGS(UPDATED_PROP_TRANSFORM);
-//            PRINT("UPDATED_PROP_TRANSFORM : implicit(%d) updated(%d)\n", bImplicitAnimation,
-//                   (__pSharedData->__toUpdatePropImmediately.__updatedProperties & UPDATED_PROP_TRANSFORM)?1:0 );
-
-                       __pRenderObject->__decomposedTransform = __pSharedData->toUpdatePropImmediately.__decomposedTransform;
-            __pRenderObject->SetTransformMatrixProperty(currentValue);// 현재 값을 반영한 후에 new 값을 반영.
-            //__pRenderObject->SetTransformMatrixProperty(__transform);
-
-        }
-               if(__pSharedData->toUpdatePropImmediately.__updatedProperties & UPDATED_PROP_CHILDREN_TRANSFORM)
-        {
-            FloatMatrix4 currentValue = GET_CURRENT_VAL(UPDATED_PROP_CHILDREN_TRANSFORM, __childrenTransform);
-
-//            __pRenderObject->__decomposedChildrenTransform = __pSharedData->__toUpdatePropImmediately.__decomposedChildrenTransform;
-            __pRenderObject->SetChildrenTransformMatrixProperty(currentValue);// 현재 값을 반영한 후에 new 값을 반영.
-        }
-               if(__pSharedData->toUpdatePropImmediately.__updatedProperties & UPDATED_PROP_Z_POSITION)
-        {
-            float currentValue = GET_CURRENT_VAL(UPDATED_PROP_Z_POSITION, __zPosition);
-            //bool bImplicitAnimation = GET_IMPLICIT_FLAGS(UPDATED_PROP_Z_POSITION);
-
-             __pRenderObject->SetZPositionProperty(currentValue);
-                //__pRenderObject->SetZPositionProperty(__zPosition);
-        }
-               if(__pSharedData->toUpdatePropImmediately.__updatedProperties & UPDATED_PROP_CLIP_CHILDREN)
-        {
-            __pRenderObject->SetClipChildrenProperty(__isClipChildren);
-        }
-               if(__pSharedData->toUpdatePropImmediately.__updatedProperties & UPDATED_PROP_SURFACE_OPAQUE)
-        {
-            __pRenderObject->SetSurfaceOpaqueProperty(GetSharedData().isSurfaceOpaque);
-            //TODO: isSurfaceOpaque should be changed into VE's member variable.
-        }
-               if(__pSharedData->toUpdatePropImmediately.__updatedProperties & UPDATED_PROP_SURFACE)
-               {
-                       __pRenderObject->SetSurfaceChanged();
-               }
-
-               if(__pSharedData->toUpdatePropImmediately.__updatedProperties & UPDATED_PROP_CHANGE_ZORDER)
-        {
-            if(__pParent)
-            {
-                _VisualElementImpl* pRef = null;
-                int count = __pParent->__children.GetCount();
-                for(int i=0 ; i < count; i++)
-                {
-
-                    if(__pParent->__children.GetChildAt(i) == this)
-                    {
-                        if(i < count - 2)
-                        {
-                            pRef = __pParent->__children.GetChildAt(i+1);
-                        }
-                        break;
-                    }
-                }
-
-                if(pRef &&  pRef->__pRenderObject) // next 가 있음.
-                {
-                    __pParent->__pRenderObject->ChangeZOrder(*__pRenderObject, pRef->__pRenderObject, false, pRef->_zOrderGroup);
-                }
-                else
-                {
-                    __pParent->__pRenderObject->ChangeZOrder(*__pRenderObject, null, false, _zOrderGroup);
-                }
-            }
-//            else
-//            {
-//                __pRenderObject->RemoveFromParent();
-//            }
-
-        }
-    }
+       RENDER_LOCK();
+       __pSharedData->toUpdatePropertiesForRenderObject.Apply();
 
-//    __updatedProperties = 0;
-       __pSharedData->toUpdatePropImmediately.Clear();
 
     int count = __children.GetCount();
     for (int i = 0 ; i < count ; i++)
@@ -1008,8 +880,7 @@ _VisualElementImpl::FlushI(void)
 }
 
 bool
-_VisualElementImpl::CreateImplicitAnimation( const String& property,
-               const Variant& newValue, const String** pSubProperties, bool implicitAnimation, bool isCustomProperty)
+_VisualElementImpl::CreateImplicitAnimation( const String& property, const Variant& newValue)
 {
        bool r = true;
        VisualElement* pTarget = null;
@@ -1018,7 +889,7 @@ _VisualElementImpl::CreateImplicitAnimation( const String& property,
 
        if (likely(GetRoot())
                && likely(GetSharedData().needSurface)
-               && (unlikely(implicitAnimation))  )
+               && (unlikely(pAnimationManager->IsImplicitAnimationEnabled() && __isImplicitAnimationEnabled)))
        {
                // WARNING:
                //      For performance, following must be done only when oldValue != newValue.
@@ -1037,18 +908,12 @@ _VisualElementImpl::CreateImplicitAnimation( const String& property,
                        pPropertyAnimation->SetStartValue(Variant());
                }
 
-               if(isCustomProperty)
-                       pTarget = __pPresentation->__pPublicInstance;
-               else
+//             if(isCustomProperty)
+//                     pTarget = __pPresentation->__pPublicInstance;
+//             else
                        pTarget = __pRenderObject->__pPublicInstance;
 
-               if(pSubProperties)
-               { // remove sub property
-                       for(int i = 0 ; pSubProperties[i] != NULL ; i++)
-                       {
-                                       pAnimationManager->RemoveAnimationByProperty(*pTarget, *pSubProperties[i]);
-                       }
-               }
+
                if (unlikely(pAnimation))
                {
                        /// WARNING:
@@ -1077,10 +942,25 @@ _VisualElementImpl::CreateImplicitAnimation( const String& property,
        return r;
 }
 
+bool
+_VisualElementImpl::RemoveAnimationByPropertyList(const Tizen::Base::String** pSubProperties)
+{
+       _AnimationManager* pAnimationManager = _AnimationManager::GetInstance();
+
+       if(pSubProperties)
+       { // remove sub property
+               for(int i = 0 ; pSubProperties[i] != NULL ; i++)
+               {
+                               pAnimationManager->RemoveAnimationByProperty(*__pRenderObject->__pPublicInstance, *pSubProperties[i]);
+               }
+               return true;
+       }
+       return true;
+}
 
 bool
-_VisualElementImpl::CreateImplicitAnimationIfNeeded( const String& property,
-               const Variant& newValue, const Variant& currentPresentationValue, const String** pSubProperties, bool isCustomProperty)
+_VisualElementImpl::CreateImplicitAnimationForCustomProperty( const String& property,
+               const Variant& newValue, const Variant& currentPresentationValue)
 {
        bool r = true;
        VisualElement* pTarget = null;
@@ -1106,24 +986,15 @@ _VisualElementImpl::CreateImplicitAnimationIfNeeded( const String& property,
                                pPropertyAnimation->SetEndValue(newValue);
                        }
 
-                       if (pPropertyAnimation->GetStartValue().IsEmpty())
+                       if (pPropertyAnimation->GetStartValue().IsEmpty() && !currentPresentationValue.IsEmpty())
                        {
                                pPropertyAnimation->SetStartValue(currentPresentationValue);
                        }
                }
 
-               if(isCustomProperty)
-                       pTarget = __pPresentation->__pPublicInstance;
-               else
-                       pTarget = __pRenderObject->__pPublicInstance;
+               // if not custom property it should be __pRenderObject
+               pTarget = __pPresentation->__pPublicInstance;
 
-               if(pSubProperties)
-               { // remove sub property
-                       for(int i = 0 ; pSubProperties[i] != NULL ; i++)
-                       {
-                                       pAnimationManager->RemoveAnimationByProperty(*pTarget, *pSubProperties[i]);
-                       }
-               }
                if (unlikely(pAnimation))
                {
                        /// WARNING:
@@ -1141,26 +1012,12 @@ _VisualElementImpl::CreateImplicitAnimationIfNeeded( const String& property,
                        // WARNING:
                        //      Remove previous animation even when trying to change the property without animation.
                        pAnimationManager->RemoveAnimationByProperty(*pTarget, property);
-                       if(pSubProperties)
-                       { // remove sub property
-                               for(int i = 0 ; pSubProperties[i] != NULL ; i++)
-                               {
-                                       pAnimationManager->RemoveAnimationByProperty(*pTarget, *pSubProperties[i]);
-                               }
-                       }
                        r = false;
                }
        }
        else
        {
                pAnimationManager->RemoveAnimationByProperty(*pTarget, property);
-               if(pSubProperties)
-               { // remove sub property
-                       for(int i = 0 ; pSubProperties[i] != NULL ; i++)
-                       {
-                               pAnimationManager->RemoveAnimationByProperty(*pTarget, *pSubProperties[i]);
-                       }
-               }
                r = false;
        }
        return r;
@@ -1172,7 +1029,7 @@ _VisualElementImpl::SetRenderOperation(VisualElement::RenderOperation renderOper
 {
        SysTryReturnResult(NID_UI_ANIM, IS_MODEL(this), E_INVALID_OPERATION, "VisualElement is not Model object.");
 
-       result r = InvokeOnSetPropertyRequested(*pVePropRenderOperation, Variant(static_cast< int >(renderOperation)));
+       result r = InvokeOnSetPropertyRequested(*PROP_STRING(VePropRenderOperation), Variant(static_cast< int >(renderOperation)));
        SysTryLog(NID_UI_ANIM, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
 
        return r;
@@ -1184,7 +1041,7 @@ _VisualElementImpl::GetRenderOperation(void) const
        ClearLastResult();
 
 #if 0
-       int renderOperation = InvokeOnGetPropertyRequested(*pVePropRenderOperation).ToInt();
+       int renderOperation = InvokeOnGetPropertyRequested(*PROP_STRING(VePropRenderOperation)).ToInt();
        if (GetLastResult() != E_SUCCESS)
        {
                return VisualElement::RENDER_OPERATION_BLEND;
@@ -1224,7 +1081,8 @@ _VisualElementImpl::SetRenderOperationProperty(const Variant& v)
                //InvalidateHierarchyProps(HIERARCHY_PROPERTY_OPACITY, false, false);
                InvalidateHierarchyProps(UPDATED_PROP_RENDER_OPERATION, false, false);
 
-               GetSharedData().toUpdatePropImmediately.Update(this,UPDATED_PROP_RENDER_OPERATION);
+               //GetSharedData().toUpdatePropertiesForRenderObject.Update(UPDATED_PROP_RENDER_OPERATION, this);
+               UPDATE_PROP_FOR_RENDER(UPDATED_PROP_RENDER_OPERATION,__renderOperation);
        }
 
        return E_SUCCESS;
@@ -1331,7 +1189,7 @@ _VisualElementImpl::SetPropertyPropagationEnabled(bool enable)
        if (enable == __isPropertyPropagationEnabled)
                return E_SUCCESS;
 
-       result r = InvokeOnSetPropertyRequested(*pVePropPropertyPropagationEnabled, Variant(enable));
+       result r = InvokeOnSetPropertyRequested(*PROP_STRING(VePropPropertyPropagationEnabled), Variant(enable));
        SysTryLog(NID_UI_ANIM, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
 
        return r;
@@ -1621,6 +1479,19 @@ _VisualElementImpl::GetImageSource(void) const
 }
 
 void
+_VisualElementImpl::SetGeometryChanged(void)
+{
+       // karzia R01:
+       //InvalidateHierarchyProps(HIERARCHY_PROPERTY_SURFACE, false, false);
+       InvalidateHierarchyProps(UPDATED_PROP_GEOMETRY, false, false);
+
+       if(IS_MODEL(this))
+       {
+               GetSharedData().toUpdatePropertiesForRenderObject.Update(UPDATED_PROP_GEOMETRY);
+       }
+}
+
+void
 _VisualElementImpl::SetSurfaceChanged(void)
 {
        GetSharedData().surfaceChanged = true;
@@ -1629,7 +1500,10 @@ _VisualElementImpl::SetSurfaceChanged(void)
        //InvalidateHierarchyProps(HIERARCHY_PROPERTY_SURFACE, false, false);
        InvalidateHierarchyProps(UPDATED_PROP_SURFACE, false, false);
 
-       GetSharedData().toUpdatePropImmediately.Update(this,UPDATED_PROP_SURFACE);
+       if(IS_MODEL(this))
+       {
+               GetSharedData().toUpdatePropertiesForRenderObject.Update(UPDATED_PROP_SURFACE);
+       }
 
 }
 
@@ -1657,16 +1531,6 @@ _VisualElementImpl::SetContentBoundsI(const FloatRectangle& contentBounds)
        //InvalidateHierarchyProps(HIERARCHY_PROPERTY_CONTENTBOUNDS, false, false);
        InvalidateHierarchyProps(UPDATED_PROP_CONTENT_BOUNDS, false, false);
 
-       // observer
-       if(IS_MODEL(this) && IS_NEEDED_UPDATE_RENDER_OBJECT(this))
-       {
-               GetSharedData().toUpdatePropImmediately.Update(this,UPDATED_PROP_CONTENT_BOUNDS);
-       }
-       else if( IS_PRESENTATION(this))
-       {
-               GetSharedData().toUpdatePropImmediately.Update(this,UPDATED_PROP_CONTENT_BOUNDS);
-       }
-
        return E_SUCCESS;
 }
 
@@ -1674,14 +1538,12 @@ result
 _VisualElementImpl::SetContentBounds(const FloatRectangle& contentBounds)
 {
        SysTryReturnResult(NID_UI_ANIM, IS_MODEL(this), E_INVALID_OPERATION, "VisualElement is not Model object.");
-#if 0
-       return SetContentBoundsI(contentBounds);
-#else
-       result r = InvokeOnSetPropertyRequested(*pVePropContentBounds, Variant(contentBounds));
+
+       result r = InvokeOnSetPropertyRequested(*PROP_STRING(VePropContentBounds), Variant(contentBounds));
        SysTryLog(NID_UI_ANIM, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
 
        return r;
-#endif
+
 }
 
 FloatRectangle
@@ -1705,7 +1567,26 @@ _VisualElementImpl::SetContentBoundsProperty(const Variant& v)
 {
        SysTryReturn(NID_UI_ANIM, v.GetType() == VARIANT_TYPE_FLOAT_RECTANGLE, E_INVALID_ARG, E_INVALID_ARG, STR_ERROR_INVALID_VARIANT_ARG_TYPE);
 
-       return SetContentBoundsI(v.ToFloatRectangle());
+       result r = SetContentBoundsI(v.ToFloatRectangle());
+
+       // observer
+       if(IS_MODEL(this) && IS_NEEDED_UPDATE_RENDER_OBJECT(this))
+       {
+
+
+               if(CreateImplicitAnimation(*PROP_STRING(VePropContentBounds), Variant(__contentBounds)) == false)
+               {
+                       //GetSharedData().toUpdatePropertiesForRenderObject.Update(UPDATED_PROP_CONTENT_BOUNDS, this);
+                       UPDATE_PROP_FOR_RENDER(UPDATED_PROP_CONTENT_BOUNDS,__contentBounds);
+               }
+       }
+       else if( IS_PRESENTATION(this))
+       {
+               //GetSharedData().toUpdatePropertiesForRenderObject.Update(UPDATED_PROP_CONTENT_BOUNDS, this);
+               UPDATE_PROP_FOR_RENDER(UPDATED_PROP_CONTENT_BOUNDS,__contentBounds);
+       }
+
+       return r;
 }
 
 
@@ -1716,7 +1597,7 @@ _VisualElementImpl::GetImplicitAnimationEnabled(void) const
 
        // TBD: forward using property or direct return ?
 #if 0
-       bool isImplicitAnimationEnabled = InvokeOnGetPropertyRequested(*pVePropImplicitAnimationEnabled).ToBool();
+       bool isImplicitAnimationEnabled = InvokeOnGetPropertyRequested(*PROP_STRING(VePropImplicitAnimationEnabled)).ToBool();
        if (GetLastResult() != E_SUCCESS)
                return false;
 
@@ -1730,7 +1611,7 @@ result
 _VisualElementImpl::SetImplicitAnimationEnabled(bool enable)
 {
        SysTryReturnResult(NID_UI_ANIM, IS_MODEL(this), E_INVALID_OPERATION, "VisualElement is not Model object.");
-       result r = InvokeOnSetPropertyRequested(*pVePropImplicitAnimationEnabled, Variant(enable));
+       result r = InvokeOnSetPropertyRequested(*PROP_STRING(VePropImplicitAnimationEnabled), Variant(enable));
        SysTryLog(NID_UI_ANIM, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
 
        return r;
@@ -1778,7 +1659,7 @@ _VisualElementImpl::GetBounds(void) const
 
        // TBD: forward using property or direct return ?
 #if 0
-       FloatRectangle bounds = InvokeOnGetPropertyRequested(*pVePropBounds).ToFloatRectangle();
+       FloatRectangle bounds = InvokeOnGetPropertyRequested(*PROP_STRING(VePropBounds)).ToFloatRectangle();
        if (GetLastResult() != E_SUCCESS)
        {
                return FloatRectangle();
@@ -1791,13 +1672,11 @@ _VisualElementImpl::GetBounds(void) const
 }
 
 result
-_VisualElementImpl::SetBoundsI(const FloatRectangle& bounds)
+_VisualElementImpl::SetBoundsI(const FloatRectangle& bounds, bool& sizeChanged)
 {
        _Rectanglef boundsAdjusted(bounds);
-       FloatRectangle oldValue(__bounds);
 
        result r =  E_SUCCESS;
-       bool sizeChanged = false;
 
        if (unlikely(GetSharedData().pEventListener != null))
        {
@@ -1903,25 +1782,6 @@ _VisualElementImpl::SetBoundsI(const FloatRectangle& bounds)
                }
        }
 
-       // observer
-       if(IS_MODEL(this) && IS_NEEDED_UPDATE_RENDER_OBJECT(this))
-       {
-               GetSharedData().toUpdatePropImmediately.Update(this,UPDATED_PROP_BOUNDS);
-
-
-               VE_DELEGATE(this, InvokeOnBoundsChanged, oldValue);
-
-               if(__pBoundsChangedCallback && sizeChanged == true)
-               {
-                               (*__pBoundsChangedCallback)(__pBoundsChangedCallbackData);
-               }
-
-       }
-       else if( IS_PRESENTATION(this))
-       {
-               GetSharedData().toUpdatePropImmediately.Update(this,UPDATED_PROP_BOUNDS);
-       }
-
        return r;
 }
 
@@ -1934,12 +1794,41 @@ _VisualElementImpl::SetBounds(const FloatRectangle& bounds)
 
        if (IS_KNOWN_CLASS(__pPublicInstance))
        {
-               r = SetBoundsI(bounds);
+               FloatRectangle oldValue(__bounds);
+               bool sizeChanged = false;
+
+               r = SetBoundsI(bounds, sizeChanged);
+
+               // observer
+               if(IS_MODEL(this) && IS_NEEDED_UPDATE_RENDER_OBJECT(this))
+               {
+                       static const String* subProperties[] = {        PROP_STRING(VeSubPropBoundsSize), PROP_STRING(VeSubPropBoundsPosition), NULL };
+                       RemoveAnimationByPropertyList(subProperties);
+
+                       if(CreateImplicitAnimation(*PROP_STRING(VePropBounds), Variant(__bounds)) == false)
+                       {
+                               GetSharedData().toUpdatePropertiesForRenderObject.Update(UPDATED_PROP_BOUNDS, this);
+                               //UPDATE_PROP_FOR_RENDER(UPDATED_PROP_BOUNDS,__bounds);
+                       }
+
+                       VE_DELEGATE(this, InvokeOnBoundsChanged, oldValue);
+
+                       if(__pBoundsChangedCallback && sizeChanged == true)
+                       {
+                                       (*__pBoundsChangedCallback)(__pBoundsChangedCallbackData);
+                       }
+
+               }
+               else if( IS_PRESENTATION(this))
+               {
+                       GetSharedData().toUpdatePropertiesForRenderObject.Update(UPDATED_PROP_BOUNDS, this);
+                       //UPDATE_PROP_FOR_RENDER(UPDATED_PROP_BOUNDS,__bounds);
+               }
        }
 
        else
        {
-               r = InvokeOnSetPropertyRequested(*pVePropBounds, Variant(bounds));
+               r = InvokeOnSetPropertyRequested(*PROP_STRING(VePropBounds), Variant(bounds));
        }
        SysTryLog(NID_UI_ANIM, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
 
@@ -1959,7 +1848,40 @@ _VisualElementImpl::SetBoundsProperty(const Variant& v)
 {
        SysTryReturn(NID_UI_ANIM, v.GetType() == VARIANT_TYPE_FLOAT_RECTANGLE, E_INVALID_ARG, E_INVALID_ARG, STR_ERROR_INVALID_VARIANT_ARG_TYPE);
 
-       return SetBoundsI(v.ToFloatRectangle());
+       FloatRectangle oldValue(__bounds);
+       bool sizeChanged = false;
+
+       result r = SetBoundsI(v.ToFloatRectangle(), sizeChanged);
+
+       // observer
+       if(IS_MODEL(this) && IS_NEEDED_UPDATE_RENDER_OBJECT(this))
+       {
+               static const String* subProperties[] = {        PROP_STRING(VeSubPropBoundsSize), PROP_STRING(VeSubPropBoundsPosition), NULL };
+               RemoveAnimationByPropertyList(subProperties);
+
+               //GetSharedData().toUpdatePropertiesForRenderObject.Update(this,UPDATED_PROP_CONTENT_BOUNDS);
+               if(CreateImplicitAnimation(*PROP_STRING(VePropBounds), Variant(__bounds)) == false)
+               {
+                       GetSharedData().toUpdatePropertiesForRenderObject.Update(UPDATED_PROP_BOUNDS, this);
+                       //UPDATE_PROP_FOR_RENDER(UPDATED_PROP_BOUNDS,__bounds);
+               }
+
+
+               VE_DELEGATE(this, InvokeOnBoundsChanged, oldValue);
+
+               if(__pBoundsChangedCallback && sizeChanged == true)
+               {
+                               (*__pBoundsChangedCallback)(__pBoundsChangedCallbackData);
+               }
+
+       }
+       else if( IS_PRESENTATION(this))
+       {
+               GetSharedData().toUpdatePropertiesForRenderObject.Update(UPDATED_PROP_BOUNDS, this);
+               //UPDATE_PROP_FOR_RENDER(UPDATED_PROP_BOUNDS,__bounds);
+       }
+
+       return r;
 }
 
 Variant
@@ -1975,8 +1897,39 @@ _VisualElementImpl::SetBoundsPositionSubProperty(const Variant& v)
 {
        SysTryReturn(NID_UI_ANIM, v.GetType() == VARIANT_TYPE_FLOAT_POINT, E_INVALID_ARG, E_INVALID_ARG, STR_ERROR_INVALID_VARIANT_ARG_TYPE);
 
+       FloatRectangle oldValue(__bounds);
+
        const FloatPoint& position = v.ToFloatPoint();
-       return SetBoundsProperty(Variant(FloatRectangle(position.x, position.y, __bounds.width, __bounds.height)));
+//     return SetBoundsProperty(Variant(FloatRectangle(position.x, position.y, __bounds.width, __bounds.height)));
+
+       bool sizeChanged = false;
+
+       result r = SetBoundsI(FloatRectangle(position.x, position.y, __bounds.width, __bounds.height), sizeChanged);
+
+       // observer
+       if(IS_MODEL(this) && IS_NEEDED_UPDATE_RENDER_OBJECT(this))
+       {
+               static const String* subProperties[] = { PROP_STRING(VePropBounds), NULL };
+               RemoveAnimationByPropertyList(subProperties);
+
+               if(CreateImplicitAnimation(*PROP_STRING(VeSubPropBoundsPosition), Variant(FloatPoint(__bounds.x, __bounds.y))) == false)
+               {
+                       GetSharedData().toUpdatePropertiesForRenderObject.UpdateSubProperty(PROP_ID(VeSubPropBoundsPosition), this);
+               }
+
+               VE_DELEGATE(this, InvokeOnBoundsChanged, oldValue);
+
+               if(__pBoundsChangedCallback && sizeChanged == true)
+               {
+                               (*__pBoundsChangedCallback)(__pBoundsChangedCallbackData);
+               }
+
+       }
+       else if( IS_PRESENTATION(this))
+       {
+               GetSharedData().toUpdatePropertiesForRenderObject.UpdateSubProperty(PROP_ID(VeSubPropBoundsPosition), this);
+       }
+       return r;
 }
 
 Variant
@@ -1992,8 +1945,39 @@ _VisualElementImpl::SetBoundsSizeSubProperty(const Variant& v)
 {
        SysTryReturn(NID_UI_ANIM, v.GetType() == VARIANT_TYPE_FLOAT_DIMENSION, E_INVALID_ARG, E_INVALID_ARG, STR_ERROR_INVALID_VARIANT_ARG_TYPE);
 
+       FloatRectangle oldValue(__bounds);
        const FloatDimension& size = v.ToFloatDimension();
-       return SetBoundsProperty(Variant(FloatRectangle(__bounds.x, __bounds.y, size.width, size.height)));
+
+       bool sizeChanged = false;
+
+       result r = SetBoundsI(FloatRectangle(__bounds.x, __bounds.y, size.width, size.height), sizeChanged);
+
+       // observer
+       if(IS_MODEL(this) && IS_NEEDED_UPDATE_RENDER_OBJECT(this))
+       {
+               static const String* subProperties[] = { PROP_STRING(VePropBounds), NULL };
+               RemoveAnimationByPropertyList(subProperties);
+
+               if(CreateImplicitAnimation(*PROP_STRING(VeSubPropBoundsSize), Variant(FloatDimension(__bounds.width, __bounds.height))) == false)
+               {
+                       GetSharedData().toUpdatePropertiesForRenderObject.UpdateSubProperty(PROP_ID(VeSubPropBoundsSize), this);
+               }
+
+               VE_DELEGATE(this, InvokeOnBoundsChanged, oldValue);
+
+               if(__pBoundsChangedCallback && sizeChanged == true)
+               {
+                               (*__pBoundsChangedCallback)(__pBoundsChangedCallbackData);
+               }
+
+       }
+       else if( IS_PRESENTATION(this))
+       {
+               GetSharedData().toUpdatePropertiesForRenderObject.UpdateSubProperty(PROP_ID(VeSubPropBoundsSize), this);
+       }
+
+       return r;
+
 }
 
 float
@@ -2003,7 +1987,7 @@ _VisualElementImpl::GetZPosition(void) const
 
        // TBD: forward using property or direct return ?
 #if 0
-       float zPosition = (const_cast< _VisualElementImpl* >(this))->InvokeOnGetPropertyRequested(*pVePropZPosition).ToFloat();
+       float zPosition = (const_cast< _VisualElementImpl* >(this))->InvokeOnGetPropertyRequested(*PROP_STRING(VePropZPosition)).ToFloat();
        if (GetLastResult() != E_SUCCESS)
        {
                return 0.0f;
@@ -2024,15 +2008,23 @@ _VisualElementImpl::SetZPositionI(float zPosition)
 //karzia R01:
 //             InvalidateHierarchyProps(HIERARCHY_PROPERTY_COORDINATES, true, false); // lazy evaluation: property changed flag
                InvalidateHierarchyProps(UPDATED_PROP_Z_POSITION, true, false); // lazy evaluation: property changed flag
-               if(IS_MODEL(this) && IS_NEEDED_UPDATE_RENDER_OBJECT(this))
-               {
-                       GetSharedData().toUpdatePropImmediately.Update(this,UPDATED_PROP_Z_POSITION);
-               }
-               else if( IS_PRESENTATION(this))
+       }
+
+       if(IS_MODEL(this) && IS_NEEDED_UPDATE_RENDER_OBJECT(this))
+       {
+               if(CreateImplicitAnimation(*PROP_STRING(VePropZPosition), Variant(__zPosition)) == false)
                {
-                       GetSharedData().toUpdatePropImmediately.Update(this,UPDATED_PROP_Z_POSITION);
+                       //GetSharedData().toUpdatePropertiesForRenderObject.Update(UPDATED_PROP_Z_POSITION, this);
+                       UPDATE_PROP_FOR_RENDER(UPDATED_PROP_Z_POSITION,__zPosition);
                }
        }
+       else if( IS_PRESENTATION(this))
+       {
+               //GetSharedData().toUpdatePropertiesForRenderObject.Update(UPDATED_PROP_Z_POSITION, this);
+               UPDATE_PROP_FOR_RENDER(UPDATED_PROP_Z_POSITION,__zPosition);
+       }
+
+
        return E_SUCCESS;
 }
 
@@ -2049,7 +2041,7 @@ _VisualElementImpl::SetZPosition(float zPosition)
        }
        else
        {
-               r = InvokeOnSetPropertyRequested(*pVePropZPosition, Variant(zPosition));
+               r = InvokeOnSetPropertyRequested(*PROP_STRING(VePropZPosition), Variant(zPosition));
        }
 
        SysTryLog(NID_UI_ANIM, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
@@ -2092,17 +2084,8 @@ _VisualElementImpl::SetZOrderGroupI(int zOrderGroup)
                __pPresentation->_zOrderGroup = zOrderGroup;
                RENDER_LOCK();
                __pRenderObject->_zOrderGroup = zOrderGroup;
-
        }
 
-//     if(IS_MODEL(this) && IS_NEEDED_UPDATE_RENDER_OBJECT(this))
-//     {
-//             __updatedProperties |= UPDATED_PROP_CHANGE_ZORDER;
-//             GetSharedData().__toUpdatePropImmediately.Update(UPDATED_PROP_CHANGE_ZORDER);
-
-////   RENDER_LOCK();
-////   __pRenderObject->SetZOrderGroupProperty(_zOrderGroup);
-//     }
        return r;
 }
 
@@ -2118,7 +2101,7 @@ _VisualElementImpl::SetZOrderGroup(int zOrderGroup)
        }
        else
        {
-               r = InvokeOnSetPropertyRequested(*pVePropZOrderGroup, Variant(zOrderGroup));
+               r = InvokeOnSetPropertyRequested(*PROP_STRING(VePropZOrderGroup), Variant(zOrderGroup));
        }
 
        SysTryLog(NID_UI_ANIM, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
@@ -2214,7 +2197,7 @@ _VisualElementImpl::GetShowState(void) const
 
        // TBD: forward using property or direct return ?
 #if 0
-       return InvokeOnGetPropertyRequested(*pVePropShowState).ToBool();
+       return InvokeOnGetPropertyRequested(*PROP_STRING(VePropShowState)).ToBool();
 #else
        return VE_VISIBLE(this);
 #endif
@@ -2281,17 +2264,19 @@ _VisualElementImpl::SetShowOpacityI(float showOpacity)
                        }
                }
        }
-       //Observer
+
        if(IS_MODEL(this) && IS_NEEDED_UPDATE_RENDER_OBJECT(this))
        {
-               GetSharedData().toUpdatePropImmediately.Update(this,UPDATED_PROP_SHOW_STATE);
-
-               InvokeOnShowStateChanged(oldShowState);
-
+               if(CreateImplicitAnimationForShowState(__showOpacity, 0.0f) == false)
+               {
+                       //GetSharedData().toUpdatePropertiesForRenderObject.Update(UPDATED_PROP_SHOW_STATE, this);
+                       UPDATE_PROP_FOR_RENDER(UPDATED_PROP_SHOW_STATE, __showOpacity);
+               }
        }
        else if( IS_PRESENTATION(this))
        {
-               GetSharedData().toUpdatePropImmediately.Update(this,UPDATED_PROP_SHOW_STATE);
+               //GetSharedData().toUpdatePropertiesForRenderObject.Update(UPDATED_PROP_SHOW_STATE, this);
+               UPDATE_PROP_FOR_RENDER(UPDATED_PROP_SHOW_STATE, __showOpacity);
        }
 
        return E_SUCCESS;
@@ -2315,7 +2300,7 @@ _VisualElementImpl::SetShowState(bool show)
        }
        else
        {
-               r = InvokeOnSetPropertyRequested(*pVePropShowState, Variant(show));
+               r = InvokeOnSetPropertyRequested(*pVePrivPropShowOpacity, Variant(show ? 1.0f : 0.0f));
        }
 
        SysTryLog(NID_UI_ANIM, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
@@ -2364,7 +2349,7 @@ _VisualElementImpl::GetContentOpacity(void) const
 
        // TBD: forward using property or direct return ?
 #if 0
-       return InvokeOnGetPropertyRequested(*pVePropContentOpacity).ToFloat();
+       return InvokeOnGetPropertyRequested(*PROP_STRING(VePropContentOpacity)).ToFloat();
 #else
        return __contentOpacity;
 #endif
@@ -2387,20 +2372,18 @@ _VisualElementImpl::SetContentOpacityI(float contentOpacity)
        InvalidateHierarchyProps(UPDATED_PROP_CONTENT_OPACITY, false, false); //don't have to apply the changed opacity to children.
 
 
-#ifndef LAZY_EVALUATION
-       if (IS_RENDER_OBJECT(this) && likely(__pSharedData) && likely(GetSharedData().pNativeNode))
-       {
-               GetSharedData().NodeReconfigure(*this);
-       }
-#endif
-
        if(IS_MODEL(this) && IS_NEEDED_UPDATE_RENDER_OBJECT(this))
        {
-               GetSharedData().toUpdatePropImmediately.Update(this,UPDATED_PROP_CONTENT_OPACITY);
+               if (CreateImplicitAnimation(*PROP_STRING(VePropContentOpacity), Variant(__contentOpacity)) == false)
+               {
+                       //GetSharedData().toUpdatePropertiesForRenderObject.Update(UPDATED_PROP_CONTENT_OPACITY, this);
+                       UPDATE_PROP_FOR_RENDER(UPDATED_PROP_CONTENT_OPACITY, __contentOpacity);
+               }
        }
        else if( IS_PRESENTATION(this))
        {
-               GetSharedData().toUpdatePropImmediately.Update(this,UPDATED_PROP_CONTENT_OPACITY);
+               //GetSharedData().toUpdatePropertiesForRenderObject.Update(UPDATED_PROP_CONTENT_OPACITY, this);
+               UPDATE_PROP_FOR_RENDER(UPDATED_PROP_CONTENT_OPACITY, __contentOpacity);
        }
        return E_SUCCESS;
 }
@@ -2412,14 +2395,13 @@ _VisualElementImpl::SetContentOpacity(float contentOpacity)
        SysTryReturnResult(NID_UI_ANIM, IS_MODEL(this), E_INVALID_OPERATION, "VisualElement is not Model object.");
        result r = E_SUCCESS;
 
-//     PROPERTY_PROCESS(SetContentOpacityI, GetContentOpacityProperty, SetContentOpacityProperty, pVePropContentOpacity, __contentOpacity, contentOpacity);
        if (IS_KNOWN_CLASS(__pPublicInstance))
        {
                r = SetContentOpacityI(contentOpacity);
        }
        else
        {
-               r = InvokeOnSetPropertyRequested(*pVePropContentOpacity, Variant(contentOpacity));
+               r = InvokeOnSetPropertyRequested(*PROP_STRING(VePropContentOpacity), Variant(contentOpacity));
        }
 
        SysTryLog(NID_UI_ANIM, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
@@ -2451,7 +2433,7 @@ _VisualElementImpl::GetOpacity(void) const
 
        // TBD: forward using property or direct return ?
 #if 0
-       return InvokeOnGetPropertyRequested(*pVePropOpacity).ToFloat();
+       return InvokeOnGetPropertyRequested(*PROP_STRING(VePropOpacity)).ToFloat();
 #else
        return __opacity;
 #endif
@@ -2481,12 +2463,16 @@ _VisualElementImpl::SetOpacityI(float opacity)
 
        if(IS_MODEL(this) && IS_NEEDED_UPDATE_RENDER_OBJECT(this))
        {
-
-               GetSharedData().toUpdatePropImmediately.Update(this,UPDATED_PROP_OPACITY);
+               if (CreateImplicitAnimation(*PROP_STRING(VePropOpacity), Variant(__opacity)) == false)
+               {
+                       //GetSharedData().toUpdatePropertiesForRenderObject.Update(UPDATED_PROP_OPACITY, this);
+                       UPDATE_PROP_FOR_RENDER(UPDATED_PROP_OPACITY, __opacity);
+               }
        }
        else if( IS_PRESENTATION(this))
        {
-               GetSharedData().toUpdatePropImmediately.Update(this,UPDATED_PROP_OPACITY);
+               //GetSharedData().toUpdatePropertiesForRenderObject.Update(UPDATED_PROP_OPACITY, this);
+               UPDATE_PROP_FOR_RENDER(UPDATED_PROP_OPACITY, __opacity);
        }
        return E_SUCCESS;
 }
@@ -2497,14 +2483,13 @@ _VisualElementImpl::SetOpacity(float opacity)
        SysTryReturnResult(NID_UI_ANIM, IS_MODEL(this), E_INVALID_OPERATION, "VisualElement is not Model object.");
        result r = E_SUCCESS;
 
-//     PROPERTY_PROCESS(SetOpacityI, GetOpacityProperty, SetOpacityProperty, pVePropOpacity, __opacity, opacity);
        if (IS_KNOWN_CLASS(__pPublicInstance))
        {
                r = SetOpacityI(opacity);
        }
        else
        {
-               r = InvokeOnSetPropertyRequested(*pVePropOpacity, Variant(opacity));
+               r = InvokeOnSetPropertyRequested(*PROP_STRING(VePropOpacity), Variant(opacity));
        }
 
        SysTryLog(NID_UI_ANIM, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
@@ -2535,7 +2520,7 @@ _VisualElementImpl::GetAnchor(void) const
 
        // TBD: forward using property or direct return ?
 #if 0
-       return InvokeOnGetPropertyRequested(*pVePropAnchor).ToFloatPoint();
+       return InvokeOnGetPropertyRequested(*PROP_STRING(VePropAnchor)).ToFloatPoint();
 #else
        return __anchor;
 #endif
@@ -2562,11 +2547,16 @@ _VisualElementImpl::SetAnchorI(const FloatPoint& anchor)
 
        if(IS_MODEL(this) && IS_NEEDED_UPDATE_RENDER_OBJECT(this))
        {
-               GetSharedData().toUpdatePropImmediately.Update(this,UPDATED_PROP_ANCHOR);
+               if (CreateImplicitAnimation(*PROP_STRING(VePropAnchor), Variant(__anchor)) == false)
+               {
+                       //GetSharedData().toUpdatePropertiesForRenderObject.Update(UPDATED_PROP_ANCHOR, this);
+                       UPDATE_PROP_FOR_RENDER(UPDATED_PROP_ANCHOR, __anchor);
+               }
        }
        else if( IS_PRESENTATION(this))
        {
-               GetSharedData().toUpdatePropImmediately.Update(this,UPDATED_PROP_ANCHOR);
+               //GetSharedData().toUpdatePropertiesForRenderObject.Update(UPDATED_PROP_ANCHOR, this);
+               UPDATE_PROP_FOR_RENDER(UPDATED_PROP_ANCHOR, __anchor);
        }
        return E_SUCCESS;
 }
@@ -2578,14 +2568,13 @@ _VisualElementImpl::SetAnchor(const FloatPoint& anchor)
        SysTryReturnResult(NID_UI_ANIM, IS_MODEL(this), E_INVALID_OPERATION, "VisualElement is not Model object.");
        result r = E_SUCCESS;
 
-//     PROPERTY_PROCESS(SetAnchorI, GetAnchorProperty, SetAnchorProperty, pVePropAnchor, __anchor, anchor);
        if (IS_KNOWN_CLASS(__pPublicInstance))
        {
                r = SetAnchorI(anchor);
        }
        else
        {
-               r = InvokeOnSetPropertyRequested(*pVePropAnchor, Variant(anchor));
+               r = InvokeOnSetPropertyRequested(*PROP_STRING(VePropAnchor), Variant(anchor));
        }
 
        SysTryLog(NID_UI_ANIM, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
@@ -2617,7 +2606,7 @@ _VisualElementImpl::GetAnchorZ(void) const
 
        // TBD: forward using property or direct return ?
 #if 0
-       return InvokeOnGetPropertyRequested(*pVePropAnchorZ).ToFloat();
+       return InvokeOnGetPropertyRequested(*PROP_STRING(VePropAnchorZ).ToFloat();
 #else
        return __anchorZ;
 #endif
@@ -2644,11 +2633,16 @@ _VisualElementImpl::SetAnchorZI(float anchorZ)
 
        if(IS_MODEL(this) && IS_NEEDED_UPDATE_RENDER_OBJECT(this))
        {
-               GetSharedData().toUpdatePropImmediately.Update(this,UPDATED_PROP_ANCHOR_Z);
+               if (CreateImplicitAnimation(*PROP_STRING(VePropAnchorZ), Variant(__anchorZ)) == false)
+               {
+                       //GetSharedData().toUpdatePropertiesForRenderObject.Update(UPDATED_PROP_ANCHOR_Z, this);
+                       UPDATE_PROP_FOR_RENDER(UPDATED_PROP_ANCHOR_Z, __anchorZ);
+               }
        }
        else if( IS_PRESENTATION(this))
        {
-               GetSharedData().toUpdatePropImmediately.Update(this,UPDATED_PROP_ANCHOR_Z);
+               //GetSharedData().toUpdatePropertiesForRenderObject.Update(UPDATED_PROP_ANCHOR_Z, this);
+               UPDATE_PROP_FOR_RENDER(UPDATED_PROP_ANCHOR_Z, __anchorZ);
        }
        return E_SUCCESS;
 }
@@ -2660,14 +2654,13 @@ _VisualElementImpl::SetAnchorZ(float anchorZ)
        SysTryReturnResult(NID_UI_ANIM, IS_MODEL(this), E_INVALID_OPERATION, "VisualElement is not Model object.");
        result r = E_SUCCESS;
 
-//     PROPERTY_PROCESS(SetAnchorZI, GetAnchorZProperty, SetAnchorZProperty, pVePropAnchorZ, __anchorZ, anchorZ);
        if (IS_KNOWN_CLASS(__pPublicInstance))
        {
                r = SetAnchorZI(anchorZ);
        }
        else
        {
-               r = InvokeOnSetPropertyRequested(*pVePropAnchorZ, Variant(anchorZ));
+               r = InvokeOnSetPropertyRequested(*PROP_STRING(VePropAnchorZ), Variant(anchorZ));
        }
 
        SysTryLog(NID_UI_ANIM, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
@@ -2700,7 +2693,7 @@ _VisualElementImpl::GetTransformMatrix(void) const
 
        // TBD: forward using property or direct return ?
 #if 0
-       return InvokeOnGetPropertyRequested(*pVePropTransform).ToFloatMatrix4();
+       return InvokeOnGetPropertyRequested(*PROP_STRING(VePropTransform)).ToFloatMatrix4();
 #else
        return __transform;
 #endif
@@ -2712,9 +2705,8 @@ _VisualElementImpl::SetTransformMatrixI(const FloatMatrix4& xform, bool updateDe
 
        result r = E_SUCCESS;
 
-       FloatMatrix4 oldValue(__transform);
-
        FloatMatrix4 matrixAdjusted(xform);
+       FloatMatrix4 oldValue(__transform);
 
        if (unlikely(GetSharedData().pEventListener != null))
        {
@@ -2752,31 +2744,119 @@ _VisualElementImpl::SetTransformMatrixI(const FloatMatrix4& xform, bool updateDe
 
        if(IS_MODEL(this) && IS_NEEDED_UPDATE_RENDER_OBJECT(this))
        {
-               GetSharedData().toUpdatePropImmediately.Update(this,UPDATED_PROP_TRANSFORM);
+               static const String* subProperties[] = {
+                               PROP_STRING(VeSubPropTransformRotationX),
+                               PROP_STRING(VeSubPropTransformRotationY),
+                               PROP_STRING(VeSubPropTransformRotationZ),
+                               PROP_STRING(VeSubPropTransformRotationXY),
+                               PROP_STRING(VeSubPropTransformScaleX),
+                               PROP_STRING(VeSubPropTransformScaleY),
+                               PROP_STRING(VeSubPropTransformScaleZ),
+                               PROP_STRING(VeSubPropTransformScaleXY),
+                               PROP_STRING(VeSubPropTransformTranslationX),
+                               PROP_STRING(VeSubPropTransformTranslationY),
+                               PROP_STRING(VeSubPropTransformTranslationZ),
+                               PROP_STRING(VeSubPropTransformTranslationXY),
+                               PROP_STRING(VeSubPropTransformRotationAnchorX),
+                               PROP_STRING(VeSubPropTransformRotationAnchorY),
+                               PROP_STRING(VeSubPropTransformRotationAnchorZ),
+                               PROP_STRING(VeSubPropTransformRotationAnchorXY),
+                               PROP_STRING(VeSubPropTransformScaleAnchorX),
+                               PROP_STRING(VeSubPropTransformScaleAnchorY),
+                               PROP_STRING(VeSubPropTransformScaleAnchorZ),
+                               PROP_STRING(VeSubPropTransformScaleAnchorXY),
+                               NULL};
+               RemoveAnimationByPropertyList(subProperties);
+
+               if (CreateImplicitAnimation(*PROP_STRING(VePropTransform), Variant(__transform)) == false)
+               {
+                       GetSharedData().toUpdatePropertiesForRenderObject.Update(UPDATED_PROP_TRANSFORM, this);
+//                     UPDATE_PROP_FOR_RENDER(UPDATED_PROP_TRANSFORM, __transform);
+               }
 
                VE_DELEGATE(this, InvokeOnTransformMatrixChanged, oldValue);
        }
        else if( IS_PRESENTATION(this))
        {
-               GetSharedData().toUpdatePropImmediately.Update(this,UPDATED_PROP_TRANSFORM);
+               GetSharedData().toUpdatePropertiesForRenderObject.Update(UPDATED_PROP_TRANSFORM, this);
+//             UPDATE_PROP_FOR_RENDER(UPDATED_PROP_TRANSFORM, __transform);
        }
+
        return E_SUCCESS;
 }
 
 result
+_VisualElementImpl::SetTransformDecomposedFactorI(const String* pProperty, int propertyId, const FloatMatrix4& xform, const Variant& v)
+{
+
+       result r = E_SUCCESS;
+
+       FloatMatrix4 matrixAdjusted(xform);
+       FloatMatrix4 oldValue(__transform);
+
+       if (unlikely(GetSharedData().pEventListener != null))
+       {
+               if (IS_MODEL(this))     // CHECKME: checking need??
+               {
+                       r = VE_DELEGATE(this, InvokeOnTransformMatrixChanging, matrixAdjusted);
+               }
+       }
+
+       if (r == E_SUCCESS && likely(matrixAdjusted != __transform))    // check again because delegate may change the transform matrix
+       {
+               // render target updates for previous bounds
+               if (unlikely(!NEED_SURFACE(this)))
+               {
+                       InvalidateVisibleRectToRenderTarget(null);
+               }
+
+               MatrixUtilCopy(__transform, matrixAdjusted);
+
+//             __decomposedTransform.SetTransformMatrix(__transform);
+
+               //karzia R01:
+               //InvalidateHierarchyProps(HIERARCHY_PROPERTY_COORDINATES, true, false);
+               InvalidateHierarchyProps(UPDATED_PROP_TRANSFORM, true, false);
+
+               // VE with surface will be exposed automatically on rebuilding coordinates...
+               if (unlikely(!NEED_SURFACE(this)))
+               {
+                       ExposeRectangle(null, true);    // CHECKME: needed ???
+               }
+       }
+       if(IS_MODEL(this) && IS_NEEDED_UPDATE_RENDER_OBJECT(this))
+       {
+               static const String* subProperties[] = {
+                               PROP_STRING(VePropTransform),
+                               NULL};
+               RemoveAnimationByPropertyList(subProperties);
+               if (CreateImplicitAnimation(*pProperty, v) == false)
+               {
+                       GetSharedData().toUpdatePropertiesForRenderObject.UpdateSubProperty(propertyId, this);
+               }
+
+               VE_DELEGATE(this, InvokeOnTransformMatrixChanged, oldValue);
+       }
+       else if( IS_PRESENTATION(this))
+       {
+               GetSharedData().toUpdatePropertiesForRenderObject.UpdateSubProperty(propertyId, this);
+       }
+       return r;
+}
+
+result
 _VisualElementImpl::SetTransformMatrix(const FloatMatrix4& xform)
 {
        SysTryReturnResult(NID_UI_ANIM, IS_MODEL(this), E_INVALID_OPERATION, "VisualElement is not Model object.");
        result r = E_SUCCESS;
 
-//     PROPERTY_PROCESS(SetTransformMatrixI, GetTransformMatrixProperty, SetTransformMatrixProperty, pVePropTransform, __transform, xform);
        if (IS_KNOWN_CLASS(__pPublicInstance))
        {
-               r = SetTransformMatrixI(xform);
+               r = SetTransformMatrixI(xform, true);
        }
        else
        {
-               r = InvokeOnSetPropertyRequested(*pVePropTransform, Variant(xform));
+               r = InvokeOnSetPropertyRequested(*PROP_STRING(VePropTransform), Variant(xform));
        }
 
        SysTryLog(NID_UI_ANIM, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
@@ -2827,7 +2907,10 @@ _VisualElementImpl::SetTransformRotationXSubProperty(const Variant& v)
        __decomposedTransform.GetEulerAngles(angleX, angleY, angleZ);
        __decomposedTransform.UpdateRotationFromEulerAngles(v.ToFloat(), angleY, angleZ);
 
-       return SetTransformMatrixI(__decomposedTransform.GetTransformMatrix(), false);
+       return SetTransformDecomposedFactorI(PROP_STRING(VeSubPropTransformRotationX),
+                                                                                PROP_ID(VeSubPropTransformRotationX),
+                                                                                __decomposedTransform.GetTransformMatrix(),
+                                                                                v);
 }
 
 Variant
@@ -2854,7 +2937,11 @@ _VisualElementImpl::SetTransformRotationYSubProperty(const Variant& v)
        __decomposedTransform.GetEulerAngles(angleX, angleY, angleZ);
        __decomposedTransform.UpdateRotationFromEulerAngles(angleX, v.ToFloat(), angleZ);
 
-       return SetTransformMatrixI(__decomposedTransform.GetTransformMatrix(), false);
+       return SetTransformDecomposedFactorI(PROP_STRING(VeSubPropTransformRotationY),
+                                                                                PROP_ID(VeSubPropTransformRotationY),
+                                                                                __decomposedTransform.GetTransformMatrix(),
+                                                                                v);
+
 }
 
 Variant
@@ -2881,7 +2968,10 @@ _VisualElementImpl::SetTransformRotationZSubProperty(const Variant& v)
        __decomposedTransform.GetEulerAngles(angleX, angleY, angleZ);
        __decomposedTransform.UpdateRotationFromEulerAngles(angleX, angleY, v.ToFloat());
 
-       return SetTransformMatrixI(__decomposedTransform.GetTransformMatrix(), false);
+       return SetTransformDecomposedFactorI(PROP_STRING(VeSubPropTransformRotationZ),
+                                                                                PROP_ID(VeSubPropTransformRotationZ),
+                                                                                __decomposedTransform.GetTransformMatrix(),
+                                                                                v);
 }
 
 Variant
@@ -2910,7 +3000,10 @@ _VisualElementImpl::SetTransformRotationXYSubProperty(const Variant& v)
        __decomposedTransform.GetEulerAngles(angleX, angleY, angleZ);
        __decomposedTransform.UpdateRotationFromEulerAngles(point.x, point.y, angleZ);
 
-       return SetTransformMatrixI(__decomposedTransform.GetTransformMatrix(), false);
+       return SetTransformDecomposedFactorI(PROP_STRING(VeSubPropTransformRotationXY),
+                                                                                PROP_ID(VeSubPropTransformRotationXY),
+                                                                                __decomposedTransform.GetTransformMatrix(),
+                                                                                v);
 }
 
 Variant
@@ -2937,7 +3030,10 @@ _VisualElementImpl::SetTransformRotationAnchorXSubProperty(const Variant& v)
        __decomposedTransform.GetRotationAnchor(anchorX, anchorY, anchorZ);
        __decomposedTransform.SetRotationAnchor(v.ToFloat(), anchorY, anchorZ);
 
-       return SetTransformMatrixI(__decomposedTransform.GetTransformMatrix(), false);
+       return SetTransformDecomposedFactorI(PROP_STRING(VeSubPropTransformRotationAnchorX),
+                                                                                PROP_ID(VeSubPropTransformRotationAnchorX),
+                                                                                __decomposedTransform.GetTransformMatrix(),
+                                                                                v);
 }
 
 Variant
@@ -2964,7 +3060,10 @@ _VisualElementImpl::SetTransformRotationAnchorYSubProperty(const Variant& v)
        __decomposedTransform.GetRotationAnchor(anchorX, anchorY, anchorZ);
        __decomposedTransform.SetRotationAnchor(anchorX, v.ToFloat(), anchorZ);
 
-       return SetTransformMatrixI(__decomposedTransform.GetTransformMatrix(), false);
+       return SetTransformDecomposedFactorI(PROP_STRING(VeSubPropTransformRotationAnchorY),
+                                                                                PROP_ID(VeSubPropTransformRotationAnchorY),
+                                                                                __decomposedTransform.GetTransformMatrix(),
+                                                                                v);
 }
 
 Variant
@@ -2991,7 +3090,10 @@ _VisualElementImpl::SetTransformRotationAnchorZSubProperty(const Variant& v)
        __decomposedTransform.GetRotationAnchor(anchorX, anchorY, anchorZ);
        __decomposedTransform.SetRotationAnchor(anchorX, anchorY, v.ToFloat());
 
-       return SetTransformMatrixI(__decomposedTransform.GetTransformMatrix(), false);
+       return SetTransformDecomposedFactorI(PROP_STRING(VeSubPropTransformRotationAnchorZ),
+                                                                                PROP_ID(VeSubPropTransformRotationAnchorZ),
+                                                                                __decomposedTransform.GetTransformMatrix(),
+                                                                                v);
 }
 
 Variant
@@ -3020,7 +3122,10 @@ _VisualElementImpl::SetTransformRotationAnchorXYSubProperty(const Variant& v)
        __decomposedTransform.GetRotationAnchor(anchorX, anchorY, anchorZ);
        __decomposedTransform.SetRotationAnchor(point.x, point.y, anchorZ);
 
-       return SetTransformMatrixI(__decomposedTransform.GetTransformMatrix(), false);
+       return SetTransformDecomposedFactorI(PROP_STRING(VeSubPropTransformRotationAnchorXY),
+                                                                                PROP_ID(VeSubPropTransformRotationAnchorXY),
+                                                                                __decomposedTransform.GetTransformMatrix(),
+                                                                                v);
 }
 
 Variant
@@ -3047,7 +3152,10 @@ _VisualElementImpl::SetTransformScaleXSubProperty(const Variant& v)
        __decomposedTransform.GetScaleFactors(scaleX, scaleY, scaleZ);
        __decomposedTransform.SetScaleFactors(v.ToFloat(), scaleY, scaleZ);
 
-       return SetTransformMatrixI(__decomposedTransform.GetTransformMatrix(), false);
+       return SetTransformDecomposedFactorI(PROP_STRING(VeSubPropTransformScaleX),
+                                                                                PROP_ID(VeSubPropTransformScaleX),
+                                                                                __decomposedTransform.GetTransformMatrix(),
+                                                                                v);
 }
 
 Variant
@@ -3074,7 +3182,11 @@ _VisualElementImpl::SetTransformScaleYSubProperty(const Variant& v)
        __decomposedTransform.GetScaleFactors(scaleX, scaleY, scaleZ);
        __decomposedTransform.SetScaleFactors(scaleX, v.ToFloat(), scaleZ);
 
-       return SetTransformMatrixI(__decomposedTransform.GetTransformMatrix(), false);
+       return SetTransformDecomposedFactorI(PROP_STRING(VeSubPropTransformScaleY),
+                                                                                PROP_ID(VeSubPropTransformScaleY),
+                                                                                __decomposedTransform.GetTransformMatrix(),
+                                                                                v);
+
 }
 
 Variant
@@ -3101,7 +3213,10 @@ _VisualElementImpl::SetTransformScaleZSubProperty(const Variant& v)
        __decomposedTransform.GetScaleFactors(scaleX, scaleY, scaleZ);
        __decomposedTransform.SetScaleFactors(scaleX, scaleY, v.ToFloat());
 
-       return SetTransformMatrixI(__decomposedTransform.GetTransformMatrix(), false);
+       return SetTransformDecomposedFactorI(PROP_STRING(VeSubPropTransformScaleZ),
+                                                                                PROP_ID(VeSubPropTransformScaleZ),
+                                                                                __decomposedTransform.GetTransformMatrix(),
+                                                                                v);
 }
 
 Variant
@@ -3135,7 +3250,10 @@ _VisualElementImpl::SetTransformScaleXYSubProperty(const Variant& v)
 
        __decomposedTransform.SetScaleFactors(point.x, point.y, scaleZ);
 
-       return SetTransformMatrixI(__decomposedTransform.GetTransformMatrix(), false);
+       return SetTransformDecomposedFactorI(PROP_STRING(VeSubPropTransformScaleXY),
+                                                                                PROP_ID(VeSubPropTransformScaleXY),
+                                                                                __decomposedTransform.GetTransformMatrix(),
+                                                                                v);
 }
 
 Variant
@@ -3162,7 +3280,10 @@ _VisualElementImpl::SetTransformScaleAnchorXSubProperty(const Variant& v)
        __decomposedTransform.GetScaleAnchor(anchorX, anchorY, anchorZ);
        __decomposedTransform.SetScaleAnchor(v.ToFloat(), anchorY, anchorZ);
 
-       return SetTransformMatrixI(__decomposedTransform.GetTransformMatrix(), false);
+       return SetTransformDecomposedFactorI(PROP_STRING(VeSubPropTransformScaleAnchorX),
+                                                                                PROP_ID(VeSubPropTransformScaleAnchorX),
+                                                                                __decomposedTransform.GetTransformMatrix(),
+                                                                                v);
 }
 
 Variant
@@ -3189,7 +3310,10 @@ _VisualElementImpl::SetTransformScaleAnchorYSubProperty(const Variant& v)
        __decomposedTransform.GetScaleAnchor(anchorX, anchorY, anchorZ);
        __decomposedTransform.SetScaleAnchor(anchorX, v.ToFloat(), anchorZ);
 
-       return SetTransformMatrixI(__decomposedTransform.GetTransformMatrix(), false);
+       return SetTransformDecomposedFactorI(PROP_STRING(VeSubPropTransformScaleAnchorY),
+                                                                                PROP_ID(VeSubPropTransformScaleAnchorY),
+                                                                                __decomposedTransform.GetTransformMatrix(),
+                                                                                v);
 }
 
 Variant
@@ -3216,7 +3340,10 @@ _VisualElementImpl::SetTransformScaleAnchorZSubProperty(const Variant& v)
        __decomposedTransform.GetScaleAnchor(anchorX, anchorY, anchorZ);
        __decomposedTransform.SetScaleAnchor(anchorX, anchorY, v.ToFloat());
 
-       return SetTransformMatrixI(__decomposedTransform.GetTransformMatrix(), false);
+       return SetTransformDecomposedFactorI(PROP_STRING(VeSubPropTransformScaleAnchorZ),
+                                                                                PROP_ID(VeSubPropTransformScaleAnchorZ),
+                                                                                __decomposedTransform.GetTransformMatrix(),
+                                                                                v);
 }
 
 Variant
@@ -3245,7 +3372,10 @@ _VisualElementImpl::SetTransformScaleAnchorXYSubProperty(const Variant& v)
        __decomposedTransform.GetScaleAnchor(anchorX, anchorY, anchorZ);
        __decomposedTransform.SetScaleAnchor(point.x, point.y, anchorZ);
 
-       return SetTransformMatrixI(__decomposedTransform.GetTransformMatrix(), false);
+       return SetTransformDecomposedFactorI(PROP_STRING(VeSubPropTransformScaleAnchorXY),
+                                                                                PROP_ID(VeSubPropTransformScaleAnchorXY),
+                                                                                __decomposedTransform.GetTransformMatrix(),
+                                                                                v);
 }
 
 Variant
@@ -3272,7 +3402,10 @@ _VisualElementImpl::SetTransformTranslationXSubProperty(const Variant& v)
        __decomposedTransform.GetTranslationFactors(translateX, translateY, translateZ);
        __decomposedTransform.SetTranslationFactors(v.ToFloat(), translateY, translateZ);
 
-       return SetTransformMatrixI(__decomposedTransform.GetTransformMatrix(), false);
+       return SetTransformDecomposedFactorI(PROP_STRING(VeSubPropTransformTranslationX),
+                                                                                PROP_ID(VeSubPropTransformTranslationX),
+                                                                                __decomposedTransform.GetTransformMatrix(),
+                                                                                v);
 }
 
 Variant
@@ -3299,7 +3432,10 @@ _VisualElementImpl::SetTransformTranslationYSubProperty(const Variant& v)
        __decomposedTransform.GetTranslationFactors(translateX, translateY, translateZ);
        __decomposedTransform.SetTranslationFactors(translateX, v.ToFloat(), translateZ);
 
-       return SetTransformMatrixI(__decomposedTransform.GetTransformMatrix(), false);
+       return SetTransformDecomposedFactorI(PROP_STRING(VeSubPropTransformTranslationY),
+                                                                                PROP_ID(VeSubPropTransformTranslationY),
+                                                                                __decomposedTransform.GetTransformMatrix(),
+                                                                                v);
 }
 
 Variant
@@ -3326,7 +3462,10 @@ _VisualElementImpl::SetTransformTranslationZSubProperty(const Variant& v)
        __decomposedTransform.GetTranslationFactors(translateX, translateY, translateZ);
        __decomposedTransform.SetTranslationFactors(translateX, translateY, v.ToFloat());
 
-       return SetTransformMatrixI(__decomposedTransform.GetTransformMatrix(), false);
+       return SetTransformDecomposedFactorI(PROP_STRING(VeSubPropTransformTranslationZ),
+                                                                                PROP_ID(VeSubPropTransformTranslationZ),
+                                                                                __decomposedTransform.GetTransformMatrix(),
+                                                                                v);
 }
 
 Variant
@@ -3355,7 +3494,10 @@ _VisualElementImpl::SetTransformTranslationXYSubProperty(const Variant& v)
        __decomposedTransform.GetTranslationFactors(translateX, translateY, translateZ);
        __decomposedTransform.SetTranslationFactors(point.x, point.y, translateZ);
 
-       return SetTransformMatrixI(__decomposedTransform.GetTransformMatrix(), false);
+       return SetTransformDecomposedFactorI(PROP_STRING(VeSubPropTransformTranslationXY),
+                                                                                PROP_ID(VeSubPropTransformTranslationXY),
+                                                                                __decomposedTransform.GetTransformMatrix(),
+                                                                                v);
 }
 
 FloatMatrix4
@@ -3365,7 +3507,7 @@ _VisualElementImpl::GetChildrenTransformMatrix(void) const
 
        // TBD: forward using property or direct return ?
 #if 0
-       return InvokeOnGetPropertyRequested(*pVePropChildrenTransform).ToFloatMatrix4();
+       return InvokeOnGetPropertyRequested(*PROP_STRING(VePropChildrenTransform)).ToFloatMatrix4();
 #else
        return __childrenTransform;
 #endif
@@ -3423,33 +3565,124 @@ _VisualElementImpl::SetChildrenTransformMatrixI(const FloatMatrix4& xform, bool
 
        if(IS_MODEL(this) && IS_NEEDED_UPDATE_RENDER_OBJECT(this))
        {
+               static const String* subProperties[] = {
+                               PROP_STRING(VeSubPropChildrenTransformRotationX),
+                               PROP_STRING(VeSubPropChildrenTransformRotationY),
+                               PROP_STRING(VeSubPropChildrenTransformRotationZ),
+                               PROP_STRING(VeSubPropChildrenTransformRotationXY),
+                               PROP_STRING(VeSubPropChildrenTransformScaleX),
+                               PROP_STRING(VeSubPropChildrenTransformScaleY),
+                               PROP_STRING(VeSubPropChildrenTransformScaleZ),
+                               PROP_STRING(VeSubPropChildrenTransformScaleXY),
+                               PROP_STRING(VeSubPropChildrenTransformTranslationX),
+                               PROP_STRING(VeSubPropChildrenTransformTranslationY),
+                               PROP_STRING(VeSubPropChildrenTransformTranslationZ),
+                               PROP_STRING(VeSubPropChildrenTransformTranslationXY),
+                               PROP_STRING(VeSubPropChildrenTransformRotationAnchorX),
+                               PROP_STRING(VeSubPropChildrenTransformRotationAnchorY),
+                               PROP_STRING(VeSubPropChildrenTransformRotationAnchorZ),
+                               PROP_STRING(VeSubPropChildrenTransformRotationAnchorXY),
+                               PROP_STRING(VeSubPropChildrenTransformScaleAnchorX),
+                               PROP_STRING(VeSubPropChildrenTransformScaleAnchorY),
+                               PROP_STRING(VeSubPropChildrenTransformScaleAnchorZ),
+                               PROP_STRING(VeSubPropChildrenTransformScaleAnchorXY),
+                               NULL};
+               RemoveAnimationByPropertyList(subProperties);
+               if (CreateImplicitAnimation(*PROP_STRING(VePropChildrenTransform), Variant(__childrenTransform)) == false)
+               {
+                       //UPDATE_PROP_FOR_RENDER(UPDATED_PROP_CHILDREN_TRANSFORM, __childrenTransform);
+                       GetSharedData().toUpdatePropertiesForRenderObject.Update(UPDATED_PROP_CHILDREN_TRANSFORM, this);
 
-               GetSharedData().toUpdatePropImmediately.Update(this,UPDATED_PROP_CHILDREN_TRANSFORM);
+               }
 
                VE_DELEGATE(this, InvokeOnChildrenTransformMatrixChanged, oldValue);
        }
        else if( IS_PRESENTATION(this))
        {
-               GetSharedData().toUpdatePropImmediately.Update(this,UPDATED_PROP_CHILDREN_TRANSFORM);
+               //UPDATE_PROP_FOR_RENDER(UPDATED_PROP_CHILDREN_TRANSFORM, __childrenTransform);
+               GetSharedData().toUpdatePropertiesForRenderObject.Update(UPDATED_PROP_CHILDREN_TRANSFORM, this);
        }
        return E_SUCCESS;
 }
 
 
 result
+_VisualElementImpl::SetChildrenTransformDecomposedFactorI(const String* pProperty, int propertyId, const FloatMatrix4& xform, const Variant& v)
+{
+       FloatMatrix4 matrixAdjusted(xform);
+       FloatMatrix4 oldValue(__childrenTransform);
+       result r = E_SUCCESS;
+
+       if (unlikely(GetSharedData().pEventListener != null))
+       {
+               if (IS_MODEL(this))     // CHECKME: checking need??
+               {
+                       r = VE_DELEGATE(this, InvokeOnChildrenTransformMatrixChanging, matrixAdjusted);
+               }
+       }
+
+
+       if (r == E_SUCCESS && likely(matrixAdjusted != __childrenTransform))    // check again because delegate may change the transform matrix
+       {
+
+               // May be un-needed from now...... (no support for VE without surface or shared-canvas)
+               if (IS_MODEL(this))
+               {
+                       int count = __children.GetCount();
+                       for (int i = 0; i < count; i++)
+                       {
+                               // VE with surface will be exposed automatically on rebuilding coordinates...
+                               _VisualElementImpl* pVe = __children.GetChildAt(i);
+                               if (pVe && !NEED_SURFACE(pVe))
+                               {
+                                       pVe->ExposeRectangle(null, true);
+
+                                       // render target update for previous bounds
+                                       pVe->InvalidateVisibleRectToRenderTarget(null);
+                               }
+                       }
+               }
+
+               MatrixUtilCopy(__childrenTransform, matrixAdjusted);
+
+               //karzia R01:
+               //InvalidateHierarchyProps(HIERARCHY_PROPERTY_COORDINATES, true, false);
+               InvalidateHierarchyProps(UPDATED_PROP_CHILDREN_TRANSFORM, true, false);
+       }
+
+       if(IS_MODEL(this) && IS_NEEDED_UPDATE_RENDER_OBJECT(this))
+       {
+               static const String* subProperties[] = {
+                               PROP_STRING(VePropChildrenTransform),
+                               NULL};
+               RemoveAnimationByPropertyList(subProperties);
+               if (CreateImplicitAnimation(*pProperty, v) == false)
+               {
+                       GetSharedData().toUpdatePropertiesForRenderObject.UpdateSubProperty(propertyId, this);
+               }
+
+               VE_DELEGATE(this, InvokeOnChildrenTransformMatrixChanged, oldValue);
+       }
+       else if( IS_PRESENTATION(this))
+       {
+               GetSharedData().toUpdatePropertiesForRenderObject.UpdateSubProperty(propertyId, this);
+       }
+       return E_SUCCESS;
+}
+
+result
 _VisualElementImpl::SetChildrenTransformMatrix(const FloatMatrix4& xform)
 {
        SysTryReturnResult(NID_UI_ANIM, IS_MODEL(this), E_INVALID_OPERATION, "VisualElement is not Model object.");
        result r = E_SUCCESS;
 
-       //PROPERTY_PROCESS(SetChildrenTransformMatrixI, GetChildrenTransformMatrixProperty, SetChildrenTransformMatrixProperty, pVePropChildrenTransform, __childrenTransform, xform);
        if (IS_KNOWN_CLASS(__pPublicInstance))
        {
-               r = SetChildrenTransformMatrixI(xform);
+               r = SetChildrenTransformMatrixI(xform, true);
        }
        else
        {
-               r = InvokeOnSetPropertyRequested(*pVePropChildrenTransform, Variant(xform));
+               r = InvokeOnSetPropertyRequested(*PROP_STRING(VePropChildrenTransform), Variant(xform));
        }
 
        SysTryLog(NID_UI_ANIM, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
@@ -3498,7 +3731,10 @@ _VisualElementImpl::SetChildrenTransformRotationXSubProperty(const Variant& v)
        __decomposedChildrenTransform.GetEulerAngles(angleX, angleY, angleZ);
        __decomposedChildrenTransform.UpdateRotationFromEulerAngles(v.ToFloat(), angleY, angleZ);
 
-       return SetChildrenTransformMatrixI(__decomposedChildrenTransform.GetTransformMatrix(), false);
+       return SetChildrenTransformDecomposedFactorI(PROP_STRING(VeSubPropChildrenTransformRotationX),
+                                                                                                PROP_ID(VeSubPropChildrenTransformRotationX),
+                                                                                               __decomposedChildrenTransform.GetTransformMatrix(),
+                                                                                                v);
 }
 
 Variant
@@ -3525,7 +3761,10 @@ _VisualElementImpl::SetChildrenTransformRotationYSubProperty(const Variant& v)
        __decomposedChildrenTransform.GetEulerAngles(angleX, angleY, angleZ);
        __decomposedChildrenTransform.UpdateRotationFromEulerAngles(angleX, v.ToFloat(), angleZ);
 
-       return SetChildrenTransformMatrixI(__decomposedChildrenTransform.GetTransformMatrix(), false);
+       return SetChildrenTransformDecomposedFactorI(PROP_STRING(VeSubPropChildrenTransformRotationY),
+                                                                                                PROP_ID(VeSubPropChildrenTransformRotationY),
+                                                                                               __decomposedChildrenTransform.GetTransformMatrix(),
+                                                                                                v);
 }
 
 Variant
@@ -3552,7 +3791,10 @@ _VisualElementImpl::SetChildrenTransformRotationZSubProperty(const Variant& v)
        __decomposedChildrenTransform.GetEulerAngles(angleX, angleY, angleZ);
        __decomposedChildrenTransform.UpdateRotationFromEulerAngles(angleX, angleY, v.ToFloat());
 
-       return SetChildrenTransformMatrixI(__decomposedChildrenTransform.GetTransformMatrix(), false);
+       return SetChildrenTransformDecomposedFactorI(PROP_STRING(VeSubPropChildrenTransformRotationZ),
+                                                                                                PROP_ID(VeSubPropChildrenTransformRotationZ),
+                                                                                               __decomposedChildrenTransform.GetTransformMatrix(),
+                                                                                                v);
 }
 
 Variant
@@ -3581,7 +3823,10 @@ _VisualElementImpl::SetChildrenTransformRotationXYSubProperty(const Variant& v)
        __decomposedChildrenTransform.GetEulerAngles(angleX, angleY, angleZ);
        __decomposedChildrenTransform.UpdateRotationFromEulerAngles(point.x, point.y, angleZ);
 
-       return SetChildrenTransformMatrixI(__decomposedChildrenTransform.GetTransformMatrix(), false);
+       return SetChildrenTransformDecomposedFactorI(PROP_STRING(VeSubPropChildrenTransformRotationXY),
+                                                                                                PROP_ID(VeSubPropChildrenTransformRotationXY),
+                                                                                               __decomposedChildrenTransform.GetTransformMatrix(),
+                                                                                                v);
 }
 
 Variant
@@ -3608,7 +3853,11 @@ _VisualElementImpl::SetChildrenTransformRotationAnchorXSubProperty(const Variant
        __decomposedChildrenTransform.GetRotationAnchor(anchorX, anchorY, anchorZ);
        __decomposedChildrenTransform.SetRotationAnchor(v.ToFloat(), anchorY, anchorZ);
 
-       return SetChildrenTransformMatrixI(__decomposedChildrenTransform.GetTransformMatrix(), false);
+       return SetChildrenTransformDecomposedFactorI(PROP_STRING(VeSubPropChildrenTransformRotationAnchorX),
+                                                                                                PROP_ID(VeSubPropChildrenTransformRotationAnchorX),
+                                                                                               __decomposedChildrenTransform.GetTransformMatrix(),
+                                                                                                v);
+
 }
 
 Variant
@@ -3635,7 +3884,10 @@ _VisualElementImpl::SetChildrenTransformRotationAnchorYSubProperty(const Variant
        __decomposedChildrenTransform.GetRotationAnchor(anchorX, anchorY, anchorZ);
        __decomposedChildrenTransform.SetRotationAnchor(anchorX, v.ToFloat(), anchorZ);
 
-       return SetChildrenTransformMatrixI(__decomposedChildrenTransform.GetTransformMatrix(), false);
+       return SetChildrenTransformDecomposedFactorI(PROP_STRING(VeSubPropChildrenTransformRotationAnchorY),
+                                                                                                PROP_ID(VeSubPropChildrenTransformRotationAnchorY),
+                                                                                               __decomposedChildrenTransform.GetTransformMatrix(),
+                                                                                                v);
 }
 
 Variant
@@ -3662,7 +3914,10 @@ _VisualElementImpl::SetChildrenTransformRotationAnchorZSubProperty(const Variant
        __decomposedChildrenTransform.GetRotationAnchor(anchorX, anchorY, anchorZ);
        __decomposedChildrenTransform.SetRotationAnchor(anchorX, anchorY, v.ToFloat());
 
-       return SetChildrenTransformMatrixI(__decomposedChildrenTransform.GetTransformMatrix(), false);
+       return SetChildrenTransformDecomposedFactorI(PROP_STRING(VeSubPropChildrenTransformRotationAnchorZ),
+                                                                                                PROP_ID(VeSubPropChildrenTransformRotationAnchorZ),
+                                                                                               __decomposedChildrenTransform.GetTransformMatrix(),
+                                                                                                v);
 }
 
 Variant
@@ -3691,7 +3946,10 @@ _VisualElementImpl::SetChildrenTransformRotationAnchorXYSubProperty(const Varian
        __decomposedChildrenTransform.GetRotationAnchor(anchorX, anchorY, anchorZ);
        __decomposedChildrenTransform.SetRotationAnchor(point.x, point.y, anchorZ);
 
-       return SetChildrenTransformMatrixI(__decomposedChildrenTransform.GetTransformMatrix(), false);
+       return SetChildrenTransformDecomposedFactorI(PROP_STRING(VeSubPropChildrenTransformRotationAnchorXY),
+                                                                                                PROP_ID(VeSubPropChildrenTransformRotationAnchorXY),
+                                                                                               __decomposedChildrenTransform.GetTransformMatrix(),
+                                                                                                v);
 }
 
 Variant
@@ -3718,7 +3976,10 @@ _VisualElementImpl::SetChildrenTransformScaleXSubProperty(const Variant& v)
        __decomposedChildrenTransform.GetScaleFactors(scaleX, scaleY, scaleZ);
        __decomposedChildrenTransform.SetScaleFactors(v.ToFloat(), scaleY, scaleZ);
 
-       return SetChildrenTransformMatrixI(__decomposedChildrenTransform.GetTransformMatrix(), false);
+       return SetChildrenTransformDecomposedFactorI(PROP_STRING(VeSubPropChildrenTransformScaleX),
+                                                                                                PROP_ID(VeSubPropChildrenTransformScaleX),
+                                                                                               __decomposedChildrenTransform.GetTransformMatrix(),
+                                                                                                v);
 }
 
 Variant
@@ -3745,7 +4006,10 @@ _VisualElementImpl::SetChildrenTransformScaleYSubProperty(const Variant& v)
        __decomposedChildrenTransform.GetScaleFactors(scaleX, scaleY, scaleZ);
        __decomposedChildrenTransform.SetScaleFactors(scaleX, v.ToFloat(), scaleZ);
 
-       return SetChildrenTransformMatrixI(__decomposedChildrenTransform.GetTransformMatrix(), false);
+       return SetChildrenTransformDecomposedFactorI(PROP_STRING(VeSubPropChildrenTransformScaleY),
+                                                                                                PROP_ID(VeSubPropChildrenTransformScaleY),
+                                                                                               __decomposedChildrenTransform.GetTransformMatrix(),
+                                                                                                v);
 }
 
 Variant
@@ -3772,7 +4036,11 @@ _VisualElementImpl::SetChildrenTransformScaleZSubProperty(const Variant& v)
        __decomposedChildrenTransform.GetScaleFactors(scaleX, scaleY, scaleZ);
        __decomposedChildrenTransform.SetScaleFactors(scaleX, scaleY, v.ToFloat());
 
-       return SetChildrenTransformMatrixI(__decomposedChildrenTransform.GetTransformMatrix(), false);
+
+       return SetChildrenTransformDecomposedFactorI(PROP_STRING(VeSubPropChildrenTransformScaleZ),
+                                                                                                PROP_ID(VeSubPropChildrenTransformScaleZ),
+                                                                                               __decomposedChildrenTransform.GetTransformMatrix(),
+                                                                                                v);
 }
 
 Variant
@@ -3801,7 +4069,10 @@ _VisualElementImpl::SetChildrenTransformScaleXYSubProperty(const Variant& v)
        __decomposedChildrenTransform.GetScaleFactors(scaleX, scaleY, scaleZ);
        __decomposedChildrenTransform.SetScaleFactors(point.x, point.y, scaleZ);
 
-       return SetChildrenTransformMatrixI(__decomposedChildrenTransform.GetTransformMatrix(), false);
+       return SetChildrenTransformDecomposedFactorI(PROP_STRING(VeSubPropChildrenTransformScaleXY),
+                                                                                                PROP_ID(VeSubPropChildrenTransformScaleXY),
+                                                                                               __decomposedChildrenTransform.GetTransformMatrix(),
+                                                                                                v);
 }
 
 Variant
@@ -3828,7 +4099,10 @@ _VisualElementImpl::SetChildrenTransformScaleAnchorXSubProperty(const Variant& v
        __decomposedChildrenTransform.GetScaleAnchor(anchorX, anchorY, anchorZ);
        __decomposedChildrenTransform.SetScaleAnchor(v.ToFloat(), anchorY, anchorZ);
 
-       return SetChildrenTransformMatrixI(__decomposedChildrenTransform.GetTransformMatrix(), false);
+       return SetChildrenTransformDecomposedFactorI(PROP_STRING(VeSubPropChildrenTransformScaleAnchorX),
+                                                                                                PROP_ID(VeSubPropChildrenTransformScaleAnchorX),
+                                                                                               __decomposedChildrenTransform.GetTransformMatrix(),
+                                                                                                v);
 }
 
 Variant
@@ -3855,7 +4129,10 @@ _VisualElementImpl::SetChildrenTransformScaleAnchorYSubProperty(const Variant& v
        __decomposedChildrenTransform.GetScaleAnchor(anchorX, anchorY, anchorZ);
        __decomposedChildrenTransform.SetScaleAnchor(anchorX, v.ToFloat(), anchorZ);
 
-       return SetChildrenTransformMatrixI(__decomposedChildrenTransform.GetTransformMatrix(), false);
+       return SetChildrenTransformDecomposedFactorI(PROP_STRING(VeSubPropChildrenTransformScaleAnchorY),
+                                                                                                PROP_ID(VeSubPropChildrenTransformScaleAnchorY),
+                                                                                               __decomposedChildrenTransform.GetTransformMatrix(),
+                                                                                                v);
 }
 
 Variant
@@ -3882,7 +4159,10 @@ _VisualElementImpl::SetChildrenTransformScaleAnchorZSubProperty(const Variant& v
        __decomposedChildrenTransform.GetScaleAnchor(anchorX, anchorY, anchorZ);
        __decomposedChildrenTransform.SetScaleAnchor(anchorX, anchorY, v.ToFloat());
 
-       return SetChildrenTransformMatrixI(__decomposedChildrenTransform.GetTransformMatrix(), false);
+       return SetChildrenTransformDecomposedFactorI(PROP_STRING(VeSubPropChildrenTransformScaleAnchorZ),
+                                                                                                PROP_ID(VeSubPropChildrenTransformScaleAnchorZ),
+                                                                                               __decomposedChildrenTransform.GetTransformMatrix(),
+                                                                                                v);
 }
 
 Variant
@@ -3911,7 +4191,10 @@ _VisualElementImpl::SetChildrenTransformScaleAnchorXYSubProperty(const Variant&
        __decomposedChildrenTransform.GetScaleAnchor(anchorX, anchorY, anchorZ);
        __decomposedChildrenTransform.SetScaleAnchor(point.x, point.y, anchorZ);
 
-       return SetChildrenTransformMatrixI(__decomposedChildrenTransform.GetTransformMatrix(), false);
+       return SetChildrenTransformDecomposedFactorI(PROP_STRING(VeSubPropChildrenTransformScaleAnchorXY),
+                                                                                                PROP_ID(VeSubPropChildrenTransformScaleAnchorXY),
+                                                                                               __decomposedChildrenTransform.GetTransformMatrix(),
+                                                                                                v);
 }
 
 Variant
@@ -3938,7 +4221,10 @@ _VisualElementImpl::SetChildrenTransformTranslationXSubProperty(const Variant& v
        __decomposedChildrenTransform.GetTranslationFactors(translateX, translateY, translateZ);
        __decomposedChildrenTransform.SetTranslationFactors(v.ToFloat(), translateY, translateZ);
 
-       return SetChildrenTransformMatrixI(__decomposedChildrenTransform.GetTransformMatrix(), false);
+       return SetChildrenTransformDecomposedFactorI(PROP_STRING(VeSubPropChildrenTransformTranslationX),
+                                                                                                PROP_ID(VeSubPropChildrenTransformTranslationX),
+                                                                                               __decomposedChildrenTransform.GetTransformMatrix(),
+                                                                                                v);
 }
 
 Variant
@@ -3965,7 +4251,10 @@ _VisualElementImpl::SetChildrenTransformTranslationYSubProperty(const Variant& v
        __decomposedChildrenTransform.GetTranslationFactors(translateX, translateY, translateZ);
        __decomposedChildrenTransform.SetTranslationFactors(translateX, v.ToFloat(), translateZ);
 
-       return SetChildrenTransformMatrixI(__decomposedChildrenTransform.GetTransformMatrix(), false);
+       return SetChildrenTransformDecomposedFactorI(PROP_STRING(VeSubPropChildrenTransformTranslationY),
+                                                                                                PROP_ID(VeSubPropChildrenTransformTranslationY),
+                                                                                               __decomposedChildrenTransform.GetTransformMatrix(),
+                                                                                                v);
 }
 
 Variant
@@ -3992,7 +4281,10 @@ _VisualElementImpl::SetChildrenTransformTranslationZSubProperty(const Variant& v
        __decomposedChildrenTransform.GetTranslationFactors(translateX, translateY, translateZ);
        __decomposedChildrenTransform.SetTranslationFactors(translateX, translateY, v.ToFloat());
 
-       return SetChildrenTransformMatrixI(__decomposedChildrenTransform.GetTransformMatrix(), false);
+       return SetChildrenTransformDecomposedFactorI(PROP_STRING(VeSubPropChildrenTransformTranslationZ),
+                                                                                                PROP_ID(VeSubPropChildrenTransformTranslationZ),
+                                                                                               __decomposedChildrenTransform.GetTransformMatrix(),
+                                                                                                v);
 }
 
 Variant
@@ -4021,7 +4313,10 @@ _VisualElementImpl::SetChildrenTransformTranslationXYSubProperty(const Variant&
        __decomposedChildrenTransform.GetTranslationFactors(translateX, translateY, translateZ);
        __decomposedChildrenTransform.SetTranslationFactors(point.x, point.y, translateZ);
 
-       return SetChildrenTransformMatrixI(__decomposedChildrenTransform.GetTransformMatrix(), false);
+       return SetChildrenTransformDecomposedFactorI(PROP_STRING(VeSubPropChildrenTransformTranslationXY),
+                                                                                                PROP_ID(VeSubPropChildrenTransformTranslationXY),
+                                                                                               __decomposedChildrenTransform.GetTransformMatrix(),
+                                                                                                v);
 }
 
 bool
@@ -4031,7 +4326,7 @@ _VisualElementImpl::IsClipToParent(void) const
 
        // TBD: forward using property or direct return ?
 #if 0
-       return InvokeOnGetPropertyRequested(*pVePropClipToParent).ToBool();
+       return InvokeOnGetPropertyRequested(*PROP_STRING(VePropClipToParent)).ToBool();
 #else
        return false;
 #endif
@@ -4043,7 +4338,7 @@ _VisualElementImpl::SetClipToParent(bool clipToParent)
 {
        SysTryReturnResult(NID_UI_ANIM, IS_MODEL(this), E_INVALID_OPERATION, "VisualElement is not Model object.");
 
-       return InvokeOnSetPropertyRequested(*pVePropClipToParent, Variant(clipToParent));
+       return InvokeOnSetPropertyRequested(*PROP_STRING(VePropClipToParent), Variant(clipToParent));
 }
 
 Variant
@@ -4085,7 +4380,7 @@ _VisualElementImpl::SetClipChildrenEnabled(bool clipChildren)
        }
        else
        {
-               r = InvokeOnSetPropertyRequested(*pVePropClipChildren, Variant(clipChildren));
+               r = InvokeOnSetPropertyRequested(*PROP_STRING(VePropClipChildren), Variant(clipChildren));
        }
        SysTryLog(NID_UI_ANIM, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
 
@@ -4119,11 +4414,14 @@ _VisualElementImpl::SetClipChildrenProperty(const Variant& v)
 
        if(IS_MODEL(this) && IS_NEEDED_UPDATE_RENDER_OBJECT(this))
        {
-               GetSharedData().toUpdatePropImmediately.Update(this,UPDATED_PROP_CLIP_CHILDREN);
+               //GetSharedData().toUpdatePropertiesForRenderObject.Update(UPDATED_PROP_CLIP_CHILDREN, this);
+               UPDATE_PROP_FOR_RENDER(UPDATED_PROP_CLIP_CHILDREN, __isClipChildren);
+
        }
        else if( IS_PRESENTATION(this))
        {
-               GetSharedData().toUpdatePropImmediately.Update(this,UPDATED_PROP_CLIP_CHILDREN);
+               //GetSharedData().toUpdatePropertiesForRenderObject.Update(UPDATED_PROP_CLIP_CHILDREN, this);
+               UPDATE_PROP_FOR_RENDER(UPDATED_PROP_CLIP_CHILDREN, __isClipChildren);
        }
 
        return E_SUCCESS;
@@ -4136,9 +4434,9 @@ _VisualElementImpl::IsSurfaceOpaque(void) const
 
        // TBD: forward using property or direct return ?
 #if 0
-       return InvokeOnGetPropertyRequested(*pVePropSurfaceOpaque).ToBool();
+       return InvokeOnGetPropertyRequested(*PROP_STRING(VePropSurfaceOpaque)).ToBool();
 #else
-       return GetSharedData().isSurfaceOpaque;
+       return __isSurfaceOpaque;
 #endif
 }
 
@@ -4154,7 +4452,7 @@ _VisualElementImpl::SetSurfaceOpaque(bool isSurfaceOpaque)
        }
        else
        {
-               r = InvokeOnSetPropertyRequested(*pVePropSurfaceOpaque, Variant(isSurfaceOpaque));
+               r = InvokeOnSetPropertyRequested(*PROP_STRING(VePropSurfaceOpaque), Variant(isSurfaceOpaque));
        }
        SysTryLog(NID_UI_ANIM, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
 
@@ -4166,7 +4464,7 @@ _VisualElementImpl::GetSurfaceOpaqueProperty(void) const
 {
        ClearLastResult();
 
-       return Variant(GetSharedData().isSurfaceOpaque);
+       return Variant(__isSurfaceOpaque);
 }
 
 result
@@ -4175,33 +4473,24 @@ _VisualElementImpl::SetSurfaceOpaqueProperty(const Variant& v)
        SysTryReturn(NID_UI_ANIM, v.GetType() == VARIANT_TYPE_BOOL, E_INVALID_ARG, E_INVALID_ARG, STR_ERROR_INVALID_VARIANT_ARG_TYPE);
 
        bool isSurfaceOpaque = v.ToBool();
-       if (isSurfaceOpaque == GetSharedData().isSurfaceOpaque)
+       if (isSurfaceOpaque == __isSurfaceOpaque)
                return E_SUCCESS;
 
        //karzia R01:
        //InvalidateHierarchyProps(HIERARCHY_PROPERTY_CONTENTOPACITY, false, false); //don't have to apply the changed opacity to children.
        InvalidateHierarchyProps(UPDATED_PROP_CONTENT_OPACITY, false, false); //don't have to apply the changed opacity to children.
 
-       if (IS_RENDER_OBJECT(this))
-       {
-               GetSharedData().isSurfaceOpaque = isSurfaceOpaque;
+       __isSurfaceOpaque = isSurfaceOpaque;
 
-#ifndef LAZY_EVALUATION
-               // not needed when no surface
-               if (HAVE_SURFACE(this))
-                       GetSharedData().NodeReconfigure(*this);
-#endif
+       if(IS_MODEL(this) && IS_NEEDED_UPDATE_RENDER_OBJECT(this))
+       {
+               //GetSharedData().toUpdatePropertiesForRenderObject.Update(UPDATED_PROP_SURFACE_OPAQUE, this);
+               UPDATE_PROP_FOR_RENDER(UPDATED_PROP_SURFACE_OPAQUE, __isSurfaceOpaque);
        }
-       else
+       else if( IS_PRESENTATION(this))
        {
-               if(IS_NEEDED_UPDATE_RENDER_OBJECT(this))
-               {
-                       GetSharedData().toUpdatePropImmediately.Update(this,UPDATED_PROP_CONTENT_OPACITY);
-               }
-               else if( IS_PRESENTATION(this))
-               {
-                       GetSharedData().toUpdatePropImmediately.Update(this,UPDATED_PROP_CONTENT_OPACITY);
-               }
+               //GetSharedData().toUpdatePropertiesForRenderObject.Update(UPDATED_PROP_SURFACE_OPAQUE, this);
+               UPDATE_PROP_FOR_RENDER(UPDATED_PROP_SURFACE_OPAQUE, __isSurfaceOpaque);
        }
 
        return E_SUCCESS;
@@ -4690,20 +4979,20 @@ _VisualElementImpl::ChangeZOrder(_VisualElementImpl& child, const _VisualElement
                if (IS_MODEL(this) && _AnimationManager::GetInstance()
                                && _AnimationManager::GetInstance()->IsImplicitAnimationEnabled() && child.__isImplicitAnimationEnabled)
                {
-                       RemoveAnimation(*pVePropActionAttach);
+                       RemoveAnimation(*PROP_STRING(VePropActionAttach));
 
 #if defined(SUPPORT_CUSTOMIZING_ATTACH_DETACH_ANIMATION)
-                       VisualElementAnimation* pAnimation = child.InvokeCreateAnimationForProperty(*pVePropActionAttach);
+                       VisualElementAnimation* pAnimation = child.InvokeCreateAnimationForProperty(*PROP_STRING(VePropActionAttach));
 #else
                        VisualElementPropertyAnimation* pAnimation = new (std::nothrow) VisualElementPropertyAnimation();
                        SysTryReturn(NID_UI_ANIM, pAnimation != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
-                       pAnimation->SetPropertyName(*pVePropOpacity);
+                       pAnimation->SetPropertyName(*PROP_STRING(VePropOpacity));
                        pAnimation->SetStartValue(Variant(0.0f));
 #endif
                        if (pAnimation != null)
                        {
                                pAnimation->SetVisualElementAnimationStatusEventListener(null);
-                               (child.GetPublic())->AddAnimation(*pVePropActionAttach, *pAnimation);
+                               (child.GetPublic())->AddAnimation(*PROP_STRING(VePropActionAttach), *pAnimation);
                        }
                        delete pAnimation;
                }
@@ -4797,7 +5086,7 @@ _VisualElementImpl::UpdatePresentationWhenCustomPropertyChanged(const String& pr
        {
                Variant oldV = __pPresentation->InvokeOnGetPropertyRequested(property);
 
-               if(CreateImplicitAnimationIfNeeded(property,value,oldV, NULL, true) == false)
+               if(CreateImplicitAnimationForCustomProperty(property,value,oldV) == false)
                {
                        r = __pPresentation->InvokeOnSetPropertyRequested(property, value);
                }
@@ -4934,10 +5223,10 @@ _VisualElementImpl::CreateElementTreeForDetachImplicitAnimation(_VisualElementIm
        pRoot->_pVisualElementImpl->SetInternal(true);
 
 #if defined(SUPPORT_CUSTOMIZING_ATTACH_DETACH_ANIMATION)
-       VisualElementAnimation* pAnimation = child.InvokeCreateAnimationForProperty(*pVePropActionDetach);
+       VisualElementAnimation* pAnimation = child.InvokeCreateAnimationForProperty(*PROP_STRING(VePropActionDetach));
 #else
        VisualElementPropertyAnimation* pAnimation = new (std::nothrow) VisualElementPropertyAnimation();
-       pAnimation->SetPropertyName(*pVePropOpacity);
+       pAnimation->SetPropertyName(*PROP_STRING(VePropOpacity));
        pAnimation->SetEndValue(Variant(0.0f));
 #endif
        if (pAnimation)
@@ -4947,7 +5236,7 @@ _VisualElementImpl::CreateElementTreeForDetachImplicitAnimation(_VisualElementIm
                {
                        pAnimation->SetVisualElementAnimationStatusEventListener(pListener);
 
-                       r = pRoot->AddAnimation(*pVePropActionDetach, *pAnimation);
+                       r = pRoot->AddAnimation(*PROP_STRING(VePropActionDetach), *pAnimation);
                        if (r == E_SUCCESS)
                        {
                                if (!GetPublic())
@@ -5142,7 +5431,7 @@ _VisualElementImpl::GetName(void) const
        ClearLastResult();
 
 #if 0
-       return InvokeOnGetPropertyRequested(*pVePropName).ToString();
+       return InvokeOnGetPropertyRequested(*PROP_STRING(VePropName)).ToString();
 #else
        return GetSharedData().name;
 #endif
@@ -5152,7 +5441,7 @@ result
 _VisualElementImpl::SetName(const Tizen::Base::String& name)
 {
        SysTryReturnResult(NID_UI_ANIM, IS_MODEL(this), E_INVALID_OPERATION, "VisualElement is not Model object.");
-       result r = InvokeOnSetPropertyRequested(*pVePropName, Variant(name));
+       result r = InvokeOnSetPropertyRequested(*PROP_STRING(VePropName), Variant(name));
        SysTryLog(NID_UI_ANIM, r == E_SUCCESS, "[%s] Propagating.", GetErrorMessage(r));
 
        return r;
@@ -6618,19 +6907,22 @@ _VisualElementImpl::InvokeOnGetPropertyRequested(const Tizen::Base::String& prop
 Variant
 _VisualElementImpl::GetRenderObjectProperty(const Tizen::Base::String& property)
 {
+#if 0
        if(!IS_MODEL(this) || !__pRenderObject)
        {
                return Variant();
        }
 
-       if(GetSharedData().toUpdatePropImmediately.__updatedProperties == 0)
+       if(GetSharedData().toUpdatePropertiesForRenderObject.__updatedProperties == 0)
        {
                return __pRenderObject->GetProperty(property);
        }
        else
        {
-               return GetSharedData().toUpdatePropImmediately.GetProperty(property);
+               return GetSharedData().toUpdatePropertiesForRenderObject.GetProperty(property);
        }
+#endif
+       return Variant();
 }
 
 
@@ -6643,7 +6935,7 @@ _VisualElementImpl::HitTestI(const FloatPoint& point)
        }
 
        if (//NEED_SURFACE(&target) &&
-               !GetSharedData().isSurfaceOpaque &&
+               !__isSurfaceOpaque &&
                _FloatHardCompare(GetOpacityFromRoot(), 0.0f))
        {
                return HITTEST_NOWHERE;
@@ -8020,44 +8312,44 @@ _VisualElementImpl::CheckIfAnimatable(const String& property) const
        };
 #else
        static String* const* supportedProperties[] = {
-               &pVePropBounds,
-               &pVePropContentOpacity,
-               &pVePropOpacity,
-               &pVePropTransform,
-               &pVePropChildrenTransform,
-               &pVePropZPosition,      // TBD:
-               &pVeSubPropBoundsPosition,
-               &pVeSubPropBoundsSize,
-
-               &pVePropContentBounds,
+               &PROP_STRING(VePropBounds),
+               &PROP_STRING(VePropContentOpacity),
+               &PROP_STRING(VePropOpacity),
+               &PROP_STRING(VePropTransform),
+               &PROP_STRING(VePropChildrenTransform),
+               &PROP_STRING(VePropZPosition),  // TBD:
+               &PROP_STRING(VeSubPropBoundsPosition),
+               &PROP_STRING(VeSubPropBoundsSize),
+
+               &PROP_STRING(VePropContentBounds),
 #if defined(SUPPORT_CUSTOMIZING_ATTACH_DETACH_ANIMATION)
-               &pVePropActionDetach,
-               &pVePropActionAttach,
+               &PROP_STRING(VePropActionDetach),
+               &PROP_STRING(VePropActionAttach),
 #endif
-               &pVeSubPropTransformRotationX,
-               &pVeSubPropTransformRotationY,
-               &pVeSubPropTransformRotationZ,
-               &pVeSubPropTransformRotationXY,
-               &pVeSubPropTransformScaleX,
-               &pVeSubPropTransformScaleY,
-               &pVeSubPropTransformScaleZ,
-               &pVeSubPropTransformScaleXY,
-               &pVeSubPropTransformTranslationX,
-               &pVeSubPropTransformTranslationY,
-               &pVeSubPropTransformTranslationZ,
-               &pVeSubPropTransformTranslationXY,
-               &pVeSubPropChildrenTransformRotationX,
-               &pVeSubPropChildrenTransformRotationY,
-               &pVeSubPropChildrenTransformRotationZ,
-               &pVeSubPropChildrenTransformRotationXY,
-               &pVeSubPropChildrenTransformScaleX,
-               &pVeSubPropChildrenTransformScaleY,
-               &pVeSubPropChildrenTransformScaleZ,
-               &pVeSubPropChildrenTransformScaleXY,
-               &pVeSubPropChildrenTransformTranslationX,
-               &pVeSubPropChildrenTransformTranslationY,
-               &pVeSubPropChildrenTransformTranslationZ,
-               &pVeSubPropChildrenTransformTranslationXY
+               &PROP_STRING(VeSubPropTransformRotationX),
+               &PROP_STRING(VeSubPropTransformRotationY),
+               &PROP_STRING(VeSubPropTransformRotationZ),
+               &PROP_STRING(VeSubPropTransformRotationXY),
+               &PROP_STRING(VeSubPropTransformScaleX),
+               &PROP_STRING(VeSubPropTransformScaleY),
+               &PROP_STRING(VeSubPropTransformScaleZ),
+               &PROP_STRING(VeSubPropTransformScaleXY),
+               &PROP_STRING(VeSubPropTransformTranslationX),
+               &PROP_STRING(VeSubPropTransformTranslationY),
+               &PROP_STRING(VeSubPropTransformTranslationZ),
+               &PROP_STRING(VeSubPropTransformTranslationXY),
+               &PROP_STRING(VeSubPropChildrenTransformRotationX),
+               &PROP_STRING(VeSubPropChildrenTransformRotationY),
+               &PROP_STRING(VeSubPropChildrenTransformRotationZ),
+               &PROP_STRING(VeSubPropChildrenTransformRotationXY),
+               &PROP_STRING(VeSubPropChildrenTransformScaleX),
+               &PROP_STRING(VeSubPropChildrenTransformScaleY),
+               &PROP_STRING(VeSubPropChildrenTransformScaleZ),
+               &PROP_STRING(VeSubPropChildrenTransformScaleXY),
+               &PROP_STRING(VeSubPropChildrenTransformTranslationX),
+               &PROP_STRING(VeSubPropChildrenTransformTranslationY),
+               &PROP_STRING(VeSubPropChildrenTransformTranslationZ),
+               &PROP_STRING(VeSubPropChildrenTransformTranslationXY)
        };
 #endif
 
@@ -8085,14 +8377,14 @@ _VisualElementImpl::CreateAnimationForPropertyI(const Tizen::Base::String& prope
        SysTryReturn(NID_UI_ANIM, pAnimation != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
 
 #if defined(SUPPORT_CUSTOMIZING_ATTACH_DETACH_ANIMATION)
-       if (unlikely(property == *pVePropActionAttach))
+       if (unlikely(property == *PROP_STRING(VePropActionAttach)))
        {
-               pAnimation->SetPropertyName(*pVePropOpacity);
+               pAnimation->SetPropertyName(*PROP_STRING(VePropOpacity));
                pAnimation->SetStartValue(Variant(0.0f));
        }
-       else if (unlikely(property == *pVePropActionDetach))
+       else if (unlikely(property == *PROP_STRING(VePropActionDetach)))
        {
-               pAnimation->SetPropertyName(*pVePropOpacity);
+               pAnimation->SetPropertyName(*PROP_STRING(VePropOpacity));
                pAnimation->SetEndValue(Variant(0.0f));
        }
        else
@@ -8149,7 +8441,7 @@ _VisualElementImpl::SetMesh(Mesh* pMesh)
                        __MergeParentsBV();
                }
        }
-
+       SetGeometryChanged();
 
        return E_SUCCESS;
 }
index ed355b2..05e1780 100644 (file)
@@ -50,7 +50,6 @@ namespace Tizen { namespace Ui { namespace Animations
 _VisualElementSharedData::UpdatePropertiesForRender::UpdatePropertiesForRender(_VisualElementImpl* pSource)
        : __pSource(pSource)
        , __updatedProperties(0)
-       , __implicitAnimation(0)
        , __bounds()
        , __renderOperation(false)
        , __contentBounds()
@@ -65,681 +64,958 @@ _VisualElementSharedData::UpdatePropertiesForRender::UpdatePropertiesForRender(_
        ,__decomposedChildrenTransform()
        ,__zPosition(0)
        ,__isClipChildren(false)
-       ,isSurfaceOpaque(false)
+       ,__isSurfaceOpaque(false)
 {
-
+       memset(&subPropFlags, 0x00, sizeof(subPropFlags));
 }
 
 _VisualElementSharedData::UpdatePropertiesForRender::~UpdatePropertiesForRender()
 {
 __updatedProperties = 0;
-__implicitAnimation = 0;
+
 }
 
 void
 _VisualElementSharedData::UpdatePropertiesForRender::Clear()
 {
        __updatedProperties = 0;
-       __implicitAnimation = 0;
+       memset(&subPropFlags, 0x00, sizeof(subPropFlags));
 }
 
-Variant
-_VisualElementSharedData::UpdatePropertiesForRender::GetProperty(const Base::String& name) const
-{
-
-       // need optimizing
-       if(name.CompareTo(*pVePropBounds) == 0
-                       && __updatedProperties & _VisualElementImpl::UPDATED_PROP_BOUNDS)
-       {
-               return Variant(__bounds);
-       }
-       else if(name.CompareTo(*pVeSubPropBoundsPosition) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_BOUNDS)
-       {
-               return Variant(__bounds.GetTopLeft());
-       }
-       else if(name.CompareTo(*pVeSubPropBoundsSize) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_BOUNDS)
-       {
-               return Variant(FloatDimension(__bounds.width, __bounds.height));
-       }
-       else if(name.CompareTo(*pVePropRenderOperation) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_RENDER_OPERATION)
-       {
-               return Variant(static_cast< int >(__renderOperation));
-       }
-       else if(name.CompareTo(*pVePropContentBounds) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_CONTENT_BOUNDS)
-       {
-               return Variant(__contentBounds);
-       }
-       else if(name.CompareTo(*pVePropContentOpacity) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_CONTENT_OPACITY)
-       {
-               return Variant(__contentOpacity);
-       }
 
-       else if(name.CompareTo(*pVePropOpacity) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_OPACITY)
-       {
-               return Variant(__opacity);
-       }
-       else if(name.CompareTo(*pVePropShowState) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_SHOW_STATE)
-       {
-               return Variant((__showOpacity!=0));
+void
+_VisualElementSharedData::UpdatePropertiesForRender::Update(PropertyFlags UpdatedProperty)
+{
+       __updatedProperties |= UpdatedProperty;
+}
 
-       }
-       else if(name.CompareTo(*pVePropAnchor) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_ANCHOR)
-       {
-               return Variant(__anchor);
-       }
-       else if(name.CompareTo(*pVePropAnchorZ) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_ANCHOR_Z)
+void
+_VisualElementSharedData::UpdatePropertiesForRender::UpdateSubProperty(int propertyId, _VisualElementImpl* pSource)
+{
+       switch(propertyId)
        {
-               return Variant(__anchorZ);
-       }
-       else if(name.CompareTo(*pVePropTransform) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_TRANSFORM)
+       case PROP_ID(VeSubPropBoundsSize):
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_BOUNDS;
+               subPropFlags.VeSubPropBoundsSize = 1;
+               __bounds.SetSize(FloatDimension(pSource->__bounds.width, pSource->__bounds.height));
+               break;
+       case PROP_ID(VeSubPropBoundsPosition):
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_BOUNDS;
+               subPropFlags.VeSubPropBoundsPosition = 1;
+               __bounds.SetPosition(FloatPoint(pSource->__bounds.x, pSource->__bounds.y));
+               break;
+       case PROP_ID(VeSubPropTransformRotationX):
        {
-               return Variant(__transform);
-       }
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_TRANSFORM;
+               subPropFlags.VeSubPropTransformRotationX = 1;
 
-       else if(name.CompareTo(*pVeSubPropTransformRotationX) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_TRANSFORM)
-       {
                float angleX = 0.0f;
                float angleY = 0.0f;
                float angleZ = 0.0f;
-               __decomposedTransform.GetEulerAngles(angleX, angleY, angleZ);
-
-               return Variant(angleX);
+               pSource->__decomposedTransform.GetEulerAngles(angleX, angleY, angleZ);
+               __decomposedTransform.__rotX = angleX;
+               break;
        }
-       else if(name.CompareTo(*pVeSubPropTransformRotationY) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_TRANSFORM)
-       {
-               float angleX = 0.0f;
-               float angleY = 0.0f;
-               float angleZ = 0.0f;
-               __decomposedTransform.GetEulerAngles(angleX, angleY, angleZ);
 
-               return Variant(angleY);
-       }
-       else if(name.CompareTo(*pVeSubPropTransformRotationZ) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_TRANSFORM)
+       case PROP_ID(VeSubPropTransformRotationY):
        {
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_TRANSFORM;
+               subPropFlags.VeSubPropTransformRotationY = 1;
+
                float angleX = 0.0f;
                float angleY = 0.0f;
                float angleZ = 0.0f;
-               __decomposedTransform.GetEulerAngles(angleX, angleY, angleZ);
-
-               return Variant(angleZ);
+               pSource->__decomposedTransform.GetEulerAngles(angleX, angleY, angleZ);
+               __decomposedTransform.__rotY = angleY;
+               break;
        }
-       else if(name.CompareTo(*pVeSubPropTransformRotationAnchorXY) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_TRANSFORM)
-       {
-               float anchorX = 0.0f;
-               float anchorY = 0.0f;
-               float anchorZ = 0.0f;
-               __decomposedTransform.GetRotationAnchor(anchorX, anchorY, anchorZ);
-
-               return Variant(FloatPoint(anchorX, anchorY));
 
-       }
-       else if(name.CompareTo(*pVeSubPropTransformRotationXY) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_TRANSFORM)
+       case PROP_ID(VeSubPropTransformRotationZ):
        {
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_TRANSFORM;
+               subPropFlags.VeSubPropTransformRotationZ = 1;
                float angleX = 0.0f;
                float angleY = 0.0f;
                float angleZ = 0.0f;
-               __decomposedTransform.GetEulerAngles(angleX, angleY, angleZ);
-
-               return Variant(FloatPoint(angleX, angleY));
+               pSource->__decomposedTransform.GetEulerAngles(angleX, angleY, angleZ);
+               __decomposedTransform.__rotZ = angleZ;
+               break;
        }
-       else if(name.CompareTo(*pVeSubPropTransformScaleX) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_TRANSFORM)
+       case PROP_ID(VeSubPropTransformScaleX):
        {
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_TRANSFORM;
+               subPropFlags.VeSubPropTransformScaleX = 1;
                float scaleX = 1.0f;
                float scaleY = 1.0f;
                float scaleZ = 1.0f;
-               __decomposedTransform.GetScaleFactors(scaleX, scaleY, scaleZ);
-
-               return Variant(scaleX);
+               pSource->__decomposedTransform.GetScaleFactors(scaleX, scaleY, scaleZ);
+               __decomposedTransform.__scaleX = scaleX;
+               break;
        }
-       else if(name.CompareTo(*pVeSubPropTransformScaleY) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_TRANSFORM)
+       case PROP_ID(VeSubPropTransformScaleY):
        {
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_TRANSFORM;
+               subPropFlags.VeSubPropTransformScaleY = 1;
                float scaleX = 1.0f;
                float scaleY = 1.0f;
                float scaleZ = 1.0f;
-               __decomposedTransform.GetScaleFactors(scaleX, scaleY, scaleZ);
-
-               return Variant(scaleY);
+               pSource->__decomposedTransform.GetScaleFactors(scaleX, scaleY, scaleZ);
+               __decomposedTransform.__scaleY = scaleY;
+               break;
        }
-       else if(name.CompareTo(*pVeSubPropTransformScaleZ) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_TRANSFORM)
+       case PROP_ID(VeSubPropTransformScaleZ):
        {
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_TRANSFORM;
+               subPropFlags.VeSubPropTransformScaleZ = 1;
                float scaleX = 1.0f;
                float scaleY = 1.0f;
                float scaleZ = 1.0f;
-               __decomposedTransform.GetScaleFactors(scaleX, scaleY, scaleZ);
-
-               return Variant(scaleZ);
-       }
-       else if(name.CompareTo(*pVeSubPropTransformScaleAnchorXY) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_TRANSFORM)
-       {
-               float anchorX = 0.0f;
-               float anchorY = 0.0f;
-               float anchorZ = 0.0f;
-               __decomposedTransform.GetScaleAnchor(anchorX, anchorY, anchorZ);
-
-               return Variant(FloatPoint(anchorX, anchorY));
+               pSource->__decomposedTransform.GetScaleFactors(scaleX, scaleY, scaleZ);
+               __decomposedTransform.__scaleZ = scaleZ;
+               break;
        }
-       else if(name.CompareTo(*pVeSubPropTransformTranslationX) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_TRANSFORM)
+       case PROP_ID(VeSubPropTransformTranslationX):
        {
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_TRANSFORM;
+               subPropFlags.VeSubPropTransformTranslationX = 1;
                float translateX = 0.0f;
                float translateY = 0.0f;
                float translateZ = 0.0f;
-               __decomposedTransform.GetTranslationFactors(translateX, translateY, translateZ);
-
-               return Variant(translateX);
-       }
-       else if(name.CompareTo(*pVeSubPropTransformScaleXY) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_TRANSFORM)
-       {
-               float scaleX = 1.0f;
-               float scaleY = 1.0f;
-               float scaleZ = 1.0f;
-               __decomposedTransform.GetScaleFactors(scaleX, scaleY, scaleZ);
-
-               return Variant(FloatPoint(scaleX, scaleY));
+               pSource->__decomposedTransform.GetTranslationFactors(translateX, translateY, translateZ);
+               __decomposedTransform.__translationX = translateX;
+               break;
        }
-       else if(name.CompareTo(*pVeSubPropTransformTranslationY) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_TRANSFORM)
+       case PROP_ID(VeSubPropTransformTranslationY):
        {
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_TRANSFORM;
+               subPropFlags.VeSubPropTransformTranslationY = 1;
                float translateX = 0.0f;
                float translateY = 0.0f;
                float translateZ = 0.0f;
-               __decomposedTransform.GetTranslationFactors(translateX, translateY, translateZ);
-
-               return Variant(translateY);
+               pSource->__decomposedTransform.GetTranslationFactors(translateX, translateY, translateZ);
+               __decomposedTransform.__translationY = translateY;
+               break;
        }
-       else if(name.CompareTo(*pVeSubPropTransformTranslationZ) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_TRANSFORM)
+       case PROP_ID(VeSubPropTransformTranslationZ):
        {
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_TRANSFORM;
+               subPropFlags.VeSubPropTransformTranslationZ = 1;
                float translateX = 0.0f;
                float translateY = 0.0f;
                float translateZ = 0.0f;
-               __decomposedTransform.GetTranslationFactors(translateX, translateY, translateZ);
-
-               return Variant(translateZ);
+               pSource->__decomposedTransform.GetTranslationFactors(translateX, translateY, translateZ);
+               __decomposedTransform.__translationZ = translateZ;
+               break;
        }
-
-       else if(name.CompareTo(*pVeSubPropTransformTranslationXY) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_TRANSFORM)
+       case PROP_ID(VeSubPropTransformRotationAnchorX):
        {
-               float translateX = 0.0f;
-               float translateY = 0.0f;
-               float translateZ = 0.0f;
-               __decomposedTransform.GetTranslationFactors(translateX, translateY, translateZ);
-
-               return Variant(FloatPoint(translateX, translateY));
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_TRANSFORM;
+               subPropFlags.VeSubPropTransformRotationAnchorX = 1;
+               float anchorX = 0.0f;
+               float anchorY = 0.0f;
+               float anchorZ = 0.0f;
+               pSource->__decomposedTransform.GetRotationAnchor(anchorX, anchorY, anchorZ);
+               __decomposedTransform.__rotAnchorX = anchorX;
+               break;
        }
-       else if(name.CompareTo(*pVePropChildrenTransform) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM)
+       case PROP_ID(VeSubPropTransformRotationAnchorY):
        {
-               return Variant(__childrenTransform);
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_TRANSFORM;
+               subPropFlags.VeSubPropTransformRotationAnchorY = 1;
+               float anchorX = 0.0f;
+               float anchorY = 0.0f;
+               float anchorZ = 0.0f;
+               pSource->__decomposedTransform.GetRotationAnchor(anchorX, anchorY, anchorZ);
+               __decomposedTransform.__rotAnchorY = anchorY;
+               break;
        }
-       else if(name.CompareTo(*pVeSubPropChildrenTransformRotationX) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM)
+       case PROP_ID(VeSubPropTransformRotationAnchorZ):
        {
-               float angleX = 0.0f;
-               float angleY = 0.0f;
-               float angleZ = 0.0f;
-               __decomposedChildrenTransform.GetEulerAngles(angleX, angleY, angleZ);
-
-               return Variant(angleX);
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_TRANSFORM;
+               subPropFlags.VeSubPropTransformRotationAnchorZ = 1;
+               float anchorX = 0.0f;
+               float anchorY = 0.0f;
+               float anchorZ = 0.0f;
+               pSource->__decomposedTransform.GetRotationAnchor(anchorX, anchorY, anchorZ);
+               __decomposedTransform.__rotAnchorZ = anchorZ;
+               break;
        }
-       else if(name.CompareTo(*pVeSubPropChildrenTransformRotationY) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM)
+       case PROP_ID(VeSubPropTransformScaleAnchorX):
        {
-               float angleX = 0.0f;
-               float angleY = 0.0f;
-               float angleZ = 0.0f;
-               __decomposedChildrenTransform.GetEulerAngles(angleX, angleY, angleZ);
-
-               return Variant(angleY);
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_TRANSFORM;
+               subPropFlags.VeSubPropTransformScaleAnchorX = 1;
+               float anchorX = 0.0f;
+               float anchorY = 0.0f;
+               float anchorZ = 0.0f;
+               pSource->__decomposedTransform.GetScaleAnchor(anchorX, anchorY, anchorZ);
+               __decomposedTransform.__scaleAnchorX = anchorX;
+               break;
        }
-       else if(name.CompareTo(*pVeSubPropChildrenTransformRotationZ) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM)
+       case PROP_ID(VeSubPropTransformScaleAnchorY):
        {
-               float angleX = 0.0f;
-               float angleY = 0.0f;
-               float angleZ = 0.0f;
-               __decomposedChildrenTransform.GetEulerAngles(angleX, angleY, angleZ);
-
-               return Variant(angleZ);
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_TRANSFORM;
+               subPropFlags.VeSubPropTransformScaleAnchorY = 1;
+               float anchorX = 0.0f;
+               float anchorY = 0.0f;
+               float anchorZ = 0.0f;
+               pSource->__decomposedTransform.GetScaleAnchor(anchorX, anchorY, anchorZ);
+               __decomposedTransform.__scaleAnchorY = anchorY;
+               break;
        }
-       else if(name.CompareTo(*pVeSubPropChildrenTransformRotationAnchorXY) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM)
+       case PROP_ID(VeSubPropTransformScaleAnchorZ):
        {
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_TRANSFORM;
+               subPropFlags.VeSubPropTransformScaleAnchorZ = 1;
                float anchorX = 0.0f;
                float anchorY = 0.0f;
                float anchorZ = 0.0f;
-               __decomposedChildrenTransform.GetScaleAnchor(anchorX, anchorY, anchorZ);
-
-               return Variant(FloatPoint(anchorX, anchorY));
+               pSource->__decomposedTransform.GetScaleAnchor(anchorX, anchorY, anchorZ);
+               __decomposedTransform.__scaleAnchorZ = anchorZ;
+               break;
        }
-       else if(name.CompareTo(*pVeSubPropChildrenTransformRotationXY) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM)
+       case PROP_ID(VeSubPropTransformRotationXY):
        {
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_TRANSFORM;
+               subPropFlags.VeSubPropTransformRotationX = 1;
+               subPropFlags.VeSubPropTransformRotationY = 1;
+
                float angleX = 0.0f;
                float angleY = 0.0f;
                float angleZ = 0.0f;
-               __decomposedChildrenTransform.GetEulerAngles(angleX, angleY, angleZ);
+               pSource->__decomposedTransform.GetEulerAngles(angleX, angleY, angleZ);
+               __decomposedTransform.__rotX = angleX;
+               __decomposedTransform.__rotY = angleY;
 
-               return Variant(FloatPoint(angleX, angleY));
+               break;
        }
-       else if(name.CompareTo(*pVeSubPropChildrenTransformScaleX) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM)
+       case PROP_ID(VeSubPropTransformScaleXY):
        {
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_TRANSFORM;
+               subPropFlags.VeSubPropTransformScaleX = 1;
+               subPropFlags.VeSubPropTransformScaleY = 1;
+
+
                float scaleX = 1.0f;
                float scaleY = 1.0f;
                float scaleZ = 1.0f;
-               __decomposedChildrenTransform.GetScaleFactors(scaleX, scaleY, scaleZ);
 
-               return Variant(scaleX);
+               pSource->__decomposedTransform.GetScaleFactors(scaleX, scaleY, scaleZ);
+               __decomposedTransform.__scaleX = scaleX;
+               __decomposedTransform.__scaleY = scaleY;
+               break;
        }
-       else if(name.CompareTo(*pVeSubPropChildrenTransformScaleY) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM)
+       case PROP_ID(VeSubPropTransformTranslationXY):
        {
-               float scaleX = 1.0f;
-               float scaleY = 1.0f;
-               float scaleZ = 1.0f;
-               __decomposedChildrenTransform.GetScaleFactors(scaleX, scaleY, scaleZ);
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_TRANSFORM;
+               subPropFlags.VeSubPropTransformTranslationX = 1;
+               subPropFlags.VeSubPropTransformTranslationY = 1;
+
+               float translateX = 0.0f;
+               float translateY = 0.0f;
+               float translateZ = 0.0f;
 
-               return Variant(scaleY);
+               pSource->__decomposedTransform.GetTranslationFactors(translateX, translateY, translateZ);
+               __decomposedTransform.__translationX = translateX;
+               __decomposedTransform.__translationY = translateY;
+               break;
        }
-       else if(name.CompareTo(*pVeSubPropChildrenTransformScaleZ) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM)
+       case PROP_ID(VeSubPropTransformRotationAnchorXY):
        {
-               float scaleX = 1.0f;
-               float scaleY = 1.0f;
-               float scaleZ = 1.0f;
-               __decomposedChildrenTransform.GetScaleFactors(scaleX, scaleY, scaleZ);
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_TRANSFORM;
+               subPropFlags.VeSubPropTransformRotationAnchorX = 1;
+               subPropFlags.VeSubPropTransformRotationAnchorY = 1;
 
-               return Variant(scaleZ);
+               float anchorX = 0.0f;
+               float anchorY = 0.0f;
+               float anchorZ = 0.0f;
+               pSource->__decomposedTransform.GetRotationAnchor(anchorX, anchorY, anchorZ);
+               __decomposedTransform.__rotAnchorX = anchorX;
+               __decomposedTransform.__rotAnchorY = anchorY;
+               break;
        }
-       else if(name.CompareTo(*pVeSubPropChildrenTransformScaleX) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM)
+       case PROP_ID(VeSubPropTransformScaleAnchorXY):
        {
-               float scaleX = 1.0f;
-               float scaleY = 1.0f;
-               float scaleZ = 1.0f;
-               __decomposedChildrenTransform.GetScaleFactors(scaleX, scaleY, scaleZ);
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_TRANSFORM;
+               subPropFlags.VeSubPropTransformScaleAnchorX = 1;
+               subPropFlags.VeSubPropTransformScaleAnchorY = 1;
 
-               return Variant(scaleX);
+               float anchorX = 0.0f;
+               float anchorY = 0.0f;
+               float anchorZ = 0.0f;
+               pSource->__decomposedTransform.GetScaleAnchor(anchorX, anchorY, anchorZ);
+               __decomposedTransform.__scaleAnchorX = anchorX;
+               __decomposedTransform.__scaleAnchorY = anchorY;
+               break;
        }
-       else if(name.CompareTo(*pVeSubPropChildrenTransformScaleY) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM)
+       // childrenTransform
+       case PROP_ID(VeSubPropChildrenTransformRotationX):
        {
-               float scaleX = 1.0f;
-               float scaleY = 1.0f;
-               float scaleZ = 1.0f;
-               __decomposedChildrenTransform.GetScaleFactors(scaleX, scaleY, scaleZ);
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM;
+               subPropFlags.VeSubPropChildrenTransformRotationX = 1;
+
+               float angleX = 0.0f;
+               float angleY = 0.0f;
+               float angleZ = 0.0f;
+               pSource->__decomposedChildrenTransform.GetEulerAngles(angleX, angleY, angleZ);
+               __decomposedChildrenTransform.__rotX = angleX;
+               break;
+       }
+
+       case PROP_ID(VeSubPropChildrenTransformRotationY):
+       {
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM;
+               subPropFlags.VeSubPropChildrenTransformRotationY = 1;
+
+               float angleX = 0.0f;
+               float angleY = 0.0f;
+               float angleZ = 0.0f;
+               pSource->__decomposedChildrenTransform.GetEulerAngles(angleX, angleY, angleZ);
+               __decomposedChildrenTransform.__rotY = angleY;
+               break;
+       }
 
-               return Variant(scaleY);
+       case PROP_ID(VeSubPropChildrenTransformRotationZ):
+       {
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM;
+               subPropFlags.VeSubPropChildrenTransformRotationZ = 1;
+               float angleX = 0.0f;
+               float angleY = 0.0f;
+               float angleZ = 0.0f;
+               pSource->__decomposedChildrenTransform.GetEulerAngles(angleX, angleY, angleZ);
+               __decomposedChildrenTransform.__rotZ = angleZ;
+               break;
        }
-       else if(name.CompareTo(*pVeSubPropChildrenTransformScaleZ) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM)
+       case PROP_ID(VeSubPropChildrenTransformScaleX):
        {
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM;
+               subPropFlags.VeSubPropChildrenTransformScaleX = 1;
                float scaleX = 1.0f;
                float scaleY = 1.0f;
                float scaleZ = 1.0f;
-               __decomposedChildrenTransform.GetScaleFactors(scaleX, scaleY, scaleZ);
-
-               return Variant(scaleZ);
+               pSource->__decomposedChildrenTransform.GetScaleFactors(scaleX, scaleY, scaleZ);
+               __decomposedChildrenTransform.__scaleX = scaleX;
+               break;
        }
-       else if(name.CompareTo(*pVeSubPropChildrenTransformScaleAnchorXY) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM)
+       case PROP_ID(VeSubPropChildrenTransformScaleY):
        {
-               float anchorX = 0.0f;
-               float anchorY = 0.0f;
-               float anchorZ = 0.0f;
-               __decomposedChildrenTransform.GetScaleAnchor(anchorX, anchorY, anchorZ);
-
-               return Variant(FloatPoint(anchorX, anchorY));
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM;
+               subPropFlags.VeSubPropChildrenTransformScaleY = 1;
+               float scaleX = 1.0f;
+               float scaleY = 1.0f;
+               float scaleZ = 1.0f;
+               pSource->__decomposedChildrenTransform.GetScaleFactors(scaleX, scaleY, scaleZ);
+               __decomposedChildrenTransform.__scaleY = scaleY;
+               break;
        }
-       else if(name.CompareTo(*pVeSubPropChildrenTransformScaleXY) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM)
+       case PROP_ID(VeSubPropChildrenTransformScaleZ):
        {
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM;
+               subPropFlags.VeSubPropChildrenTransformScaleZ = 1;
                float scaleX = 1.0f;
                float scaleY = 1.0f;
                float scaleZ = 1.0f;
-               __decomposedChildrenTransform.GetScaleFactors(scaleX, scaleY, scaleZ);
-
-               return Variant(FloatPoint(scaleX, scaleY));
-
+               pSource->__decomposedChildrenTransform.GetScaleFactors(scaleX, scaleY, scaleZ);
+               __decomposedChildrenTransform.__scaleZ = scaleZ;
+               break;
        }
-       else if(name.CompareTo(*pVeSubPropChildrenTransformTranslationX) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM)
+       case PROP_ID(VeSubPropChildrenTransformTranslationX):
        {
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM;
+               subPropFlags.VeSubPropChildrenTransformTranslationX = 1;
                float translateX = 0.0f;
                float translateY = 0.0f;
                float translateZ = 0.0f;
-               __decomposedChildrenTransform.GetTranslationFactors(translateX, translateY, translateZ);
-
-               return Variant(translateX);
+               pSource->__decomposedChildrenTransform.GetTranslationFactors(translateX, translateY, translateZ);
+               __decomposedChildrenTransform.__translationX = translateX;
+               break;
        }
-       else if(name.CompareTo(*pVeSubPropChildrenTransformTranslationY) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM)
+       case PROP_ID(VeSubPropChildrenTransformTranslationY):
        {
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM;
+               subPropFlags.VeSubPropChildrenTransformTranslationY = 1;
                float translateX = 0.0f;
                float translateY = 0.0f;
                float translateZ = 0.0f;
-               __decomposedChildrenTransform.GetTranslationFactors(translateX, translateY, translateZ);
-
-               return Variant(translateY);
+               pSource->__decomposedChildrenTransform.GetTranslationFactors(translateX, translateY, translateZ);
+               __decomposedChildrenTransform.__translationY = translateY;
+               break;
        }
-       else if(name.CompareTo(*pVeSubPropChildrenTransformTranslationZ) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM)
+       case PROP_ID(VeSubPropChildrenTransformTranslationZ):
        {
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM;
+               subPropFlags.VeSubPropChildrenTransformTranslationZ = 1;
                float translateX = 0.0f;
                float translateY = 0.0f;
                float translateZ = 0.0f;
-               __decomposedChildrenTransform.GetTranslationFactors(translateX, translateY, translateZ);
-
-               return Variant(translateZ);
+               pSource->__decomposedChildrenTransform.GetTranslationFactors(translateX, translateY, translateZ);
+               __decomposedChildrenTransform.__translationZ = translateZ;
+               break;
        }
-       else if(name.CompareTo(*pVeSubPropChildrenTransformTranslationXY) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM)
+       case PROP_ID(VeSubPropChildrenTransformRotationAnchorX):
        {
-               float translateX = 0.0f;
-               float translateY = 0.0f;
-               float translateZ = 0.0f;
-               __decomposedChildrenTransform.GetTranslationFactors(translateX, translateY, translateZ);
-
-               return Variant(FloatPoint(translateX, translateY));
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM;
+               subPropFlags.VeSubPropChildrenTransformRotationAnchorX = 1;
+               float anchorX = 0.0f;
+               float anchorY = 0.0f;
+               float anchorZ = 0.0f;
+               pSource->__decomposedChildrenTransform.GetRotationAnchor(anchorX, anchorY, anchorZ);
+               __decomposedChildrenTransform.__rotAnchorX = anchorX;
+               break;
+       }
+       case PROP_ID(VeSubPropChildrenTransformRotationAnchorY):
+       {
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM;
+               subPropFlags.VeSubPropChildrenTransformRotationAnchorY = 1;
+               float anchorX = 0.0f;
+               float anchorY = 0.0f;
+               float anchorZ = 0.0f;
+               pSource->__decomposedChildrenTransform.GetRotationAnchor(anchorX, anchorY, anchorZ);
+               __decomposedChildrenTransform.__rotAnchorY = anchorY;
+               break;
        }
-       else if(name.CompareTo(*pVePropZPosition) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_Z_POSITION)
+       case PROP_ID(VeSubPropChildrenTransformRotationAnchorZ):
        {
-               return Variant(__zPosition);
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM;
+               subPropFlags.VeSubPropChildrenTransformRotationAnchorZ = 1;
+               float anchorX = 0.0f;
+               float anchorY = 0.0f;
+               float anchorZ = 0.0f;
+               pSource->__decomposedChildrenTransform.GetRotationAnchor(anchorX, anchorY, anchorZ);
+               __decomposedChildrenTransform.__rotAnchorZ = anchorZ;
+               break;
        }
-       else if(name.CompareTo(*pVePropClipChildren) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_CLIP_CHILDREN)
+       case PROP_ID(VeSubPropChildrenTransformScaleAnchorX):
        {
-               return Variant(__isClipChildren);
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM;
+               subPropFlags.VeSubPropChildrenTransformScaleAnchorX = 1;
+               float anchorX = 0.0f;
+               float anchorY = 0.0f;
+               float anchorZ = 0.0f;
+               pSource->__decomposedChildrenTransform.GetScaleAnchor(anchorX, anchorY, anchorZ);
+               __decomposedChildrenTransform.__scaleAnchorX = anchorX;
+               break;
        }
-       else if(name.CompareTo(*pVePropSurfaceOpaque) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_SURFACE_OPAQUE)
+       case PROP_ID(VeSubPropChildrenTransformScaleAnchorY):
        {
-               // need to check
-               return Variant(isSurfaceOpaque);
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM;
+               subPropFlags.VeSubPropChildrenTransformScaleAnchorY = 1;
+               float anchorX = 0.0f;
+               float anchorY = 0.0f;
+               float anchorZ = 0.0f;
+               pSource->__decomposedChildrenTransform.GetScaleAnchor(anchorX, anchorY, anchorZ);
+               __decomposedChildrenTransform.__scaleAnchorY = anchorY;
+               break;
        }
-       else if(name.CompareTo(*pVePrivPropShowOpacity) == 0
-                       &&__updatedProperties & _VisualElementImpl::UPDATED_PROP_SHOW_STATE)
+       case PROP_ID(VeSubPropChildrenTransformScaleAnchorZ):
        {
-               return Variant(__showOpacity);
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM;
+               subPropFlags.VeSubPropChildrenTransformScaleAnchorZ = 1;
+               float anchorX = 0.0f;
+               float anchorY = 0.0f;
+               float anchorZ = 0.0f;
+               pSource->__decomposedChildrenTransform.GetScaleAnchor(anchorX, anchorY, anchorZ);
+               __decomposedChildrenTransform.__scaleAnchorZ = anchorZ;
+               break;
        }
+       case PROP_ID(VeSubPropChildrenTransformRotationXY):
+       {
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM;
+               subPropFlags.VeSubPropChildrenTransformRotationX = 1;
+               subPropFlags.VeSubPropChildrenTransformRotationY = 1;
 
-       return __pSource->__pRenderObject->GetProperty(name);
-}
+               float angleX = 0.0f;
+               float angleY = 0.0f;
+               float angleZ = 0.0f;
+               pSource->__decomposedChildrenTransform.GetEulerAngles(angleX, angleY, angleZ);
+               __decomposedChildrenTransform.__rotX = angleX;
+               __decomposedChildrenTransform.__rotY = angleY;
 
+               break;
+       }
+       case PROP_ID(VeSubPropChildrenTransformScaleXY):
+       {
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM;
+               subPropFlags.VeSubPropChildrenTransformScaleX = 1;
+               subPropFlags.VeSubPropChildrenTransformScaleY = 1;
 
-void
-_VisualElementSharedData::UpdatePropertiesForRender::Update(_VisualElementImpl* pSource, PropertyFlags updateFlags)
-{
-       _AnimationManager* pAnimationManager = _AnimationManager::GetInstance();
-       if(!pSource || !pAnimationManager)
-               return;
-       bool isPresentation = false;
+               float scaleX = 1.0f;
+               float scaleY = 1.0f;
+               float scaleZ = 1.0f;
 
-       if(pSource->__pPresentation == pSource)
-       {
-               isPresentation = true;
+               pSource->__decomposedChildrenTransform.GetScaleFactors(scaleX, scaleY, scaleZ);
+               __decomposedChildrenTransform.__scaleX = scaleX;
+               __decomposedChildrenTransform.__scaleY = scaleY;
+               break;
        }
+       case PROP_ID(VeSubPropChildrenTransformTranslationXY):
+       {
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM;
+               subPropFlags.VeSubPropChildrenTransformTranslationX = 1;
+               subPropFlags.VeSubPropChildrenTransformTranslationY = 1;
 
-       bool bImplicitAnimation = false;
+               float translateX = 0.0f;
+               float translateY = 0.0f;
+               float translateZ = 0.0f;
 
-       if(!isPresentation && pSource->__isImplicitAnimationEnabled && IS_ATTACHED(pSource) && pAnimationManager->IsImplicitAnimationEnabled())
-       {
-               bImplicitAnimation = true;
+               pSource->__decomposedChildrenTransform.GetTranslationFactors(translateX, translateY, translateZ);
+               __decomposedChildrenTransform.__translationX = translateX;
+               __decomposedChildrenTransform.__translationY = translateY;
+               break;
        }
-
-       switch(updateFlags)
+       case PROP_ID(VeSubPropChildrenTransformRotationAnchorXY):
        {
-       case _VisualElementImpl::UPDATED_PROP_BOUNDS:
-       {
-               static const String* subProperties[] = {        pVeSubPropBoundsSize, pVeSubPropBoundsPosition, NULL };
-               if(isPresentation || pSource->CreateImplicitAnimation(*pVePropBounds, pSource->__bounds, subProperties, bImplicitAnimation ) == false)
-               {
-                       __implicitAnimation &= ~updateFlags;
-                       __updatedProperties |= updateFlags;
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM;
+               subPropFlags.VeSubPropChildrenTransformRotationAnchorX = 1;
+               subPropFlags.VeSubPropChildrenTransformRotationAnchorY = 1;
 
-                       __bounds = pSource->__bounds;
-               }
-               else
-               {
-                       __implicitAnimation |= updateFlags;
-               }
+               float anchorX = 0.0f;
+               float anchorY = 0.0f;
+               float anchorZ = 0.0f;
+               pSource->__decomposedChildrenTransform.GetRotationAnchor(anchorX, anchorY, anchorZ);
+               __decomposedChildrenTransform.__rotAnchorX = anchorX;
+               __decomposedChildrenTransform.__rotAnchorY = anchorY;
+               break;
        }
+       case PROP_ID(VeSubPropChildrenTransformScaleAnchorXY):
+       {
+               __updatedProperties |= _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM;
+               subPropFlags.VeSubPropChildrenTransformScaleAnchorX = 1;
+               subPropFlags.VeSubPropChildrenTransformScaleAnchorY = 1;
 
+               float anchorX = 0.0f;
+               float anchorY = 0.0f;
+               float anchorZ = 0.0f;
+               pSource->__decomposedChildrenTransform.GetScaleAnchor(anchorX, anchorY, anchorZ);
+               __decomposedChildrenTransform.__scaleAnchorX = anchorX;
+               __decomposedChildrenTransform.__scaleAnchorY = anchorY;
                break;
-       case _VisualElementImpl::UPDATED_PROP_Z_POSITION:
+       }
+       default:
+               PRINT("error property(%d)\n",propertyId);
+       }
+}
 
-               if(isPresentation || pSource->CreateImplicitAnimation(*pVePropZPosition, pSource->__zPosition, NULL, bImplicitAnimation ) == false)
-               {
-                       __implicitAnimation &= ~updateFlags;
-                       __updatedProperties |= updateFlags;
 
-                       __zPosition = pSource->__zPosition;
-               }
-               else
-               {
-                       __implicitAnimation |= updateFlags;
-               }
-               break;
-
-       case _VisualElementImpl::UPDATED_PROP_ANCHOR:
+void
+_VisualElementSharedData::UpdatePropertiesForRender::Apply(void)
+{
+       if(__pSource == null || __pSource->__pRenderObject == null)
+       {
+               return;
+       }
+       _VisualElementImpl* pRenderObject = __pSource->__pRenderObject;
 
-               if(isPresentation || pSource->CreateImplicitAnimation(*pVePropAnchor, pSource->__anchor, NULL, bImplicitAnimation ) == false)
+               if (__updatedProperties != 0)
                {
-                       __implicitAnimation &= ~updateFlags;
-                       __updatedProperties |= updateFlags;
+                       if(__updatedProperties & _VisualElementImpl::UPDATED_PROP_BOUNDS)
+                       {
 
-                       __anchor = pSource->__anchor;
-               }
-               else
-               {
-                       __implicitAnimation |= updateFlags;
-               }
-               break;
-       case _VisualElementImpl::UPDATED_PROP_ANCHOR_Z:
+                               if(subPropFlags.VeSubPropBoundsPosition && subPropFlags.VeSubPropBoundsSize)
+                               {
+                                       pRenderObject->SetBoundsProperty(__bounds);
+                               }
+                               else if(subPropFlags.VeSubPropBoundsPosition)
+                               {
+                                       pRenderObject->SetBoundsPositionSubProperty(Variant(FloatPoint(__bounds.x, __bounds.y)));
+                               }
+                               else if(subPropFlags.VeSubPropBoundsSize)
+                               {
+                                       pRenderObject->SetBoundsSizeSubProperty(Variant(FloatDimension(__bounds.width, __bounds.width)));
+                               }
+                       }
+                       if(__updatedProperties & _VisualElementImpl::UPDATED_PROP_RENDER_OPERATION)
+                       {
+                               pRenderObject->SetRenderOperationProperty(__renderOperation);
+                       }
+                       if(__updatedProperties & _VisualElementImpl::UPDATED_PROP_CONTENT_BOUNDS)
+                       {
+                                       pRenderObject->SetContentBoundsProperty(__contentBounds);
+                       }
+                       if(__updatedProperties & _VisualElementImpl::UPDATED_PROP_CONTENT_OPACITY)
+                       {
+                               pRenderObject->SetContentOpacityProperty(__contentOpacity);
 
-               if(isPresentation || pSource->CreateImplicitAnimation(*pVePropAnchorZ, pSource->__anchorZ, NULL, bImplicitAnimation ) == false)
-               {
-                       __implicitAnimation &= ~updateFlags;
-                       __updatedProperties |= updateFlags;
+                       }
+                       if(__updatedProperties & _VisualElementImpl::UPDATED_PROP_SHOW_STATE)
+                       {
+                               //pRenderObject->SetShowStateProperty(SHOWOPACITY_VISIBLE(__showOpacity));
+                               pRenderObject->SetShowOpacityI(__showOpacity);
+                       }
 
-                       __anchorZ = pSource->__anchorZ;
-               }
-               else
-               {
-                       __implicitAnimation |= updateFlags;
-               }
-               break;
-       case _VisualElementImpl::UPDATED_PROP_TRANSFORM:
-       {
-               static const String* subProperties[] = {
-                               pVeSubPropTransformRotationX,
-                               pVeSubPropTransformRotationY,
-                               pVeSubPropTransformRotationZ,
-                               pVeSubPropTransformScaleX,
-                               pVeSubPropTransformScaleY,
-                               pVeSubPropTransformScaleZ,
-                               pVeSubPropTransformTranslationX,
-                               pVeSubPropTransformTranslationY,
-                               pVeSubPropTransformTranslationZ,
-                               pVeSubPropTransformRotationAnchorX,
-                               pVeSubPropTransformRotationAnchorY,
-                               pVeSubPropTransformRotationAnchorZ,
-                               pVeSubPropTransformScaleAnchorX,
-                               pVeSubPropTransformScaleAnchorY,
-                               pVeSubPropTransformScaleAnchorZ,
-                               NULL};
-               if(isPresentation || pSource->CreateImplicitAnimation(*pVePropTransform, pSource->__transform, subProperties, bImplicitAnimation ) == false)
-               {
-                       __implicitAnimation &= ~updateFlags;
-                       __updatedProperties |= updateFlags;
+                       if(__updatedProperties & _VisualElementImpl::UPDATED_PROP_OPACITY)
+                       {
+                               pRenderObject->SetOpacityProperty(__opacity);
+                       }
 
-                       __transform = pSource->__transform;
-                       __decomposedTransform = pSource->__decomposedTransform;
-               }
-               else
-               {
-                       __implicitAnimation |= updateFlags;
-               }
-       }
-               break;
-       case _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM:
-               {
-                       static const String* subProperties[] = {
-                                       pVeSubPropChildrenTransformRotationX,
-                                       pVeSubPropChildrenTransformRotationY,
-                                       pVeSubPropChildrenTransformRotationZ,
-                                       pVeSubPropChildrenTransformScaleX,
-                                       pVeSubPropChildrenTransformScaleY,
-                                       pVeSubPropChildrenTransformScaleZ,
-                                       pVeSubPropChildrenTransformTranslationX,
-                                       pVeSubPropChildrenTransformTranslationY,
-                                       pVeSubPropChildrenTransformTranslationZ,
-                                       pVeSubPropChildrenTransformRotationAnchorX,
-                                       pVeSubPropChildrenTransformRotationAnchorY,
-                                       pVeSubPropChildrenTransformRotationAnchorZ,
-                                       pVeSubPropChildrenTransformScaleAnchorX,
-                                       pVeSubPropChildrenTransformScaleAnchorY,
-                                       pVeSubPropChildrenTransformScaleAnchorZ,
-                                       NULL};
-
-                       if(isPresentation || pSource->CreateImplicitAnimation(*pVePropChildrenTransform, pSource->__childrenTransform, subProperties, bImplicitAnimation ) == false)
+                       if(__updatedProperties & _VisualElementImpl::UPDATED_PROP_ANCHOR)
+                       {
+                               pRenderObject->SetAnchorProperty(__anchor);
+                       }
+                       if(__updatedProperties & _VisualElementImpl::UPDATED_PROP_ANCHOR_Z)
+                       {
+                               pRenderObject->SetAnchorZProperty(__anchorZ);
+                       }
+                       if(__updatedProperties & _VisualElementImpl::UPDATED_PROP_TRANSFORM)
                        {
-                               __implicitAnimation &= ~updateFlags;
-                               __updatedProperties |= updateFlags;
+                               if(subPropFlags.VePropTransform)
+                               {
+                                       pRenderObject->SetTransformMatrixI(__transform, true);
+                               }
+                               else
+                               {
+                                       if(subPropFlags.VeSubPropTransformRotationX || subPropFlags.VeSubPropTransformRotationY || subPropFlags.VeSubPropTransformRotationZ)
+                                       {
+                                               float angleX = 0.0f;
+                                               float angleY = 0.0f;
+                                               float angleZ = 0.0f;
+                                               pRenderObject->__decomposedTransform.GetEulerAngles(angleX, angleY, angleZ);
+
+                                               if(subPropFlags.VeSubPropTransformRotationX)
+                                               {
+                                                       angleX = __decomposedTransform.__rotX;
+                                               }
+                                               if(subPropFlags.VeSubPropTransformRotationY)
+                                               {
+                                                       angleY = __decomposedTransform.__rotY;
+                                               }
+                                               if(subPropFlags.VeSubPropTransformRotationZ)
+                                               {
+                                                       angleZ = __decomposedTransform.__rotZ;
+                                               }
+                                               pRenderObject->__decomposedTransform.UpdateRotationFromEulerAngles(angleX,angleY,angleZ);
+
+                                       }
+
+                                       if(subPropFlags.VeSubPropTransformScaleX || subPropFlags.VeSubPropTransformScaleY ||subPropFlags.VeSubPropTransformScaleZ)
+                                       {
+                                               float scaleX = 0.0f;
+                                               float scaleY = 0.0f;
+                                               float scaleZ = 0.0f;
+                                               pRenderObject->__decomposedTransform.GetScaleFactors(scaleX, scaleY, scaleZ);
+                                               if(subPropFlags.VeSubPropTransformScaleX)
+                                               {
+                                                       scaleX = __decomposedTransform.__scaleX;
+                                               }
+                                               if(subPropFlags.VeSubPropTransformScaleY)
+                                               {
+                                                       scaleY = __decomposedTransform.__scaleY;
+                                               }
+                                               if(subPropFlags.VeSubPropTransformScaleZ)
+                                               {
+                                                       scaleZ = __decomposedTransform.__scaleZ;
+                                               }
+                                               pRenderObject->__decomposedTransform.SetScaleFactors(scaleX, scaleY, scaleZ);
+                                       }
+                                       if(subPropFlags.VeSubPropTransformTranslationX || subPropFlags.VeSubPropTransformTranslationY || subPropFlags.VeSubPropTransformTranslationZ)
+                                       {
+                                               float translateX = 0.0f;
+                                               float translateY = 0.0f;
+                                               float translateZ = 0.0f;
+                                               pRenderObject->__decomposedTransform.GetTranslationFactors(translateX, translateY, translateZ);
+                                               if(subPropFlags.VeSubPropTransformTranslationX)
+                                               {
+                                                       translateX = __decomposedTransform.__translationX;
+                                               }
+                                               if(subPropFlags.VeSubPropTransformTranslationY)
+                                               {
+                                                       translateY = __decomposedTransform.__translationY;
+                                               }
+                                               if(subPropFlags.VeSubPropTransformTranslationZ)
+                                               {
+                                                       translateZ = __decomposedTransform.__translationZ;
+                                               }
+                                               pRenderObject->__decomposedTransform.SetTranslationFactors(translateX, translateY, translateZ);
+                                       }
+
+                                       if(subPropFlags.VeSubPropTransformRotationAnchorX || subPropFlags.VeSubPropTransformRotationAnchorY || subPropFlags.VeSubPropTransformRotationAnchorZ)
+                                       {
+                                               float anchorX = 0.0f;
+                                               float anchorY = 0.0f;
+                                               float anchorZ = 0.0f;
+                                               pRenderObject->__decomposedTransform.GetRotationAnchor(anchorX, anchorY, anchorZ);
+                                               if(subPropFlags.VeSubPropTransformRotationAnchorX)
+                                               {
+                                                       anchorX = __decomposedTransform.__rotAnchorX;
+                                               }
+                                               if(subPropFlags.VeSubPropTransformRotationAnchorY)
+                                               {
+                                                       anchorY = __decomposedTransform.__rotAnchorY;
+                                               }
+                                               if(subPropFlags.VeSubPropTransformRotationAnchorZ)
+                                               {
+                                                       anchorZ = __decomposedTransform.__rotAnchorZ;
+                                               }
+                                               pRenderObject->__decomposedTransform.SetRotationAnchor(anchorX, anchorY, anchorZ);
+                                       }
+                                       if(subPropFlags.VeSubPropTransformScaleAnchorX || subPropFlags.VeSubPropTransformScaleAnchorY || subPropFlags.VeSubPropTransformScaleAnchorZ)
+                                       {
+                                               float anchorX = 0.0f;
+                                               float anchorY = 0.0f;
+                                               float anchorZ = 0.0f;
+                                               pRenderObject->__decomposedTransform.GetScaleAnchor(anchorX, anchorY, anchorZ);
+                                               if(subPropFlags.VeSubPropTransformScaleAnchorX)
+                                               {
+                                                       anchorX = __decomposedTransform.__scaleAnchorX;
+                                               }
+                                               if(subPropFlags.VeSubPropTransformScaleAnchorY)
+                                               {
+                                                       anchorY = __decomposedTransform.__scaleAnchorY;
+                                               }
+                                               if(subPropFlags.VeSubPropTransformScaleAnchorZ)
+                                               {
+                                                       anchorZ = __decomposedTransform.__scaleAnchorZ;
+                                               }
+                                               pRenderObject->__decomposedTransform.SetScaleAnchor(anchorX, anchorY, anchorZ);
+                                       }
+                                       pRenderObject->SetTransformMatrixI(pRenderObject->__decomposedTransform.GetTransformMatrix(), false);
+                               }
+                       }
+                       if(__updatedProperties & _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM)
+                       {
+                               if(subPropFlags.VePropChildrenTransform)
+                               {
+                                       pRenderObject->SetChildrenTransformMatrixI(__childrenTransform, true);
+                               }
+                               else
+                               {
+                                       if(subPropFlags.VeSubPropChildrenTransformRotationX || subPropFlags.VeSubPropChildrenTransformRotationY || subPropFlags.VeSubPropChildrenTransformRotationZ)
+                                       {
+                                               float angleX = 0.0f;
+                                               float angleY = 0.0f;
+                                               float angleZ = 0.0f;
+                                               pRenderObject->__decomposedChildrenTransform.GetEulerAngles(angleX, angleY, angleZ);
+
+                                               if(subPropFlags.VeSubPropChildrenTransformRotationX)
+                                               {
+                                                       angleX = __decomposedChildrenTransform.__rotX;
+                                               }
+                                               if(subPropFlags.VeSubPropChildrenTransformRotationY)
+                                               {
+                                                       angleY = __decomposedChildrenTransform.__rotY;
+                                               }
+                                               if(subPropFlags.VeSubPropChildrenTransformRotationZ)
+                                               {
+                                                       angleZ = __decomposedChildrenTransform.__rotZ;
+                                               }
+                                               pRenderObject->__decomposedChildrenTransform.UpdateRotationFromEulerAngles(angleX,angleY,angleZ);
+
+                                       }
+
+                                       if(subPropFlags.VeSubPropChildrenTransformScaleX || subPropFlags.VeSubPropChildrenTransformScaleY ||subPropFlags.VeSubPropChildrenTransformScaleZ)
+                                       {
+                                               float scaleX = 0.0f;
+                                               float scaleY = 0.0f;
+                                               float scaleZ = 0.0f;
+                                               pRenderObject->__decomposedChildrenTransform.GetScaleFactors(scaleX, scaleY, scaleZ);
+                                               if(subPropFlags.VeSubPropChildrenTransformScaleX)
+                                               {
+                                                       scaleX = __decomposedChildrenTransform.__scaleX;
+                                               }
+                                               if(subPropFlags.VeSubPropChildrenTransformScaleY)
+                                               {
+                                                       scaleY = __decomposedChildrenTransform.__scaleY;
+                                               }
+                                               if(subPropFlags.VeSubPropChildrenTransformScaleZ)
+                                               {
+                                                       scaleZ = __decomposedChildrenTransform.__scaleZ;
+                                               }
+                                               pRenderObject->__decomposedChildrenTransform.SetScaleFactors(scaleX, scaleY, scaleZ);
+                                       }
+                                       if(subPropFlags.VeSubPropChildrenTransformTranslationX || subPropFlags.VeSubPropChildrenTransformTranslationY || subPropFlags.VeSubPropChildrenTransformTranslationZ)
+                                       {
+                                               float translateX = 0.0f;
+                                               float translateY = 0.0f;
+                                               float translateZ = 0.0f;
+                                               pRenderObject->__decomposedChildrenTransform.GetTranslationFactors(translateX, translateY, translateZ);
+                                               if(subPropFlags.VeSubPropChildrenTransformTranslationX)
+                                               {
+                                                       translateX = __decomposedChildrenTransform.__translationX;
+                                               }
+                                               if(subPropFlags.VeSubPropChildrenTransformTranslationY)
+                                               {
+                                                       translateY = __decomposedChildrenTransform.__translationY;
+                                               }
+                                               if(subPropFlags.VeSubPropChildrenTransformTranslationZ)
+                                               {
+                                                       translateZ = __decomposedChildrenTransform.__translationZ;
+                                               }
+                                               pRenderObject->__decomposedChildrenTransform.SetTranslationFactors(translateX, translateY, translateZ);
+                                       }
+
+                                       if(subPropFlags.VeSubPropChildrenTransformRotationAnchorX || subPropFlags.VeSubPropChildrenTransformRotationAnchorY || subPropFlags.VeSubPropChildrenTransformRotationAnchorZ)
+                                       {
+                                               float anchorX = 0.0f;
+                                               float anchorY = 0.0f;
+                                               float anchorZ = 0.0f;
+                                               pRenderObject->__decomposedChildrenTransform.GetRotationAnchor(anchorX, anchorY, anchorZ);
+                                               if(subPropFlags.VeSubPropChildrenTransformRotationAnchorX)
+                                               {
+                                                       anchorX = __decomposedChildrenTransform.__rotAnchorX;
+                                               }
+                                               if(subPropFlags.VeSubPropChildrenTransformRotationAnchorY)
+                                               {
+                                                       anchorY = __decomposedChildrenTransform.__rotAnchorY;
+                                               }
+                                               if(subPropFlags.VeSubPropChildrenTransformRotationAnchorZ)
+                                               {
+                                                       anchorZ = __decomposedChildrenTransform.__rotAnchorZ;
+                                               }
+                                               pRenderObject->__decomposedChildrenTransform.SetRotationAnchor(anchorX, anchorY, anchorZ);
+                                       }
+                                       if(subPropFlags.VeSubPropChildrenTransformScaleAnchorX || subPropFlags.VeSubPropChildrenTransformScaleAnchorY || subPropFlags.VeSubPropChildrenTransformScaleAnchorZ)
+                                       {
+                                               float anchorX = 0.0f;
+                                               float anchorY = 0.0f;
+                                               float anchorZ = 0.0f;
+                                               pRenderObject->__decomposedChildrenTransform.GetScaleAnchor(anchorX, anchorY, anchorZ);
+                                               if(subPropFlags.VeSubPropChildrenTransformScaleAnchorX)
+                                               {
+                                                       anchorX = __decomposedChildrenTransform.__scaleAnchorX;
+                                               }
+                                               if(subPropFlags.VeSubPropChildrenTransformScaleAnchorY)
+                                               {
+                                                       anchorY = __decomposedChildrenTransform.__scaleAnchorY;
+                                               }
+                                               if(subPropFlags.VeSubPropChildrenTransformScaleAnchorZ)
+                                               {
+                                                       anchorZ = __decomposedChildrenTransform.__scaleAnchorZ;
+                                               }
+                                               pRenderObject->__decomposedChildrenTransform.SetScaleAnchor(anchorX, anchorY, anchorZ);
+                                       }
+                                       pRenderObject->SetChildrenTransformMatrixI(pRenderObject->__decomposedChildrenTransform.GetTransformMatrix(), false);
+                               }
+                       }
+                       if(__updatedProperties & _VisualElementImpl::UPDATED_PROP_Z_POSITION)
+                       {
+                                pRenderObject->SetZPositionProperty(__zPosition);
+                       }
+                       if(__updatedProperties & _VisualElementImpl::UPDATED_PROP_CLIP_CHILDREN)
+                       {
+                               pRenderObject->SetClipChildrenProperty(__isClipChildren);
+                       }
+                       if(__updatedProperties & _VisualElementImpl::UPDATED_PROP_SURFACE_OPAQUE)
+                       {
+                               pRenderObject->SetSurfaceOpaqueProperty(__isSurfaceOpaque);
+                               //TODO: isSurfaceOpaque should be changed into VE's member variable.
+                       }
+                       if(__updatedProperties & _VisualElementImpl::UPDATED_PROP_SURFACE)
+                       {
+                               pRenderObject->SetSurfaceChanged();
+                       }
 
-                               __childrenTransform = pSource->__childrenTransform;
-                               __decomposedChildrenTransform = pSource->__decomposedChildrenTransform;
+                       if(__updatedProperties & _VisualElementImpl::UPDATED_PROP_GEOMETRY)
+                       {
+                               pRenderObject->SetGeometryChanged();
                        }
-                       else
+
+                       if(__updatedProperties & _VisualElementImpl::UPDATED_PROP_CHANGE_ZORDER)
                        {
-                               __implicitAnimation |= updateFlags;
+#if 0
+                               if(__pParent)
+                               {
+                                       _VisualElementImpl* pRef = null;
+                                       int count = __pParent->__children.GetCount();
+                                       for(int i=0 ; i < count; i++)
+                                       {
+
+                                               if(__pParent->__children.GetChildAt(i) == this)
+                                               {
+                                                       if(i < count - 2)
+                                                       {
+                                                               pRef = __pParent->__children.GetChildAt(i+1);
+                                                       }
+                                                       break;
+                                               }
+                                       }
+
+                                       if(pRef &&  pRef->pRenderObject) // next 가 있음.
+                                       {
+                                               __pParent->__pRenderObject->ChangeZOrder(*__pRenderObject, pRef->__pRenderObject, false, pRef->_zOrderGroup);
+                                       }
+                                       else
+                                       {
+                                               __pParent->__pRenderObject->ChangeZOrder(*__pRenderObject, null, false, _zOrderGroup);
+                                       }
+                               }
+       //            else
+       //            {
+       //                __pRenderObject->RemoveFromParent();
+       //            }
+#endif
+
                        }
 
                }
+
+       //    __updatedProperties = 0;
+               Clear();
+}
+
+
+void
+_VisualElementSharedData::UpdatePropertiesForRender::Update(PropertyFlags updateFlags, _VisualElementImpl* pSource)
+{
+//     _VisualElementImpl* pSource = (pPresentation == null)?__pSource:pPresentation;
+
+//     static unsigned int VePrivPropShowOpacity;
+
+       __updatedProperties |= updateFlags;
+
+       switch(updateFlags)
+       {
+       case _VisualElementImpl::UPDATED_PROP_BOUNDS:
+                       __bounds = pSource->__bounds;
+                       subPropFlags.VeSubPropBoundsPosition = 1;
+                       subPropFlags.VeSubPropBoundsSize = 1;
+               break;
+       case _VisualElementImpl::UPDATED_PROP_Z_POSITION:
+               __zPosition = pSource->__zPosition;
+               break;
+       case _VisualElementImpl::UPDATED_PROP_ANCHOR:
+               __anchor = pSource->__anchor;
+               break;
+       case _VisualElementImpl::UPDATED_PROP_ANCHOR_Z:
+               __anchorZ = pSource->__anchorZ;
+               break;
+       case _VisualElementImpl::UPDATED_PROP_TRANSFORM:
+               subPropFlags.VePropTransform = 1;
+               __transform = pSource->__transform;
+               break;
+       case _VisualElementImpl::UPDATED_PROP_CHILDREN_TRANSFORM:
+               subPropFlags.VePropChildrenTransform = 1;
+               __childrenTransform = pSource->__childrenTransform;
                break;
        case _VisualElementImpl::UPDATED_PROP_CLIP_CHILDREN:
                __isClipChildren = pSource->__isClipChildren;
-               __implicitAnimation &= ~updateFlags;
-               __updatedProperties |= updateFlags;
                break;
-
        case _VisualElementImpl::UPDATED_PROP_CHANGE_ZORDER:
 
-               __implicitAnimation &= ~updateFlags;
-               __updatedProperties |= updateFlags;
                break;
-
        case _VisualElementImpl::UPDATED_PROP_RENDER_OPERATION:
                __renderOperation = pSource->__renderOperation;
-               __implicitAnimation &= ~updateFlags;
-               __updatedProperties |= updateFlags;
-
                break;
        case _VisualElementImpl::UPDATED_PROP_SHOW_STATE:
-               if(isPresentation || pSource->CreateImplicitAnimationForShowState(pSource->__showOpacity, 0.0f, bImplicitAnimation ) == false)
-               {
-                       __implicitAnimation &= ~updateFlags;
-                       __updatedProperties |= updateFlags;
-
-                       __showOpacity = pSource->__showOpacity;
-               }
-               else
-               {
-                       __implicitAnimation |= updateFlags;
-               }
+               __showOpacity = pSource->__showOpacity;
                break;
        case _VisualElementImpl::UPDATED_PROP_OPACITY:
-
-               if(isPresentation || pSource->CreateImplicitAnimation(*pVePropOpacity, pSource->__opacity, NULL, bImplicitAnimation ) == false)
-               {
-                       __implicitAnimation &= ~updateFlags;
-                       __updatedProperties |= updateFlags;
-
-                       __opacity = pSource->__opacity;
-               }
-               else
-               {
-                       __implicitAnimation |= updateFlags;
-               }
+               __opacity = pSource->__opacity;
                break;
-
        case _VisualElementImpl::UPDATED_PROP_CONTENT_OPACITY:
-               if(isPresentation || pSource->CreateImplicitAnimation(*pVePropContentOpacity, pSource->__contentOpacity, NULL, bImplicitAnimation ) == false)
-               {
-                       __implicitAnimation &= ~updateFlags;
-                       __updatedProperties |= updateFlags;
-
-                       __contentOpacity = pSource->__contentOpacity;
-               }
-               else
-               {
-                       __implicitAnimation |= updateFlags;
-               }
+               __contentOpacity = pSource->__contentOpacity;
                break;
        case _VisualElementImpl::UPDATED_PROP_SURFACE_OPAQUE:
-               if(isPresentation || pSource->__pSharedData)
-               {
-                       isSurfaceOpaque = pSource->__pSharedData->isSurfaceOpaque;
-                       __implicitAnimation &= ~updateFlags;
-                       __updatedProperties |= updateFlags;
-               }
+               __isSurfaceOpaque = pSource->__isSurfaceOpaque;
                break;
-
        case _VisualElementImpl::UPDATED_PROP_CONTENT_BOUNDS:
-               if(isPresentation || pSource->CreateImplicitAnimation(*pVePropContentBounds, pSource->__contentBounds, NULL, bImplicitAnimation ) == false)
-               {
-                       __implicitAnimation &= ~updateFlags;
-                       __updatedProperties |= updateFlags;
-
-                       __contentBounds = pSource->__contentBounds;
-               }
-               else
-               {
-                       __implicitAnimation |= updateFlags;
-               }
-               break;
-
-       case _VisualElementImpl::UPDATED_PROP_CONTENT:
-
-               __implicitAnimation &= ~updateFlags;
-               __updatedProperties |= updateFlags;
-               break;
-       case _VisualElementImpl::UPDATED_PROP_SURFACE:
-
-               __implicitAnimation &= ~updateFlags;
-               __updatedProperties |= updateFlags;
+               __contentBounds = pSource->__contentBounds;
                break;
        default:
-               //error
-               PRINT("Undefined property(0x%x)\n", updateFlags);
-               break;
+               PRINT("Undefined property(%0x#x)\n", updateFlags);
        }
 }
 
 
+
 _VisualElementSharedData::_VisualElementSharedData(_VisualElementImpl* pModel)
        : invalidatedNativeProps(-1)
        , childrenInvalidated(false)
@@ -750,7 +1026,6 @@ _VisualElementSharedData::_VisualElementSharedData(_VisualElementImpl* pModel)
        , invalidatedRegion(0.0f, 0.0f, 0.0f, 0.0f)
        , needSurface(true)
        , redrawOnResize(false)
-       , isSurfaceOpaque(true)
        , fixedSurfaceSize(false)
        , invalidationLockCount(0)
        , updateRegion(0.0f, 0.0f, 0.0f, 0.0f)
@@ -758,7 +1033,7 @@ _VisualElementSharedData::_VisualElementSharedData(_VisualElementImpl* pModel)
        , pContentProvider(null)
        , pEventListener(null)
        , name(L"")
-       , toUpdatePropImmediately(pModel)
+       , toUpdatePropertiesForRenderObject(pModel)
        , pUserData(null)
        , __refCount(1)
 {
index a55a087..f5c5afc 100644 (file)
@@ -77,6 +77,10 @@ public:
        {
                return __isShaderProgramUpdated;
        }
+       bool IsUpdated() const
+       {
+               return (__isMeshUpdated||__isLightUpdated||__isMaterialUpdated)?true:false;
+       }
 private:
        Mesh* __pMesh;
        Material* __pMaterial;
index 62c98b8..0cb4af0 100644 (file)
@@ -98,228 +98,133 @@ typedef std::pair<float, _Math::Vector3> DistToPoint;
 typedef std::vector<DistToPoint> Intersections;
 typedef Intersections::iterator IntersectionsIt;
 
-
-extern const wchar_t* VePropBounds;
-extern const wchar_t* VePropContentBounds;
-extern const wchar_t* VePropContentOpacity;
-extern const wchar_t* VePropRenderOperation;
-extern const wchar_t* VePropOpacity;
-extern const wchar_t* VePropShowState;
-extern const wchar_t* VePropAnchor;
-extern const wchar_t* VePropAnchorZ;
-extern const wchar_t* VePropTransform;
-extern const wchar_t* VePropChildrenTransform;
-extern const wchar_t* VePropZPosition;
-extern const wchar_t* VePropZOrderGroup;
-extern const wchar_t* VePropClipToParent;
-extern const wchar_t* VePropClipChildren;
-extern const wchar_t* VePropName;
-extern const wchar_t* VePropSurfaceOpaque;
-extern const wchar_t* VePropPropertyPropagationEnabled;
-extern const wchar_t* VePropImplicitAnimationEnabled;
+#define EXTERN_PROPERTY(_STRING, _VAR, id)     \
+       extern const wchar_t* _VAR;     \
+       extern Tizen::Base::String* p##_VAR;    \
+       const int i##_VAR       =id;
+#define PROP_STRING(_VAR)      p##_VAR
+#define PROP_ID(_VAR)  i##_VAR
+
+#define EXTERN_DYNAMIC_PROPERTY(_STRING, _VAR, id)     \
+       extern const wchar_t* _VAR;     \
+       const int i##_VAR       =id;
+
+
+
+EXTERN_PROPERTY(L"bounds",                                        VePropBounds                                                                 ,1)
+EXTERN_PROPERTY(L"contentBounds",                                 VePropContentBounds                                          ,2)
+EXTERN_PROPERTY(L"contentOpacity",                                VePropContentOpacity                                                 ,3)
+EXTERN_PROPERTY(L"renderOperation",                               VePropRenderOperation                                        ,4)
+EXTERN_PROPERTY(L"opacity",                                       VePropOpacity                                                        ,5)
+EXTERN_PROPERTY(L"showState",                                     VePropShowState                                                      ,6)
+EXTERN_PROPERTY(L"anchor",                                        VePropAnchor                                                                 ,7)
+EXTERN_PROPERTY(L"anchorZ",                                       VePropAnchorZ                                                        ,8)
+EXTERN_PROPERTY(L"transform",                                     VePropTransform                                                      ,9)
+EXTERN_PROPERTY(L"childrenTransform",                             VePropChildrenTransform                                      ,10)
+EXTERN_PROPERTY(L"zPosition",                                     VePropZPosition                                                      ,11)
+EXTERN_PROPERTY(L"zOrderGroup",                                   VePropZOrderGroup                                            ,12)
+EXTERN_PROPERTY(L"clipToParent",                                  VePropClipToParent                                           ,13)
+EXTERN_PROPERTY(L"clipChildren",                                  VePropClipChildren                                           ,14)
+EXTERN_PROPERTY(L"surfaceOpaque",                                 VePropSurfaceOpaque                                          ,15)
+EXTERN_PROPERTY(L"name",                                          VePropName                                                           ,16)
+EXTERN_PROPERTY(L"propertyPropagation",                           VePropPropertyPropagationEnabled                     ,17)
+EXTERN_PROPERTY(L"implicitAnimation",                             VePropImplicitAnimationEnabled                       ,18)
 
 #if defined(SUPPORT_CUSTOMIZING_ATTACH_DETACH_ANIMATION)
-extern const wchar_t* VePropActionDetach;
-extern const wchar_t* VePropActionInsert;
+EXTERN_PROPERTY(L"detach",                                        VePropActionDetach                                           ,19)
+EXTERN_PROPERTY(L"attach",                                        VePropActionAttach                                           ,20)
 #endif
 
-extern const wchar_t* VeSubPropBounds;
-extern const wchar_t* VeSubPropBoundsPosition;
-extern const wchar_t* VeSubPropBoundsSize;
-
-extern const wchar_t* VeSubPropTransform;
-extern const wchar_t* VeSubPropTransformRotationX;
-extern const wchar_t* VeSubPropTransformRotationY;
-extern const wchar_t* VeSubPropTransformRotationZ;
-extern const wchar_t* VeSubPropTransformScaleX;
-extern const wchar_t* VeSubPropTransformScaleY;
-extern const wchar_t* VeSubPropTransformScaleZ;
-extern const wchar_t* VeSubPropTransformTranslationX;
-extern const wchar_t* VeSubPropTransformTranslationY;
-extern const wchar_t* VeSubPropTransformTranslationZ;
-extern const wchar_t* VeSubPropTransformRotationAnchorX;
-extern const wchar_t* VeSubPropTransformRotationAnchorY;
-extern const wchar_t* VeSubPropTransformRotationAnchorZ;
-extern const wchar_t* VeSubPropTransformScaleAnchorX;
-extern const wchar_t* VeSubPropTransformScaleAnchorY;
-extern const wchar_t* VeSubPropTransformScaleAnchorZ;
-
-extern const wchar_t* VeSubPropTransformRotationXY;
-extern const wchar_t* VeSubPropTransformScaleXY;
-extern const wchar_t* VeSubPropTransformTranslationXY;
-extern const wchar_t* VeSubPropTransformRotationAnchorXY;
-extern const wchar_t* VeSubPropTransformScaleAnchorXY;
-
-extern const wchar_t* VeSubPropChildrenTransform;
-extern const wchar_t* VeSubPropChildrenTransformRotationX;
-extern const wchar_t* VeSubPropChildrenTransformRotationY;
-extern const wchar_t* VeSubPropChildrenTransformRotationZ;
-extern const wchar_t* VeSubPropChildrenTransformScaleX;
-extern const wchar_t* VeSubPropChildrenTransformScaleY;
-extern const wchar_t* VeSubPropChildrenTransformScaleZ;
-extern const wchar_t* VeSubPropChildrenTransformTranslationX;
-extern const wchar_t* VeSubPropChildrenTransformTranslationY;
-extern const wchar_t* VeSubPropChildrenTransformTranslationZ;
-extern const wchar_t* VeSubPropChildrenTransformRotationAnchorX;
-extern const wchar_t* VeSubPropChildrenTransformRotationAnchorY;
-extern const wchar_t* VeSubPropChildrenTransformRotationAnchorZ;
-extern const wchar_t* VeSubPropChildrenTransformScaleAnchorX;
-extern const wchar_t* VeSubPropChildrenTransformScaleAnchorY;
-extern const wchar_t* VeSubPropChildrenTransformScaleAnchorZ;
-
-extern const wchar_t* VeSubPropChildrenTransformRotationXY;
-extern const wchar_t* VeSubPropChildrenTransformScaleXY;
-extern const wchar_t* VeSubPropChildrenTransformTranslationXY;
-extern const wchar_t* VeSubPropChildrenTransformRotationAnchorXY;
-extern const wchar_t* VeSubPropChildrenTransformScaleAnchorXY;
-
-extern const wchar_t* VePrivPropShowOpacity;
+EXTERN_PROPERTY(L"bounds.",                                       VeSubPropBounds                                                      ,21)
+EXTERN_PROPERTY(L"bounds.position",                               VeSubPropBoundsPosition                                      ,22)
+EXTERN_PROPERTY(L"bounds.size",                                   VeSubPropBoundsSize                                          ,23)
+
+EXTERN_PROPERTY(L"transform.",                                    VeSubPropTransform                                           ,24)
+EXTERN_PROPERTY(L"transform.rotation.x",                          VeSubPropTransformRotationX                          ,25)
+EXTERN_PROPERTY(L"transform.rotation.y",                          VeSubPropTransformRotationY                          ,26)
+EXTERN_PROPERTY(L"transform.rotation.z",                          VeSubPropTransformRotationZ                          ,27)
+EXTERN_PROPERTY(L"transform.scale.x",                             VeSubPropTransformScaleX                                     ,28)
+EXTERN_PROPERTY(L"transform.scale.y",                             VeSubPropTransformScaleY                                     ,29)
+EXTERN_PROPERTY(L"transform.scale.z",                             VeSubPropTransformScaleZ                                     ,30)
+EXTERN_PROPERTY(L"transform.translation.x",                       VeSubPropTransformTranslationX                       ,31)
+EXTERN_PROPERTY(L"transform.translation.y",                       VeSubPropTransformTranslationY                       ,32)
+EXTERN_PROPERTY(L"transform.translation.z",                       VeSubPropTransformTranslationZ                       ,33)
+EXTERN_PROPERTY(L"transform.rotation.anchor.x",                   VeSubPropTransformRotationAnchorX                    ,34)
+EXTERN_PROPERTY(L"transform.rotation.anchor.y",                   VeSubPropTransformRotationAnchorY                    ,35)
+EXTERN_PROPERTY(L"transform.rotation.anchor.z",                   VeSubPropTransformRotationAnchorZ                    ,36)
+EXTERN_PROPERTY(L"transform.scale.anchor.x",                      VeSubPropTransformScaleAnchorX                       ,37)
+EXTERN_PROPERTY(L"transform.scale.anchor.y",                      VeSubPropTransformScaleAnchorY                       ,38)
+EXTERN_PROPERTY(L"transform.scale.anchor.z",                      VeSubPropTransformScaleAnchorZ                       ,39)
+
+EXTERN_PROPERTY(L"transform.rotation.xy",                         VeSubPropTransformRotationXY                         ,40)
+EXTERN_PROPERTY(L"transform.scale.xy",                            VeSubPropTransformScaleXY                                    ,41)
+EXTERN_PROPERTY(L"transform.translation.xy",                      VeSubPropTransformTranslationXY                      ,42)
+EXTERN_PROPERTY(L"transform.rotation.anchor.xy",                  VeSubPropTransformRotationAnchorXY           ,43)
+EXTERN_PROPERTY(L"transform.scale.anchor.xy",                     VeSubPropTransformScaleAnchorXY                      ,44)
+
+
+EXTERN_PROPERTY(L"childrenTransform.",                            VeSubPropChildrenTransform                           ,45)
+EXTERN_PROPERTY(L"childrenTransform.rotation.x",                  VeSubPropChildrenTransformRotationX          ,46)
+EXTERN_PROPERTY(L"childrenTransform.rotation.y",                  VeSubPropChildrenTransformRotationY          ,47)
+EXTERN_PROPERTY(L"childrenTransform.rotation.z",                  VeSubPropChildrenTransformRotationZ          ,48)
+EXTERN_PROPERTY(L"childrenTransform.scale.x",                     VeSubPropChildrenTransformScaleX                     ,49)
+EXTERN_PROPERTY(L"childrenTransform.scale.y",                     VeSubPropChildrenTransformScaleY                     ,50)
+EXTERN_PROPERTY(L"childrenTransform.scale.z",                     VeSubPropChildrenTransformScaleZ                     ,51)
+EXTERN_PROPERTY(L"childrenTransform.translation.x",               VeSubPropChildrenTransformTranslationX       ,52)
+EXTERN_PROPERTY(L"childrenTransform.translation.y",               VeSubPropChildrenTransformTranslationY       ,53)
+EXTERN_PROPERTY(L"childrenTransform.translation.z",               VeSubPropChildrenTransformTranslationZ       ,54)
+EXTERN_PROPERTY(L"childrenTransform.rotation.anchor.x",           VeSubPropChildrenTransformRotationAnchorX    ,55)
+EXTERN_PROPERTY(L"childrenTransform.rotation.anchor.y",           VeSubPropChildrenTransformRotationAnchorY    ,56)
+EXTERN_PROPERTY(L"childrenTransform.rotation.anchor.z",           VeSubPropChildrenTransformRotationAnchorZ    ,57)
+EXTERN_PROPERTY(L"childrenTransform.scale.anchor.x",              VeSubPropChildrenTransformScaleAnchorX       ,58)
+EXTERN_PROPERTY(L"childrenTransform.scale.anchor.y",              VeSubPropChildrenTransformScaleAnchorY       ,59)
+EXTERN_PROPERTY(L"childrenTransform.scale.anchor.z",              VeSubPropChildrenTransformScaleAnchorZ       ,60)
+
+EXTERN_PROPERTY(L"childrenTransform.rotation.xy",                 VeSubPropChildrenTransformRotationXY         ,61)
+EXTERN_PROPERTY(L"childrenTransform.scale.xy",                    VeSubPropChildrenTransformScaleXY                    ,62)
+EXTERN_PROPERTY(L"childrenTransform.translation.xy",              VeSubPropChildrenTransformTranslationXY      ,63)
+EXTERN_PROPERTY(L"childrenTransform.rotation.anchor.xy",          VeSubPropChildrenTransformRotationAnchorXY,64)
+EXTERN_PROPERTY(L"childrenTransform.scale.anchor.xy",             VeSubPropChildrenTransformScaleAnchorXY      ,65)
+
+EXTERN_PROPERTY(L"__showOpacity",                                 VePrivPropShowOpacity                                                ,66)
 
 
 // 3.0 properties
-extern const wchar_t* VeMeshPropVertexCount;                           //L"mesh.vertex.count";                                 //int
-extern const wchar_t* VeMeshPropVertex;                                                //L"mesh.vertex.#index";                                                //FloatPoint3
-extern const wchar_t* VeMeshPropColor;                                         //L"mesh.color.#index";                                         //Color ( FloatColor will be needed )
-extern const wchar_t* VeMeshPropTextureCoord;                          //L"mesh.textureCoordinates.#index";                    //FloatDimension
-extern const wchar_t* VeMeshPropNormal;                                                //L"mesh.normal.#index";                                                //FloatPoint3
-extern const wchar_t* VeMeshPropVertexIndex;                           //L"mesh.index.#index";                                         //int
-extern const wchar_t* VeMeshPropBoneCount;                                     //L"mesh.bone.count";                                   //int
-extern const wchar_t* VeMeshPropBone;                                          //L"mesh.bone.#index";                                          //FloatMatrix4
-extern const wchar_t* VeMeshPropBoneIndex;                                     //L"mesh.bone.index.#index";                                    //int
-extern const wchar_t* VeMeshPropBoneWeight;                                    //L"mesh.bone.weight#index.";                                   //float
-
-extern const wchar_t* VeMaterialDiffuse;                                       //L"material.diffuse";                                  //FloatVector4
-extern const wchar_t* VeMaterialSpecular;                                      //L"material.specular";                                 //FloatVector4
-extern const wchar_t* VeMaterialAmbient;                                       //L"material.ambient";                                  //FloatVector4
-extern const wchar_t* VeMaterialEmissive;                                      //L"material.emissive";                                 //FloatVector4
-extern const wchar_t* VeMaterialShiness;                                       //L"material.shiness";                                  //float
-
-// is it needed ?
-extern const wchar_t* VeShadowColor;                                           //L"shadow.color";                                              //FloatVector4
-
-extern const wchar_t* VeLightCount;                                                    //L"light.count";                                               //int
-extern const wchar_t* VeLightType;                                                     //L"light.#name.type";                                          //int : LightType
-extern const wchar_t* VeLightDiffuse;                                          //L"light.#name.diffuse";                                       //FloatVector4
-extern const wchar_t* VeLightSpecular;                                         //L"light.#name.specular";                                      //FloatVector4
-extern const wchar_t* VeLightAmbient;                                          //L"light.#name.ambient";                                       //FloatVector4
-extern const wchar_t* VeLightPosition;                                         //L"light.#name.position";                                      //FloatPoint3
-extern const wchar_t* VeLightDirection;                                                //L"light.#name.direction";                                     //FloatVector4
-extern const wchar_t* VeLightExponent;                                         //L"light.#name.exponent";                                      //float
-extern const wchar_t* VeLightCutOff;                                           //L"light.#name.cutOff";                                                //float
-extern const wchar_t* VeLightConstantAttenuation;                      //L"light.#name.constantAttenuation";           //float
-extern const wchar_t* VeLightLinearAttenuation;                                //L"light.#name.linearAttenuation";                     //float
-extern const wchar_t* VeLightQuadraticAttenuation;                     //L"light.#name.quadraticAttenuation";          //float
-
-
-extern Tizen::Base::String* pVePropBounds;
-extern Tizen::Base::String* pVePropContentBounds;
-extern Tizen::Base::String* pVePropContentOpacity;
-extern Tizen::Base::String* pVePropRenderOperation;
-extern Tizen::Base::String* pVePropOpacity;
-extern Tizen::Base::String* pVePropShowState;
-extern Tizen::Base::String* pVePropAnchor;
-extern Tizen::Base::String* pVePropAnchorZ;
-extern Tizen::Base::String* pVePropTransform;
-extern Tizen::Base::String* pVePropChildrenTransform;
-extern Tizen::Base::String* pVePropZPosition;
-extern Tizen::Base::String* pVePropZOrderGroup;
-extern Tizen::Base::String* pVePropClipToParent;
-extern Tizen::Base::String* pVePropClipChildren;
-extern Tizen::Base::String* pVePropName;
-extern Tizen::Base::String* pVePropSurfaceOpaque;
-extern Tizen::Base::String* pVePropPropertyPropagationEnabled;
-extern Tizen::Base::String* pVePropImplicitAnimationEnabled;
 
-#if defined(SUPPORT_CUSTOMIZING_ATTACH_DETACH_ANIMATION)
-extern Tizen::Base::String* pVePropActionDetach;
-extern Tizen::Base::String* pVePropActionAttach;
-#endif
 
-extern Tizen::Base::String* pVeSubPropBounds;
-extern Tizen::Base::String* pVeSubPropBoundsPosition;
-extern Tizen::Base::String* pVeSubPropBoundsSize;
-
-extern Tizen::Base::String* pVeSubPropTransform;
-extern Tizen::Base::String* pVeSubPropTransformRotationX;
-extern Tizen::Base::String* pVeSubPropTransformRotationY;
-extern Tizen::Base::String* pVeSubPropTransformRotationZ;
-extern Tizen::Base::String* pVeSubPropTransformScaleX;
-extern Tizen::Base::String* pVeSubPropTransformScaleY;
-extern Tizen::Base::String* pVeSubPropTransformScaleZ;
-extern Tizen::Base::String* pVeSubPropTransformTranslationX;
-extern Tizen::Base::String* pVeSubPropTransformTranslationY;
-extern Tizen::Base::String* pVeSubPropTransformTranslationZ;
-extern Tizen::Base::String* pVeSubPropTransformRotationAnchorX;
-extern Tizen::Base::String* pVeSubPropTransformRotationAnchorY;
-extern Tizen::Base::String* pVeSubPropTransformRotationAnchorZ;
-extern Tizen::Base::String* pVeSubPropTransformScaleAnchorX;
-extern Tizen::Base::String* pVeSubPropTransformScaleAnchorY;
-extern Tizen::Base::String* pVeSubPropTransformScaleAnchorZ;
-
-extern Tizen::Base::String* pVeSubPropTransformRotationXY;
-extern Tizen::Base::String* pVeSubPropTransformScaleXY;
-extern Tizen::Base::String* pVeSubPropTransformTranslationXY;
-extern Tizen::Base::String* pVeSubPropTransformRotationAnchorXY;
-extern Tizen::Base::String* pVeSubPropTransformScaleAnchorXY;
-
-extern Tizen::Base::String* pVeSubPropChildrenTransform;
-extern Tizen::Base::String* pVeSubPropChildrenTransformRotationX;
-extern Tizen::Base::String* pVeSubPropChildrenTransformRotationY;
-extern Tizen::Base::String* pVeSubPropChildrenTransformRotationZ;
-extern Tizen::Base::String* pVeSubPropChildrenTransformScaleX;
-extern Tizen::Base::String* pVeSubPropChildrenTransformScaleY;
-extern Tizen::Base::String* pVeSubPropChildrenTransformScaleZ;
-extern Tizen::Base::String* pVeSubPropChildrenTransformTranslationX;
-extern Tizen::Base::String* pVeSubPropChildrenTransformTranslationY;
-extern Tizen::Base::String* pVeSubPropChildrenTransformTranslationZ;
-extern Tizen::Base::String* pVeSubPropChildrenTransformRotationAnchorX;
-extern Tizen::Base::String* pVeSubPropChildrenTransformRotationAnchorY;
-extern Tizen::Base::String* pVeSubPropChildrenTransformRotationAnchorZ;
-extern Tizen::Base::String* pVeSubPropChildrenTransformScaleAnchorX;
-extern Tizen::Base::String* pVeSubPropChildrenTransformScaleAnchorY;
-extern Tizen::Base::String* pVeSubPropChildrenTransformScaleAnchorZ;
-
-extern Tizen::Base::String* pVeSubPropChildrenTransformRotationXY;
-extern Tizen::Base::String* pVeSubPropChildrenTransformScaleXY;
-extern Tizen::Base::String* pVeSubPropChildrenTransformTranslationXY;
-extern Tizen::Base::String* pVeSubPropChildrenTransformRotationAnchorXY;
-extern Tizen::Base::String* pVeSubPropChildrenTransformScaleAnchorXY;
-
-extern Tizen::Base::String* pVePrivPropShowOpacity;
-
-//// 3.0 properties
-//extern Tizen::Base::String* pVeMeshPropVertexCount;
-//extern Tizen::Base::String* pVeMeshPropVertex;
-//extern Tizen::Base::String* pVeMeshPropColor;
-//extern Tizen::Base::String* pVeMeshPropTextureCoord;
-//extern Tizen::Base::String* pVeMeshPropNormal;
-//extern Tizen::Base::String* pVeMeshPropVertexIndex;
-//extern Tizen::Base::String* pVeMeshPropBoneCount;
-//extern Tizen::Base::String* pVeMeshPropBone;
-//extern Tizen::Base::String* pVeMeshPropBoneIndex;
-//extern Tizen::Base::String* pVeMeshPropBoneWeight;
-
-//extern Tizen::Base::String* pVeMaterialDiffuse;
-//extern Tizen::Base::String* pVeMaterialSpecular;
-//extern Tizen::Base::String* pVeMaterialAmbient;
-//extern Tizen::Base::String* pVeMaterialEmissive;
-//extern Tizen::Base::String* pVeMaterialShiness;
-
-//// is it needed ?
-//extern Tizen::Base::String* pVeShadowColor;
-
-//extern Tizen::Base::String* pVeLightCount;
-//extern Tizen::Base::String* pVeLightType;
-//extern Tizen::Base::String* pVeLightDiffuse;
-//extern Tizen::Base::String* pVeLightSpecular;
-//extern Tizen::Base::String* pVeLightAmbient;
-//extern Tizen::Base::String* pVeLightPosition;
-//extern Tizen::Base::String* pVeLightDirection;
-//extern Tizen::Base::String* pVeLightExponent;
-//extern Tizen::Base::String* pVeLightCutOff;
-//extern Tizen::Base::String* pVeLightConstantAttenuation;
-//extern Tizen::Base::String* pVeLightLinearAttenuation;
-//extern Tizen::Base::String* pVeLightQuadraticAttenuation;
+EXTERN_DYNAMIC_PROPERTY(L"mesh.vertex.count",                                  VeMeshPropVertexCount                                           ,67)    //int
+EXTERN_DYNAMIC_PROPERTY(L"mesh.vertex.#index",                                 VeMeshPropVertex                                                        ,68)    //FloatPoint3
+EXTERN_DYNAMIC_PROPERTY(L"mesh.color.#index",                                  VeMeshPropColor                                                         ,69)    //Color ( FloatColor will be needed )
+EXTERN_DYNAMIC_PROPERTY(L"mesh.textureCoordinates.#index",             VeMeshPropTextureCoord                                          ,70)    //FloatDimension
+EXTERN_DYNAMIC_PROPERTY(L"mesh.normal.#index",                                 VeMeshPropNormal                                                        ,71)    //FloatPoint3
+EXTERN_DYNAMIC_PROPERTY(L"mesh.index.#index",                                  VeMeshPropVertexIndex                                           ,72)    //int
+EXTERN_DYNAMIC_PROPERTY(L"mesh.bone.count",                                            VeMeshPropBoneCount                                                     ,73)    //int
+EXTERN_DYNAMIC_PROPERTY(L"mesh.bone.#index",                                   VeMeshPropBone                                                          ,74)    //FloatMatrix4
+EXTERN_DYNAMIC_PROPERTY(L"mesh.bone.index.#index",                             VeMeshPropBoneIndex                                                     ,75)    //int
+EXTERN_DYNAMIC_PROPERTY(L"mesh.bone.weight.#index",                            VeMeshPropBoneWeight                                            ,76)    //float
+
+EXTERN_DYNAMIC_PROPERTY(L"material.diffuse",                                   VeMaterialDiffuse                                                       ,77)    //FloatVector4
+EXTERN_DYNAMIC_PROPERTY(L"material.specular",                                  VeMaterialSpecular                                                      ,78)    //FloatVector4
+EXTERN_DYNAMIC_PROPERTY(L"material.ambient",                                   VeMaterialAmbient                                                       ,79)    //FloatVector4
+EXTERN_DYNAMIC_PROPERTY(L"material.emissive",                                  VeMaterialEmissive                                                      ,80)    //FloatVector4
+EXTERN_DYNAMIC_PROPERTY(L"material.shiness",                                   VeMaterialShiness                                                       ,81)    //float
+
+EXTERN_DYNAMIC_PROPERTY(L"shadow.color",                                               VeShadowColor                                                           ,82)    //FloatVector4
+
+EXTERN_DYNAMIC_PROPERTY(L"light.count",                                                        VeLightCount                                                            ,83)    //int
+EXTERN_DYNAMIC_PROPERTY(L"light.#name.type",                                   VeLightType                                                                     ,84)    //int : LightType
+EXTERN_DYNAMIC_PROPERTY(L"light.#name.diffuse",                                        VeLightDiffuse                                                          ,85)    //FloatVector4
+EXTERN_DYNAMIC_PROPERTY(L"light.#name.specular",                               VeLightSpecular                                                         ,86)    //FloatVector4
+EXTERN_DYNAMIC_PROPERTY(L"light.#name.ambient",                                        VeLightAmbient                                                          ,87)    //FloatVector4
+EXTERN_DYNAMIC_PROPERTY(L"light.#name.position",                               VeLightPosition                                                         ,88)    //FloatPoint3
+EXTERN_DYNAMIC_PROPERTY(L"light.#name.direction",                              VeLightDirection                                                        ,89)    //FloatVector4
+EXTERN_DYNAMIC_PROPERTY(L"light.#name.exponent",                               VeLightExponent                                                         ,90)    //float
+EXTERN_DYNAMIC_PROPERTY(L"light.#name.cutOff",                                 VeLightCutOff                                                           ,91)    //float
+EXTERN_DYNAMIC_PROPERTY(L"light.#name.constantAttenuation",            VeLightConstantAttenuation                                      ,92)    //float
+EXTERN_DYNAMIC_PROPERTY(L"light.#name.linearAttenuation",              VeLightLinearAttenuation                                        ,93)    //float
+EXTERN_DYNAMIC_PROPERTY(L"light.#name.quadraticAttenuation",   VeLightQuadraticAttenuation                                     ,94)    //float
+
+//EXTERN_DYNAMIC_PROPERTY(L"Shader#.uniform#.",                                        VeShaderUniform                                                         ,95)
 /**
 * @class       _VisualElementImpl
 * @brief       This class provides methods to control VisualElement.
@@ -1167,7 +1072,7 @@ private:
                }
        }
 
-       result SetBoundsI(const Tizen::Graphics::FloatRectangle& bounds);
+       result SetBoundsI(const Tizen::Graphics::FloatRectangle& bounds, bool& sizeChanged);
        result SetZPositionI(float zPosition);
        result SetShowOpacityI(float showOpacity);
        result SetShowStateI(bool show);
@@ -1177,10 +1082,14 @@ private:
        result SetAnchorI(const Tizen::Graphics::FloatPoint& anchor);
        result SetAnchorZI(float anchorZ);
        result SetPropertyPropagationEnabledI(bool enable);
-       result SetTransformMatrixI(const Tizen::Graphics::FloatMatrix4& xform, bool updateDecomposed = true);
-       result SetChildrenTransformMatrixI(const Tizen::Graphics::FloatMatrix4& xform, bool updateDecomposed = true);
+       result SetTransformMatrixI(const Tizen::Graphics::FloatMatrix4& xform, bool updateDecomposed);
+       result SetTransformDecomposedFactorI(const Tizen::Base::String* pProperty, int propertyId, const Tizen::Graphics::FloatMatrix4& xform, const Variant& v);
+
+       result SetChildrenTransformMatrixI(const Tizen::Graphics::FloatMatrix4& xform, bool updateDecomposed);
+       result SetChildrenTransformDecomposedFactorI(const Tizen::Base::String* pProperty, int propertyId, const Tizen::Graphics::FloatMatrix4& xform, const Variant& v);
        result SetZOrderGroupI(int zOrderGroup);
 
+
        bool CheckIfAnimatable(const Tizen::Base::String& property) const;
        bool IsSurfaceNeeded(void) const;
        void RebuildSurfaces(void);
@@ -1389,6 +1298,7 @@ private:
        void FlushNativeChanges(void);
 
        void SetSurfaceChanged(void);
+       void SetGeometryChanged(void);
 
        bool IsPropsInvalidated(PropertyFlags props) const
        {
@@ -1426,9 +1336,10 @@ private:
        {
                return *__pSharedData;
        }
-       bool CreateImplicitAnimation( const Tizen::Base::String& property, const Variant& newValue, const Tizen::Base::String** pSubProperties, bool implicitAnimation, bool isCustomProperty = false);
-       bool CreateImplicitAnimationForShowState(float newState, float currentState, bool bImplicitAnimation);
-       bool CreateImplicitAnimationIfNeeded(const Tizen::Base::String& property, const Variant& newValue, const Variant& currentPresntationValue, const Tizen::Base::String** pSubProperties, bool isCustomProperty = false);
+       bool CreateImplicitAnimation( const Tizen::Base::String& property,const Variant& newValue);
+       bool CreateImplicitAnimationForShowState(float newState, float currentState);
+       bool CreateImplicitAnimationForCustomProperty(const Tizen::Base::String& property, const Variant& newValue, const Variant& currentPresntationValue);
+       bool RemoveAnimationByPropertyList(const Tizen::Base::String** pSubProperties);
 
        //Visual Element Bounding volume related
        result AdjustBoundingVolume(void);
@@ -1452,14 +1363,15 @@ protected:
        //PropertyFlags
        enum UpdatedProperty
        {
-               UPDATED_PROP_BOUNDS                                     = 0x0001,
-               UPDATED_PROP_Z_POSITION                         = 0x0002,
-               UPDATED_PROP_ANCHOR                                     = 0x0004,
-               UPDATED_PROP_ANCHOR_Z                           = 0x0008,
-               UPDATED_PROP_TRANSFORM                          = 0x0010,
-               UPDATED_PROP_CHILDREN_TRANSFORM         = 0x0020,
-               UPDATED_PROP_CLIP_CHILDREN                      = 0x0040,
-               UPDATED_PROP_CHANGE_ZORDER                      = 0x0080,
+               UPDATED_PROP_BOUNDS                                     = 0x00000001,
+               UPDATED_PROP_Z_POSITION                         = 0x00000002,
+               UPDATED_PROP_ANCHOR                                     = 0x00000004,
+               UPDATED_PROP_ANCHOR_Z                           = 0x00000008,
+               UPDATED_PROP_TRANSFORM                          = 0x00000010,
+               UPDATED_PROP_CHILDREN_TRANSFORM         = 0x00000020,
+               UPDATED_PROP_CLIP_CHILDREN                      = 0x00000040,
+               UPDATED_PROP_CHANGE_ZORDER                      = 0x00000080,
+               UPDATED_PROP_GEOMETRY                           = 0x10000000,
                UPDATED_PROP_COORDINATES_MASK           =       UPDATED_PROP_BOUNDS |
                                                                                                UPDATED_PROP_Z_POSITION |
                                                                                                UPDATED_PROP_ANCHOR |
@@ -1467,30 +1379,31 @@ protected:
                                                                                                UPDATED_PROP_TRANSFORM |
                                                                                                UPDATED_PROP_CHILDREN_TRANSFORM |
                                                                                                UPDATED_PROP_CLIP_CHILDREN |
-                                                                                               UPDATED_PROP_CHANGE_ZORDER,
+                                                                                               UPDATED_PROP_CHANGE_ZORDER |
+                                                                                               UPDATED_PROP_GEOMETRY,
 
-               UPDATED_PROP_RENDER_OPERATION           = 0x0100,
-               UPDATED_PROP_SHOW_STATE                         = 0x0200,
-               UPDATED_PROP_OPACITY                            = 0x0400,
+               UPDATED_PROP_RENDER_OPERATION           = 0x00000100,
+               UPDATED_PROP_SHOW_STATE                         = 0x00000200,
+               UPDATED_PROP_OPACITY                            = 0x00000400,
                UPDATED_PROP_SHOWSTATE_MASK                     =       UPDATED_PROP_RENDER_OPERATION |
                                                                                                UPDATED_PROP_SHOW_STATE |
                                                                                                UPDATED_PROP_OPACITY,
 
-               UPDATED_PROP_CONTENT_OPACITY            = 0x0800,
-               UPDATED_PROP_SURFACE_OPAQUE                     = 0x1000,
+               UPDATED_PROP_CONTENT_OPACITY            = 0x00000800,
+               UPDATED_PROP_SURFACE_OPAQUE                     = 0x00001000,
                UPDATED_PROP_CONTENTOPACITY_MASK        =       UPDATED_PROP_CONTENT_OPACITY |
                                                                                                UPDATED_PROP_SURFACE_OPAQUE,
 
-               UPDATED_PROP_CONTENT_BOUNDS                     = 0x2000,
+               UPDATED_PROP_CONTENT_BOUNDS                     = 0x00002000,
                UPDATED_PROP_CONTENTBOUNDS_MASK         = UPDATED_PROP_CONTENT_BOUNDS,
 
-               UPDATED_PROP_CONTENT                            = 0x4000,
+               UPDATED_PROP_CONTENT                            = 0x00004000,
                UPDATED_PROP_CONTENT_MASK                       =       UPDATED_PROP_CONTENT,
 
-               UPDATED_PROP_SURFACE                            = 0x8000,
+               UPDATED_PROP_SURFACE                            = 0x00008000,
 
 
-               UPDATED_PROP_MASK                                       = 0xFFFF
+               UPDATED_PROP_MASK                                       = 0xFFFFFFFF
        };
 
        int _zOrderGroup;
@@ -1545,6 +1458,7 @@ private:
        float __zPosition;
        float __contentOpacity;
        float __opacity;
+       bool __isSurfaceOpaque;
        Tizen::Graphics::FloatPoint __anchor;
        float __anchorZ;
        Tizen::Graphics::FloatMatrix4 __transform;
index 95c8330..3f42298 100644 (file)
@@ -74,7 +74,7 @@ public:
 
        bool NeedNativeReconfigure(void) const
        {
-               return (invalidatedNativeProps != 0) || surfaceChanged;
+               return (invalidatedNativeProps != 0) || surfaceChanged || geometry.IsUpdated();
        }
 
 
@@ -88,7 +88,6 @@ public:
        Tizen::Graphics::FloatRectangle invalidatedRegion;
        bool needSurface;
        bool redrawOnResize;
-       bool isSurfaceOpaque;
        bool fixedSurfaceSize;
        int invalidationLockCount;
        Tizen::Graphics::FloatRectangle updateRegion;
@@ -103,22 +102,65 @@ public:
        {
        public:
                typedef unsigned long PropertyFlags;
+               struct
+               {
+                       int VeSubPropBoundsPosition:1;
+                       int VeSubPropBoundsSize:1;
+
+                       int VePropTransform:1;
+                       int VeSubPropTransformRotationX:1;
+                       int VeSubPropTransformRotationY:1;
+                       int VeSubPropTransformRotationZ:1;
+                       int VeSubPropTransformScaleX:1;
+                       int VeSubPropTransformScaleY:1;
+                       int VeSubPropTransformScaleZ:1;
+                       int VeSubPropTransformTranslationX:1;
+                       int VeSubPropTransformTranslationY:1;
+                       int VeSubPropTransformTranslationZ:1;
+                       int VeSubPropTransformRotationAnchorX:1;
+                       int VeSubPropTransformRotationAnchorY:1;
+                       int VeSubPropTransformRotationAnchorZ:1;
+                       int VeSubPropTransformScaleAnchorX:1;
+                       int VeSubPropTransformScaleAnchorY:1;
+                       int VeSubPropTransformScaleAnchorZ:1;
+
+                       int VePropChildrenTransform:1;
+                       int VeSubPropChildrenTransformRotationX:1;
+                       int VeSubPropChildrenTransformRotationY:1;
+                       int VeSubPropChildrenTransformRotationZ:1;
+                       int VeSubPropChildrenTransformScaleX:1;
+                       int VeSubPropChildrenTransformScaleY:1;
+                       int VeSubPropChildrenTransformScaleZ:1;
+                       int VeSubPropChildrenTransformTranslationX:1;
+                       int VeSubPropChildrenTransformTranslationY:1;
+                       int VeSubPropChildrenTransformTranslationZ:1;
+                       int VeSubPropChildrenTransformRotationAnchorX:1;
+                       int VeSubPropChildrenTransformRotationAnchorY:1;
+                       int VeSubPropChildrenTransformRotationAnchorZ:1;
+                       int VeSubPropChildrenTransformScaleAnchorX:1;
+                       int VeSubPropChildrenTransformScaleAnchorY:1;
+                       int VeSubPropChildrenTransformScaleAnchorZ:1;
+
+               }subPropFlags;
 
                UpdatePropertiesForRender(_VisualElementImpl* pSource);
-               virtual ~UpdatePropertiesForRender();
+               virtual ~UpdatePropertiesForRender(void);
 
-               void Clear();
+               void Clear(void);
+#if 0
                void Update(_VisualElementImpl* pSource, PropertyFlags updateFlags);
+#endif
+               void Update(PropertyFlags updateFlags);
+               void Update(PropertyFlags updateFlags, _VisualElementImpl* pSource);
+               void UpdateSubProperty(int propertyId, _VisualElementImpl* pSource);
 
-//             // maybe no more needed method
-               Variant GetProperty(const Base::String& name) const;
+               void Apply(void);
 
        public:
                _VisualElementImpl* __pSource;
 
                // flags
                PropertyFlags __updatedProperties;
-               PropertyFlags __implicitAnimation;
 
                // properties
                Tizen::Graphics::FloatRectangle __bounds;
@@ -130,13 +172,28 @@ public:
                Tizen::Graphics::FloatPoint __anchor;
                float __anchorZ;
                Tizen::Graphics::FloatMatrix4 __transform;
-               _TransformMatrix3Df __decomposedTransform;
+
+               typedef struct
+               {
+                       float __scaleX, __scaleY, __scaleZ;
+                       float __shearXY, __shearXZ, __shearYZ;
+                       float __quatX, __quatY, __quatZ, __quatW;
+                       float __translationX, __translationY, __translationZ;
+                       float __perspectiveX, __perspectiveY, __perspectiveZ, __perspectiveW;
+
+                       float __rotAnchorX, __rotAnchorY, __rotAnchorZ;
+                       float __scaleAnchorX, __scaleAnchorY, __scaleAnchorZ;
+
+                       float __rotX, __rotY, __rotZ; // in degree-unit
+               }DecomposedTransformFactor;
+
+               DecomposedTransformFactor __decomposedTransform;
                Tizen::Graphics::FloatMatrix4 __childrenTransform;
-               _TransformMatrix3Df __decomposedChildrenTransform;
+               DecomposedTransformFactor __decomposedChildrenTransform;
                float __zPosition;
                bool __isClipChildren;
-               bool isSurfaceOpaque;
-       } toUpdatePropImmediately;
+               bool __isSurfaceOpaque;
+       } toUpdatePropertiesForRenderObject;
 
        void* pUserData;
        _GeometryInfo geometry;