diff options
Diffstat (limited to 'main/src/ug-image-viewer.c')
-rwxr-xr-x | main/src/ug-image-viewer.c | 387 |
1 files changed, 301 insertions, 86 deletions
diff --git a/main/src/ug-image-viewer.c b/main/src/ug-image-viewer.c index 44958fd..ab2377f 100755 --- a/main/src/ug-image-viewer.c +++ b/main/src/ug-image-viewer.c @@ -1,37 +1,98 @@ -/* - * Copyright 2012 Samsung Electronics Co., Ltd - * - * Licensed under the Flora License, Version 1.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.tizenopensource.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. - */ - +/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.tizenopensource.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 <Elementary.h> #include <ui-gadget-module.h> +#include <app.h> + #include <Ecore_X.h> /*EFL*/ #include "ivug-common.h" //common #include "ivug-util.h" -#include "ivug-main.h" #include "ivug-main-view.h" #include "ivug-setas-view.h" +#include "ivug-crop-ug.h" #include "ivug-details-view.h" -#include "ivug-slider.h" + +#include "ivug-callback.h" +#include "ivug-context.h" #include "ug-image-viewer.h" -#include "ivug-data.h" #include "ivug-parameter.h" +static void _on_base_resize(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Coord x,y,w,h; + evas_object_geometry_get(obj, &x, &y, &w, &h); + + MSG_IMAGEVIEW_HIGH("Base layout resized geomtery XYWH(%d,%d,%d,%d) angle=%d", x, y, w, h, elm_win_rotation_get(ug_get_window())); +} + +static void _on_base_move(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + Evas_Coord x,y,w,h; + evas_object_geometry_get(obj, &x, &y, &w, &h); + + MSG_IMAGEVIEW_HIGH("Base layout moved geomtery XYWH(%d,%d,%d,%d) angle=%d", x, y, w, h, elm_win_rotation_get(ug_get_window())); +} + +static void _on_receive_mouse_down (void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + MSG_MAIN_HIGH("Base layout clicked : %s Layer=%d",evas_object_name_get(obj), evas_object_layer_get(obj)); +} + +static void _print_render_method(Evas *e) +{ + IV_ASSERT(e != NULL ); + + Eina_List *engines, *l; + int cur_id; + int id; + char *name; + + engines = evas_render_method_list (); + if (!engines) { + MSG_IMAGEVIEW_ERROR("No engine is specified"); + return; + } + + cur_id = evas_output_method_get (e); + + EINA_LIST_FOREACH (engines, l, name) { + id = evas_render_method_lookup (name); + if (name && id == cur_id) + { + MSG_IMAGEVIEW_HIGH("Render method is %s", name); + break; + } + } + +} + +static void _on_render_post(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + MSG_IMAGEVIEW_HIGH("***************render_post***************"); +} + +static void _on_render_pre(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + MSG_IMAGEVIEW_HIGH("***************render_pre***************"); +} + static Evas_Object *create_fullview(Evas_Object *win, struct ug_data *ugd) { Evas_Object *base; @@ -42,7 +103,7 @@ static Evas_Object *create_fullview(Evas_Object *win, struct ug_data *ugd) Eina_Bool ret; ret = elm_layout_file_set(base , EDJ_PATH"/ivug-base.edj", "ivug_base" ); - + evas_object_name_set(base, "Base layout"); if ( ret == EINA_FALSE) { MSG_IMAGEVIEW_HIGH("Cannot set layout. EDJ=%s Group=%s", EDJ_PATH"/ivug-base.edj", "ivug_base"); @@ -65,16 +126,20 @@ static Evas_Object *create_frameview(Evas_Object *parent, struct ug_data *ugd) /* Create Frame view */ base = elm_layout_add(parent); + evas_object_name_set(base, "Base layout frame"); elm_layout_theme_set(base, "layout", "application", "default"); return base; } -static void *on_create(struct ui_gadget *ug, enum ug_mode mode, bundle *data, void *priv) + +static void *on_create(ui_gadget_h ug, enum ug_mode mode, service_h service, void *priv) { struct ug_data *ugd; - PERF_CHECK_BEGIN("On Create"); + PERF_CHECK_END(LVL0, "UG_MODULE_INIT -> On Create"); + + PERF_CHECK_BEGIN(LVL0, "On Create"); MSG_IMAGEVIEW_HIGH("Image Viewer : %s ug=0x%08x", __func__, ug); @@ -96,25 +161,27 @@ static void *on_create(struct ui_gadget *ug, enum ug_mode mode, bundle *data, vo return NULL; } - PERF_CHECK_BEGIN(LVL1 "main_init"); + PERF_CHECK_BEGIN(LVL1, "init context"); //init - if (!ivug_main_init(ug)) + if (!ivug_context_init(ug)) { MSG_IMAGEVIEW_ERROR("ivug_main_init error"); return NULL; } - PERF_CHECK_END(LVL1 "main_init"); + PERF_CHECK_END(LVL1, "init context"); - PERF_CHECK_BEGIN(LVL1 "parse bundle"); + PERF_CHECK_BEGIN(LVL1, "parse bundle"); - ugd->ivug_param = ivug_param_create_from_bundle(data); + ugd->ivug_param = ivug_param_create_from_bundle(service); if ( ugd->ivug_param == NULL ) { MSG_IMAGEVIEW_ERROR("Cannot parse parameter"); - ivug_main_deinit(ug); + ivug_context_deinit(ug); return NULL; } - PERF_CHECK_END(LVL1 "parse bundle"); + PERF_CHECK_END(LVL1, "parse bundle"); + + PERF_CHECK_BEGIN(LVL1, "creating base"); //create base if (mode == UG_MODE_FULLVIEW) @@ -127,6 +194,7 @@ static void *on_create(struct ui_gadget *ug, enum ug_mode mode, bundle *data, vo MSG_IMAGEVIEW_MED("create base layout for FrameView"); ugd->base = create_frameview(ug_get_window(), ugd); } + PERF_CHECK_END(LVL1, "creating base"); if ( ugd->base == NULL ) { @@ -134,14 +202,60 @@ static void *on_create(struct ui_gadget *ug, enum ug_mode mode, bundle *data, vo return NULL; } + MSG_IMAGEVIEW_HIGH("UG base created : 0x%08x", ugd->base); + evas_object_event_callback_add(ugd->base, EVAS_CALLBACK_MOUSE_DOWN, _on_receive_mouse_down, NULL); + + evas_object_event_callback_add(ugd->base, EVAS_CALLBACK_RESIZE, _on_base_resize, NULL); + evas_object_event_callback_add(ugd->base, EVAS_CALLBACK_MOVE, _on_base_move, NULL); + + evas_object_event_callback_add(ugd->base, EVAS_CALLBACK_RENDER_PRE, _on_render_pre, NULL); + evas_object_event_callback_add(ugd->base, EVAS_CALLBACK_RENDER_POST, _on_render_post, NULL); + if(ugd->ivug_param->mode == IVUG_MODE_SETAS) { MSG_IMAGEVIEW_HIGH("UG types=%d", ugd->ivug_param->setas_type); - if(ugd->ivug_param->setas_type == IVUG_SET_AS_UG_TYPE_WALLPAPER) + ivug_setas_mode setas_mode = IVUG_SETAS_UG; + if(ugd->ivug_param->bStandalone == true) + { + setas_mode = IVUG_SETAS_APPSVC; + } + + if(ugd->ivug_param->setas_type == IVUG_SET_AS_UG_TYPE_CALLER_ID) + { + ugd->setas_view = ivug_setas_view_callerid_ug_create(ugd->base, ugd->ivug_param->filepath, + setas_mode, ugd->ivug_param->width, ugd->ivug_param->height); + } + else if(ugd->ivug_param->setas_type == IVUG_SET_AS_UG_TYPE_VIDEO_CALL_ID) + { + ugd->setas_view = ivug_setas_view_video_call_id_ug_create(ugd->base, ugd->ivug_param->filepath, + setas_mode, ugd->ivug_param->width, ugd->ivug_param->height); + } + else if(ugd->ivug_param->setas_type == IVUG_SET_AS_UG_TYPE_WALLPAPER) { // From Wall paper in Setting - ugd->setas_view = ivug_setas_view_screen_ug_create(ugd->base, ugd->ivug_param->filepath); + if(setas_mode == IVUG_SETAS_APPSVC) + { + ugd->setas_view = ivug_setas_view_screen_ug_create(ugd->base, ugd->ivug_param->filepath, + setas_mode, IVUG_CTRLBAR_SET_SCREEN_HOME); + } + else + { + ugd->setas_view = ivug_setas_view_screen_ug_create(ugd->base, ugd->ivug_param->filepath, + setas_mode, IVUG_CTRLBAR_SET_SCREEN_UNDEFINED); + } + } + else if(ugd->ivug_param->setas_type == IVUG_SET_AS_UG_TYPE_CROP) + { + // Crop UG + ugd->crop_ug = ivug_crop_ug_create(ugd->base, + ugd->ivug_param->width, ugd->ivug_param->height, + ugd->ivug_param->bRatioFix, ugd->ivug_param->filepath); + } + else if(ugd->ivug_param->setas_type == IVUG_SET_AS_UG_TYPE_WALLPAPER_ONLY) + { + ugd->setas_view = ivug_setas_view_screen_ug_create(ugd->base, ugd->ivug_param->filepath, + setas_mode, IVUG_CTRLBAR_SET_SCREEN_HOME); } else { @@ -149,19 +263,22 @@ static void *on_create(struct ui_gadget *ug, enum ug_mode mode, bundle *data, vo return NULL; } - if(ugd->setas_view == NULL) + if(ugd->setas_view == NULL && ugd->crop_ug == NULL) { MSG_IMAGEVIEW_ERROR("SetAS UG creation failed Type:%d", ugd->ivug_param->setas_type); - ivug_main_deinit(ug); - if (ugd->base) - { - evas_object_del(ugd->base); - ugd->base = NULL; - } - return NULL; + goto ON_CREATE_ERROR; } - Evas_Object *layout = ivug_setas_view_object_get(ugd->setas_view); + Evas_Object *layout = NULL; + + if(ugd->setas_view) + { + layout = ivug_setas_view_object_get(ugd->setas_view); + } + else if(ugd->crop_ug) + { + layout = ivug_crop_ug_get_layout(ugd->crop_ug); + } elm_object_part_content_set(ugd->base, "elm.swallow.content", layout); //swallow evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); @@ -170,59 +287,92 @@ static void *on_create(struct ui_gadget *ug, enum ug_mode mode, bundle *data, vo } else { - PERF_CHECK_BEGIN(LVL1 "main_view_create"); + PERF_CHECK_BEGIN(LVL1, "main_view_create"); ugd->main_view = ivug_main_view_create(ugd->base, ugd->ivug_param->mode, ugd->ivug_param->view_by); + PERF_CHECK_END(LVL1, "main_view_create"); + if (ugd->main_view == NULL) //set main view. { MSG_IMAGEVIEW_ERROR("Main View Layout Lading Fail"); - ivug_main_deinit(ug); - if (ugd->base) - { - evas_object_del(ugd->base); - ugd->base = NULL; - } - return NULL; + goto ON_CREATE_ERROR; } - PERF_CHECK_END(LVL1 "main_view_create"); - // Load list. + PERF_CHECK_BEGIN(LVL1, "main_view_load_list"); + if ( ivug_main_view_load_list(ugd->main_view, ugd->ivug_param) == false) { MSG_IMAGEVIEW_ERROR("Cannot load media list."); // Need popup? - ivug_main_deinit(ug); - if (ugd->base) - { - evas_object_del(ugd->base); - ugd->base = NULL; - } - return NULL; - + goto ON_CREATE_ERROR; } Evas_Object *layout = ivug_main_view_object_get(ugd->main_view); elm_object_part_content_set(ugd->base, "elm.swallow.content", layout); //swallow + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); evas_object_show(layout); - + PERF_CHECK_END(LVL1, "main_view_load_list"); } - PERF_CHECK_END("On Create"); + + PERF_CHECK_BEGIN(LVL1, "Force render"); + + evas_render(evas_object_evas_get(ugd->base)); + + PERF_CHECK_END(LVL1, "Force render"); + + PERF_CHECK_END(LVL0, "On Create"); + + PERF_CHECK_BEGIN(LVL0, "On Create -> On Start"); return ugd->base; + +ON_CREATE_ERROR: + if(ugd->main_view) + { + ivug_main_view_destroy(ugd->main_view); + } + ivug_context_deinit(ug); + if (ugd->base) + { + evas_object_del(ugd->base); + ugd->base = NULL; + } + return NULL; } -static void on_start(struct ui_gadget *ug, bundle *data, void *priv) +static void on_start(ui_gadget_h ug, service_h service, void *priv) { + PERF_CHECK_END(LVL0, "On Create -> On Start"); + + PERF_CHECK_BEGIN(LVL0, "On Start"); + MSG_IMAGEVIEW_HIGH("Image Viewer : %s", __func__); + + if (!ug || !priv) + { + MSG_IMAGEVIEW_ERROR("Invalid UG. UG=0x%08x Priv=0x%08x", ug, priv); + return ; + } + + struct ug_data *ugd = (struct ug_data *)priv; + + if ( ugd->main_view ) + { + PERF_CHECK_BEGIN(LVL1, "main_view_start"); + ivug_main_view_start(ugd->main_view); + PERF_CHECK_END(LVL1, "main_view_start"); + } + + PERF_CHECK_END(LVL0, "On Start"); } -static void on_pause(struct ui_gadget *ug, bundle *data, void *priv) +static void on_pause(ui_gadget_h ug, service_h service, void *priv) { MSG_IMAGEVIEW_HIGH("Image Viewer : %s", __func__); @@ -236,12 +386,12 @@ static void on_pause(struct ui_gadget *ug, bundle *data, void *priv) if ( ugd->main_view ) { - ivug_slider_stop_slide_show(ugd->main_view->slider); + ivug_main_view_pause(ugd->main_view); } } -static void on_resume(struct ui_gadget *ug, bundle *data, void *priv) +static void on_resume(ui_gadget_h ug, service_h service, void *priv) { MSG_IMAGEVIEW_HIGH("Image Viewer : %s", __func__); @@ -255,18 +405,16 @@ static void on_resume(struct ui_gadget *ug, bundle *data, void *priv) if ( ugd->main_view ) { - ivug_main_view_update(ugd->main_view); - -// ivug_slider_resume_slide_show(ugd->main_view->slider); + ivug_main_view_resume(ugd->main_view); } } -static void on_destroy(struct ui_gadget *ug, bundle *data, void *priv) +static void on_destroy(ui_gadget_h ug, service_h service, void *priv) { MSG_IMAGEVIEW_HIGH("Image Viewer : %s UG=0x%08x", __func__, ug); - PERF_CHECK_BEGIN("On Destroy"); + PERF_CHECK_BEGIN(LVL0, "On Destroy"); if (!ug || !priv) { @@ -277,17 +425,28 @@ static void on_destroy(struct ui_gadget *ug, bundle *data, void *priv) struct ug_data *ugd = (struct ug_data *)priv; MSG_IMAGEVIEW_HIGH("On Destroy : ug=0x%08x", ug); - //destroy main view. - if ( ugd->main_view ) - { - ivug_main_view_destroy(ugd->main_view); - ugd->main_view = NULL; - } if(ugd->setas_view) { + PERF_CHECK_BEGIN(LVL1, "SetAsView"); ivug_setas_view_destroy(ugd->setas_view); ugd->setas_view = NULL; + PERF_CHECK_END(LVL1, "SetAsView"); + } + + if(ugd->crop_ug) + { + ivug_crop_ug_destroy(ugd->crop_ug); + ugd->crop_ug = NULL; + } + + //destroy main view. + if ( ugd->main_view ) + { + PERF_CHECK_BEGIN(LVL1, "MainView"); + ivug_main_view_destroy(ugd->main_view); + ugd->main_view = NULL; + PERF_CHECK_END(LVL1, "MainView"); } //delete param. @@ -298,30 +457,66 @@ static void on_destroy(struct ui_gadget *ug, bundle *data, void *priv) } //finalize data - if ( !ivug_main_deinit(ug)) + PERF_CHECK_BEGIN(LVL1, "Context"); + if ( !ivug_context_deinit(ug)) { MSG_IMAGEVIEW_ERROR("ivug_main_deinit failed"); } + PERF_CHECK_END(LVL1, "Context"); if (ugd->base) { + PERF_CHECK_BEGIN(LVL1, "Base layout"); evas_object_del(ugd->base); ugd->base = NULL; + PERF_CHECK_END(LVL1, "Base layout"); } MSG_IMAGEVIEW_HIGH("Destroyed all ug"); - PERF_CHECK_END("On Destroy"); - + PERF_CHECK_END(LVL0, "On Destroy"); } +static bool _data_print(service_h service, const char *key, void *user_data) +{ + MSG_IVUG_HIGH(" %s", key); + + return true; +} -static void on_message(struct ui_gadget *ug, bundle *msg, bundle *data, void *priv) +static void on_message(ui_gadget_h ug, service_h msg, service_h service, void *priv) { MSG_IMAGEVIEW_HIGH("Image Viewer : %s UG=0x%08x", __func__, ug); //on message + + if (!ug || !priv) + { + MSG_IMAGEVIEW_ERROR("Invalid UG. UG=0x%08x Priv=0x%08x", ug, priv); + return; + } + + int ret = service_foreach_extra_data(service, _data_print, NULL); + + if(SERVICE_ERROR_NONE != ret) + { + MSG_IVUG_ERROR("service_foreach_extra_data ERROR"); + } + + struct ug_data *ugd = (struct ug_data *)priv; + + //ivug_msg_type msg_type = IVUG_MSG_NONE; + + if(ugd->main_view == NULL) + { + MSG_IMAGEVIEW_ERROR("main view is NULL"); + return; + } + + ivug_callback_call(gGetCallbackHandle(), service, NULL, NULL); + + return; } -static void on_event(struct ui_gadget *ug, enum ug_event event, bundle *data, void *priv) +static void on_event(ui_gadget_h ug, enum ug_event event, service_h service, void *priv) { if (!ug || !priv) { @@ -330,8 +525,6 @@ static void on_event(struct ui_gadget *ug, enum ug_event event, bundle *data, vo } MSG_IMAGEVIEW_HIGH("Image Viewer : %s UG=0x%08x", __func__, ug); //on message - //struct ug_data *ugd = (struct ug_data *)priv; - switch (event) { case UG_EVENT_LOW_MEMORY: MSG_IMAGEVIEW_HIGH("Get Event : Low Memory"); @@ -342,6 +535,14 @@ static void on_event(struct ui_gadget *ug, enum ug_event event, bundle *data, vo case UG_EVENT_LANG_CHANGE: MSG_IMAGEVIEW_HIGH("Get Event : Language changed"); break; + + case UG_EVENT_ROTATE_PORTRAIT: + case UG_EVENT_ROTATE_LANDSCAPE: + case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN: + case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN: + // Rotate event is not used now.. plz, use only resized callback. + break; + default: MSG_IMAGEVIEW_ERROR("Unknown event type : %d", event); break; @@ -352,7 +553,7 @@ UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops) { struct ug_data *ugd; - MSG_IMAGEVIEW_HIGH("UG_MODULE_INIT"); + MSG_IMAGEVIEW_HIGH("UG_MODULE_INIT. Ver=12.0"); if (!ops) { @@ -367,7 +568,7 @@ UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops) return -1; } - PERF_INIT(); + IV_PERF_INIT(); ops->create = on_create; ops->start = on_start; @@ -379,6 +580,8 @@ UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops) ops->priv = ugd; ops->opt = UG_OPT_INDICATOR_ENABLE; + PERF_CHECK_BEGIN(LVL0, "UG_MODULE_INIT -> On Create"); + return 0; } @@ -400,9 +603,21 @@ UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops) MSG_IMAGEVIEW_HIGH("UG_MODULE_EXIT"); - PERF_SHOW_RESULT(stdout); +#ifdef TA_SAVETO_FILE + FILE *fp = NULL; + + fp = fopen(DATADIR"/"PACKAGE"/TimeAnal", "a"); + + IV_ASSERT(fp != NULL); + + PERF_SHOW_RESULT(fp); + + fclose(fp); +#else + PERF_SHOW_RESULT(stderr); +#endif - PERF_DEINIT(); + IV_PERF_DEINIT(); } |