[Windows version] WindowImpl cleanup, fixes and improvements.
[platform/core/uifw/dali-adaptor.git] / dali / internal / system / windows / callback-manager-win.cpp
1 /*\r
2  * Copyright (c) 2018 Samsung Electronics Co., Ltd.\r
3  *\r
4  * Licensed under the Apache License, Version 2.0 (the "License");\r
5  * you may not use this file except in compliance with the License.\r
6  * You may obtain a copy of the License at\r
7  *\r
8  * http://www.apache.org/licenses/LICENSE-2.0\r
9  *\r
10  * Unless required by applicable law or agreed to in writing, software\r
11  * distributed under the License is distributed on an "AS IS" BASIS,\r
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
13  * See the License for the specific language governing permissions and\r
14  * limitations under the License.\r
15  *\r
16  */\r
17 \r
18 // CLASS HEADER\r
19 #include <dali/internal/system/windows/callback-manager-win.h>\r
20 \r
21 // EXTERNAL INCLUDES\r
22 #include <dali/integration-api/debug.h>\r
23 #include <Windows.h>\r
24 \r
25 // INTERNAL INCLUDES\r
26 #include <dali/internal/window-system/windows/platform-implement-win.h>\r
27 \r
28 namespace Dali\r
29 {\r
30 \r
31 namespace Internal\r
32 {\r
33 \r
34 namespace Adaptor\r
35 {\r
36 \r
37 WinCallbackManager::WinCallbackManager()\r
38 :mRunning(false)\r
39 {\r
40 }\r
41 \r
42 void WinCallbackManager::Start()\r
43 {\r
44   DALI_ASSERT_DEBUG( mRunning == false );\r
45   mRunning = true;\r
46 }\r
47 \r
48 void WinCallbackManager::Stop()\r
49 {\r
50   // make sure we're not called twice\r
51   DALI_ASSERT_DEBUG( mRunning == true );\r
52 \r
53   mRunning = false;\r
54 }\r
55 \r
56 bool WinCallbackManager::AddIdleCallback( CallbackBase* callback, bool hasReturnValue )\r
57 {\r
58   if( !mRunning )\r
59   {\r
60     return false;\r
61   }\r
62 \r
63   mCallbacks.insert(callback);\r
64 \r
65   WindowsPlatform::PostWinThreadMessage( WIN_CALLBACK_EVENT, reinterpret_cast<uint64_t>(callback), 0 );\r
66 \r
67   return true;\r
68 }\r
69 \r
70 void WinCallbackManager::RemoveIdleCallback( CallbackBase* callback )\r
71 {\r
72   //Wait for deal\r
73 }\r
74 \r
75 bool WinCallbackManager::ProcessIdle()\r
76 {\r
77   const bool idleProcessed = !mCallbacks.empty();\r
78 \r
79   for (CallbackBase* cb : mCallbacks)\r
80   {\r
81     Dali::CallbackBase::Execute(*cb);\r
82   }\r
83   mCallbacks.clear();\r
84 \r
85   return idleProcessed;\r
86 }\r
87 \r
88 void WinCallbackManager::ClearIdleCallbacks()\r
89 {\r
90   mCallbacks.clear();\r
91 }\r
92 \r
93 bool WinCallbackManager::AddIdleEntererCallback( CallbackBase* callback )\r
94 {\r
95   return AddIdleCallback( callback, true );\r
96 }\r
97 \r
98 void WinCallbackManager::RemoveIdleEntererCallback( CallbackBase* callback )\r
99 {\r
100 \r
101 }\r
102 \r
103 // Creates a concrete interface for CallbackManager\r
104 CallbackManager* CallbackManager::New()\r
105 {\r
106   return new WinCallbackManager;\r
107 }\r
108 \r
109 } // namespace Adaptor\r
110 \r
111 } // namespace Internal\r
112 \r
113 } // namespace Dali\r