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, int* argc, char*** argv, Type type)
\r
188 : mObserver(observer),
\r
189 mInitialised(false),
\r
196 mAbortHandler(MakeCallback(this, &Framework::AbortCallback)),
\r
200 mImpl = new Impl(this);
\r
203 Framework::~Framework()
\r
213 void Framework::Run()
\r
217 Impl::AppCreate(this);
\r
222 void Framework::Quit()
\r
224 Impl::AppTerminate(this);
\r
227 bool Framework::IsMainLoopRunning()
\r
232 void Framework::AddAbortCallback(CallbackBase* callback)
\r
234 mImpl->SetCallbackBase(callback);
\r
237 std::string Framework::GetBundleName() const
\r
239 return mBundleName;
\r
242 void Framework::SetBundleName(const std::string& name)
\r
244 mBundleName = name;
\r
247 std::string Framework::GetBundleId() const
\r
252 std::string Framework::GetResourcePath()
\r
254 // "DALI_APPLICATION_PACKAGE" is used by Windows specifically to get the already configured Application package path.
\r
255 const char* winEnvironmentVariable = "DALI_APPLICATION_PACKAGE";
\r
256 char* value = getenv(winEnvironmentVariable);
\r
258 std::string resourcePath;
\r
261 resourcePath = value;
\r
264 if(resourcePath.back() != '/')
\r
266 resourcePath += "/";
\r
269 return resourcePath;
\r
272 std::string Framework::GetDataPath()
\r
274 std::string result = app_get_data_path();
\r
278 void Framework::SetBundleId(const std::string& id)
\r
283 void Framework::AbortCallback()
\r
285 // if an abort call back has been installed run it.
\r
286 if(false == mImpl->ExcuteCallback())
\r
292 bool Framework::AppStatusHandler(int type, void* bundleData)
\r
298 mInitialised = true;
\r
300 mObserver.OnInit();
\r
305 mObserver.OnReset();
\r
310 mObserver.OnResume();
\r
313 case APP_TERMINATE:
\r
315 mObserver.OnTerminate();
\r
320 mObserver.OnPause();
\r
323 case APP_LANGUAGE_CHANGE:
\r
325 mObserver.OnLanguageChanged();
\r
337 void Framework::InitThreads()
\r
341 std::string Framework::GetLanguage() const
\r
343 return mImpl->GetLanguage();
\r
346 std::string Framework::GetRegion() const
\r
348 return mImpl->GetRegion();
\r
351 } // namespace Adaptor
\r
353 } // namespace Internal
\r
355 } // namespace Dali
\r