X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fevent%2Fevents%2Factor-observer.cpp;h=809251ac15520b02b2701c5b083d0f1ae877669a;hb=7f981181e68a6884db3a26c5e3102b4238b4a912;hp=42b9120555513e61038b2a11aab4fa2dca4a27d0;hpb=891f95adefdd739d38f14aaaee17cd66eacad972;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 42b9120..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,31 +34,48 @@ Debug::Filter* gLogFilter = Debug::Filter::New(Debug::NoLogging, false, "LOG_ACT } ActorObserver::ActorObserver() -: mActor ( NULL ), - mActorDisconnected( false ), - mRemoveCallback( NULL ) +: ActorObserver( nullptr ) { - DALI_LOG_TRACE_METHOD( gLogFilter ); } ActorObserver::ActorObserver( CallbackBase* callback ) -: mActor ( NULL ), +: mActor ( nullptr ), mActorDisconnected( false ), mRemoveCallback( callback ) { + DALI_LOG_TRACE_METHOD( gLogFilter ); } ActorObserver::~ActorObserver() { DALI_LOG_TRACE_METHOD( gLogFilter ); - SetActor( NULL ); + SetActor( nullptr ); delete mRemoveCallback; } -Actor* ActorObserver::GetActor() +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() const { - return mActorDisconnected ? NULL : mActor; + return mActorDisconnected ? nullptr : mActor; } void ActorObserver::SetActor( Actor* actor ) @@ -88,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; } } @@ -101,7 +128,7 @@ void ActorObserver::SceneObjectRemoved( Object& object ) { if ( mRemoveCallback ) { -// CallbackBase::Execute( *mRemoveCallback, mActor ); + CallbackBase::Execute( *mRemoveCallback, mActor ); } // do not call object.RemoveObserver here, object is currently iterating through observers @@ -116,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; } }