2 * Copyright (c) 2021 Samsung Electronics Co., Ltd.
\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
8 * http://www.apache.org/licenses/LICENSE-2.0
\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
19 #include <dali/internal/adaptor/common/framework.h>
\r
21 // EXTERNAL INCLUDES
\r
22 #include <dali/integration-api/debug.h>
\r
23 #include <windows.h>
\r
25 // INTERNAL INCLUDES
\r
26 #include <dali/internal/system/common/callback-manager.h>
\r
27 #include <dali/internal/window-system/windows/platform-implement-win.h>
\r
37 /// Application Status Enum
\r
45 APP_LANGUAGE_CHANGE,
\r
48 } // Unnamed namespace
\r
50 * Impl to hide WindowsSystem data members
\r
52 struct Framework::Impl
\r
57 : mAbortCallBack(NULL),
\r
58 mCallbackManager(CallbackManager::New()),
\r
59 mLanguage("NOT_SUPPORTED"),
\r
60 mRegion("NOT_SUPPORTED")
\r
66 delete mAbortCallBack;
\r
68 // we're quiting the main loop so
\r
69 // mCallbackManager->RemoveAllCallBacks() does not need to be called
\r
70 // to delete our abort handler
\r
71 delete mCallbackManager;
\r
74 std::string GetLanguage() const
\r
79 std::string GetRegion() const
\r
87 * Called by AppCore on application creation.
\r
89 static bool AppCreate(void* data)
\r
91 return static_cast<Framework*>(data)->AppStatusHandler(APP_CREATE, NULL);
\r
95 * Called by AppCore when the application should terminate.
\r
97 static void AppTerminate(void* data)
\r
99 static_cast<Framework*>(data)->AppStatusHandler(APP_TERMINATE, NULL);
\r
103 * Called by AppCore when the application is paused.
\r
105 static void AppPause(void* data)
\r
107 static_cast<Framework*>(data)->AppStatusHandler(APP_PAUSE, NULL);
\r
111 * Called by AppCore when the application is resumed.
\r
113 static void AppResume(void* data)
\r
115 static_cast<Framework*>(data)->AppStatusHandler(APP_RESUME, NULL);
\r
119 * Called by AppCore when the language changes on the device.
\r
121 static void AppLanguageChange(void* data)
\r
123 static_cast<Framework*>(data)->AppStatusHandler(APP_LANGUAGE_CHANGE, NULL);
\r
130 while(GetMessage(&nMsg, 0, NULL, NULL))
\r
132 if(WIN_CALLBACK_EVENT == nMsg.message)
\r
134 Dali::CallbackBase* callback = (Dali::CallbackBase*)nMsg.wParam;
\r
135 Dali::CallbackBase::Execute(*callback);
\r
138 TranslateMessage(&nMsg);
\r
139 DispatchMessage(&nMsg);
\r
141 mCallbackManager->ClearIdleCallbacks();
\r
143 if(WM_CLOSE == nMsg.message)
\r
154 void SetCallbackBase(CallbackBase* base)
\r
156 mAbortCallBack = base;
\r
159 bool ExcuteCallback()
\r
161 if(NULL != mAbortCallBack)
\r
163 CallbackBase::Execute(*mAbortCallBack);
\r
174 Impl(const Impl& impl) = delete;
\r
177 Impl& operator=(const Impl& impl) = delete;
\r
181 CallbackBase* mAbortCallBack;
\r
182 CallbackManager* mCallbackManager;
\r
183 std::string mLanguage;
\r
184 std::string mRegion;
\r
187 Framework::Framework(Framework::Observer& observer, Framework::TaskObserver& taskObserver, int* argc, char*** argv, Type type, bool useUiThread)
\r
188 : mObserver(observer),
\r
189 mTaskObserver(taskObserver),
\r
190 mInitialised(false),
\r
197 mAbortHandler(MakeCallback(this, &Framework::AbortCallback)),
\r
201 mImpl = new Impl(this);
\r
204 Framework::~Framework()
\r
214 void Framework::Run()
\r
218 Impl::AppCreate(this);
\r
223 void Framework::Quit()
\r
225 Impl::AppTerminate(this);
\r
228 bool Framework::IsMainLoopRunning()
\r
233 void Framework::AddAbortCallback(CallbackBase* callback)
\r
235 mImpl->SetCallbackBase(callback);
\r
238 std::string Framework::GetBundleName() const
\r
240 return mBundleName;
\r
243 void Framework::SetBundleName(const std::string& name)
\r
245 mBundleName = name;
\r
248 std::string Framework::GetBundleId() const
\r
253 std::string Framework::GetResourcePath()
\r
255 // "DALI_APPLICATION_PACKAGE" is used by Windows specifically to get the already configured Application package path.
\r
256 const char* winEnvironmentVariable = "DALI_APPLICATION_PACKAGE";
\r
257 char* value = getenv(winEnvironmentVariable);
\r
259 std::string resourcePath;
\r
262 resourcePath = value;
\r
265 if(resourcePath.back() != '/')
\r
267 resourcePath += "/";
\r
270 return resourcePath;
\r
273 std::string Framework::GetDataPath()
\r
275 std::string result = app_get_data_path();
\r
279 void Framework::SetBundleId(const std::string& id)
\r
284 void Framework::AbortCallback()
\r
286 // if an abort call back has been installed run it.
\r
287 if(false == mImpl->ExcuteCallback())
\r
293 bool Framework::AppStatusHandler(int type, void* bundleData)
\r
299 mInitialised = true;
\r
301 mObserver.OnInit();
\r
306 mObserver.OnReset();
\r
311 mObserver.OnResume();
\r
314 case APP_TERMINATE:
\r
316 mObserver.OnTerminate();
\r
321 mObserver.OnPause();
\r
324 case APP_LANGUAGE_CHANGE:
\r
326 mObserver.OnLanguageChanged();
\r
338 void Framework::InitThreads()
\r
342 std::string Framework::GetLanguage() const
\r
344 return mImpl->GetLanguage();
\r
347 std::string Framework::GetRegion() const
\r
349 return mImpl->GetRegion();
\r
352 } // namespace Adaptor
\r
354 } // namespace Internal
\r
356 } // namespace Dali
\r