2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.1 (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://floralicense.org/license/
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.
19 #include "cam_ev_edc_callback.h"
22 #define EV_DESTROY_TIME 3
23 #define EXPOSURE_VALUE_GAP 4
26 static Evas_Object *slider = NULL;
27 static Ecore_Timer *ev_destroy_timer = NULL;
29 static Eina_Bool __ev_destroy_timer_cb(void *data);
30 static void __set_ev_value(struct appdata *data, int ev_value);
31 static void __ev_slider_stop_cb(void *data, Evas_Object *obj, void *event_info);
32 static void __ev_slider_changed_cb(void *data, Evas_Object *obj, void *event_info);
33 static void __ev_selected_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
36 static Eina_Bool __ev_destroy_timer_cb(void *data)
40 struct appdata *ad = (struct appdata *)data;
41 cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
46 ev_destroy_timer = NULL;
48 return ECORE_CALLBACK_CANCEL;
51 static void __set_ev_value(struct appdata *data, int ev_value)
55 struct appdata *ad = (struct appdata *)data;
56 cam_retm_if(ad == NULL, "appdata is NULL");
59 CAM_GVALUE_SET_INT(value, ev_value);
61 if (!cam_handle_value_set(ad, PROP_BRIGHTNESS, &value)) {
62 DEBUG_TRACE("cam_handle_value_set failed");
66 static void __ev_slider_stop_cb(void *data, Evas_Object *obj, void *event_info)
68 struct appdata *ad = (struct appdata *)data;
69 cam_retm_if(ad == NULL, "appdata is NULL");
72 Evas_Object *slider = (Evas_Object *)obj;
73 int slider_value = (int)elm_slider_value_get(slider);
74 elm_slider_value_set(slider, slider_value);
76 cam_critical(LOG_UI, "Error : slider is NULL");
80 ecore_timer_reset(ev_destroy_timer);
83 static void __ev_slider_changed_cb(void *data, Evas_Object *obj, void *event_info)
85 struct appdata *ad = (struct appdata *)data;
86 cam_retm_if(ad == NULL, "appdata is NULL");
87 CamAppData *camapp = ad->camapp_handle;
88 cam_retm_if(camapp == NULL, "camapp_handle is NULL");
91 Evas_Object *slider = (Evas_Object *)obj;
92 int slider_value = (int)elm_slider_value_get(slider);
94 if (camapp->self_portrait == FALSE)
95 slider_value += EXPOSURE_VALUE_GAP;
97 __set_ev_value(ad, slider_value);
99 cam_critical(LOG_UI, "Error : slider is NULL");
103 ecore_timer_reset(ev_destroy_timer);
104 cam_app_timeout_checker_update();
107 static void __ev_selected_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
109 struct appdata *ad = (struct appdata *)data;
110 cam_retm_if(ad == NULL, "appdata is NULL");
111 CamAppData *camapp = ad->camapp_handle;
112 cam_retm_if(camapp == NULL, "camapp_handle is NULL");
114 if (emission && source)
115 cam_debug(LOG_UI, "signal: %s, comes from:%s", emission, source);
117 int slider_value = (int)elm_slider_value_get(slider);
119 if (camapp->self_portrait == FALSE)
120 slider_value += EXPOSURE_VALUE_GAP;
123 if (strcmp(emission, "icon_minus,clicked") == 0) {
124 if (slider_value > camapp->brightness_min)
126 } else if (strcmp(emission, "icon_plus,clicked") == 0) {
127 if (slider_value < camapp->brightness_max)
131 cam_critical(LOG_UI, "emission is NULL");
134 __set_ev_value(ad, slider_value);
138 ecore_timer_reset(ev_destroy_timer);
139 cam_app_timeout_checker_update();
142 gboolean load_ev_edje(struct appdata *ad)
144 DEBUG_TRACE("START");
146 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
147 CamAppData *camapp = ad->camapp_handle;
148 cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
156 elm_object_part_content_unset(ad->ug_base, "ev_layout");
159 gboolean portrait = FALSE;
160 gboolean slider_inverse = FALSE;
161 switch (ad->target_direction) {
162 case CAM_TARGET_DIRECTION_LANDSCAPE:
163 ad->ev_edje = cam_app_load_edj(ad->ug_base, CAM_EV_EDJ_NAME, GRP_MAIN);
165 slider_inverse = TRUE;
167 case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE:
168 ad->ev_edje = cam_app_load_edj(ad->ug_base, CAM_EV_EDJ_INVERSE_NAME, GRP_MAIN);
170 slider_inverse = FALSE;
172 case CAM_TARGET_DIRECTION_PORTRAIT:
173 ad->ev_edje = cam_app_load_edj(ad->ug_base, CAM_EV_EDJ_VERTICAL_NAME, GRP_MAIN);
175 slider_inverse = FALSE;
177 case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE:
178 ad->ev_edje = cam_app_load_edj(ad->ug_base, CAM_EV_EDJ_VERTICAL_INVERSE_NAME, GRP_MAIN);
179 slider_inverse = TRUE;
183 cam_critical(LOG_UI, "Invalid target direction!!!");
186 cam_retvm_if(ad->ev_edje == NULL, FALSE, "ev_edje is NULL");
187 elm_object_part_content_set(ad->ug_base, "ev_layout", ad->ev_edje);
190 if (!ad->ev_icon_minus_edje) {
191 ad->ev_icon_minus_edje = (Evas_Object *)edje_object_part_object_get(_EDJ(ad->ev_edje), "icon_minus");
193 cam_retvm_if(ad->ev_icon_minus_edje == NULL, FALSE, "ev_icon_minus_edje is NULL");
195 if (!ad->ev_icon_plus_edje) {
196 ad->ev_icon_plus_edje = (Evas_Object *)edje_object_part_object_get(_EDJ(ad->ev_edje), "icon_plus");
198 cam_retvm_if(ad->ev_icon_plus_edje == NULL, FALSE, "ev_icon_plus_edje is NULL");
201 slider = elm_slider_add(ad->ev_edje);
202 cam_retvm_if(slider == NULL, FALSE, "slider is NULL");
204 if (camapp->self_portrait == FALSE)
205 slider_max = camapp->brightness_max / 2;
207 slider_max = camapp->brightness_max;
209 slider_min = (-slider_max);
211 elm_object_style_set(slider, "camera");
213 elm_slider_horizontal_set(slider, EINA_TRUE);
215 elm_slider_horizontal_set(slider, EINA_FALSE);
217 if (slider_inverse) {
218 elm_slider_inverted_set(slider, EINA_TRUE);
220 elm_slider_inverted_set(slider, EINA_FALSE);
223 elm_slider_min_max_set(slider, slider_min, slider_max);
225 if (camapp->self_portrait == FALSE)
226 elm_slider_value_set(slider, camapp->brightness - EXPOSURE_VALUE_GAP);
228 elm_slider_value_set(slider, camapp->brightness);
230 evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, EVAS_HINT_FILL);
231 evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
232 elm_object_part_content_set(ad->ev_edje, "slider", slider);
234 evas_object_smart_callback_del(slider, "slider,drag,stop", __ev_slider_stop_cb);
235 evas_object_smart_callback_add(slider, "slider,drag,stop", __ev_slider_stop_cb, (void*)ad);
236 evas_object_smart_callback_del(slider, "changed", __ev_slider_changed_cb);
237 evas_object_smart_callback_add(slider, "changed", __ev_slider_changed_cb, (void*)ad);
238 edje_object_signal_callback_del(_EDJ(ad->ev_edje), "*", "ev_icon_signal", __ev_selected_cb);
239 edje_object_signal_callback_add(_EDJ(ad->ev_edje), "*", "ev_icon_signal", __ev_selected_cb, (void *)ad);
241 ev_destroy_timer = ecore_timer_add(EV_DESTROY_TIME, __ev_destroy_timer_cb, ad);
246 gboolean update_ev_edje(struct appdata *ad)
248 DEBUG_TRACE("START");
250 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
251 CamAppData *camapp = ad->camapp_handle;
252 cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL");
254 cam_retvm_if(ad->ev_edje == NULL, FALSE, "ev_edje is NULL");
255 cam_retvm_if(slider == NULL, FALSE, "ev slider is NULL");
257 if (camapp->self_portrait == FALSE)
258 elm_slider_value_set(slider, camapp->brightness - EXPOSURE_VALUE_GAP);
260 elm_slider_value_set(slider, camapp->brightness);
265 gboolean unload_ev_edje(struct appdata *ad)
267 cam_retvm_if(ad == NULL, FALSE, "appdata is NULL");
269 DEL_EVAS_OBJECT(ad->ev_icon_minus_edje);
270 DEL_EVAS_OBJECT(ad->ev_icon_plus_edje);
271 DEL_EVAS_OBJECT(ad->ev_edje);
272 REMOVE_TIMER(ev_destroy_timer);