bb141446de3136cc93a4b68e3b234ad90da1d72c
[apps/home/draglock.git] / src / draglock-ui.c
1 /*
2  * Copyright 2012  Samsung Electronics Co., Ltd
3  *
4  * Licensed under the Flora License, Version 1.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
7  *
8  *  http://www.tizenopensource.org/license
9  *
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.
15  */
16
17 #include <app.h>
18 #include "draglock.h"
19 #include "draglock-util.h"
20 #include "draglock-bg.h"
21 #include "draglock-time.h"
22 #include "draglock-slide.h"
23
24 static void _draglock_ui_down_cb(void *data, Evas *evas, Evas_Object *obj,
25                 void *event_info) {
26         Evas_Event_Mouse_Down *ev = event_info;
27         struct appdata *ad = (struct appdata *) data;
28
29         if (ad == NULL) {
30                 DRAGLOCK_ERR("appdata is NULL");
31                 return;
32         }
33
34         if (ev == NULL) {
35                 DRAGLOCK_ERR("event_info is NULL");
36                 return;
37         }
38
39         if (ad->slide_rel1.x <= ev->canvas.x && ad->slide_rel1.y <= ev->canvas.y
40                         && (ad->slide_rel1.x + ad->slide_rel1.w) >= ev->canvas.x
41                         && (ad->slide_rel1.y + ad->slide_rel1.h) >= ev->canvas.y) {
42                 ad->slide_status = TRUE;
43
44                 edje_object_signal_emit(_EDJ(ad->slide_layout), "press",
45                                 "lock.image.l");
46                 edje_object_signal_emit(_EDJ(ad->slide_layout), "press02",
47                                 "lock.image.r");
48         } else {
49                 DRAGLOCK_DBG("sliding is canceled");
50                 ad->slide_status = FALSE;
51         }
52 }
53
54 static void _draglock_ui_move_cb(void *data, Evas *evas, Evas_Object *obj,
55                 void *event_info) {
56         Evas_Event_Mouse_Move *ev = event_info;
57         struct appdata *ad = (struct appdata *) data;
58         int step_width = 0;
59         int step_number = 0;
60         int alpha = 0;
61
62         if (ad == NULL) {
63                 DRAGLOCK_ERR("appdata is NULL");
64                 return;
65         }
66
67         if (ev == NULL) {
68                 DRAGLOCK_ERR("event_info is NULL");
69                 return;
70         }
71
72         if (ad->slide_status == FALSE)
73         {
74                 return;
75         }
76
77         if (ad->slide_rel1.x <= ev->cur.canvas.x
78                         && ad->slide_rel1.y <= ev->cur.canvas.y
79                         && (ad->slide_rel2.x + ad->slide_rel2.w) >= ev->cur.canvas.x
80                         && (ad->slide_rel2.y + ad->slide_rel2.h) >= ev->cur.canvas.y) {
81                 ad->slide_status = TRUE;
82
83                 step_width = (ad->slide_rel2.x + ad->slide_rel2.w - ad->slide_rel1.x)
84                                 / 14;
85                 step_number = (ev->cur.canvas.x - ad->slide_rel1.x) / step_width;
86
87                 alpha = 255 - (2.55 * step_number * 3);
88
89                 if (step_number < 1) {
90                         edje_object_signal_emit(_EDJ(ad->slide_layout), "press02",
91                                         "lock.image.r");
92                 } else if (step_number < 2) {
93                         edje_object_signal_emit(_EDJ(ad->slide_layout), "press03",
94                                         "lock.image.r");
95                 } else if (step_number < 3) {
96                         edje_object_signal_emit(_EDJ(ad->slide_layout), "press04",
97                                         "lock.image.r");
98                 } else if (step_number < 4) {
99                         edje_object_signal_emit(_EDJ(ad->slide_layout), "press05",
100                                         "lock.image.r");
101                 } else if (step_number < 5) {
102                         edje_object_signal_emit(_EDJ(ad->slide_layout), "press06",
103                                         "lock.image.r");
104                 } else if (step_number < 6) {
105                         edje_object_signal_emit(_EDJ(ad->slide_layout), "press07",
106                                         "lock.image.r");
107                 } else if (step_number < 7) {
108                         edje_object_signal_emit(_EDJ(ad->slide_layout), "press08",
109                                         "lock.image.r");
110                 } else if (step_number < 8) {
111                         edje_object_signal_emit(_EDJ(ad->slide_layout), "press09",
112                                         "lock.image.r");
113                 } else if (step_number < 9) {
114                         edje_object_signal_emit(_EDJ(ad->slide_layout), "press10",
115                                         "lock.image.r");
116                 } else if (step_number < 10) {
117                         edje_object_signal_emit(_EDJ(ad->slide_layout), "press11",
118                                         "lock.image.r");
119                 } else if (step_number < 11) {
120                         edje_object_signal_emit(_EDJ(ad->slide_layout), "press12",
121                                         "lock.image.r");
122                 } else if (step_number < 12) {
123                         edje_object_signal_emit(_EDJ(ad->slide_layout), "press13",
124                                         "lock.image.r");
125                 } else if (step_number < 13) {
126                         edje_object_signal_emit(_EDJ(ad->slide_layout), "press14",
127                                         "lock.image.r");
128                 } else {
129                         edje_object_signal_emit(_EDJ(ad->slide_layout), "press15",
130                                         "lock.image.r");
131                 }
132                 evas_object_color_set(ad->ui_layout, alpha, alpha, alpha, alpha);
133         } else {
134                 DRAGLOCK_DBG("sliding is canceled");
135                 ad->slide_status = FALSE;
136
137                 evas_object_color_set(ad->ui_layout, 255, 255, 255, 255);
138
139                 edje_object_signal_emit(_EDJ(ad->slide_layout), "release",
140                                 "lock.image.l");
141                 edje_object_signal_emit(_EDJ(ad->slide_layout), "release",
142                                 "lock.image.r");
143         }
144 }
145
146 static void _draglock_ui_up_cb(void *data, Evas *evas, Evas_Object *obj,
147                 void *event_info) {
148         Evas_Event_Mouse_Up *ev = event_info;
149         struct appdata *ad = (struct appdata *) data;
150
151         if (ad == NULL) {
152                 DRAGLOCK_ERR("appdata is NULL");
153                 return;
154         }
155
156         if (ev == NULL) {
157                 DRAGLOCK_ERR("event_info is NULL");
158                 return;
159         }
160
161         if (ad->slide_status == TRUE && ad->slide_rel2.x <= ev->canvas.x
162                         && ad->slide_rel2.y <= ev->canvas.y
163                         && (ad->slide_rel2.x + ad->slide_rel2.w) >= ev->canvas.x
164                         && (ad->slide_rel2.y + ad->slide_rel2.h) >= ev->canvas.y) {
165                 ad->slide_status = TRUE;
166         } else {
167                 DRAGLOCK_DBG("sliding is canceled");
168                 ad->slide_status = FALSE;
169         }
170
171         edje_object_signal_emit(_EDJ(ad->slide_layout), "release", "lock.image.l");
172         edje_object_signal_emit(_EDJ(ad->slide_layout), "release", "lock.image.r");
173
174         if (ad->slide_status == TRUE) {
175                 DRAGLOCK_DBG("unlock the lock-screen");
176                 app_efl_exit();
177         }
178
179         evas_object_color_set(ad->ui_layout, 255, 255, 255, 255);
180
181         ad->slide_status = FALSE;
182 }
183
184 int draglock_ui_create(void *data) {
185         struct appdata *ad = (struct appdata *) data;
186         Evas_Object *layout = NULL;
187         Evas_Object *image = NULL;
188         Evas_Object *time = NULL;
189         Evas_Object *slide = NULL;
190
191         if (ad == NULL) {
192                 return FALSE;
193         }
194
195         layout = draglock_util_add_layout(ad->win, EDJEFILE, "draglock-ui");
196         evas_object_resize(layout, ad->win_w, ad->win_h);
197
198         if (layout == NULL) {
199                 return FALSE;
200         }
201         ad->ui_layout = layout;
202
203         image = draglock_bg_get_image(layout);
204         elm_object_part_content_set(layout, "sw.bg", image);
205
206         time = draglock_time_get_time(ad);
207         elm_object_part_content_set(layout, "sw.time", time);
208
209         slide = draglock_slide_get_slider(layout);
210         evas_object_resize(slide, ad->win_w, SLIDE_RATIO_H * ad->win_h);
211         evas_object_move(slide, 0, SLIDE_RATIO_Y * ad->win_h);
212
213         ad->slide_layout = slide;
214
215         evas_object_geometry_get(
216                         edje_object_part_object_get(_EDJ(slide), "lock.wrapper.image.l"),
217                         &ad->slide_rel1.x, &ad->slide_rel1.y, &ad->slide_rel1.w,
218                         &ad->slide_rel1.h);
219
220         evas_object_geometry_get(
221                         edje_object_part_object_get(_EDJ(slide), "lock.wrapper.image.r"),
222                         &ad->slide_rel2.x, &ad->slide_rel2.y, &ad->slide_rel2.w,
223                         &ad->slide_rel2.h);
224
225         evas_object_event_callback_add(slide, EVAS_CALLBACK_MOUSE_MOVE,
226                         _draglock_ui_move_cb, ad);
227         evas_object_event_callback_add(slide, EVAS_CALLBACK_MOUSE_DOWN,
228                         _draglock_ui_down_cb, ad);
229         evas_object_event_callback_add(slide, EVAS_CALLBACK_MOUSE_UP,
230                         _draglock_ui_up_cb, ad);
231
232         evas_object_show(layout);
233
234         return TRUE;
235 }
236
237 int draglock_ui_destroy(void *data) {
238         struct appdata *ad = (struct appdata *) data;
239
240         if (ad == NULL) {
241                 return FALSE;
242         }
243
244         if (ad->clock_timer != NULL) {
245                 ecore_timer_del(ad->clock_timer);
246                 ad->clock_timer = NULL;
247         }
248
249         return TRUE;
250 }