summaryrefslogtreecommitdiff
path: root/src/edc-callback/cam_ev_edc_callback.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/edc-callback/cam_ev_edc_callback.c')
-rwxr-xr-xsrc/edc-callback/cam_ev_edc_callback.c277
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