/*
- * 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.
#include <algorithm>
// INTERNAL INCLUDES
-#include <dali/public-api/common/dali-common.h>
+#include <dali/internal/common/const-string.h>
#include <dali/internal/update/animation/scene-graph-constraint-base.h>
+#include <dali/public-api/common/dali-common.h>
namespace Dali
{
-
namespace Internal
{
-
namespace SceneGraph
{
-
PropertyOwner* PropertyOwner::New()
{
return new PropertyOwner();
void PropertyOwner::AddObserver(Observer& observer)
{
//Check for duplicates in debug builds
- DALI_ASSERT_DEBUG( mObservers.End() == std::find( mObservers.Begin(), mObservers.End(), &observer ) );
+ DALI_ASSERT_DEBUG(mObservers.End() == std::find(mObservers.Begin(), mObservers.End(), &observer));
- mObservers.PushBack( &observer );
+ mObservers.PushBack(&observer);
}
void PropertyOwner::RemoveObserver(Observer& observer)
{
// Find the observer...
- const ConstObserverIter endIter = mObservers.End();
- for( ObserverIter iter = mObservers.Begin(); iter != endIter; ++iter)
+ const ConstObserverIter endIter = mObservers.End();
+ for(ObserverIter iter = mObservers.Begin(); iter != endIter; ++iter)
{
- if( (*iter) == &observer)
+ if((*iter) == &observer)
{
// erase it
mObservers.Erase(iter);
{
// Notification for observers
const ConstObserverIter endIter = mObservers.End();
- for( ConstObserverIter iter = mObservers.Begin(); iter != endIter; ++iter)
+ for(ConstObserverIter iter = mObservers.Begin(); iter != endIter; ++iter)
{
(*iter)->PropertyOwnerDestroyed(*this);
}
void PropertyOwner::ConnectToSceneGraph()
{
+ mIsConnectedToSceneGraph = true;
+ SetUpdated(true);
+
// Notification for observers
const ConstObserverIter endIter = mObservers.End();
- for( ConstObserverIter iter = mObservers.Begin(); iter != endIter; ++iter)
+ for(ConstObserverIter iter = mObservers.Begin(); iter != endIter; ++iter)
{
- (*iter)->PropertyOwnerConnected( *this );
+ (*iter)->PropertyOwnerConnected(*this);
}
}
-void PropertyOwner::DisconnectFromSceneGraph( BufferIndex updateBufferIndex )
+void PropertyOwner::DisconnectFromSceneGraph(BufferIndex updateBufferIndex)
{
+ mIsConnectedToSceneGraph = false;
+
// Notification for observers
const ConstObserverIter endIter = mObservers.End();
- for( ConstObserverIter iter = mObservers.Begin(); iter != endIter; ++iter)
+ for(ConstObserverIter iter = mObservers.Begin(); iter != endIter; ++iter)
{
- (*iter)->PropertyOwnerDisconnected( updateBufferIndex, *this );
+ (*iter)->PropertyOwnerDisconnected(updateBufferIndex, *this);
}
// Remove all constraints when disconnected from scene-graph
mConstraints.Clear();
}
-void PropertyOwner::InstallCustomProperty(PropertyBase* property)
+void PropertyOwner::ReserveProperties(int propertyCount)
{
- DALI_ASSERT_DEBUG( NULL != property );
-
- mCustomProperties.PushBack( property );
+ mCustomProperties.Reserve(propertyCount);
}
-void PropertyOwner::ResetToBaseValues( BufferIndex updateBufferIndex )
+void PropertyOwner::InstallCustomProperty(OwnerPointer<PropertyBase>& property)
{
- // Reset custom properties
- const OwnedPropertyIter endIter = mCustomProperties.End();
- for ( OwnedPropertyIter iter = mCustomProperties.Begin(); endIter != iter; ++iter )
- {
- (*iter)->ResetToBaseValue( updateBufferIndex );
- }
-
- // Notification for derived classes, to reset default properties
- ResetDefaultProperties( updateBufferIndex );
+ mCustomProperties.PushBack(property.Release());
}
ConstraintOwnerContainer& PropertyOwner::GetConstraints()
return mConstraints;
}
-void PropertyOwner::ApplyConstraint( ConstraintBase* constraint )
+void PropertyOwner::ApplyConstraint(OwnerPointer<ConstraintBase>& constraint)
{
- mConstraints.PushBack( constraint );
-
constraint->OnConnect();
+ mConstraints.PushBack(constraint.Release());
}
-void PropertyOwner::RemoveConstraint( ConstraintBase* constraint )
+void PropertyOwner::RemoveConstraint(ConstraintBase* constraint)
{
const ConstraintIter constraintEndIter = mConstraints.End();
- for( ConstraintIter iter = mConstraints.Begin(); constraintEndIter != iter; ++iter )
+ for(ConstraintIter iter = mConstraints.Begin(); constraintEndIter != iter; ++iter)
{
- if ( *iter == constraint )
+ if(*iter == constraint)
{
- mConstraints.Erase( iter );
+ mConstraints.Erase(iter);
return; // We're finished
}
}
- // Should not come here
- DALI_ASSERT_DEBUG( false && "Constraint missing in RemoveConstraint" );
+ //it may be that the constraint has already been removed e.g. from disconnection from scene graph, so nothing needs to be done
}
PropertyOwner::PropertyOwner()
+: mUpdated(false),
+ mIsConnectedToSceneGraph(false)
+{
+}
+
+void PropertyOwner::AddUniformMapping(const UniformPropertyMapping& map)
+{
+ mUniformMaps.Add(map);
+ OnMappingChanged();
+}
+
+void PropertyOwner::RemoveUniformMapping(const ConstString& uniformName)
+{
+ mUniformMaps.Remove(uniformName);
+ OnMappingChanged();
+}
+
+const UniformMap& PropertyOwner::GetUniformMap() const
{
+ return mUniformMaps;
}
} // namespace SceneGraph