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.
17 #include "ivug-common.h"
21 #include "ivug-slider-item.h"
23 #include "ivug-image.h"
25 #include "ivug-drm-common.h"
27 #include "ivug-config.h"
29 #define DEFAULT_THUMBNAIL_PATH IMAGE_PATH"/T01_Nocontents_broken.png"
30 #define DRM_NO_RIGHT_IMAGE_PATH IMAGE_PATH"/image_drm_no_rights.jpg"
32 #define IVUG_SLIDER_EDJ EDJ_PATH"/ivug-slider.edj"
34 #define USE_VIDEO_THUMBNAIL
38 Determine whether LIL(Large image layer) loads or not.
40 if define this feature, slider does not try to load image. only thumbnail is shown.
42 #undef DISABLE_LIL_LOADING
45 Use elm_icon istead of elm_image. elm_icon preserve image ratio. and seems more faster.
49 _show_thumbnail( Slide_Item* si, const char *filepath)
51 IV_ASSERT(si != NULL);
53 if (si->thumbnail == NULL)
55 MSG_SITEM_FATAL("slide item or thumbnail object is NULL");
59 if ( filepath == NULL )
61 MSG_SITEM_ERROR("thumbnail path is not exist");
65 MSG_SITEM_MED("Set thumbnail : %s", ivug_get_filename(filepath));
67 if (ivug_is_file_exist(filepath) == false )
69 MSG_SITEM_ERROR("Cannot find thumbnail : %s", filepath);
70 filepath = DEFAULT_THUMBNAIL_PATH;
73 if (elm_image_file_set(si->thumbnail, filepath, NULL) == EINA_FALSE)
75 MSG_SITEM_ERROR("Cannot load thumbnail : %s", filepath);
81 elm_image_object_size_get(si->thumbnail , &iw, &ih);
83 evas_object_repeat_events_set(si->thumbnail, EINA_FALSE);
84 edje_object_signal_emit(_EDJ(si->layout), "elm,state,show_thumbnail", "slider");
86 MSG_SITEM_HIGH("Set thumbnail(%dx%d). %s", iw, ih, ivug_get_filename(filepath));
90 evas_object_geometry_get(si->layout, &bx, &by, &bw, &bh);
92 MSG_SITEM_MED("EDJE Geomtetry(%d,%d,%d,%d)", bx, by, bw, bh);
99 _hide_thumbnail(Slide_Item* si)
101 IV_ASSERT(si != NULL);
103 evas_object_repeat_events_set(si->thumbnail, EINA_TRUE);
105 edje_object_signal_emit(_EDJ(si->layout), "elm,state,hide_thumbnail", "slider");
110 static void _show_progressbar(Slide_Item *si)
112 IV_ASSERT(si != NULL);
114 if ( si->progress == NULL )
117 PERF_CHECK_BEGIN(LVL6, "set progress");
119 PERF_CHECK_BEGIN(LVL7, "elm_progressbar_add");
120 si->progress = elm_progressbar_add(si->layout);
121 PERF_CHECK_END(LVL7, "elm_progressbar_add");
123 IV_ASSERT(si->progress != NULL);
125 PERF_CHECK_BEGIN(LVL7, "set style");
126 elm_object_style_set(si->progress, "list_process");
127 PERF_CHECK_END(LVL7, "set style");
129 PERF_CHECK_BEGIN(LVL7, "set pulse");
130 elm_progressbar_pulse(si->progress, EINA_FALSE);
131 PERF_CHECK_END(LVL7, "set pulse");
133 PERF_CHECK_BEGIN(LVL7, "swallow progress");
134 elm_object_part_content_set(si->layout, "slider.progress", si->progress);
135 PERF_CHECK_END(LVL7, "swallow progress");
137 PERF_CHECK_END(LVL6, "set progress");
140 elm_progressbar_pulse(si->progress, EINA_TRUE); //start pulse.
142 edje_object_signal_emit(_EDJ(si->layout), "elm,state,show,progress", "slider");
145 static void _hide_progressbar(Slide_Item *si)
147 IV_ASSERT(si != NULL);
151 elm_progressbar_pulse(si->progress, EINA_FALSE); //stop pulse.
153 edje_object_signal_emit(_EDJ(si->layout), "elm,state,hide,progress", "slider");
157 static void _show_videoicon(Slide_Item *si)
159 IV_ASSERT(si != NULL);
161 edje_object_signal_emit(_EDJ(si->layout), "elm,state,show_icon", "slider"); // Hide video play icon
164 static void _hide_videoicon(Slide_Item *si)
166 IV_ASSERT(si != NULL);
168 edje_object_signal_emit(_EDJ(si->layout), "elm,state,hide_icon", "slider"); // Hide video play icon
170 // edje_object_signal_emit((si->layout), "elm,state,hide_icon", "slider"); // Hide video play icon
173 static sitem_type_t _get_sitem_type(Media_Type mtype)
177 case SLIDE_TYPE_IMAGE:
178 return SITEM_TYPE_IMAGE;
180 case SLIDE_TYPE_VIDEO:
181 return SITEM_TYPE_VIDEO;
183 case SLIDE_TYPE_NONE:
184 case SLIDE_TYPE_UNKNOWN:
186 return SITEM_TYPE_UNKNOWN;
189 return SITEM_TYPE_UNKNOWN;
192 static char *_get_file_name(Slide_Item* si)
194 Media_Data *mdata = ivug_medialist_get_data(si->mitem);
201 return ivug_get_filename(mdata->filepath);
205 static bool _set_mitem(Slide_Item* si, Media_Item *item)
207 Media_Data *mdata = ivug_medialist_get_data(item);
208 IV_ASSERT(mdata != NULL);
212 si->type = _get_sitem_type(mdata->slide_type);
214 if ( si->type == SITEM_TYPE_IMAGE )
217 elm_object_part_content_set(si->layout, "slider.contents", si->photocam);
219 else if ( si->type == SITEM_TYPE_VIDEO )
221 _show_thumbnail(si, mdata->thumbnail_path);
222 elm_image_file_set(si->vIcon, EDJ_PATH"/ivug-icons.edj", "btn.video.play");
227 MSG_SITEM_WARN("Unknown type : %s", ivug_get_filename(mdata->filepath));
231 switch(mdata->slide_type)
233 case SLIDE_TYPE_IMAGE:
234 MSG_SITEM_HIGH("Set image. %s", ivug_get_filename(mdata->filepath));
236 if(mdata->bIsDRMContent == EINA_FALSE)
238 si->state = SLIDE_STATE_READY;
242 si->state = SLIDE_STATE_DRM_CHECKING;
246 case SLIDE_TYPE_VIDEO:
247 MSG_SITEM_HIGH("Set video. %s", ivug_get_filename(mdata->filepath));
249 si->state = SLIDE_STATE_READY; // Video dont need to load photocam
252 case SLIDE_TYPE_UNKNOWN:
253 MSG_SITEM_ERROR("Unknown image. %s", ivug_get_filename(mdata->filepath));
255 si->state = SLIDE_STATE_ERROR;
260 MSG_SITEM_ERROR("slide type invaild. Type=%d", mdata->slide_type);
261 si->state = SLIDE_STATE_ERROR;
271 static bool _unset_mitem(Slide_Item* si)
273 // Unswallow photocam
274 elm_object_part_content_unset(si->layout, "slider.contents");
278 case SITEM_TYPE_IMAGE:
279 evas_object_hide(si->photocam);
280 ivug_image_unset(si->photocam); //init photocam.
282 case SITEM_TYPE_VIDEO:
288 si->state = SLIDE_STATE_NONE;
291 _hide_progressbar(si);
295 si->type = SITEM_TYPE_UNKNOWN;
298 MSG_SITEM_HIGH("Slider Item is cleared.");
306 void _call_user_callback(Slide_Item* si)
310 (si->cb)(si->state, si, si->client_data);
316 _photocam_loaded_cb(void *data, Evas_Object *obj, void *event_info)
318 IV_ASSERT(data != NULL);
320 Slide_Item* si = static_cast<Slide_Item*>(data);
323 _hide_progressbar(si);
325 if ( si->mitem == NULL)
327 MSG_SITEM_ERROR("Debug Me! Data item is NULL.");
331 Media_Data* mdata = ivug_medialist_get_data(si->mitem);
334 MSG_SITEM_ERROR("ivug_medialist_get_data failed.");
335 si->state = SLIDE_STATE_ERROR;
339 if ( si->state != SLIDE_STATE_LOADING )
341 // can be STATE_ERROR, STATE_NO_RIGHT
342 MSG_SITEM_ERROR("Invalid slide state. %s", ivug_get_filename(mdata->filepath));
343 MSG_SITEM_ERROR("state=%d %s (%d,%d,%d,%d)", si->state, mdata->filepath, si->x, si->y, si->w, si->h);
347 typedef enum _Evas_Load_Error
349 EVAS_LOAD_ERROR_NONE = 0, /**< No error on load */
350 EVAS_LOAD_ERROR_GENERIC = 1, /**< A non-specific error occurred */
351 EVAS_LOAD_ERROR_DOES_NOT_EXIST = 2, /**< File (or file path) does not exist */
352 EVAS_LOAD_ERROR_PERMISSION_DENIED = 3, /**< Permission deinied to an existing file (or path) */
353 EVAS_LOAD_ERROR_RESOURCE_ALLOCATION_FAILED = 4, /**< Allocation of resources failure prevented load */
354 EVAS_LOAD_ERROR_CORRUPT_FILE = 5, /**< File corrupt (but was detected as a known format) */
355 EVAS_LOAD_ERROR_UNKNOWN_FORMAT = 6 /**< File is not a known format */
356 } Evas_Load_Error; /**< Load error you can get from loading of files - see evas_load_error_str() too */
359 Evas_Load_Error error = static_cast<Evas_Load_Error>(reinterpret_cast<size_t>(event_info));
360 // Evas_Load_Error error = evas_object_image_load_error_get(ivug_image_internal_image_get(si->photocam));
362 if ( error != EVAS_LOAD_ERROR_NONE )
364 MSG_SITEM_ERROR("Image loading failed. Error=%d File=%s", error, mdata->filepath);
365 si->state = SLIDE_STATE_ERROR;
367 evas_object_hide(si->photocam);
369 if ( error == EVAS_LOAD_ERROR_PERMISSION_DENIED)
371 _show_thumbnail(si, DRM_NO_RIGHT_IMAGE_PATH);
375 _show_thumbnail(si, DEFAULT_THUMBNAIL_PATH);
378 _call_user_callback(si);
383 si->state = SLIDE_STATE_LOADED;
387 ivug_image_image_size_get(si->photocam, &w, &h);
389 if (mdata->slide_type == SLIDE_TYPE_VIDEO) //if slide type is video,
391 MSG_SITEM_FATAL("slide type is video. thumbnail image ");
395 evas_object_show(obj); //photocam show.
397 _call_user_callback(si);
399 MSG_SITEM_HIGH("Photocam Pre-loaded. File=%s", ivug_get_filename(mdata->filepath));
402 static void _on_event_mouse_down(void *data, Evas *evas, Evas_Object *obj, void *event_info)
404 MSG_SITEM_HIGH("Event layer clicked : %s Layer=%d", evas_object_name_get(obj), evas_object_layer_get(obj));
409 ivug_slider_item_add(Evas_Object *slider)
411 Slide_Item* si = NULL;
413 PERF_CHECK_BEGIN(LVL6, "init variable");
416 si = (Slide_Item*)calloc(1, sizeof (Slide_Item));
420 MSG_SITEM_FATAL("Cannot allocated memory : %d.", sizeof (Slide_Item));
424 si->state = SLIDE_STATE_NONE; //set slide state
425 si->type = SITEM_TYPE_UNKNOWN;
427 PERF_CHECK_END(LVL6, "init variable");
429 //Create the slider item layout
430 PERF_CHECK_BEGIN(LVL6, "create slider item layout");
432 Evas_Object *layout = EFL::create_layout(slider, IVUG_SLIDER_EDJ, "slider");
435 MSG_SITEM_ERROR("Cannot load file : %s", IVUG_SLIDER_EDJ);
440 evas_object_name_set(layout, "Slider item edj");
441 evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_DOWN, _on_event_mouse_down, NULL);
445 PERF_CHECK_END(LVL6, "create slider item layout");
448 PERF_CHECK_BEGIN(LVL6, "set thumbnail");
450 si->thumbnail = elm_icon_add(slider);
451 evas_object_name_set(si->thumbnail, "Thumbnail");
452 elm_image_resizable_set(si->thumbnail, EINA_TRUE, EINA_TRUE);
453 elm_image_preload_disabled_set(si->thumbnail, EINA_FALSE);
455 evas_object_event_callback_add(si->thumbnail, EVAS_CALLBACK_MOUSE_DOWN, _on_event_mouse_down, NULL);
457 elm_object_part_content_set(si->layout, "slider.thumbnail", si->thumbnail);
459 PERF_CHECK_END(LVL6, "set thumbnail");
462 PERF_CHECK_BEGIN(LVL6, "ivug_image_create");
464 si->photocam = ivug_image_create(si->layout);
465 evas_object_name_set(si->photocam, "photocam");
466 evas_object_smart_callback_add(si->photocam, "loaded", _photocam_loaded_cb, si);
468 PERF_CHECK_END(LVL6, "ivug_image_create");
470 PERF_CHECK_BEGIN(LVL6, "video icon");
472 // z-order be decided along added order
473 si->vIcon = elm_icon_add(slider);
474 elm_image_file_set(si->vIcon, EDJ_PATH"/ivug-icons.edj", "btn.video.play");
476 evas_object_name_set(si->vIcon, "video icon");
477 evas_object_event_callback_add(si->vIcon, EVAS_CALLBACK_MOUSE_DOWN, _on_event_mouse_down, NULL);
479 elm_object_part_content_set(si->layout, "slider.icon", si->vIcon);
480 PERF_CHECK_END(LVL6, "video icon");
482 si->bMenuVisible = true; // Default visibility is true
484 evas_object_smart_member_add(si->layout, slider);
487 evas_object_geometry_get(si->layout, &bx, &by, &bw, &bh);
489 MSG_SITEM_HIGH("Creating sitem(0x%08x): (%d,%d,%d,%d)", si, bx, by, bw, bh);
496 ivug_slider_item_resize(Slide_Item* si, int w, int h)
498 IV_ASSERT(si != NULL );
500 if ( si->w == w && si->h == h ) return;
501 MSG_SITEM_HIGH("SLIDER Resize to XYWH(%d,%d,%d,%d)", si->x, si->y, w, h );
503 // w,h is not Image's scale, but Object's scale
507 // MSG_SITEM_HIGH("resize layout: %d, %d", si->w, si->h);
508 evas_object_resize(si->layout, si->w, si->h);
513 void ivug_slider_item_move(Slide_Item* si, int x, int y)
515 IV_ASSERT(si != NULL );
517 MSG_SITEM_MED("SLIDER Move to XYWH(%d,%d,%d,%d)", x, y, si->w, si->h );
519 if ( si->x == x && si->y == y) return;
525 if ( si->w == 0 || si->h == 0) return;
527 evas_object_move(si->layout, x, y);
530 // evas_object_move();
535 void ivug_slider_item_del(Slide_Item* si)
537 IV_ASSERT(si != NULL );
539 MSG_SITEM_HIGH("Removing Slider Item");
541 ivug_slider_item_stop(si);
543 si->mitem = NULL; // for error handling
547 evas_object_del(si->photocam);
553 evas_object_del(si->thumbnail);
554 si->thumbnail = NULL;
559 evas_object_del(si->progress);
565 evas_object_del(si->layout);
571 evas_object_del(si->vIcon);
579 MSG_SITEM_HIGH("Removed Slider Item");
583 void ivug_slider_item_hide(Slide_Item* si)
585 IV_ASSERT(si != NULL );
587 MSG_SITEM_HIGH("Hide slide item");
588 evas_object_hide(si->layout);
592 void ivug_slider_item_show(Slide_Item* si)
594 IV_ASSERT(si != NULL );
596 MSG_SITEM_HIGH("Show slide item");
597 evas_object_show(si->layout);
602 ivug_slider_item_clip_set(Slide_Item* si, Evas_Object *clipper)
604 IV_ASSERT(si != NULL );
605 // no need to check layout is NULL
608 evas_object_geometry_get(clipper, &x, &y, &w, &h);
610 MSG_SITEM_MED("SItem clip SET!! Geometry(%d,%d,%d,%d)", x, y, w, h);
612 evas_object_clip_set(si->layout, clipper);
613 // evas_object_clip_set(si->photocam, clipper);
617 ivug_slider_item_clip_unset(Slide_Item* si)
619 IV_ASSERT(si != NULL );
620 // no need to check layout is NULL
621 evas_object_clip_unset(si->layout);
622 // evas_object_clip_unset(si->photocam);
626 ivug_slider_item_data_set(Slide_Item* si, Media_Item *item)
628 IV_ASSERT(si != NULL );
630 MSG_SITEM_HIGH("Data set. Item(0x%08x)", item);
634 if ( si->state == SLIDE_STATE_NONE )
636 MSG_SITEM_WARN("Slide item is already cleared. just return. Mitem=0x%08x", si->mitem);
640 MSG_SITEM_WARN("Set data NULL : %s", _get_file_name(si));
645 if ( si->state != SLIDE_STATE_NONE )
647 MSG_SITEM_WARN("State is %d. Remove old : %s", si->state, _get_file_name(si));
651 _set_mitem(si, item);
658 #ifdef DISABLE_LIL_LOADING
659 Eina_Bool _signal_send_idler(void *data)
661 Slide_Item *si = (Slide_Item *)data;
663 _call_user_callback(si);
672 ivug_slider_item_load(Slide_Item *si)
674 IV_ASSERT(si != NULL);
676 if (si->state != SLIDE_STATE_READY)
678 MSG_SITEM_ERROR("Invalid state : %d", si->state);
682 Media_Data *mdata = ivug_medialist_get_data(si->mitem);
683 IV_ASSERT(mdata != NULL);
685 if(mdata->filepath == NULL)
687 MSG_SITEM_ERROR("file path is NULL");
691 MSG_SITEM_HIGH("Load file. %s", ivug_get_filename(mdata->filepath));
693 char path[IVUG_MAX_FILE_PATH_LEN] = {0,};
696 strncpy(path, mdata->filepath, sizeof(path));
700 #ifdef DISABLE_LIL_LOADING
702 si->state = SLIDE_STATE_LOADED;
704 ecore_idler_add(_signal_send_idler, si);
709 switch(mdata->slide_type)
711 case SLIDE_TYPE_IMAGE:
713 si->state = SLIDE_STATE_LOADING;
715 if (ivug_image_file_set(si->photocam, path, NULL) != EVAS_LOAD_ERROR_NONE)
717 MSG_SITEM_ERROR("Failed photocam to set file file=%s", path);
718 si->state = SLIDE_STATE_ERROR;
720 _show_thumbnail(si, DEFAULT_THUMBNAIL_PATH);
722 _call_user_callback(si);
730 case SLIDE_TYPE_VIDEO:
732 si->state = SLIDE_STATE_LOADED;
738 MSG_SITEM_ERROR("slide type invaild. Type=%d", mdata->slide_type);
746 void ivug_slider_item_play(Slide_Item* si)
748 IV_ASSERT(si != NULL );
750 Media_Data *mdata = ivug_medialist_get_data(si->mitem);
753 MSG_SITEM_ERROR("current data is NULL");
757 MSG_SITEM_HIGH("Start sitem. Type(%d) State(%d) %s", si->type, si->state, mdata->filepath);
759 if ( si->state != SLIDE_STATE_LOADED )
761 MSG_SITEM_ERROR("Play. but state is %d", si->state);
765 if ( si->type == SITEM_TYPE_IMAGE )
767 ivug_image_animated_set(si->photocam, EINA_TRUE);
771 void ivug_slider_item_stop(Slide_Item* si)
773 IV_ASSERT(si != NULL );
775 if ( si->state != SLIDE_STATE_LOADED )
777 // When very first/last image and invalid
781 Media_Data *mdata = ivug_medialist_get_data(si->mitem);
782 MSG_SITEM_HIGH("Stop sitem. %s", mdata->filepath);
784 if (si->type == SITEM_TYPE_VIDEO)
788 else if ( si->type == SITEM_TYPE_IMAGE )
790 ivug_image_animated_set(si->photocam, EINA_FALSE);
795 void ivug_slider_item_pause(Slide_Item* si)
797 IV_ASSERT(si != NULL );
799 if ( si->state != SLIDE_STATE_LOADED )
801 // When very first/last image and invalid
805 Media_Data *mdata = ivug_medialist_get_data(si->mitem);
806 MSG_SITEM_HIGH("Pause sitem. %s", mdata->filepath);
808 if (si->type == SITEM_TYPE_VIDEO)
812 else if ( si->type == SITEM_TYPE_IMAGE )
814 ivug_image_animated_set(si->photocam, EINA_FALSE);
818 void ivug_slider_item_resume(Slide_Item* si)
820 IV_ASSERT(si != NULL );
822 if ( si->state != SLIDE_STATE_LOADED )
824 // When very first/last image and invalid
828 Media_Data *mdata = ivug_medialist_get_data(si->mitem);
829 MSG_SITEM_HIGH("Resume sitem. %s", mdata->filepath);
831 if (si->type == SITEM_TYPE_IMAGE)
833 ivug_image_animated_set(si->photocam, EINA_TRUE);
835 else if (si->type == SITEM_TYPE_VIDEO)
841 ivug_slider_item_set_callback(Slide_Item* si, OnSliderStateChanged cb, void *data)
843 IV_ASSERT(si != NULL );
846 si->client_data = data;
853 ivug_slider_item_data_get(Slide_Item *si)
855 IV_ASSERT(si != NULL);
862 ivug_slider_item_region_size_get(Slide_Item* si, int *x, int *y, int *w, int *h)
864 IV_ASSERT(si != NULL );
866 if ( si->mitem == NULL)
868 MSG_SITEM_ERROR("Debug Me! Data item is NULL.");
872 Media_Data *mdata = ivug_medialist_get_data(si->mitem);
876 MSG_SITEM_ERROR("slide type is NULL. Item=0x%08x", si);
882 case SITEM_TYPE_IMAGE:
884 ivug_image_region_get(si->photocam, x, y, w, h);
888 case SITEM_TYPE_VIDEO:
896 case SITEM_TYPE_UNKNOWN:
901 MSG_SITEM_ERROR("Unknwon type: %d", si->type);
912 ivug_slider_item_hold_set(Slide_Item* si, Eina_Bool hold)
914 IV_ASSERT(si != NULL );
918 case SITEM_TYPE_IMAGE:
920 ivug_image_hold_set(si->photocam, hold);
924 case SITEM_TYPE_VIDEO:
930 case SITEM_TYPE_UNKNOWN:
932 MSG_SITEM_ERROR("Unknwon type: %d", si->type);
941 ivug_slider_item_zoom_reset(Slide_Item* si, Eina_Bool bAnim, int center_x, int center_y)
943 IV_ASSERT(si != NULL );
947 case SITEM_TYPE_IMAGE:
954 ivug_image_zoom_reset(si->photocam, &pt);
958 case SITEM_TYPE_VIDEO:
964 case SITEM_TYPE_UNKNOWN:
968 MSG_SITEM_ERROR("Unknwon type: %d", si->type);
977 ivug_slider_item_zoom_set(Slide_Item* si, double zoom, int center_x, int center_y)
979 IV_ASSERT(si != NULL );
983 case SITEM_TYPE_IMAGE:
989 ivug_image_zoom_set(si->photocam, zoom, &Center);
994 case SITEM_TYPE_VIDEO:
997 case SITEM_TYPE_UNKNOWN:
1001 MSG_SITEM_ERROR("Unknwon type: %d", si->type);
1009 ivug_slider_item_zoom_get(Slide_Item* si)
1011 IV_ASSERT(si != NULL );
1017 case SITEM_TYPE_IMAGE:
1019 ret = ivug_image_zoom_get(si->photocam);
1023 case SITEM_TYPE_VIDEO:
1026 case SITEM_TYPE_UNKNOWN:
1030 MSG_SITEM_ERROR("Unknwon type: %d", si->type);
1041 ivug_slider_item_icon_click_check(Slide_Item *si, int x, int y)
1043 MSG_SITEM_HIGH("Check play icon clicked. SI=0x%08x, XY(%d,%d)", si, x, y);
1045 IV_ASSERT(si != NULL );
1047 Media_Data *mdata = ivug_medialist_get_data(si->mitem);
1049 if ( mdata == NULL )
1051 MSG_SITEM_ERROR("Debug Me! Data item is NULL.");
1055 if ( mdata->slide_type == SLIDE_TYPE_VIDEO )
1059 Evas_Coord ix,iy,iw,ih;
1061 evas_object_geometry_get(si->vIcon, &ix, &iy, &iw, &ih);
1063 bool bInside = !( (x) > (ix + iw) || (x) < (ix)
1064 || (y) > (iy + iw) || (y) < (iy) );
1066 MSG_SITEM_HIGH("Item XYWH(%d,%d,%d,%d) XY(%d,%d) bInside=%d", ix,iy,iw,ih, x, y, bInside);
1072 MSG_SITEM_HIGH("Slide type = %d", mdata->slide_type);
1076 drm_data_t * ivug_slider_item_check_drm_constraint(Slide_Item *si)
1078 IV_ASSERT(si != NULL);
1080 Media_Data *mdata = ivug_medialist_get_data(si->mitem);
1083 MSG_SLIDER_ERROR("mdata is NULL");
1087 if(mdata->bIsDRMContent == EINA_FALSE)
1089 MSG_SITEM_HIGH("It is not DRM file, path = %s", mdata->filepath);
1093 MSG_SITEM_HIGH("before check valid");
1094 if(ivug_drm_has_valid_ro(mdata->filepath) == 0)
1096 MSG_SITEM_HIGH("RO is invalid, path = %s", mdata->filepath);
1097 si->state = SLIDE_STATE_ERROR;
1098 _show_thumbnail(si, DRM_NO_RIGHT_IMAGE_PATH);
1099 evas_object_smart_callback_call(si->photocam, "loaded", (void *)EVAS_LOAD_ERROR_PERMISSION_DENIED);
1100 //for lauch WAP purchase page
1101 drm_data_t *result = (drm_data_t *)calloc(1, sizeof(drm_data_t));
1102 result->constraints = IVUG_DRM_RESULT_LIMITED;
1106 MSG_SITEM_HIGH("RO is valid, path = %s", mdata->filepath);
1108 return ivug_drm_check_constraint(mdata->filepath);
1114 ivug_slider_item_image_rotate_set(Slide_Item *si, int angle)
1116 IV_ASSERT(si != NULL);
1118 ivug_image_rotate_set(si->photocam, ( (ivug_image_rotate_get(si->photocam) - angle) % 360 ));
1124 // Video specific APIs
1126 void ivug_slider_item_video_play(Slide_Item* si)
1128 IV_ASSERT(si != NULL );
1130 MSG_SITEM_HIGH("Start Video play");
1132 if (si->type == SITEM_TYPE_VIDEO)
1140 void ivug_slider_item_video_pause(Slide_Item* si)
1142 IV_ASSERT(si != NULL );
1144 MSG_SITEM_HIGH("Pause Video play");
1146 if (si->type == SITEM_TYPE_VIDEO)
1152 void ivug_slider_item_hide_menu(Slide_Item* si)
1154 IV_ASSERT(si != NULL );
1156 MSG_SITEM_HIGH("Hide menu");
1158 si->bMenuVisible = false;
1160 // Item is video and state is playing then hide paused icon
1161 if (si->type == SITEM_TYPE_VIDEO)
1163 _hide_videoicon(si);
1169 void ivug_slider_item_show_menu(Slide_Item* si)
1171 IV_ASSERT(si != NULL );
1173 MSG_SITEM_HIGH("Show menu");
1175 si->bMenuVisible = true;
1177 // Item is video and state is pause then show paused icon
1178 if (si->type == SITEM_TYPE_VIDEO)
1180 _show_videoicon(si);
1185 ivug_slider_item_image_get(Slide_Item* si)
1187 IV_ASSERT(si != NULL );
1189 if ( (si->type == SITEM_TYPE_IMAGE) && (si->state == SLIDE_STATE_LOADED) )
1191 return ivug_image_internal_image_get(si->photocam);
1199 void ivug_slider_item_image_size_get(Slide_Item* si, int *w, int *h)
1201 IV_ASSERT(si != NULL );
1203 if ( (si->type == SITEM_TYPE_IMAGE) && (si->state == SLIDE_STATE_LOADED) )
1205 ivug_image_image_size_get(si->photocam, w, h);
1209 void ivug_slider_item_reload(Slide_Item* si)
1211 evas_object_del(si->photocam);
1213 si->photocam = ivug_image_create(si->layout);
1214 evas_object_name_set(si->photocam, "photocam");
1215 evas_object_smart_callback_add(si->photocam, "loaded", _photocam_loaded_cb, si);
1217 elm_object_part_content_set(si->layout, "slider.contents", si->photocam);
1219 si->state = SLIDE_STATE_READY;
1221 ivug_slider_item_load(si);