/*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * 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.
}
ActorObserver::ActorObserver()
-: mActor ( NULL ),
- mActorDisconnected( false ),
- mRemoveCallback( NULL )
+: ActorObserver( NULL )
{
- DALI_LOG_TRACE_METHOD( gLogFilter );
}
ActorObserver::ActorObserver( CallbackBase* callback )
mActorDisconnected( false ),
mRemoveCallback( callback )
{
+ DALI_LOG_TRACE_METHOD( gLogFilter );
}
ActorObserver::~ActorObserver()
delete mRemoveCallback;
}
-Actor* ActorObserver::GetActor()
+ActorObserver::ActorObserver( ActorObserver&& other )
+: ActorObserver( other.mRemoveCallback )
+{
+ SetActor( other.mActor );
+ mActorDisconnected = other.mActorDisconnected;
+ other.ResetActor();
+}
+
+ActorObserver& ActorObserver::operator=( ActorObserver&& other )
+{
+ if( this != &other )
+ {
+ SetActor( other.mActor );
+ mActorDisconnected = other.mActorDisconnected;
+ mRemoveCallback = other.mRemoveCallback;
+ other.ResetActor();
+ }
+ return *this;
+}
+
+Actor* ActorObserver::GetActor() const
{
return mActorDisconnected ? NULL : mActor;
}
*/
~ActorObserver();
+ // Movable.
+
+ /**
+ *
+ */
+ ActorObserver( ActorObserver&& other );
+
+ /**
+ *
+ */
+ ActorObserver& operator=( ActorObserver&& other );
+
+ // Not copyable
+
+ ActorObserver( const ActorObserver& ) = delete; ///< Deleted copy constructor.
+ ActorObserver& operator=( const ActorObserver& ) = delete; ///< Deleted copy assignment operator.
+
+
// Methods
/**
* Return the stored Actor pointer.
* @return The Actor pointer.
*/
- Actor* GetActor();
+ Actor* GetActor() const;
/**
* Assignment operator.
private:
- // Undefined
- ActorObserver( const ActorObserver& );
- ActorObserver& operator=( const ActorObserver& );
-
-private:
-
/**
* This will never get called as we do not observe objects that have not been added to the scene.
* @param[in] object The object object.
/*
- * Copyright (c) 2016 Samsung Electronics Co., Ltd.
+ * 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.
*/
bool IsActorExclusiveToAnotherRenderTask( const Actor& actor,
const RenderTask& renderTask,
- const Vector< RenderTaskList::Exclusive >& exclusives )
+ const RenderTaskList::ExclusivesContainer& exclusives )
{
- if( exclusives.Size() )
+ if( exclusives.size() )
{
- for( Vector< RenderTaskList::Exclusive >::Iterator exclusiveIt = exclusives.Begin(); exclusives.End() != exclusiveIt; ++exclusiveIt )
+ for( const auto& exclusive : exclusives )
{
- if( ( exclusiveIt->renderTaskPtr != &renderTask ) && ( exclusiveIt->actorPtr == &actor ) )
+ if( ( exclusive.renderTaskPtr != &renderTask ) && ( exclusive.actor.GetActor() == &actor ) )
{
return true;
}
*/
HitActor HitTestWithinLayer( Actor& actor,
const RenderTask& renderTask,
- const Vector< RenderTaskList::Exclusive >& exclusives,
+ const RenderTaskList::ExclusivesContainer& exclusives,
const Vector4& rayOrigin,
const Vector4& rayDir,
float& nearClippingPlane,
/**
* Hit test a RenderTask
*/
-bool HitTestRenderTask( const Vector< RenderTaskList::Exclusive >& exclusives,
+bool HitTestRenderTask( const RenderTaskList::ExclusivesContainer& exclusives,
Stage& stage,
LayerList& layers,
RenderTask& renderTask,
{
RenderTaskList::RenderTaskContainer& tasks = taskList.GetTasks();
RenderTaskList::RenderTaskContainer::reverse_iterator endIter = tasks.rend();
- const Vector< RenderTaskList::Exclusive >& exclusives = taskList.GetExclusivesList();
+ const auto& exclusives = taskList.GetExclusivesList();
for( RenderTaskList::RenderTaskContainer::reverse_iterator iter = tasks.rbegin(); endIter != iter; ++iter )
{
bool wasHit( false );
Results hitTestResults;
- const Vector< RenderTaskList::Exclusive >& exclusives = stage.GetRenderTaskList().GetExclusivesList();
HitTestFunctionWrapper hitTestFunctionWrapper( func );
- if( HitTestRenderTask( exclusives, stage, stage.GetLayerList(), renderTask, screenCoordinates, hitTestResults, hitTestFunctionWrapper ) )
+ if( HitTestRenderTask( stage.GetRenderTaskList().GetExclusivesList(), stage, stage.GetLayerList(), renderTask, screenCoordinates, hitTestResults, hitTestFunctionWrapper ) )
{
results.actor = hitTestResults.actor;
results.actorCoordinates = hitTestResults.actorCoordinates;
/*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ * 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.
mTasks.erase( iter );
- for ( Vector< Exclusive >::Iterator exclusiveIt = mExclusives.Begin(); exclusiveIt != mExclusives.End(); ++exclusiveIt )
+ for ( auto exclusiveIt = mExclusives.begin(); exclusiveIt != mExclusives.end(); ++exclusiveIt )
{
if ( exclusiveIt->renderTaskPtr == &taskImpl )
{
- mExclusives.Erase( exclusiveIt );
+ mExclusives.erase( exclusiveIt );
break;
}
}
void RenderTaskList::SetExclusive( RenderTask* task, bool exclusive )
{
// Check to see if this rendertask has an entry?
- for ( Vector< Exclusive >::Iterator exclusiveIt = mExclusives.Begin(); exclusiveIt != mExclusives.End(); ++exclusiveIt )
+ for ( auto exclusiveIt = mExclusives.begin(); exclusiveIt != mExclusives.end(); ++exclusiveIt )
{
if ( exclusiveIt->renderTaskPtr == task )
{
if ( !exclusive )
{
- mExclusives.Erase( exclusiveIt );
+ mExclusives.erase( exclusiveIt );
break;
}
else
{
- exclusiveIt->actorPtr = task->GetSourceActor();
+ exclusiveIt->actor.SetActor( task->GetSourceActor() );
exclusive = false;
break;
}
{
Exclusive exclusiveSlot;
exclusiveSlot.renderTaskPtr = task;
- exclusiveSlot.actorPtr = task->GetSourceActor();
- mExclusives.PushBack( exclusiveSlot );
+ exclusiveSlot.actor.SetActor( task->GetSourceActor() );
+ mExclusives.emplace_back( std::move( exclusiveSlot ) );
}
}
#define __DALI_INTERNAL_RENDER_TASK_LIST_H__
/*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * 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.
#include <dali/public-api/render-tasks/render-task.h>
#include <dali/public-api/render-tasks/render-task-list.h>
#include <dali/internal/event/common/complete-notification-interface.h>
+#include <dali/internal/event/events/actor-observer.h>
namespace Dali
{
struct Exclusive
{
RenderTask* renderTaskPtr; ///< Pointer for comparison with current rendertask.
- Actor* actorPtr; ///< Pointer for comparison with current actor.
+ ActorObserver actor; ///< For comparison with current actor.
};
+ using ExclusivesContainer = std::vector< Exclusive >;
+
/**
* Create a RenderTaskList.
* @param[in] eventServices Used for sending message to the scene graph.
*
* @return [description]
*/
- const Vector< Exclusive >& GetExclusivesList() const
+ const ExclusivesContainer& GetExclusivesList() const
{
return mExclusives;
}
SceneGraph::RenderTaskList* mSceneObject; ///< Raw-pointer to the scene-graph object; not owned.
RenderTaskContainer mTasks; ///< Reference counted render-tasks
- Vector< Exclusive > mExclusives; ///< List of rendertasks with exclusively owned source actors.
+ ExclusivesContainer mExclusives; ///< List of rendertasks with exclusively owned source actors.
};
} // namespace Internal