diff options
Diffstat (limited to 'src/edc-callback/cam_ev_edc_callback.c')
-rwxr-xr-x | src/edc-callback/cam_ev_edc_callback.c | 277 |
1 files changed, 277 insertions, 0 deletions
diff --git a/src/edc-callback/cam_ev_edc_callback.c b/src/edc-callback/cam_ev_edc_callback.c new file mode 100755 index 0000000..1f76c1e --- /dev/null +++ b/src/edc-callback/cam_ev_edc_callback.c @@ -0,0 +1,277 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.1 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://floralicense.org/license/ + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#include "cam.h" +#include "cam_ev_edc_callback.h" + + +#define EV_DESTROY_TIME 3 +#define EXPOSURE_VALUE_GAP 4 + + +static Evas_Object *slider = NULL; +static Ecore_Timer *ev_destroy_timer = NULL; + +static Eina_Bool __ev_destroy_timer_cb(void *data); +static void __set_ev_value(struct appdata *data, int ev_value); +static void __ev_slider_stop_cb(void *data, Evas_Object *obj, void *event_info); +static void __ev_slider_changed_cb(void *data, Evas_Object *obj, void *event_info); +static void __ev_selected_cb(void *data, Evas_Object *obj, const char *emission, const char *source); + + +static Eina_Bool __ev_destroy_timer_cb(void *data) +{ + CAM_UI_LOG(); + + struct appdata *ad = (struct appdata *)data; + cam_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL"); + + unload_ev_edje(ad); + + if (ev_destroy_timer) + ev_destroy_timer = NULL; + + return ECORE_CALLBACK_CANCEL; +} + +static void __set_ev_value(struct appdata *data, int ev_value) +{ + CAM_UI_LOG(); + + struct appdata *ad = (struct appdata *)data; + cam_retm_if(ad == NULL, "appdata is NULL"); + + GValue value = { 0 }; + CAM_GVALUE_SET_INT(value, ev_value); + + if (!cam_handle_value_set(ad, PROP_BRIGHTNESS, &value)) { + DEBUG_TRACE("cam_handle_value_set failed"); + } +} + +static void __ev_slider_stop_cb(void *data, Evas_Object *obj, void *event_info) +{ + struct appdata *ad = (struct appdata *)data; + cam_retm_if(ad == NULL, "appdata is NULL"); + + if (obj) { + Evas_Object *slider = (Evas_Object *)obj; + int slider_value = (int)elm_slider_value_get(slider); + elm_slider_value_set(slider, slider_value); + } else { + cam_critical(LOG_UI, "Error : slider is NULL"); + } + + if(ev_destroy_timer) + ecore_timer_reset(ev_destroy_timer); +} + +static void __ev_slider_changed_cb(void *data, Evas_Object *obj, void *event_info) +{ + struct appdata *ad = (struct appdata *)data; + cam_retm_if(ad == NULL, "appdata is NULL"); + CamAppData *camapp = ad->camapp_handle; + cam_retm_if(camapp == NULL, "camapp_handle is NULL"); + + if (obj) { + Evas_Object *slider = (Evas_Object *)obj; + int slider_value = (int)elm_slider_value_get(slider); + + if (camapp->self_portrait == FALSE) + slider_value += EXPOSURE_VALUE_GAP; + + __set_ev_value(ad, slider_value); + } else { + cam_critical(LOG_UI, "Error : slider is NULL"); + } + + if(ev_destroy_timer) + ecore_timer_reset(ev_destroy_timer); + cam_app_timeout_checker_update(); +} + +static void __ev_selected_cb(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + struct appdata *ad = (struct appdata *)data; + cam_retm_if(ad == NULL, "appdata is NULL"); + CamAppData *camapp = ad->camapp_handle; + cam_retm_if(camapp == NULL, "camapp_handle is NULL"); + + if (emission && source) + cam_debug(LOG_UI, "signal: %s, comes from:%s", emission, source); + + int slider_value = (int)elm_slider_value_get(slider); + + if (camapp->self_portrait == FALSE) + slider_value += EXPOSURE_VALUE_GAP; + + if (emission) { + if (strcmp(emission, "icon_minus,clicked") == 0) { + if (slider_value > camapp->brightness_min) + slider_value--; + } else if (strcmp(emission, "icon_plus,clicked") == 0) { + if (slider_value < camapp->brightness_max) + slider_value++; + } + } else { + cam_critical(LOG_UI, "emission is NULL"); + } + + __set_ev_value(ad, slider_value); + update_ev_edje(ad); + + if(ev_destroy_timer) + ecore_timer_reset(ev_destroy_timer); + cam_app_timeout_checker_update(); +} + +gboolean load_ev_edje(struct appdata *ad) +{ + DEBUG_TRACE("START"); + + cam_retvm_if(ad == NULL, FALSE, "appdata is NULL"); + CamAppData *camapp = ad->camapp_handle; + cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL"); + + if(ad->ev_edje) + unload_ev_edje(ad); + + int slider_max = 0; + int slider_min = 0; + + elm_object_part_content_unset(ad->ug_base, "ev_layout"); + + /* ev bg */ + gboolean portrait = FALSE; + gboolean slider_inverse = FALSE; + switch (ad->target_direction) { + case CAM_TARGET_DIRECTION_LANDSCAPE: + ad->ev_edje = cam_app_load_edj(ad->ug_base, CAM_EV_EDJ_NAME, GRP_MAIN); + portrait = FALSE; + slider_inverse = TRUE; + break; + case CAM_TARGET_DIRECTION_LANDSCAPE_INVERSE: + ad->ev_edje = cam_app_load_edj(ad->ug_base, CAM_EV_EDJ_INVERSE_NAME, GRP_MAIN); + portrait = FALSE; + slider_inverse = FALSE; + break; + case CAM_TARGET_DIRECTION_PORTRAIT: + ad->ev_edje = cam_app_load_edj(ad->ug_base, CAM_EV_EDJ_VERTICAL_NAME, GRP_MAIN); + portrait = TRUE; + slider_inverse = FALSE; + break; + case CAM_TARGET_DIRECTION_PORTRAIT_INVERSE: + ad->ev_edje = cam_app_load_edj(ad->ug_base, CAM_EV_EDJ_VERTICAL_INVERSE_NAME, GRP_MAIN); + slider_inverse = TRUE; + portrait = TRUE; + break; + default: + cam_critical(LOG_UI, "Invalid target direction!!!"); + } + + cam_retvm_if(ad->ev_edje == NULL, FALSE, "ev_edje is NULL"); + elm_object_part_content_set(ad->ug_base, "ev_layout", ad->ev_edje); + + /* ev icon */ + if (!ad->ev_icon_minus_edje) { + ad->ev_icon_minus_edje = (Evas_Object *)edje_object_part_object_get(_EDJ(ad->ev_edje), "icon_minus"); + } + cam_retvm_if(ad->ev_icon_minus_edje == NULL, FALSE, "ev_icon_minus_edje is NULL"); + + if (!ad->ev_icon_plus_edje) { + ad->ev_icon_plus_edje = (Evas_Object *)edje_object_part_object_get(_EDJ(ad->ev_edje), "icon_plus"); + } + cam_retvm_if(ad->ev_icon_plus_edje == NULL, FALSE, "ev_icon_plus_edje is NULL"); + + /* ev slider */ + slider = elm_slider_add(ad->ev_edje); + cam_retvm_if(slider == NULL, FALSE, "slider is NULL"); + + if (camapp->self_portrait == FALSE) + slider_max = camapp->brightness_max / 2; + else + slider_max = camapp->brightness_max; + + slider_min = (-slider_max); + + elm_object_style_set(slider, "camera"); + if (portrait) { + elm_slider_horizontal_set(slider, EINA_TRUE); + } else { + elm_slider_horizontal_set(slider, EINA_FALSE); + } + if (slider_inverse) { + elm_slider_inverted_set(slider, EINA_TRUE); + } else { + elm_slider_inverted_set(slider, EINA_FALSE); + } + + elm_slider_min_max_set(slider, slider_min, slider_max); + + if (camapp->self_portrait == FALSE) + elm_slider_value_set(slider, camapp->brightness - EXPOSURE_VALUE_GAP); + else + elm_slider_value_set(slider, camapp->brightness); + + evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_part_content_set(ad->ev_edje, "slider", slider); + + evas_object_smart_callback_del(slider, "slider,drag,stop", __ev_slider_stop_cb); + evas_object_smart_callback_add(slider, "slider,drag,stop", __ev_slider_stop_cb, (void*)ad); + evas_object_smart_callback_del(slider, "changed", __ev_slider_changed_cb); + evas_object_smart_callback_add(slider, "changed", __ev_slider_changed_cb, (void*)ad); + edje_object_signal_callback_del(_EDJ(ad->ev_edje), "*", "ev_icon_signal", __ev_selected_cb); + edje_object_signal_callback_add(_EDJ(ad->ev_edje), "*", "ev_icon_signal", __ev_selected_cb, (void *)ad); + + ev_destroy_timer = ecore_timer_add(EV_DESTROY_TIME, __ev_destroy_timer_cb, ad); + + return TRUE; +} + +gboolean update_ev_edje(struct appdata *ad) +{ + DEBUG_TRACE("START"); + + cam_retvm_if(ad == NULL, FALSE, "appdata is NULL"); + CamAppData *camapp = ad->camapp_handle; + cam_retvm_if(camapp == NULL, FALSE, "camapp_handle is NULL"); + + cam_retvm_if(ad->ev_edje == NULL, FALSE, "ev_edje is NULL"); + cam_retvm_if(slider == NULL, FALSE, "ev slider is NULL"); + + if (camapp->self_portrait == FALSE) + elm_slider_value_set(slider, camapp->brightness - EXPOSURE_VALUE_GAP); + else + elm_slider_value_set(slider, camapp->brightness); + + return TRUE; +} + +gboolean unload_ev_edje(struct appdata *ad) +{ + cam_retvm_if(ad == NULL, FALSE, "appdata is NULL"); + + DEL_EVAS_OBJECT(ad->ev_icon_minus_edje); + DEL_EVAS_OBJECT(ad->ev_icon_plus_edje); + DEL_EVAS_OBJECT(ad->ev_edje); + REMOVE_TIMER(ev_destroy_timer); + + return TRUE; +} + +//endfile |