X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fupdate%2Fcommon%2Fanimatable-property.h;h=612af3f2e7f115914ff142da852cfb2c75a40225;hb=e3db7130bf8c89d8ca671bc3a42efcc7c5da2641;hp=e0d4917665ad250b31c07d65c0c6f12a055712cf;hpb=d46e06b577afa0f99a293d257a834add7c2f3755;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/update/common/animatable-property.h b/dali/internal/update/common/animatable-property.h index e0d4917..612af3f 100644 --- a/dali/internal/update/common/animatable-property.h +++ b/dali/internal/update/common/animatable-property.h @@ -1,8 +1,8 @@ -#ifndef __DALI_INTERNAL_SCENE_GRAPH_ANIMATABLE_PROPERTY_H__ -#define __DALI_INTERNAL_SCENE_GRAPH_ANIMATABLE_PROPERTY_H__ +#ifndef DALI_INTERNAL_SCENE_GRAPH_ANIMATABLE_PROPERTY_H +#define DALI_INTERNAL_SCENE_GRAPH_ANIMATABLE_PROPERTY_H /* - * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * Copyright (c) 2023 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,26 +22,21 @@ #include // INTERNAL INCLUDES +#include + +#include +#include #include -#include #include #include -#include -#include -#include -#include -#include -#include +#include namespace Dali { - namespace Internal { - namespace SceneGraph { - /** * Dirty flags record whether an animatable property has changed. * In the frame following a change, the property is reset to a base value. @@ -52,11 +47,12 @@ namespace SceneGraph * However if the property was only "Set" (and not "Baked"), then typically the base value and previous value will not match. * In this case the reset operation is equivalent to a "Bake", and the value is considered "dirty" for an additional frame. */ -static const unsigned int CLEAN_FLAG = 0x00; ///< Indicates that the value did not change in this, or the previous frame -static const unsigned int BAKED_FLAG = 0x01; ///< Indicates that the value was Baked during the previous frame -static const unsigned int SET_FLAG = 0x02; ///< Indicates that the value was Set during the previous frame +static const uint32_t CLEAN_FLAG = 0x00; ///< Indicates that the value did not change in this, or the previous frame +static const uint32_t BAKED_FLAG = 0x01; ///< Indicates that the value was Baked during the previous frame +static const uint32_t SET_FLAG = 0x02; ///< Indicates that the value was Set during the previous frame +static const uint32_t RESET_FLAG = 0x02; ///< Indicates that the value should be reset to the base value in the next two frames -template +template class AnimatableProperty; /** @@ -65,27 +61,25 @@ class AnimatableProperty; class AnimatablePropertyBase : public PropertyBase { public: - /** * Constructor, initialize the dirty flag */ AnimatablePropertyBase() : PropertyBase(), - mDirtyFlags( BAKED_FLAG ) - {} + mDirtyFlags(BAKED_FLAG) + { + } /** * Virtual destructor. */ - virtual ~AnimatablePropertyBase() - {} + ~AnimatablePropertyBase() override = default; protected: // for derived classes - /** * Flag that the property has been Set during the current frame. */ - void OnSet() + virtual void OnSet() { mDirtyFlags = SET_FLAG; } @@ -93,65 +87,67 @@ protected: // for derived classes /** * Flag that the property has been Baked during the current frame. */ - void OnBake() + virtual void OnBake() { mDirtyFlags = BAKED_FLAG; } -public: // From PropertyBase +public: + /** + * Mark the property as dirty so that it will be reset to the base value in the next two frames. + */ + void MarkAsDirty() + { + mDirtyFlags = RESET_FLAG; + } +public: // From PropertyBase /** * @copydoc Dali::Internal::SceneGraph::PropertyBase::IsClean() */ - virtual bool IsClean() const + bool IsClean() const override { - return ( CLEAN_FLAG == mDirtyFlags ); + return (CLEAN_FLAG == mDirtyFlags); } /** * @copydoc Dali::Internal::PropertyInputImpl::InputInitialized() */ - virtual bool InputInitialized() const + bool InputInitialized() const override { return true; // Animatable properties are always valid } -protected: // so that ResetToBaseValue can set it directly - - unsigned int mDirtyFlags; ///< Flag whether value changed during previous 2 frames - +protected: // so that ResetToBaseValue can set it directly + uint32_t mDirtyFlags; ///< Flag whether value changed during previous 2 frames }; - /** * An boolean animatable property of a scene-graph object. */ -template <> +template<> class AnimatableProperty : public AnimatablePropertyBase { public: - /** * Create an animatable property. * @param [in] initialValue The initial value of the property. */ - AnimatableProperty( bool initialValue ) - : mValue( initialValue ), - mBaseValue( initialValue ) + AnimatableProperty(bool initialValue) + : mValue(initialValue), + mBaseValue(initialValue) { } /** * Virtual destructor. */ - virtual ~AnimatableProperty() - { - } + ~AnimatableProperty() override = default; /** * @copydoc Dali::Internal::SceneGraph::PropertyBase::GetType() */ - virtual Dali::Property::Type GetType() const + Dali::Property::Type GetType() const override { return Dali::PropertyTypes::Get(); } @@ -159,22 +155,22 @@ public: /** * @copydoc Dali::Internal::SceneGraph::PropertyBase::ResetToBaseValue() */ - virtual void ResetToBaseValue(BufferIndex updateBufferIndex) + void ResetToBaseValue(BufferIndex updateBufferIndex) override { - if (CLEAN_FLAG != mDirtyFlags) + if(CLEAN_FLAG != mDirtyFlags) { mValue[updateBufferIndex] = mBaseValue; - mDirtyFlags = ( mDirtyFlags >> 1 ); + mDirtyFlags = (mDirtyFlags >> 1); } } /** * @copydoc Dali::Internal::PropertyInputImpl::GetBoolean() */ - virtual const bool& GetBoolean( BufferIndex bufferIndex ) const + const bool& GetBoolean(BufferIndex bufferIndex) const override { - return mValue[ bufferIndex ]; + return mValue[bufferIndex]; } /** @@ -186,7 +182,7 @@ public: void Set(BufferIndex bufferIndex, bool value) { // check if the value actually changed to avoid dirtying nodes unnecessarily - if( mValue[bufferIndex] != value ) + if(mValue[bufferIndex] != value) { mValue[bufferIndex] = value; @@ -203,9 +199,9 @@ public: { // check if the value actually changed to avoid dirtying nodes unnecessarily // false + false does not change value, true + false does not either - if( delta && !mValue[bufferIndex] ) + if(delta && !mValue[bufferIndex]) { - mValue[bufferIndex] += delta; + mValue[bufferIndex] = delta; OnSet(); } @@ -214,7 +210,7 @@ public: /** * @copydoc Dali::SceneGraph::AnimatableProperty::Get() */ - bool& Get(size_t bufferIndex) + bool& Get(BufferIndex bufferIndex) { return mValue[bufferIndex]; } @@ -222,7 +218,7 @@ public: /** * @copydoc Dali::SceneGraph::AnimatableProperty::Get() */ - const bool& Get(size_t bufferIndex) const + const bool& Get(BufferIndex bufferIndex) const { return mValue[bufferIndex]; } @@ -232,7 +228,7 @@ public: * @param[in] bufferIndex The buffer to read. * @return The property value. */ - bool& operator[](size_t bufferIndex) + bool& operator[](BufferIndex bufferIndex) { return mValue[bufferIndex]; } @@ -242,7 +238,7 @@ public: * @param[in] bufferIndex The buffer to read. * @return The property value. */ - const bool& operator[](size_t bufferIndex) const + const bool& operator[](BufferIndex bufferIndex) const { return mValue[bufferIndex]; } @@ -254,11 +250,14 @@ public: */ void Bake(BufferIndex bufferIndex, bool value) { - // check if the value actually changed to avoid dirtying nodes unnecessarily - if( mValue[bufferIndex] != value ) + // bake has to check the base value as current buffer value can be correct by constraint or something else + if(mBaseValue != value) { - mValue[bufferIndex] = value; mBaseValue = value; + // It's ok to bake both buffers as render is performed in same thread as update. Reading from event side + // has never been atomically safe. + mValue[bufferIndex] = value; + mValue[1 - bufferIndex] = value; OnBake(); } @@ -271,14 +270,13 @@ public: */ void BakeRelative(BufferIndex bufferIndex, bool delta) { - mValue[bufferIndex] += delta; - mBaseValue = mValue[bufferIndex]; + mValue[bufferIndex] = mValue[bufferIndex] || delta; + mBaseValue = mValue[bufferIndex]; OnBake(); } private: - // Undefined AnimatableProperty(const AnimatableProperty& property); @@ -286,64 +284,59 @@ private: AnimatableProperty& operator=(const AnimatableProperty& rhs); private: - - DoubleBuffered mValue; ///< The double-buffered property value - bool mBaseValue; ///< Reset to this base value at the beginning of each frame - + DoubleBuffered mValue; ///< The double-buffered property value + bool mBaseValue; ///< Reset to this base value at the beginning of each frame }; /** - * An float animatable property of a scene-graph object. + * An integer animatable property of a scene-graph object. */ -template <> -class AnimatableProperty : public AnimatablePropertyBase +template<> +class AnimatableProperty : public AnimatablePropertyBase { public: - /** * Create an animatable property. * @param [in] initialValue The initial value of the property. */ - AnimatableProperty( float initialValue ) - : mValue( initialValue ), - mBaseValue( initialValue ) + AnimatableProperty(int initialValue) + : mValue(initialValue), + mBaseValue(initialValue) { } /** * Virtual destructor. */ - virtual ~AnimatableProperty() - { - } + ~AnimatableProperty() override = default; /** * @copydoc Dali::Internal::SceneGraph::PropertyBase::GetType() */ - virtual Dali::Property::Type GetType() const + Dali::Property::Type GetType() const override { - return Dali::PropertyTypes::Get(); + return Dali::PropertyTypes::Get(); } /** * @copydoc Dali::Internal::SceneGraph::PropertyBase::ResetToBaseValue() */ - virtual void ResetToBaseValue(BufferIndex updateBufferIndex) + void ResetToBaseValue(BufferIndex updateBufferIndex) override { - if (CLEAN_FLAG != mDirtyFlags) + if(CLEAN_FLAG != mDirtyFlags) { mValue[updateBufferIndex] = mBaseValue; - mDirtyFlags = ( mDirtyFlags >> 1 ); + mDirtyFlags = (mDirtyFlags >> 1); } } /** - * @copydoc Dali::Internal::PropertyInputImpl::GetFloat() + * @copydoc Dali::Internal::PropertyInputImpl::GetInteger() */ - virtual const float& GetFloat( BufferIndex bufferIndex ) const + const int& GetInteger(BufferIndex bufferIndex) const override { - return mValue[ bufferIndex ]; + return mValue[bufferIndex]; } /** @@ -352,7 +345,7 @@ public: * @param[in] bufferIndex The buffer to write. * @param[in] value The new property value. */ - void Set(BufferIndex bufferIndex, float value) + void Set(BufferIndex bufferIndex, int value) { mValue[bufferIndex] = value; @@ -364,7 +357,7 @@ public: * @param[in] bufferIndex The buffer to write. * @param[in] delta The property will change by this amount. */ - void SetRelative(BufferIndex bufferIndex, float delta) + void SetRelative(BufferIndex bufferIndex, int delta) { mValue[bufferIndex] = mValue[bufferIndex] + delta; @@ -374,7 +367,7 @@ public: /** * @copydoc Dali::SceneGraph::AnimatableProperty::Get() */ - float& Get(size_t bufferIndex) + int& Get(BufferIndex bufferIndex) { return mValue[bufferIndex]; } @@ -382,7 +375,7 @@ public: /** * @copydoc Dali::SceneGraph::AnimatableProperty::Get() */ - const float& Get(size_t bufferIndex) const + const int& Get(BufferIndex bufferIndex) const { return mValue[bufferIndex]; } @@ -392,7 +385,7 @@ public: * @param[in] bufferIndex The buffer to read. * @return The property value. */ - float& operator[](size_t bufferIndex) + int& operator[](BufferIndex bufferIndex) { return mValue[bufferIndex]; } @@ -402,7 +395,7 @@ public: * @param[in] bufferIndex The buffer to read. * @return The property value. */ - const float& operator[](size_t bufferIndex) const + const int& operator[](BufferIndex bufferIndex) const { return mValue[bufferIndex]; } @@ -412,10 +405,11 @@ public: * @param[in] bufferIndex The buffer to write for the property value. * @param[in] value The new property value. */ - void Bake(BufferIndex bufferIndex, float value) + void Bake(BufferIndex bufferIndex, int value) { - mValue[bufferIndex] = value; - mBaseValue = mValue[bufferIndex]; + mValue[bufferIndex] = value; + mValue[1 - bufferIndex] = value; + mBaseValue = mValue[bufferIndex]; OnBake(); } @@ -425,10 +419,10 @@ public: * @param[in] bufferIndex The buffer to write for the local property value. * @param[in] delta The property will change by this amount. */ - void BakeRelative(BufferIndex bufferIndex, float delta) + void BakeRelative(BufferIndex bufferIndex, int delta) { mValue[bufferIndex] = mValue[bufferIndex] + delta; - mBaseValue = mValue[bufferIndex]; + mBaseValue = mValue[bufferIndex]; OnBake(); } @@ -438,7 +432,7 @@ public: * This should only be used when the owning object has not been connected to the scene-graph. * @param[in] value The new property value. */ - void SetInitial(const float& value) + void SetInitial(const int& value) { mValue[0] = value; mValue[1] = mValue[0]; @@ -450,15 +444,14 @@ public: * This should only be used when the owning object has not been connected to the scene-graph. * @param[in] delta The property will change by this amount. */ - void SetInitialRelative(const float& delta) + void SetInitialRelative(const int& delta) { - mValue[0] = mValue[0] + delta; - mValue[1] = mValue[0]; + mValue[0] = mValue[0] + delta; + mValue[1] = mValue[0]; mBaseValue = mValue[0]; } private: - // Undefined AnimatableProperty(const AnimatableProperty& property); @@ -466,64 +459,59 @@ private: AnimatableProperty& operator=(const AnimatableProperty& rhs); private: - - DoubleBuffered mValue; ///< The double-buffered property value - float mBaseValue; ///< Reset to this base value at the beginning of each frame - + DoubleBuffered mValue; ///< The double-buffered property value + int mBaseValue; ///< Reset to this base value at the beginning of each frame }; /** - * An integer animatable property of a scene-graph object. + * An float animatable property of a scene-graph object. */ -template <> -class AnimatableProperty : public AnimatablePropertyBase +template<> +class AnimatableProperty : public AnimatablePropertyBase { public: - /** * Create an animatable property. * @param [in] initialValue The initial value of the property. */ - AnimatableProperty( int initialValue ) - : mValue( initialValue ), - mBaseValue( initialValue ) + AnimatableProperty(float initialValue) + : mValue(initialValue), + mBaseValue(initialValue) { } /** * Virtual destructor. */ - virtual ~AnimatableProperty() - { - } + ~AnimatableProperty() override = default; /** * @copydoc Dali::Internal::SceneGraph::PropertyBase::GetType() */ - virtual Dali::Property::Type GetType() const + Dali::Property::Type GetType() const override { - return Dali::PropertyTypes::Get(); + return Dali::PropertyTypes::Get(); } /** * @copydoc Dali::Internal::SceneGraph::PropertyBase::ResetToBaseValue() */ - virtual void ResetToBaseValue(BufferIndex updateBufferIndex) + void ResetToBaseValue(BufferIndex updateBufferIndex) override { - if (CLEAN_FLAG != mDirtyFlags) + if(CLEAN_FLAG != mDirtyFlags) { mValue[updateBufferIndex] = mBaseValue; - mDirtyFlags = ( mDirtyFlags >> 1 ); + mDirtyFlags = (mDirtyFlags >> 1); } } /** - * @copydoc Dali::Internal::PropertyInputImpl::GetInteger() + * @copydoc Dali::Internal::PropertyInputImpl::GetFloat() */ - virtual const int& GetInteger( BufferIndex bufferIndex ) const + const float& GetFloat(BufferIndex bufferIndex) const override { - return mValue[ bufferIndex ]; + return mValue[bufferIndex]; } /** @@ -532,7 +520,7 @@ public: * @param[in] bufferIndex The buffer to write. * @param[in] value The new property value. */ - void Set(BufferIndex bufferIndex, int value) + void Set(BufferIndex bufferIndex, float value) { mValue[bufferIndex] = value; @@ -544,7 +532,7 @@ public: * @param[in] bufferIndex The buffer to write. * @param[in] delta The property will change by this amount. */ - void SetRelative(BufferIndex bufferIndex, int delta) + void SetRelative(BufferIndex bufferIndex, float delta) { mValue[bufferIndex] = mValue[bufferIndex] + delta; @@ -554,7 +542,7 @@ public: /** * @copydoc Dali::SceneGraph::AnimatableProperty::Get() */ - int& Get(size_t bufferIndex) + float& Get(BufferIndex bufferIndex) { return mValue[bufferIndex]; } @@ -562,7 +550,7 @@ public: /** * @copydoc Dali::SceneGraph::AnimatableProperty::Get() */ - const int& Get(size_t bufferIndex) const + const float& Get(BufferIndex bufferIndex) const { return mValue[bufferIndex]; } @@ -572,7 +560,7 @@ public: * @param[in] bufferIndex The buffer to read. * @return The property value. */ - int& operator[](size_t bufferIndex) + float& operator[](BufferIndex bufferIndex) { return mValue[bufferIndex]; } @@ -582,7 +570,7 @@ public: * @param[in] bufferIndex The buffer to read. * @return The property value. */ - const int& operator[](size_t bufferIndex) const + const float& operator[](BufferIndex bufferIndex) const { return mValue[bufferIndex]; } @@ -592,10 +580,13 @@ public: * @param[in] bufferIndex The buffer to write for the property value. * @param[in] value The new property value. */ - void Bake(BufferIndex bufferIndex, int value) + void Bake(BufferIndex bufferIndex, float value) { - mValue[bufferIndex] = value; - mBaseValue = mValue[bufferIndex]; + // It's ok to bake both buffers as render is performed in same thread as update. Reading from event side + // has never been atomically safe. + mValue[bufferIndex] = value; + mValue[1 - bufferIndex] = value; + mBaseValue = mValue[bufferIndex]; OnBake(); } @@ -605,10 +596,10 @@ public: * @param[in] bufferIndex The buffer to write for the local property value. * @param[in] delta The property will change by this amount. */ - void BakeRelative(BufferIndex bufferIndex, int delta) + void BakeRelative(BufferIndex bufferIndex, float delta) { mValue[bufferIndex] = mValue[bufferIndex] + delta; - mBaseValue = mValue[bufferIndex]; + mBaseValue = mValue[bufferIndex]; OnBake(); } @@ -618,7 +609,7 @@ public: * This should only be used when the owning object has not been connected to the scene-graph. * @param[in] value The new property value. */ - void SetInitial(const int& value) + void SetInitial(const float& value) { mValue[0] = value; mValue[1] = mValue[0]; @@ -630,15 +621,14 @@ public: * This should only be used when the owning object has not been connected to the scene-graph. * @param[in] delta The property will change by this amount. */ - void SetInitialRelative(const int& delta) + void SetInitialRelative(const float& delta) { - mValue[0] = mValue[0] + delta; - mValue[1] = mValue[0]; + mValue[0] = mValue[0] + delta; + mValue[1] = mValue[0]; mBaseValue = mValue[0]; } private: - // Undefined AnimatableProperty(const AnimatableProperty& property); @@ -646,41 +636,36 @@ private: AnimatableProperty& operator=(const AnimatableProperty& rhs); private: - - DoubleBuffered mValue; ///< The double-buffered property value - int mBaseValue; ///< Reset to this base value at the beginning of each frame - + DoubleBuffered mValue; ///< The double-buffered property value + float mBaseValue; ///< Reset to this base value at the beginning of each frame }; /** * An Vector2 animatable property of a scene-graph object. */ -template <> +template<> class AnimatableProperty : public AnimatablePropertyBase { public: - /** * Create an animatable property. * @param [in] initialValue The initial value of the property. */ - AnimatableProperty( const Vector2& initialValue ) - : mValue( initialValue ), - mBaseValue( initialValue ) + AnimatableProperty(const Vector2& initialValue) + : mValue(initialValue), + mBaseValue(initialValue) { } /** * Virtual destructor. */ - virtual ~AnimatableProperty() - { - } + ~AnimatableProperty() override = default; /** * @copydoc Dali::Internal::SceneGraph::PropertyBase::GetType() */ - virtual Dali::Property::Type GetType() const + Dali::Property::Type GetType() const override { return Dali::PropertyTypes::Get(); } @@ -688,22 +673,22 @@ public: /** * @copydoc Dali::Internal::SceneGraph::PropertyBase::ResetToBaseValue() */ - virtual void ResetToBaseValue(BufferIndex updateBufferIndex) + void ResetToBaseValue(BufferIndex updateBufferIndex) override { - if (CLEAN_FLAG != mDirtyFlags) + if(CLEAN_FLAG != mDirtyFlags) { mValue[updateBufferIndex] = mBaseValue; - mDirtyFlags = ( mDirtyFlags >> 1 ); + mDirtyFlags = (mDirtyFlags >> 1); } } /** * @copydoc Dali::PropertyInput::GetVector2() */ - virtual const Vector2& GetVector2( BufferIndex bufferIndex ) const + const Vector2& GetVector2(BufferIndex bufferIndex) const override { - return mValue[ bufferIndex ]; + return mValue[bufferIndex]; } /** @@ -720,6 +705,32 @@ public: } /** + * Set the property value. This will only persist for the current frame; the property + * will be reset with the base value, at the beginning of the next frame. + * @param[in] bufferIndex The buffer to write. + * @param[in] value The new X value. + */ + void SetX(BufferIndex bufferIndex, float value) + { + mValue[bufferIndex].x = value; + + OnSet(); + } + + /** + * Set the property value. This will only persist for the current frame; the property + * will be reset with the base value, at the beginning of the next frame. + * @param[in] bufferIndex The buffer to write. + * @param[in] value The new Y value. + */ + void SetY(BufferIndex bufferIndex, float value) + { + mValue[bufferIndex].y = value; + + OnSet(); + } + + /** * Change the property value by a relative amount. * @param[in] bufferIndex The buffer to write. * @param[in] delta The property will change by this amount. @@ -732,9 +743,33 @@ public: } /** + * Change the X value by a relative amount. + * @param[in] bufferIndex The buffer to write. + * @param[in] delta The X value will change by this amount. + */ + void SetXRelative(BufferIndex bufferIndex, float delta) + { + mValue[bufferIndex].x += delta; + + OnSet(); + } + + /** + * Change the Y value by a relative amount. + * @param[in] bufferIndex The buffer to write. + * @param[in] delta The Y value will change by this amount. + */ + void SetYRelative(BufferIndex bufferIndex, float delta) + { + mValue[bufferIndex].y += delta; + + OnSet(); + } + + /** * @copydoc Dali::SceneGraph::AnimatableProperty::Get() */ - Vector2& Get(size_t bufferIndex) + Vector2& Get(BufferIndex bufferIndex) { return mValue[bufferIndex]; } @@ -742,7 +777,7 @@ public: /** * @copydoc Dali::SceneGraph::AnimatableProperty::Get() */ - const Vector2& Get(size_t bufferIndex) const + const Vector2& Get(BufferIndex bufferIndex) const { return mValue[bufferIndex]; } @@ -752,7 +787,7 @@ public: * @param[in] bufferIndex The buffer to read. * @return The property value. */ - Vector2& operator[](size_t bufferIndex) + Vector2& operator[](BufferIndex bufferIndex) { return mValue[bufferIndex]; } @@ -762,7 +797,7 @@ public: * @param[in] bufferIndex The buffer to read. * @return The property value. */ - const Vector2& operator[](size_t bufferIndex) const + const Vector2& operator[](BufferIndex bufferIndex) const { return mValue[bufferIndex]; } @@ -774,8 +809,39 @@ public: */ void Bake(BufferIndex bufferIndex, const Vector2& value) { - mValue[bufferIndex] = value; - mBaseValue = value; + // It's ok to bake both buffers as render is performed in same thread as update. Reading from event side + // has never been atomically safe. + mValue[bufferIndex] = value; + mValue[1 - bufferIndex] = value; + mBaseValue = value; + + OnBake(); + } + + /** + * Set both the X value & base X value. + * @param[in] bufferIndex The buffer to write for the property value. + * @param[in] value The new property value. + */ + void BakeX(BufferIndex bufferIndex, float value) + { + mValue[bufferIndex].x = value; + mValue[1 - bufferIndex].x = value; + mBaseValue.x = value; + + OnBake(); + } + + /** + * Set both the Y value & base Y value. + * @param[in] bufferIndex The buffer to write for the property value. + * @param[in] value The new property value. + */ + void BakeY(BufferIndex bufferIndex, float value) + { + mValue[bufferIndex].y = value; + mValue[1 - bufferIndex].y = value; + mBaseValue.y = value; OnBake(); } @@ -793,8 +859,33 @@ public: OnBake(); } -private: + /** + * Change the X value & base X value by a relative amount. + * @param[in] bufferIndex The buffer to write for the local property value. + * @param[in] delta The X value will change by this amount. + */ + void BakeXRelative(BufferIndex bufferIndex, float delta) + { + mValue[bufferIndex].x += delta; + mBaseValue.x = mValue[bufferIndex].x; + + OnBake(); + } + + /** + * Change the Y value & base Y value by a relative amount. + * @param[in] bufferIndex The buffer to write for the local property value. + * @param[in] delta The Y value will change by this amount. + */ + void BakeYRelative(BufferIndex bufferIndex, float delta) + { + mValue[bufferIndex].y += delta; + mBaseValue.y = mValue[bufferIndex].y; + OnBake(); + } + +private: // Undefined AnimatableProperty(const AnimatableProperty& property); @@ -802,20 +893,17 @@ private: AnimatableProperty& operator=(const AnimatableProperty& rhs); private: - - DoubleBuffered mValue; ///< The double-buffered property value - Vector2 mBaseValue; ///< Reset to this base value at the beginning of each frame - + DoubleBuffered mValue; ///< The double-buffered property value + Vector2 mBaseValue; ///< Reset to this base value at the beginning of each frame }; /** * A Vector3 animatable property of a scene-graph object. */ -template <> +template<> class AnimatableProperty : public AnimatablePropertyBase { public: - /** * Create an animatable property. */ @@ -829,23 +917,21 @@ public: * Create an animatable property. * @param [in] initialValue The initial value of the property. */ - AnimatableProperty( const Vector3& initialValue ) - : mValue( initialValue ), - mBaseValue( initialValue ) + AnimatableProperty(const Vector3& initialValue) + : mValue(initialValue), + mBaseValue(initialValue) { } /** * Virtual destructor. */ - virtual ~AnimatableProperty() - { - } + ~AnimatableProperty() override = default; /** * @copydoc Dali::Internal::SceneGraph::PropertyBase::GetType() */ - virtual Dali::Property::Type GetType() const + Dali::Property::Type GetType() const override { return Dali::PropertyTypes::Get(); } @@ -853,22 +939,22 @@ public: /** * @copydoc Dali::Internal::SceneGraph::PropertyBase::ResetToBaseValue() */ - virtual void ResetToBaseValue(BufferIndex updateBufferIndex) + void ResetToBaseValue(BufferIndex updateBufferIndex) override { - if (CLEAN_FLAG != mDirtyFlags) + if(CLEAN_FLAG != mDirtyFlags) { mValue[updateBufferIndex] = mBaseValue; - mDirtyFlags = ( mDirtyFlags >> 1 ); + mDirtyFlags = (mDirtyFlags >> 1); } } /** * @copydoc Dali::PropertyInput::GetVector3() */ - virtual const Vector3& GetVector3( BufferIndex bufferIndex ) const + const Vector3& GetVector3(BufferIndex bufferIndex) const override { - return mValue[ bufferIndex ]; + return mValue[bufferIndex]; } /** @@ -974,7 +1060,7 @@ public: /** * @copydoc Dali::SceneGraph::AnimatableProperty::Get() */ - Vector3& Get(size_t bufferIndex) + Vector3& Get(BufferIndex bufferIndex) { return mValue[bufferIndex]; } @@ -982,7 +1068,7 @@ public: /** * @copydoc Dali::SceneGraph::AnimatableProperty::Get() */ - const Vector3& Get(size_t bufferIndex) const + const Vector3& Get(BufferIndex bufferIndex) const { return mValue[bufferIndex]; } @@ -992,7 +1078,7 @@ public: * @param[in] bufferIndex The buffer to read. * @return The property value. */ - Vector3& operator[](size_t bufferIndex) + Vector3& operator[](BufferIndex bufferIndex) { return mValue[bufferIndex]; } @@ -1002,7 +1088,7 @@ public: * @param[in] bufferIndex The buffer to read. * @return The property value. */ - const Vector3& operator[](size_t bufferIndex) const + const Vector3& operator[](BufferIndex bufferIndex) const { return mValue[bufferIndex]; } @@ -1014,8 +1100,9 @@ public: */ void Bake(BufferIndex bufferIndex, const Vector3& value) { - mValue[bufferIndex] = value; - mBaseValue = value; + mValue[bufferIndex] = value; + mValue[1 - bufferIndex] = value; + mBaseValue = value; OnBake(); } @@ -1027,8 +1114,9 @@ public: */ void BakeX(BufferIndex bufferIndex, float value) { - mValue[bufferIndex].x = value; - mBaseValue.x = value; + mValue[bufferIndex].x = value; + mValue[1 - bufferIndex].x = value; + mBaseValue.x = value; OnBake(); } @@ -1040,8 +1128,9 @@ public: */ void BakeY(BufferIndex bufferIndex, float value) { - mValue[bufferIndex].y = value; - mBaseValue.y = value; + mValue[bufferIndex].y = value; + mValue[1 - bufferIndex].y = value; + mBaseValue.y = value; OnBake(); } @@ -1053,8 +1142,9 @@ public: */ void BakeZ(BufferIndex bufferIndex, float value) { - mValue[bufferIndex].z = value; - mBaseValue.z = value; + mValue[bufferIndex].z = value; + mValue[1 - bufferIndex].z = value; + mBaseValue.z = value; OnBake(); } @@ -1125,7 +1215,6 @@ public: } private: - // Undefined AnimatableProperty(const AnimatableProperty& property); @@ -1133,41 +1222,36 @@ private: AnimatableProperty& operator=(const AnimatableProperty& rhs); private: - - DoubleBuffered mValue; ///< The double-buffered property value - Vector3 mBaseValue; ///< Reset to this base value at the beginning of each frame - + DoubleBuffered mValue; ///< The double-buffered property value + Vector3 mBaseValue; ///< Reset to this base value at the beginning of each frame }; /** * A Vector4 animatable property of a scene-graph object. */ -template <> +template<> class AnimatableProperty : public AnimatablePropertyBase { public: - /** * Create an animatable property. * @param [in] initialValue The initial value of the property. */ - AnimatableProperty( const Vector4& initialValue ) - : mValue( initialValue ), - mBaseValue( initialValue ) + AnimatableProperty(const Vector4& initialValue) + : mValue(initialValue), + mBaseValue(initialValue) { } /** * Virtual destructor. */ - virtual ~AnimatableProperty() - { - } + ~AnimatableProperty() override = default; /** * @copydoc Dali::Internal::SceneGraph::PropertyBase::GetType() */ - virtual Dali::Property::Type GetType() const + Dali::Property::Type GetType() const override { return Dali::PropertyTypes::Get(); } @@ -1175,22 +1259,22 @@ public: /** * @copydoc Dali::Internal::SceneGraph::PropertyBase::ResetToBaseValue() */ - virtual void ResetToBaseValue(BufferIndex updateBufferIndex) + void ResetToBaseValue(BufferIndex updateBufferIndex) override { - if (CLEAN_FLAG != mDirtyFlags) + if(CLEAN_FLAG != mDirtyFlags) { mValue[updateBufferIndex] = mBaseValue; - mDirtyFlags = ( mDirtyFlags >> 1 ); + mDirtyFlags = (mDirtyFlags >> 1); } } /** * @copydoc Dali::PropertyInput::GetVector4() */ - virtual const Vector4& GetVector4( BufferIndex bufferIndex ) const + const Vector4& GetVector4(BufferIndex bufferIndex) const override { - return mValue[ bufferIndex ]; + return mValue[bufferIndex]; } /** @@ -1321,7 +1405,7 @@ public: /** * @copydoc Dali::SceneGraph::AnimatableProperty::Get() */ - Vector4& Get(size_t bufferIndex) + Vector4& Get(BufferIndex bufferIndex) { return mValue[bufferIndex]; } @@ -1329,7 +1413,7 @@ public: /** * @copydoc Dali::SceneGraph::AnimatableProperty::Get() */ - const Vector4& Get(size_t bufferIndex) const + const Vector4& Get(BufferIndex bufferIndex) const { return mValue[bufferIndex]; } @@ -1339,7 +1423,7 @@ public: * @param[in] bufferIndex The buffer to read. * @return The property value. */ - Vector4& operator[](size_t bufferIndex) + Vector4& operator[](BufferIndex bufferIndex) { return mValue[bufferIndex]; } @@ -1349,7 +1433,7 @@ public: * @param[in] bufferIndex The buffer to read. * @return The property value. */ - const Vector4& operator[](size_t bufferIndex) const + const Vector4& operator[](BufferIndex bufferIndex) const { return mValue[bufferIndex]; } @@ -1361,8 +1445,9 @@ public: */ void Bake(BufferIndex bufferIndex, const Vector4& value) { - mValue[bufferIndex] = value; - mBaseValue = mValue[bufferIndex]; + mValue[bufferIndex] = value; + mValue[1 - bufferIndex] = value; + mBaseValue = mValue[bufferIndex]; OnBake(); } @@ -1374,8 +1459,9 @@ public: */ void BakeX(BufferIndex bufferIndex, float value) { - mValue[bufferIndex].x = value; - mBaseValue.x = mValue[bufferIndex].x; + mValue[bufferIndex].x = value; + mValue[1 - bufferIndex].x = value; + mBaseValue.x = mValue[bufferIndex].x; OnBake(); } @@ -1387,8 +1473,9 @@ public: */ void BakeY(BufferIndex bufferIndex, float value) { - mValue[bufferIndex].y = value; - mBaseValue.y = mValue[bufferIndex].y; + mValue[bufferIndex].y = value; + mValue[1 - bufferIndex].y = value; + mBaseValue.y = mValue[bufferIndex].y; OnBake(); } @@ -1400,8 +1487,9 @@ public: */ void BakeZ(BufferIndex bufferIndex, float value) { - mValue[bufferIndex].z = value; - mBaseValue.z = mValue[bufferIndex].z; + mValue[bufferIndex].z = value; + mValue[1 - bufferIndex].z = value; + mBaseValue.z = mValue[bufferIndex].z; OnBake(); } @@ -1413,8 +1501,9 @@ public: */ void BakeW(BufferIndex bufferIndex, float value) { - mValue[bufferIndex].w = value; - mBaseValue.w = mValue[bufferIndex].w; + mValue[bufferIndex].w = value; + mValue[1 - bufferIndex].w = value; + mBaseValue.w = mValue[bufferIndex].w; OnBake(); } @@ -1427,7 +1516,7 @@ public: void BakeRelative(BufferIndex bufferIndex, const Vector4& delta) { mValue[bufferIndex] = mValue[bufferIndex] + delta; - mBaseValue = mValue[bufferIndex]; + mBaseValue = mValue[bufferIndex]; OnBake(); } @@ -1440,7 +1529,7 @@ public: void BakeXRelative(BufferIndex bufferIndex, float delta) { mValue[bufferIndex].x = mValue[bufferIndex].x + delta; - mBaseValue.x = mValue[bufferIndex].x; + mBaseValue.x = mValue[bufferIndex].x; OnBake(); } @@ -1453,7 +1542,7 @@ public: void BakeYRelative(BufferIndex bufferIndex, float delta) { mValue[bufferIndex].y = mValue[bufferIndex].y + delta; - mBaseValue.y = mValue[bufferIndex].y; + mBaseValue.y = mValue[bufferIndex].y; OnBake(); } @@ -1466,7 +1555,7 @@ public: void BakeZRelative(BufferIndex bufferIndex, float delta) { mValue[bufferIndex].z = mValue[bufferIndex].z + delta; - mBaseValue.z = mValue[bufferIndex].z; + mBaseValue.z = mValue[bufferIndex].z; OnBake(); } @@ -1479,7 +1568,7 @@ public: void BakeWRelative(BufferIndex bufferIndex, float delta) { mValue[bufferIndex].w = mValue[bufferIndex].w + delta; - mBaseValue.w = mValue[bufferIndex].w; + mBaseValue.w = mValue[bufferIndex].w; OnBake(); } @@ -1497,7 +1586,6 @@ public: } private: - // Undefined AnimatableProperty(const AnimatableProperty& property); @@ -1505,19 +1593,16 @@ private: AnimatableProperty& operator=(const AnimatableProperty& rhs); private: - - DoubleBuffered mValue; ///< The double-buffered property value - Vector4 mBaseValue; ///< Reset to this base value at the beginning of each frame - + DoubleBuffered mValue; ///< The double-buffered property value + Vector4 mBaseValue; ///< Reset to this base value at the beginning of each frame }; /** * An Quaternion animatable property of a scene-graph object. */ -template <> +template<> class AnimatableProperty : public AnimatablePropertyBase { public: - /** * Create an animatable property. */ @@ -1531,23 +1616,21 @@ public: * Create an animatable property. * @param [in] initialValue The initial value of the property. */ - AnimatableProperty( const Quaternion& initialValue ) - : mValue( initialValue ), - mBaseValue( initialValue ) + AnimatableProperty(const Quaternion& initialValue) + : mValue(initialValue), + mBaseValue(initialValue) { } /** * Virtual destructor. */ - virtual ~AnimatableProperty() - { - } + ~AnimatableProperty() override = default; /** * @copydoc Dali::Internal::SceneGraph::PropertyBase::GetType() */ - virtual Dali::Property::Type GetType() const + Dali::Property::Type GetType() const override { return Dali::PropertyTypes::Get(); } @@ -1555,22 +1638,22 @@ public: /** * @copydoc Dali::Internal::SceneGraph::PropertyBase::ResetToBaseValue() */ - virtual void ResetToBaseValue(BufferIndex updateBufferIndex) + void ResetToBaseValue(BufferIndex updateBufferIndex) override { - if (CLEAN_FLAG != mDirtyFlags) + if(CLEAN_FLAG != mDirtyFlags) { mValue[updateBufferIndex] = mBaseValue; - mDirtyFlags = ( mDirtyFlags >> 1 ); + mDirtyFlags = (mDirtyFlags >> 1); } } /** * @copydoc Dali::PropertyInput::GetQuaternion() */ - virtual const Quaternion& GetQuaternion( BufferIndex bufferIndex ) const + const Quaternion& GetQuaternion(BufferIndex bufferIndex) const override { - return mValue[ bufferIndex ]; + return mValue[bufferIndex]; } /** @@ -1601,7 +1684,7 @@ public: /** * @copydoc Dali::SceneGraph::AnimatableProperty::Get() */ - Quaternion& Get(size_t bufferIndex) + Quaternion& Get(BufferIndex bufferIndex) { return mValue[bufferIndex]; } @@ -1609,7 +1692,7 @@ public: /** * @copydoc Dali::SceneGraph::AnimatableProperty::Get() */ - const Quaternion& Get(size_t bufferIndex) const + const Quaternion& Get(BufferIndex bufferIndex) const { return mValue[bufferIndex]; } @@ -1619,7 +1702,7 @@ public: * @param[in] bufferIndex The buffer to read. * @return The property value. */ - Quaternion& operator[](size_t bufferIndex) + Quaternion& operator[](BufferIndex bufferIndex) { return mValue[bufferIndex]; } @@ -1629,7 +1712,7 @@ public: * @param[in] bufferIndex The buffer to read. * @return The property value. */ - const Quaternion& operator[](size_t bufferIndex) const + const Quaternion& operator[](BufferIndex bufferIndex) const { return mValue[bufferIndex]; } @@ -1641,8 +1724,11 @@ public: */ void Bake(BufferIndex bufferIndex, const Quaternion& value) { - mValue[bufferIndex] = value; - mBaseValue = value; + // It's ok to bake both buffers as render is performed in same thread as update. Reading from event side + // has never been atomically safe. + mValue[bufferIndex] = value; + mValue[1 - bufferIndex] = value; + mBaseValue = value; OnBake(); } @@ -1661,7 +1747,6 @@ public: } private: - // Undefined AnimatableProperty(const AnimatableProperty& property); @@ -1669,41 +1754,36 @@ private: AnimatableProperty& operator=(const AnimatableProperty& rhs); private: - - DoubleBuffered mValue; ///< The double-buffered property value - Quaternion mBaseValue; ///< Reset to this base value at the beginning of each frame - + DoubleBuffered mValue; ///< The double-buffered property value + Quaternion mBaseValue; ///< Reset to this base value at the beginning of each frame }; /** * A Matrix animatable property of a scene-graph object. */ -template <> +template<> class AnimatableProperty : public AnimatablePropertyBase { public: - /** * Create an animatable property. * @param [in] initialValue The initial value of the property. */ - AnimatableProperty( const Matrix& initialValue ) - : mValue( initialValue ), - mBaseValue( initialValue ) + AnimatableProperty(const Matrix& initialValue) + : mValue(initialValue), + mBaseValue(initialValue) { } /** * Virtual destructor. */ - virtual ~AnimatableProperty() - { - } + ~AnimatableProperty() override = default; /** * @copydoc Dali::Internal::SceneGraph::PropertyBase::GetType() */ - virtual Dali::Property::Type GetType() const + Dali::Property::Type GetType() const override { return Dali::PropertyTypes::Get(); } @@ -1711,22 +1791,22 @@ public: /** * @copydoc Dali::Internal::SceneGraph::PropertyBase::ResetToBaseValue() */ - virtual void ResetToBaseValue(BufferIndex updateBufferIndex) + void ResetToBaseValue(BufferIndex updateBufferIndex) override { - if (CLEAN_FLAG != mDirtyFlags) + if(CLEAN_FLAG != mDirtyFlags) { mValue[updateBufferIndex] = mBaseValue; - mDirtyFlags = ( mDirtyFlags >> 1 ); + mDirtyFlags = (mDirtyFlags >> 1); } } /** * @copydoc Dali::Internal::PropertyInputImpl::GetMatrix() */ - virtual const Matrix& GetMatrix( BufferIndex bufferIndex ) const + const Matrix& GetMatrix(BufferIndex bufferIndex) const override { - return mValue[ bufferIndex ]; + return mValue[bufferIndex]; } /** @@ -1741,7 +1821,6 @@ public: OnSet(); } - /** * Change the property value by a relative amount. * @param[in] bufferIndex The buffer to write. @@ -1750,7 +1829,7 @@ public: void SetRelative(BufferIndex bufferIndex, const Matrix& delta) { Matrix temp; - Matrix::Multiply(temp, mValue[bufferIndex], delta); + MatrixUtils::Multiply(temp, mValue[bufferIndex], delta); mValue[bufferIndex] = temp; OnSet(); @@ -1759,7 +1838,7 @@ public: /** * @copydoc Dali::SceneGraph::AnimatableProperty::Get() */ - Matrix& Get(size_t bufferIndex) + Matrix& Get(BufferIndex bufferIndex) { return mValue[bufferIndex]; } @@ -1767,7 +1846,7 @@ public: /** * @copydoc Dali::SceneGraph::AnimatableProperty::Get() */ - const Matrix& Get(size_t bufferIndex) const + const Matrix& Get(BufferIndex bufferIndex) const { return mValue[bufferIndex]; } @@ -1777,7 +1856,7 @@ public: * @param[in] bufferIndex The buffer to read. * @return The property value. */ - Matrix& operator[](size_t bufferIndex) + Matrix& operator[](BufferIndex bufferIndex) { return mValue[bufferIndex]; } @@ -1787,7 +1866,7 @@ public: * @param[in] bufferIndex The buffer to read. * @return The property value. */ - const Matrix& operator[](size_t bufferIndex) const + const Matrix& operator[](BufferIndex bufferIndex) const { return mValue[bufferIndex]; } @@ -1799,8 +1878,11 @@ public: */ void Bake(BufferIndex bufferIndex, const Matrix& value) { - mValue[bufferIndex] = value; - mBaseValue = mValue[bufferIndex]; + // It's ok to bake both buffers as render is performed in same thread as update. Reading from event side + // has never been atomically safe. + mValue[bufferIndex] = value; + mValue[1 - bufferIndex] = value; + mBaseValue = mValue[bufferIndex]; OnBake(); } @@ -1813,15 +1895,14 @@ public: void BakeRelative(BufferIndex bufferIndex, const Matrix& delta) { Matrix temp; - Matrix::Multiply(temp, mValue[bufferIndex], delta); + MatrixUtils::Multiply(temp, mValue[bufferIndex], delta); mValue[bufferIndex] = temp; - mBaseValue = temp; + mBaseValue = temp; OnBake(); } private: - // Undefined AnimatableProperty(const AnimatableProperty& property); @@ -1829,41 +1910,36 @@ private: AnimatableProperty& operator=(const AnimatableProperty& rhs); private: - - DoubleBuffered mValue; ///< The double-buffered property value - Matrix mBaseValue; ///< Reset to this base value at the beginning of each frame - + DoubleBuffered mValue; ///< The double-buffered property value + Matrix mBaseValue; ///< Reset to this base value at the beginning of each frame }; /** * A Matrix3 animatable property of a scene-graph object. */ -template <> +template<> class AnimatableProperty : public AnimatablePropertyBase { public: - /** * Create an animatable property. * @param [in] initialValue The initial value of the property. */ - AnimatableProperty( const Matrix3& initialValue ) - : mValue( initialValue ), - mBaseValue( initialValue ) + AnimatableProperty(const Matrix3& initialValue) + : mValue(initialValue), + mBaseValue(initialValue) { } /** * Virtual destructor. */ - virtual ~AnimatableProperty() - { - } + ~AnimatableProperty() override = default; /** * @copydoc Dali::Internal::SceneGraph::PropertyBase::GetType() */ - virtual Dali::Property::Type GetType() const + Dali::Property::Type GetType() const override { return Dali::PropertyTypes::Get(); } @@ -1871,22 +1947,22 @@ public: /** * @copydoc Dali::Internal::SceneGraph::PropertyBase::ResetToBaseValue() */ - virtual void ResetToBaseValue(BufferIndex updateBufferIndex) + void ResetToBaseValue(BufferIndex updateBufferIndex) override { - if (CLEAN_FLAG != mDirtyFlags) + if(CLEAN_FLAG != mDirtyFlags) { mValue[updateBufferIndex] = mBaseValue; - mDirtyFlags = ( mDirtyFlags >> 1 ); + mDirtyFlags = (mDirtyFlags >> 1); } } /** * @copydoc Dali::Internal::PropertyInputImpl::GetMatrix3() */ - virtual const Matrix3& GetMatrix3( BufferIndex bufferIndex ) const + const Matrix3& GetMatrix3(BufferIndex bufferIndex) const override { - return mValue[ bufferIndex ]; + return mValue[bufferIndex]; } /** @@ -1909,7 +1985,7 @@ public: void SetRelative(BufferIndex bufferIndex, const Matrix3& delta) { Matrix3 temp; - Matrix3::Multiply(temp, mValue[bufferIndex], delta); + MatrixUtils::Multiply(temp, mValue[bufferIndex], delta); mValue[bufferIndex] = temp; OnSet(); } @@ -1917,7 +1993,7 @@ public: /** * @copydoc Dali::SceneGraph::AnimatableProperty::Get() */ - Matrix3& Get(size_t bufferIndex) + Matrix3& Get(BufferIndex bufferIndex) { return mValue[bufferIndex]; } @@ -1925,7 +2001,7 @@ public: /** * @copydoc Dali::SceneGraph::AnimatableProperty::Get() */ - const Matrix3& Get(size_t bufferIndex) const + const Matrix3& Get(BufferIndex bufferIndex) const { return mValue[bufferIndex]; } @@ -1935,7 +2011,7 @@ public: * @param[in] bufferIndex The buffer to read. * @return The property value. */ - Matrix3& operator[](size_t bufferIndex) + Matrix3& operator[](BufferIndex bufferIndex) { return mValue[bufferIndex]; } @@ -1945,7 +2021,7 @@ public: * @param[in] bufferIndex The buffer to read. * @return The property value. */ - const Matrix3& operator[](size_t bufferIndex) const + const Matrix3& operator[](BufferIndex bufferIndex) const { return mValue[bufferIndex]; } @@ -1957,8 +2033,11 @@ public: */ void Bake(BufferIndex bufferIndex, const Matrix3& value) { - mValue[bufferIndex] = value; - mBaseValue = mValue[bufferIndex]; + // It's ok to bake both buffers as render is performed in same thread as update. Reading from event side + // has never been atomically safe. + mValue[bufferIndex] = value; + mValue[1 - bufferIndex] = value; + mBaseValue = mValue[bufferIndex]; OnBake(); } @@ -1971,15 +2050,14 @@ public: void BakeRelative(BufferIndex bufferIndex, const Matrix3& delta) { Matrix3 temp; - Matrix3::Multiply(temp, mValue[bufferIndex], delta); + MatrixUtils::Multiply(temp, mValue[bufferIndex], delta); mValue[bufferIndex] = temp; - mBaseValue = temp; + mBaseValue = temp; OnBake(); } private: - // Undefined AnimatableProperty(const AnimatableProperty& property); @@ -1987,114 +2065,14 @@ private: AnimatableProperty& operator=(const AnimatableProperty& rhs); private: - - DoubleBuffered mValue; ///< The double-buffered property value - Matrix3 mBaseValue; ///< Reset to this base value at the beginning of each frame - + DoubleBuffered mValue; ///< The double-buffered property value + Matrix3 mBaseValue; ///< Reset to this base value at the beginning of each frame }; } // namespace SceneGraph -// Messages for AnimatableProperty - -template -void BakeMessage( EventToUpdate& eventToUpdate, - const SceneGraph::AnimatableProperty& property, - typename ParameterType< T >::PassingType newValue ) -{ - typedef MessageDoubleBuffered1< SceneGraph::AnimatableProperty, T > LocalType; - - // Reserve some memory inside the message queue - unsigned int* slot = eventToUpdate.ReserveMessageSlot( sizeof( LocalType ) ); - - // Construct message in the message queue memory; note that delete should not be called on the return value - new (slot) LocalType( &property, - &SceneGraph::AnimatableProperty::Bake, - newValue ); -} - -template -void BakeRelativeMessage( EventToUpdate& eventToUpdate, - const SceneGraph::AnimatableProperty& property, - const T& delta ) -{ - typedef MessageDoubleBuffered1< SceneGraph::AnimatableProperty, const T& > LocalType; - - // Reserve some memory inside the message queue - unsigned int* slot = eventToUpdate.ReserveMessageSlot( sizeof( LocalType ) ); - - // Construct message in the message queue memory; note that delete should not be called on the return value - new (slot) LocalType( &property, - &SceneGraph::AnimatableProperty::BakeRelative, - delta ); -} - -template -void SetXComponentMessage( EventToUpdate& eventToUpdate, - const SceneGraph::AnimatableProperty& property, - typename ParameterType< float >::PassingType newValue ) -{ - typedef MessageDoubleBuffered1< SceneGraph::AnimatableProperty, float > LocalType; - - // Reserve some memory inside the message queue - unsigned int* slot = eventToUpdate.ReserveMessageSlot( sizeof( LocalType ) ); - - // Construct message in the message queue memory; note that delete should not be called on the return value - new (slot) LocalType( &property, - &SceneGraph::AnimatableProperty::BakeX, - newValue ); -} - -template -void SetYComponentMessage( EventToUpdate& eventToUpdate, - const SceneGraph::AnimatableProperty& property, - typename ParameterType< float >::PassingType newValue ) -{ - typedef MessageDoubleBuffered1< SceneGraph::AnimatableProperty, float > LocalType; - - // Reserve some memory inside the message queue - unsigned int* slot = eventToUpdate.ReserveMessageSlot( sizeof( LocalType ) ); - - // Construct message in the message queue memory; note that delete should not be called on the return value - new (slot) LocalType( &property, - &SceneGraph::AnimatableProperty::BakeY, - newValue ); -} - -template -void SetZComponentMessage( EventToUpdate& eventToUpdate, - const SceneGraph::AnimatableProperty& property, - typename ParameterType< float >::PassingType newValue ) -{ - typedef MessageDoubleBuffered1< SceneGraph::AnimatableProperty, float > LocalType; - - // Reserve some memory inside the message queue - unsigned int* slot = eventToUpdate.ReserveMessageSlot( sizeof( LocalType ) ); - - // Construct message in the message queue memory; note that delete should not be called on the return value - new (slot) LocalType( &property, - &SceneGraph::AnimatableProperty::BakeZ, - newValue ); -} - -template -void SetWComponentMessage( EventToUpdate& eventToUpdate, - const SceneGraph::AnimatableProperty& property, - typename ParameterType< float >::PassingType newValue ) -{ - typedef MessageDoubleBuffered1< SceneGraph::AnimatableProperty, float > LocalType; - - // Reserve some memory inside the message queue - unsigned int* slot = eventToUpdate.ReserveMessageSlot( sizeof( LocalType ) ); - - // Construct message in the message queue memory; note that delete should not be called on the return value - new (slot) LocalType( &property, - &SceneGraph::AnimatableProperty::BakeW, - newValue ); -} - } // namespace Internal } // namespace Dali -#endif // __DALI_INTERNAL_SCENE_GRAPH_ANIMATABLE_PROPERTY_H__ +#endif // DALI_INTERNAL_SCENE_GRAPH_ANIMATABLE_PROPERTY_H