X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fevent%2Fevents%2Factor-observer.cpp;h=809251ac15520b02b2701c5b083d0f1ae877669a;hb=c1df908470fc3dd242fef202248e56009727bca4;hp=f345ca7fc3a45fe314dc3f87fbd0de9f1db13c40;hpb=93484c418fa65dc60cddb0e0d74ca04fed972154;p=platform%2Fcore%2Fuifw%2Fdali-core.git diff --git a/dali/internal/event/events/actor-observer.cpp b/dali/internal/event/events/actor-observer.cpp index f345ca7..809251a 100644 --- a/dali/internal/event/events/actor-observer.cpp +++ b/dali/internal/event/events/actor-observer.cpp @@ -1,5 +1,5 @@ /* - * 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. @@ -34,8 +34,14 @@ Debug::Filter* gLogFilter = Debug::Filter::New(Debug::NoLogging, false, "LOG_ACT } ActorObserver::ActorObserver() -: mActor ( NULL ), - mActorDisconnected(false) +: ActorObserver( nullptr ) +{ +} + +ActorObserver::ActorObserver( CallbackBase* callback ) +: mActor ( nullptr ), + mActorDisconnected( false ), + mRemoveCallback( callback ) { DALI_LOG_TRACE_METHOD( gLogFilter ); } @@ -43,12 +49,33 @@ ActorObserver::ActorObserver() ActorObserver::~ActorObserver() { DALI_LOG_TRACE_METHOD( gLogFilter ); - SetActor( NULL ); + SetActor( nullptr ); + + delete mRemoveCallback; +} + +ActorObserver::ActorObserver( ActorObserver&& other ) +: ActorObserver( nullptr ) +{ + operator=( std::move( other ) ); +} + +ActorObserver& ActorObserver::operator=( ActorObserver&& other ) +{ + if( this != &other ) + { + SetActor( other.mActor ); + mActorDisconnected = other.mActorDisconnected; + mRemoveCallback = other.mRemoveCallback; + other.ResetActor(); + other.mRemoveCallback = nullptr; + } + return *this; } -Actor* ActorObserver::GetActor() +Actor* ActorObserver::GetActor() const { - return mActorDisconnected ? NULL : mActor; + return mActorDisconnected ? nullptr : mActor; } void ActorObserver::SetActor( Actor* actor ) @@ -78,7 +105,17 @@ void ActorObserver::ResetActor() { DALI_LOG_INFO(gLogFilter, Debug::Verbose, "Stop Observing: %p\n", mActor); mActor->RemoveObserver( *this ); - mActor = NULL; + mActor = nullptr; + mActorDisconnected = false; + } +} + +void ActorObserver::SceneObjectAdded( Object& object ) +{ + DALI_LOG_TRACE_METHOD( gLogFilter ); + + if ( mActor == &object ) + { mActorDisconnected = false; } } @@ -89,6 +126,11 @@ void ActorObserver::SceneObjectRemoved( Object& object ) if ( mActor == &object ) { + if ( mRemoveCallback ) + { + CallbackBase::Execute( *mRemoveCallback, mActor ); + } + // do not call object.RemoveObserver here, object is currently iterating through observers mActorDisconnected = true; } @@ -101,7 +143,7 @@ void ActorObserver::ObjectDestroyed(Object& object) if ( mActor == &object ) { DALI_LOG_INFO(gLogFilter, Debug::Verbose, "Stop Observing: %p\n", mActor); - mActor = NULL; + mActor = nullptr; } }