X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fupdate%2Fcommon%2Fproperty-owner.h;h=637d82b6aaef14499fcdcfdc510f9db6ffc5a683;hb=b43741a90b40ca9dfbd33d6a9d390d3c09230e89;hp=9e68bd2ead9794fbaa9c3b79e8e22c95d3e7d605;hpb=ce20e9f082e811130930d13c9e9edc1da4ce1013;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/update/common/property-owner.h b/dali/internal/update/common/property-owner.h old mode 100644 new mode 100755 index 9e68bd2..637d82b --- a/dali/internal/update/common/property-owner.h +++ b/dali/internal/update/common/property-owner.h @@ -1,33 +1,33 @@ -#ifndef __DALI_INTERNAL_SCENE_GRAPH_PROPERTY_OWNER_H__ -#define __DALI_INTERNAL_SCENE_GRAPH_PROPERTY_OWNER_H__ - -// -// Copyright (c) 2014 Samsung Electronics Co., Ltd. -// -// Licensed under the Flora License, Version 1.0 (the License); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://floralicense.org/license/ -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an AS IS BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -// EXTERNAL INCLUDES -#include +#ifndef DALI_INTERNAL_SCENE_GRAPH_PROPERTY_OWNER_H +#define DALI_INTERNAL_SCENE_GRAPH_PROPERTY_OWNER_H + +/* + * Copyright (c) 2019 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. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ // INTERNAL INCLUDES #include +#include #include -#include #include #include +#include #include + namespace Dali { @@ -39,14 +39,11 @@ namespace SceneGraph class PropertyOwner; -typedef std::set PropertyOwnerSet; -typedef PropertyOwnerSet::iterator PropertyOwnerIter; - typedef OwnerContainer< PropertyBase* > OwnedPropertyContainer; typedef OwnedPropertyContainer::Iterator OwnedPropertyIter; /** - * Base for scene-graph objects which own properties. + * An update-thread object which own properties. * This allows observers to track the lifetime of the object & its properties. */ class PropertyOwner @@ -58,12 +55,42 @@ public: public: /** + * Called when the observable object is connected to the scene graph. + * @param[in] owner A reference to the connected PropertyOwner + */ + virtual void PropertyOwnerConnected( PropertyOwner& owner ) = 0; + + /** + * Called when the observable object is disconnected from the scene graph. + * @param[in] currentBufferIndex The buffer to reset. + * @param[in] owner A reference to the disconnected PropertyOwner + */ + virtual void PropertyOwnerDisconnected( BufferIndex updateBufferIndex, PropertyOwner& owner ) = 0; + + /** * Called shortly before the observable object is destroyed. + * + * @note Cleanup should be done in both this and PropertyOwnerDisconnected as PropertyOwnerDisconnected + * may not be called (i.e. when shutting down). */ virtual void PropertyOwnerDestroyed( PropertyOwner& owner ) = 0; + + protected: + + /** + * Virtual destructor, no deletion through this interface + */ + virtual ~Observer() {} + }; /** + * Create a property owner. + * @return A newly allocated object. + */ + static PropertyOwner* New(); + + /** * Virtual destructor; this is intended as a base class. */ virtual ~PropertyOwner(); @@ -90,17 +117,30 @@ public: bool IsObserved(); /** - * Disconnect all observers and remove constraints. + * Called just before destruction to disconnect all observers and remove constraints. + * This occurs when the object is in the process of being destroyed. + */ + void Destroy(); + + /** + * Notify all observers that the object has been connected + * This occurs when the object is connected to the scene-graph during UpdateManager::Update(). + */ + void ConnectToSceneGraph(); + + /** + * Notify all observers that the object has been disconnected and remove constraints. * This occurs when the object is disconnected from the scene-graph during UpdateManager::Update(). + * @param[in] currentBufferIndex The current update buffer. */ - void DisconnectFromSceneGraph(); + void DisconnectFromSceneGraph( BufferIndex updateBufferIndex ); /** * Install a custom property. * @post The PropertyOwner takes ownership of the property. * @param[in] property A pointer to a newly allocated property. */ - void InstallCustomProperty(PropertyBase* property); + void InstallCustomProperty( OwnerPointer& property ); /** * Retrieve the custom properties owned by the object. @@ -120,12 +160,6 @@ public: return mCustomProperties; } - /** - * Reset animatable properties to the corresponding base values. - * @param[in] currentBufferIndex The buffer to reset. - * @post The ResetDefaultProperties method is called, during which derived classes can reset default properties. - */ - void ResetToBaseValues( BufferIndex updateBufferIndex ); // Constraints @@ -133,7 +167,7 @@ public: * Apply a constraint. * @param[in] constraint The constraint to apply. */ - void ApplyConstraint( ConstraintBase* constraint ); + void ApplyConstraint( OwnerPointer& constraint ); /** * Begin removal of constraints. @@ -147,6 +181,44 @@ public: */ ConstraintOwnerContainer& GetConstraints(); + /** + * @copydoc UniformMap::Add + */ + virtual void AddUniformMapping( OwnerPointer< UniformPropertyMapping >& map ); + + /** + * @copydoc UniformMap::Remove + */ + virtual void RemoveUniformMapping( const std::string& uniformName ); + + /** + * Get the mappings table + */ + const UniformMap& GetUniformMap() const; + + /** + * @copydoc UniformMap::AddUniformMapObserver + */ + void AddUniformMapObserver( UniformMap::Observer& observer ); + + /** + * @copydoc UniformMap::RemoveUniformMapObserver + */ + void RemoveUniformMapObserver( UniformMap::Observer& observer ); + + /** + * Set whether property has changed to run following a render. + * @param[in] value Set to true if the property has changed + */ + virtual void SetPropertyDirty( bool value ); + + /** + * Query the property status following rendering of a frame. + * @return True if the property has changed + */ + virtual bool IsPropertyDirty() const; + + protected: /** @@ -162,15 +234,11 @@ private: // Undefined PropertyOwner& operator=(const PropertyOwner& rhs); - /** - * Called after ResetToBaseValues; derived classes should reset any default properties. - * @param[in] currentBufferIndex The buffer to reset. - */ - virtual void ResetDefaultProperties( BufferIndex updateBufferIndex ) = 0; - protected: OwnedPropertyContainer mCustomProperties; ///< Properties provided with InstallCustomProperty() + UniformMap mUniformMaps; ///< Container of owned uniform maps + bool mPropertyDirty:1; ///< Required for marking it dirty in case of partial update. private: @@ -181,7 +249,6 @@ private: ObserverContainer mObservers; ///< Container of observer raw-pointers (not owned) ConstraintOwnerContainer mConstraints; ///< Container of owned constraints - }; } // namespace SceneGraph @@ -190,4 +257,4 @@ private: } // namespace Dali -#endif // __DALI_INTERNAL_SCENE_GRAPH_PROPERTY_OWNER_H__ +#endif // DALI_INTERNAL_SCENE_GRAPH_PROPERTY_OWNER_H