From: Joonbum Ko Date: Thu, 27 Aug 2020 03:36:50 +0000 (+0900) Subject: DSRenderViewDaliImpl: emit update signal when DSWindow destroyed. X-Git-Tag: accepted/tizen/unified/20200901.160655~63 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=0e5ad3a390052b4cfd8325c54d98de1fb0e10376;p=platform%2Fcore%2Fuifw%2Flibds.git DSRenderViewDaliImpl: emit update signal when DSWindow destroyed. Change-Id: I0bd58e1e4f1d9e5e96606324c35dbde5c1b0cd43 Signed-off-by: Joonbum Ko --- diff --git a/src/DSRender/DSRenderViewDaliImpl.cpp b/src/DSRender/DSRenderViewDaliImpl.cpp index 7cc724d..ef3c1f2 100644 --- a/src/DSRender/DSRenderViewDaliImpl.cpp +++ b/src/DSRender/DSRenderViewDaliImpl.cpp @@ -84,7 +84,8 @@ Geometry DSRenderViewDaliImpl::CreateTexturedQuad() DSRenderViewDaliImpl::DSRenderViewDaliImpl(std::shared_ptr window, Dali::OffscreenWindow offscreenWindow) : __window(window), - __offscreenWindow(offscreenWindow) + __offscreenWindow(offscreenWindow), + __windowDestroyed(false) { std::string fragmentShader = "#extension GL_OES_EGL_image_external:require\n"; fragmentShader += FRAGMENT_SHADER; @@ -104,6 +105,7 @@ DSRenderViewDaliImpl::DSRenderViewDaliImpl(std::shared_ptr window, Dal offscreenWindow.Add(__textureViewActor); // callbacks + window->registerCallbackWindowDestroyed(this, std::bind(&DSRenderViewDaliImpl::__onWindowDestroyed, this, std::placeholders::_1)); window->registerCallbackBufferChanged(this, std::bind(&DSRenderViewDaliImpl::__onWindowBufferChanged, this, std::placeholders::_1)); window->registerCallbackWindowRaiseToTop(this, std::bind(&DSRenderViewDaliImpl::__onWindowRaiseToTopChanged, this, std::placeholders::_1)); window->registerCallbackWindowLowerToBottom(this, std::bind(&DSRenderViewDaliImpl::__onWindowLowerToBottomChanged, this, std::placeholders::_1)); @@ -112,8 +114,10 @@ DSRenderViewDaliImpl::DSRenderViewDaliImpl(std::shared_ptr window, Dal DSRenderViewDaliImpl::~DSRenderViewDaliImpl() { - __textureViewActor.RemoveRenderer(__renderer); - __offscreenWindow.Remove(__textureViewActor); + if (!__windowDestroyed) { + __textureViewActor.RemoveRenderer(__renderer); + __offscreenWindow.Remove(__textureViewActor); + } } bool DSRenderViewDaliImpl::setBuffer(std::shared_ptr buffer) @@ -156,6 +160,18 @@ void DSRenderViewDaliImpl::registerCallbackUpdated(DSObject *slot, std::function __updatedSignal.connect(slot, func); } +void DSRenderViewDaliImpl::__onWindowDestroyed(void *data) +{ + DSLOG_INF("DSRenderViewDaliImpl", "__onWindowDestroyed."); + + __textureViewActor.RemoveRenderer(__renderer); + __offscreenWindow.Remove(__textureViewActor); + + __windowDestroyed = true; + + __updatedSignal.emit(nullptr); +} + void DSRenderViewDaliImpl::__onWindowBufferChanged(std::shared_ptr buffer) { if (buffer) { diff --git a/src/DSRender/DSRenderViewDaliImpl.h b/src/DSRender/DSRenderViewDaliImpl.h index 8ffd858..f982bc5 100644 --- a/src/DSRender/DSRenderViewDaliImpl.h +++ b/src/DSRender/DSRenderViewDaliImpl.h @@ -48,6 +48,7 @@ public: Dali::Geometry CreateTexturedQuad(); private: + void __onWindowDestroyed(void *data); void __onWindowBufferChanged(std::shared_ptr buffer); void __onWindowRaiseToTopChanged(void *data); void __onWindowLowerToBottomChanged(void *data); @@ -58,6 +59,8 @@ private: Dali::Renderer __renderer; Dali::Actor __textureViewActor; + bool __windowDestroyed; + DSSignal __updatedSignal; };