X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali%2Finternal%2Fevent%2Fevents%2Factor-observer.cpp;h=f6f2c77785e4a6055c9b13c51b42b9dfe7c3cb84;hb=1df55aeb547ce63f11f5520cbea1fd6c6b57ef89;hp=42b9120555513e61038b2a11aab4fa2dca4a27d0;hpb=5f62d18c78a8a4014e504db20d15f55fd04c56bd;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..aa8395e 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) 2021 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. @@ -16,64 +16,79 @@ */ // CLASS HEADER -#include #include #include +#include namespace Dali { - namespace Internal { - namespace { #if defined(DEBUG_ENABLED) -Debug::Filter* gLogFilter = Debug::Filter::New(Debug::NoLogging, false, "LOG_ACTOR_OBSERVER" ); +Debug::Filter* gLogFilter = Debug::Filter::New(Debug::NoLogging, false, "LOG_ACTOR_OBSERVER"); #endif // defined(DEBUG_ENABLED) -} +} // namespace ActorObserver::ActorObserver() -: mActor ( NULL ), - mActorDisconnected( false ), - mRemoveCallback( NULL ) +: ActorObserver(nullptr) { - DALI_LOG_TRACE_METHOD( gLogFilter ); } -ActorObserver::ActorObserver( CallbackBase* callback ) -: mActor ( NULL ), - mActorDisconnected( false ), - mRemoveCallback( callback ) +ActorObserver::ActorObserver(CallbackBase* callback) +: mActor(nullptr), + mActorDisconnected(false), + mRemoveCallback(callback) { + DALI_LOG_TRACE_METHOD(gLogFilter); } ActorObserver::~ActorObserver() { - DALI_LOG_TRACE_METHOD( gLogFilter ); - SetActor( NULL ); + DALI_LOG_TRACE_METHOD(gLogFilter); + SetActor(nullptr); delete mRemoveCallback; } -Actor* ActorObserver::GetActor() +ActorObserver::ActorObserver(ActorObserver&& other) +: ActorObserver(nullptr) { - return mActorDisconnected ? NULL : mActor; + operator=(std::move(other)); } -void ActorObserver::SetActor( Actor* actor ) +ActorObserver& ActorObserver::operator=(ActorObserver&& other) { - DALI_LOG_TRACE_METHOD( gLogFilter ); + 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 ? nullptr : mActor; +} - if ( mActor != actor ) +void ActorObserver::SetActor(Actor* actor) +{ + DALI_LOG_TRACE_METHOD(gLogFilter); + + if(mActor != actor) { ResetActor(); mActor = actor; - if ( mActor ) + if(mActor) { - mActor->AddObserver( *this ); + mActor->AddObserver(*this); DALI_LOG_INFO(gLogFilter, Debug::Verbose, "Start Observing: %p\n", mActor); } } @@ -84,24 +99,34 @@ void ActorObserver::SetActor( Actor* actor ) void ActorObserver::ResetActor() { - if ( mActor ) + if(mActor) { DALI_LOG_INFO(gLogFilter, Debug::Verbose, "Stop Observing: %p\n", mActor); - mActor->RemoveObserver( *this ); - mActor = NULL; + mActor->RemoveObserver(*this); + mActor = nullptr; + mActorDisconnected = false; + } +} + +void ActorObserver::SceneObjectAdded(Object& object) +{ + DALI_LOG_TRACE_METHOD(gLogFilter); + + if(mActor == &object) + { mActorDisconnected = false; } } -void ActorObserver::SceneObjectRemoved( Object& object ) +void ActorObserver::SceneObjectRemoved(Object& object) { - DALI_LOG_TRACE_METHOD( gLogFilter ); + DALI_LOG_TRACE_METHOD(gLogFilter); - if ( mActor == &object ) + if(mActor == &object) { - if ( mRemoveCallback ) + if(mRemoveCallback) { -// CallbackBase::Execute( *mRemoveCallback, mActor ); + CallbackBase::Execute(*mRemoveCallback, mActor); } // do not call object.RemoveObserver here, object is currently iterating through observers @@ -111,16 +136,15 @@ void ActorObserver::SceneObjectRemoved( Object& object ) void ActorObserver::ObjectDestroyed(Object& object) { - DALI_LOG_TRACE_METHOD( gLogFilter ); + DALI_LOG_TRACE_METHOD(gLogFilter); - if ( mActor == &object ) + if(mActor == &object) { DALI_LOG_INFO(gLogFilter, Debug::Verbose, "Stop Observing: %p\n", mActor); - mActor = NULL; + mActor = nullptr; } } } // namespace Internal } // namespace Dali -