/*
- * Copyright (c) 2021 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.
VectorAnimationManager::~VectorAnimationManager()
{
- for(auto&& iter : mEventCallbacks)
- {
- delete iter;
- }
mEventCallbacks.clear();
- if(mProcessorRegistered)
+ if(mProcessorRegistered && Adaptor::IsAvailable())
{
- Adaptor::Get().UnregisterProcessor(*this);
+ Adaptor::Get().UnregisterProcessor(*this, true);
}
for(auto observer : mLifecycleObservers)
void VectorAnimationManager::RegisterEventCallback(CallbackBase* callback)
{
- mEventCallbacks.push_back(callback);
+ mEventCallbacks.emplace_back(std::unique_ptr<Dali::CallbackBase>(callback));
if(!mProcessorRegistered)
{
- Adaptor::Get().RegisterProcessor(*this);
+ Adaptor::Get().RegisterProcessor(*this, true); // Use post processor to trigger after layoutting
mProcessorRegistered = true;
}
}
void VectorAnimationManager::UnregisterEventCallback(CallbackBase* callback)
{
- auto iter = std::find(mEventCallbacks.begin(), mEventCallbacks.end(), callback);
+ auto iter = std::find_if(mEventCallbacks.begin(),
+ mEventCallbacks.end(),
+ [callback](const std::unique_ptr<CallbackBase>& element) {
+ return element.get() == callback;
+ });
if(iter != mEventCallbacks.end())
{
mEventCallbacks.erase(iter);
{
if(Adaptor::IsAvailable())
{
- Adaptor::Get().UnregisterProcessor(*this);
+ Adaptor::Get().UnregisterProcessor(*this, true);
mProcessorRegistered = false;
}
}
for(auto&& iter : mEventCallbacks)
{
CallbackBase::Execute(*iter);
- delete iter;
}
mEventCallbacks.clear();
- Adaptor::Get().UnregisterProcessor(*this);
+ Adaptor::Get().UnregisterProcessor(*this, true);
mProcessorRegistered = false;
}