Version : 150811
[apps/native/sample/adventure.git] / src / main.c
1 /*\r
2  * Samsung API\r
3  * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd.\r
4  *\r
5  * Licensed under the Apache License, Version 2.0 (the License);\r
6  * you may not use this file except in compliance with the License.\r
7  * You may obtain a copy of the License at\r
8  *\r
9  * http://www.apache.org/license/\r
10  *\r
11  * Unless required by applicable law or agreed to in writing, software\r
12  * distributed under the License is distributed on an AS IS BASIS,\r
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
14  * See the License for the specific language governing permissions and\r
15  * limitations under the License.\r
16  */\r
17 \r
18 #include <tizen.h>\r
19 #include <Elementary.h>\r
20 \r
21 #include "log.h"\r
22 #include "util.h"\r
23 #include "main.h"\r
24 #include "ui_manager.h"\r
25 \r
26 static void\r
27 _win_delete_request_cb(void *data, Evas_Object *obj, void *event_info)\r
28 {\r
29         ui_app_exit();\r
30 }\r
31 \r
32 static void\r
33 _resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)\r
34 {\r
35         int x, y, w, h;\r
36         evas_object_geometry_get(obj, &x, &y, &w, &h);\r
37         _D("%s (%d:%d:%d:%d)", data, x, y, w, h);\r
38 }\r
39 \r
40 static bool\r
41 app_create(void *data)\r
42 {\r
43         moment_info_s *moment_info = data;\r
44 \r
45         elm_app_base_scale_set(1.8);\r
46         elm_config_accel_preference_set("hw");\r
47         elm_config_preferred_engine_set("opengl_x11");\r
48 \r
49         moment_info->win = elm_win_util_standard_add(PACKAGE, PACKAGE);\r
50         retv_if(!moment_info->win, false);\r
51 \r
52         if (elm_win_wm_rotation_supported_get(moment_info->win)) {\r
53                 int rots[1] = {0};\r
54                 elm_win_wm_rotation_available_rotations_set(moment_info->win, (const int *)(&rots), 1);\r
55         }\r
56         elm_win_autodel_set(moment_info->win, EINA_TRUE);\r
57         elm_win_indicator_mode_set(moment_info->win, ELM_WIN_INDICATOR_HIDE);\r
58         elm_win_screen_size_get(moment_info->win, NULL, NULL, &moment_info->width, &moment_info->height);\r
59 \r
60         evas_object_smart_callback_add(moment_info->win, "delete,request", _win_delete_request_cb, NULL);\r
61         evas_object_show(moment_info->win);\r
62 \r
63         moment_info->conform = elm_conformant_add(moment_info->win);\r
64         elm_object_signal_emit(moment_info->conform, "elm,state,indicator,overlap", "elm");\r
65         elm_object_signal_emit(moment_info->conform, "elm,state,virtualkeypad,disable", "");\r
66         elm_object_signal_emit(moment_info->conform, "elm,state,clipboard,disable", "");\r
67 \r
68         evas_object_size_hint_weight_set(moment_info->conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);\r
69         evas_object_event_callback_add(moment_info->conform, EVAS_CALLBACK_RESIZE, _resize_cb, "conform");\r
70 \r
71         elm_win_resize_object_add(moment_info->win, moment_info->conform);\r
72         elm_win_conformant_set(moment_info->win, EINA_TRUE);\r
73 \r
74         evas_object_show(moment_info->conform);\r
75 \r
76         _D("Window size (%d:%d)", moment_info->width, moment_info->height);\r
77 \r
78         moment_info->e = evas_object_evas_get(moment_info->win);\r
79 \r
80         return true;\r
81 }\r
82 \r
83 static void\r
84 app_control(app_control_h app_control, void *data)\r
85 {\r
86         moment_info_s *moment_info = data;\r
87         ret_if(!moment_info);\r
88         ret_if(!moment_info->conform);\r
89 \r
90         _D("app_control");\r
91 \r
92         moment_info->ui_manager = ui_manager_create(moment_info->conform, moment_info, moment_info->width, moment_info->height);\r
93         ret_if(!moment_info->ui_manager);\r
94         elm_object_content_set(moment_info->conform, moment_info->ui_manager);\r
95 }\r
96 \r
97 static void\r
98 app_pause(void *data)\r
99 {\r
100         _D("pause");\r
101 }\r
102 \r
103 static void\r
104 app_resume(void *data)\r
105 {\r
106         _D("resume");\r
107 }\r
108 \r
109 static void\r
110 app_terminate(void *data)\r
111 {\r
112         moment_info_s *moment_info = data;\r
113 \r
114         if (moment_info->ui_manager)\r
115                 ui_manager_destroy(moment_info->ui_manager);\r
116 \r
117         if (moment_info->conform)\r
118                 evas_object_del(moment_info->conform);\r
119 \r
120         if (moment_info->win)\r
121                 evas_object_del(moment_info->win);\r
122 }\r
123 \r
124 static void\r
125 ui_app_lang_changed(app_event_info_h event_info, void *user_data)\r
126 {\r
127         /*APP_EVENT_LANGUAGE_CHANGED*/\r
128         char *locale = NULL;\r
129         system_settings_get_value_string(SYSTEM_SETTINGS_KEY_LOCALE_LANGUAGE, &locale);\r
130         elm_language_set(locale);\r
131         free(locale);\r
132         return;\r
133 }\r
134 \r
135 static void\r
136 ui_app_orient_changed(app_event_info_h event_info, void *user_data)\r
137 {\r
138         /*APP_EVENT_DEVICE_ORIENTATION_CHANGED*/\r
139         return;\r
140 }\r
141 \r
142 static void\r
143 ui_app_region_changed(app_event_info_h event_info, void *user_data)\r
144 {\r
145         /*APP_EVENT_REGION_FORMAT_CHANGED*/\r
146 }\r
147 \r
148 static void\r
149 ui_app_low_battery(app_event_info_h event_info, void *user_data)\r
150 {\r
151         /*APP_EVENT_LOW_BATTERY*/\r
152 }\r
153 \r
154 static void\r
155 ui_app_low_memory(app_event_info_h event_info, void *user_data)\r
156 {\r
157         /*APP_EVENT_LOW_MEMORY*/\r
158 }\r
159 \r
160 int\r
161 main(int argc, char *argv[])\r
162 {\r
163         moment_info_s moment_info = {0,};\r
164         int ret = 0;\r
165 \r
166         ui_app_lifecycle_callback_s event_callback = {0,};\r
167         app_event_handler_h handlers[5] = {NULL, };\r
168 \r
169         event_callback.create = app_create;\r
170         event_callback.terminate = app_terminate;\r
171         event_callback.pause = app_pause;\r
172         event_callback.resume = app_resume;\r
173         event_callback.app_control = app_control;\r
174 \r
175         ui_app_add_event_handler(&handlers[APP_EVENT_LOW_BATTERY], APP_EVENT_LOW_BATTERY, ui_app_low_battery, &moment_info);\r
176         ui_app_add_event_handler(&handlers[APP_EVENT_LOW_MEMORY], APP_EVENT_LOW_MEMORY, ui_app_low_memory, &moment_info);\r
177         ui_app_add_event_handler(&handlers[APP_EVENT_DEVICE_ORIENTATION_CHANGED], APP_EVENT_DEVICE_ORIENTATION_CHANGED, ui_app_orient_changed, &moment_info);\r
178         ui_app_add_event_handler(&handlers[APP_EVENT_LANGUAGE_CHANGED], APP_EVENT_LANGUAGE_CHANGED, ui_app_lang_changed, &moment_info);\r
179         ui_app_add_event_handler(&handlers[APP_EVENT_REGION_FORMAT_CHANGED], APP_EVENT_REGION_FORMAT_CHANGED, ui_app_region_changed, &moment_info);\r
180         ui_app_remove_event_handler(handlers[APP_EVENT_LOW_MEMORY]);\r
181 \r
182         ret = ui_app_main(argc, argv, &event_callback, &moment_info);\r
183         if (ret != APP_ERROR_NONE) {\r
184                 dlog_print(DLOG_ERROR, LOG_TAG, "ui_app_main() is failed. err = %d", ret);\r
185         }\r
186 \r
187         return ret;\r
188 }\r