[dali_2.3.40] Merge branch 'devel/master'
[platform/core/uifw/dali-adaptor.git] / dali / internal / adaptor / windows / framework-win.cpp
1 /*\r
2  * Copyright (c) 2023 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 // CLASS HEADER\r
18 #include <dali/internal/adaptor/windows/framework-win.h>\r
19 \r
20 // EXTERNAL INCLUDES\r
21 #include <dali/integration-api/debug.h>\r
22 #include <windows.h>\r
23 \r
24 // INTERNAL INCLUDES\r
25 #include <dali/internal/system/common/callback-manager.h>\r
26 #include <dali/internal/window-system/windows/platform-implement-win.h>\r
27 \r
28 namespace Dali\r
29 {\r
30 namespace Internal\r
31 {\r
32 namespace Adaptor\r
33 {\r
34 /**\r
35  * Impl to hide WindowsSystem data members\r
36  */\r
37 struct FrameworkWin::Impl\r
38 {\r
39   // Constructor\r
40   Impl(void* data)\r
41   {\r
42   }\r
43 \r
44   ~Impl()\r
45   {\r
46   }\r
47 \r
48   void Run()\r
49   {\r
50     MSG nMsg = {0};\r
51 \r
52     while(GetMessage(&nMsg, 0, NULL, NULL))\r
53     {\r
54       if(WIN_CALLBACK_EVENT == nMsg.message)\r
55       {\r
56         Dali::CallbackBase* callback = (Dali::CallbackBase*)nMsg.wParam;\r
57         Dali::CallbackBase::Execute(*callback);\r
58       }\r
59 \r
60       TranslateMessage(&nMsg);\r
61       DispatchMessage(&nMsg);\r
62 \r
63       if(WM_CLOSE == nMsg.message)\r
64       {\r
65         break;\r
66       }\r
67     }\r
68   }\r
69 \r
70 private:\r
71   // Undefined\r
72   Impl(const Impl& impl) = delete;\r
73 \r
74   // Undefined\r
75   Impl& operator=(const Impl& impl) = delete;\r
76 };\r
77 \r
78 FrameworkWin::FrameworkWin(Framework::Observer& observer, Framework::TaskObserver& taskObserver, int* argc, char*** argv, Type type, bool useUiThread)\r
79 : Framework(observer, taskObserver, argc, argv, type, useUiThread),\r
80   mImpl(NULL)\r
81 {\r
82   mImpl = new Impl(this);\r
83 }\r
84 \r
85 FrameworkWin::~FrameworkWin()\r
86 {\r
87   if(mRunning)\r
88   {\r
89     Quit();\r
90   }\r
91 \r
92   delete mImpl;\r
93 }\r
94 \r
95 void FrameworkWin::Run()\r
96 {\r
97   mRunning = true;\r
98 \r
99   mObserver.OnInit();\r
100   mImpl->Run();\r
101   mRunning = false;\r
102 }\r
103 \r
104 void FrameworkWin::Quit()\r
105 {\r
106   mObserver.OnTerminate();\r
107 }\r
108 \r
109 /**\r
110  * Impl for Pre-Initailized using UI Thread.\r
111  */\r
112 struct UIThreadLoader::Impl\r
113 {\r
114   // Constructor\r
115   Impl(void *data)\r
116   {\r
117   }\r
118 \r
119   ~Impl()\r
120   {\r
121   }\r
122 \r
123   /**\r
124    * Runs the main loop of framework\r
125    */\r
126   void Run(Runner runner)\r
127   {\r
128   }\r
129 \r
130 private:\r
131   // Undefined\r
132   Impl(const Impl& impl);\r
133   Impl& operator=(const Impl& impl);\r
134 };\r
135 \r
136 /**\r
137  * UI Thread loader to support Pre-Initailized using UI Thread.\r
138  */\r
139 UIThreadLoader::UIThreadLoader(int* argc, char*** argv)\r
140 : mArgc(argc),\r
141   mArgv(argv),\r
142   mImpl(nullptr)\r
143 {\r
144 }\r
145 \r
146 UIThreadLoader::~UIThreadLoader()\r
147 {\r
148 }\r
149 \r
150 void UIThreadLoader::Run(Runner runner)\r
151 {\r
152 }\r
153 \r
154 } // namespace Adaptor\r
155 \r
156 } // namespace Internal\r
157 \r
158 } // namespace Dali\r