{
__zone = zone;
__zone->registerCallbackWindowCreated(this, std::bind(&DSDisplayAreaPrivate::__onWindowCreated, this, std::placeholders::_1));
+ __zone->registerCallbackWindowDestroy(this, std::bind(&DSDisplayAreaPrivate::__onWindowDestroy, this, std::placeholders::_1));
return true;
}
void DSDisplayAreaPrivate::__onWindowCreated(std::shared_ptr<DSWindow> window)
{
+ // TODO: think about using unordered_map
__renderViewList.push_back(__renderEngine->makeRenderView(window));
__displayDeviceHWCWindowList.push_back(__displayDeviceHWC->makeHWCWindow(window));
}
+void DSDisplayAreaPrivate::__onWindowDestroy(std::shared_ptr<DSWindow> window)
+{
+ // TODO: think about using unordered_map
+ for (auto renderView : __renderViewList) {
+ auto tmpWindow = renderView->getWindow();
+ if (tmpWindow.get() == window.get()) {
+ __renderViewList.remove(renderView);
+ renderView.reset();
+ break;
+ }
+ }
+
+ for (auto displayDeviceHWCWindow : __displayDeviceHWCWindowList) {
+ auto tmpHWCWindow = displayDeviceHWCWindow->getWindow();
+ if (tmpHWCWindow.get() == window.get()) {
+ __displayDeviceHWCWindowList.remove(displayDeviceHWCWindow);
+ displayDeviceHWCWindow.reset();
+ break;
+ }
+ }
+}
+
void DSDisplayAreaPrivate::__onEventIdleEnterer(void *data)
{
DSLOG_INF("DSDisplayAreaPrivate", "__onEventIdleEnterer");