2 * Copyright (c) 2009-2015 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
23 #include <sys/types.h>
32 #include <Elementary.h>
35 #include <animation.h>
41 static struct animation {
54 static void win_del(void *data, Evas_Object * obj, void *event_info)
56 _D("Window delete event received");
60 static Eina_Bool _end_cb(void *data)
62 _D("_end_cb is invoked");
63 printf("_end_cb is invoked\n");
64 if (vconf_set_int(VCONFKEY_BOOT_ANIMATION_FINISHED, 1) != 0)
65 _E("Failed to set finished set");
67 return ECORE_CALLBACK_CANCEL;
70 static void _edje_cb(void *d, Evas_Object * obj, const char *e, const char *s)
72 _D("edje callback is invoked");
74 if (s_animation.state == TYPE_OFF || s_animation.state == TYPE_OFF_WITH_MSG) {
76 if (vconf_set_int(VCONFKEY_BOOT_ANIMATION_FINISHED, 1) != 0)
77 _E("Failed to set finished set");
78 if (s_animation.txt) {
82 evas_object_size_hint_weight_set(s_animation.txt,
85 evas_object_size_hint_fill_set(s_animation.txt,
88 evas_object_resize(s_animation.txt, s_animation.w,
90 evas_object_color_set(s_animation.txt, 255, 255, 255,
92 evas_object_text_font_set(s_animation.txt,
93 "SLP:style=medium", 30);
94 evas_object_geometry_get(s_animation.txt, NULL, NULL,
96 evas_object_move(s_animation.txt,
97 (s_animation.w - w) >> 1,
98 (s_animation.h - h) >> 1);
99 evas_object_show(s_animation.txt);
101 ecore_timer_add(1, _end_cb, NULL);
108 #define DEFAULT_W 480
109 static void layout_file_set(int state)
111 _D("Layout file set according to resolution");
112 _D("Screen Width: %d, DEFAULT_WIDTH: %d", s_animation.w, DEFAULT_W);
114 switch(s_animation.w)
117 _D("Resolution is %dx%d", s_animation.w, s_animation.h);
118 if (state == TYPE_ON) {
119 elm_layout_file_set(s_animation.layout, WEARABLE_POWER_ON, GRP_ON);
121 elm_layout_file_set(s_animation.layout, WEARABLE_POWER_OFF, GRP_OFF);
125 _D("Resolution is %dx%d", s_animation.w, s_animation.h);
126 if (state == TYPE_ON) {
127 elm_layout_file_set(s_animation.layout, WVGA_POWER_ON, GRP_ON);
129 elm_layout_file_set(s_animation.layout, WVGA_POWER_OFF, GRP_OFF);
133 _D("Resolution is %dx%d", s_animation.w, s_animation.h);
134 if (state == TYPE_ON) {
135 elm_layout_file_set(s_animation.layout, HD_POWER_ON, GRP_ON);
137 elm_layout_file_set(s_animation.layout, HD_POWER_OFF, GRP_OFF);
141 _D("This is Strange resolution, Plz check, %dx%d", s_animation.w, s_animation.h);
142 if (state == TYPE_ON) {
143 elm_layout_file_set(s_animation.layout, HD_POWER_ON, GRP_ON);
145 elm_layout_file_set(s_animation.layout, HD_POWER_ON, GRP_OFF);
151 static int init_layout(const char *msg)
153 s_animation.layout = elm_layout_add(s_animation.win);
154 if (!s_animation.layout) {
155 _E("Failed to create layout");
159 layout_file_set(s_animation.state);
161 evas_object_size_hint_weight_set(s_animation.layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
162 _D("[Boot-ani] Start animation: %d mode", s_animation.state);
163 elm_win_resize_object_add(s_animation.win, s_animation.layout);
164 edje_object_signal_callback_add(elm_layout_edje_get(s_animation.layout), "end", "animation", _edje_cb, NULL);
165 evas_object_show(s_animation.layout);
168 if (!s_animation.txt) {
169 s_animation.txt = evas_object_text_add(s_animation.evas);
170 if (!s_animation.txt) {
171 _E("Failed to add text");
172 evas_object_del(s_animation.layout);
177 evas_object_text_text_set(s_animation.txt, msg);
178 evas_object_hide(s_animation.txt);
184 static void fini_layout(void)
186 if (s_animation.layout) {
187 evas_object_del(s_animation.layout);
190 if (s_animation.txt) {
191 evas_object_del(s_animation.txt);
192 s_animation.txt = NULL;
196 static int create_window(void)
199 printf("Create Window\n");
203 s_animation.win = elm_win_add(NULL, "BOOT_ANIMATION", ELM_WIN_NOTIFICATION);
204 elm_win_role_set(s_animation.win, "alert");
205 if (!s_animation.win) {
206 _E("Failed to create a new window");
207 printf("Failed to create a new window\n");
210 if (s_animation.state == TYPE_OFF || s_animation.state == TYPE_OFF_WITH_MSG) {
211 _D("We are turning off the Tizen");
212 elm_win_alpha_set(s_animation.win, EINA_TRUE);
214 evas_object_smart_callback_add(s_animation.win, "delete-request", win_del, NULL);
216 s_animation.evas = evas_object_evas_get(s_animation.win);
217 if (!s_animation.evas) {
218 evas_object_del(s_animation.win);
219 _E("Failed to get the evas object");
222 elm_win_screen_size_get(s_animation.win, &x, &y, &s_animation.w, &s_animation.h);
223 _D("Window size is x: %d, y: %d, w: %d, h: %d", x, y, s_animation.w, s_animation.h);
224 elm_win_borderless_set(s_animation.win, 1);
225 elm_win_indicator_mode_set(s_animation.win, ELM_WIN_INDICATOR_HIDE);
226 evas_object_move(s_animation.win, 0, 0);
228 /* if (s_animation.w > s_animation.h) {
230 elm_win_rotation_with_resize_set(s_animation.win, 90);
232 s_animation.w = s_animation.h;
236 evas_object_show(s_animation.win);
238 s_animation.ee = ecore_evas_ecore_evas_get(s_animation.evas);
239 if (!s_animation.ee) {
240 evas_object_del(s_animation.win);
241 _E("Failed to get the ecore evas object");
248 int init_animation(int state, const char *msg)
250 _D("Init animation");
251 printf("Init animation\n");
253 Ecore_Timer *timer = NULL;
255 s_animation.state = state;
257 if (create_window() == EXIT_FAILURE) {
258 _E("Failed to create a new window");
259 printf("Failed to create a new window\n");
263 if (init_layout(msg) == EXIT_FAILURE) {
264 _E("Failed to init the layout object");
266 evas_object_del(s_animation.txt);
268 evas_object_del(s_animation.win);
274 int fini_animation(void)
277 evas_object_del(s_animation.win);