elementary merging.
[framework/uifw/elementary.git] / src / lib / elc_player.c
index 393debe..a3949c8 100644 (file)
@@ -101,7 +101,7 @@ _event_hook(Evas_Object *obj, Evas_Object *src __UNUSED__, Evas_Callback_Type ty
      }
    if (!strcmp(ev->keyname, "space"))
      {
-        if (elm_video_is_playing(wd->video))
+        if (elm_video_is_playing_get(wd->video))
           elm_video_pause(wd->video);
         else
           elm_video_play(wd->video);
@@ -191,7 +191,7 @@ _update_slider(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSE
    Eina_Bool seekable;
 
    if (!wd) return ;
-   seekable = elm_video_is_seekable(wd->video);
+   seekable = elm_video_is_seekable_get(wd->video);
    length = elm_video_play_length_get(wd->video);
    pos = elm_video_play_position_get(wd->video);
 
@@ -225,8 +225,8 @@ _forward(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __
    pos += length * 0.3;
    elm_video_play_position_set(wd->video, pos);
 
-   evas_object_smart_callback_call(player, SIG_FORWARD_CLICKED, NULL);
    edje_object_signal_emit(wd->layout, "elm,button,forward", "elm");
+   evas_object_smart_callback_call(player, SIG_FORWARD_CLICKED, NULL);
 }
 
 static void
@@ -237,8 +237,8 @@ _info(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNU
 
    if (!wd) return ;
 
-   evas_object_smart_callback_call(player, SIG_INFO_CLICKED, NULL);
    edje_object_signal_emit(wd->layout, "elm,button,info", "elm");
+   evas_object_smart_callback_call(player, SIG_INFO_CLICKED, NULL);
 }
 
 static void
@@ -256,8 +256,8 @@ _next(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNU
    pos += length * 0.1;
    elm_video_play_position_set(wd->video, pos);
 
-   evas_object_smart_callback_call(player, SIG_NEXT_CLICKED, NULL);
    edje_object_signal_emit(wd->layout, "elm,button,next", "elm");
+   evas_object_smart_callback_call(player, SIG_NEXT_CLICKED, NULL);
 }
 
 static void
@@ -271,8 +271,8 @@ _pause(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UN
    edje_object_signal_emit(wd->layout, "elm,player,pause", "elm");
    elm_video_pause(wd->video);
 
-   evas_object_smart_callback_call(player, SIG_PAUSE_CLICKED, NULL);
    edje_object_signal_emit(wd->layout, "elm,button,pause", "elm");
+   evas_object_smart_callback_call(player, SIG_PAUSE_CLICKED, NULL);
 }
 
 static void
@@ -283,8 +283,8 @@ _play(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNU
 
    if (!wd) return ;
    elm_video_play(wd->video);
-   evas_object_smart_callback_call(player, SIG_PLAY_CLICKED, NULL);
    edje_object_signal_emit(wd->layout, "elm,button,play", "elm");
+   evas_object_smart_callback_call(player, SIG_PLAY_CLICKED, NULL);
 }
 
 static void
@@ -313,8 +313,8 @@ _rewind(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __U
 
    if (!wd) return ;
    elm_video_play_position_set(wd->video, 0);
-   evas_object_smart_callback_call(player, SIG_REWIND_CLICKED, NULL);
    edje_object_signal_emit(wd->layout, "elm,button,rewind", "elm");
+   evas_object_smart_callback_call(player, SIG_REWIND_CLICKED, NULL);
 }
 
 static void
@@ -325,8 +325,8 @@ _stop(void *data __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNU
 
    if (!wd) return ;
 
-   evas_object_smart_callback_call(player, SIG_STOP_CLICKED, NULL);
    edje_object_signal_emit(wd->layout, "elm,button,stop", "elm");
+   evas_object_smart_callback_call(player, SIG_STOP_CLICKED, NULL);
 }
 
 static void
@@ -382,11 +382,9 @@ _cleanup_callback(Widget_Data *wd)
 }
 
 static void
-_track_video(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj, void *event_info __UNUSED__)
+_track_video(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
 {
-   Widget_Data *wd = elm_widget_data_get(obj);
-
-   _cleanup_callback(wd);
+   _cleanup_callback(data);
 }
 
 static void
@@ -418,7 +416,7 @@ _player_button_add(Evas_Object *parent, Evas_Object *obj, Evas_Object *layout, c
    evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
    bt = elm_button_add(parent);
    elm_widget_mirrored_automatic_set(bt, EINA_FALSE);
-   elm_button_icon_set(bt, ic);
+   elm_object_part_content_set(bt, "icon", ic);
    evas_object_size_hint_align_set(bt, 0.0, 0.0);
    elm_object_style_set(bt, "anchor");
    evas_object_smart_callback_add(bt, "clicked", func, obj);
@@ -453,6 +451,76 @@ _double_to_time(double value)
 }
 #endif
 
+static void
+_content_set_hook(Evas_Object *obj, const char *part, Evas_Object *content)
+{
+   if (part && strcmp(part, "video")) return;
+#ifdef HAVE_EMOTION
+   ELM_CHECK_WIDTYPE(obj, widtype);
+   Widget_Data *wd = elm_widget_data_get(obj);
+
+   double pos, length;
+   Eina_Bool seekable;
+
+   if (!_elm_video_check(content)) return;
+
+   _cleanup_callback(wd);
+
+   wd->video = content;
+
+   if (!wd->video)
+     {
+        wd->emotion = NULL;
+        return ;
+     }
+
+   elm_object_disabled_set(wd->slider, EINA_FALSE);
+   elm_object_disabled_set(wd->forward, EINA_FALSE);
+   elm_object_disabled_set(wd->info, EINA_FALSE);
+   elm_object_disabled_set(wd->next, EINA_FALSE);
+   elm_object_disabled_set(wd->pause, EINA_FALSE);
+   elm_object_disabled_set(wd->play, EINA_FALSE);
+   elm_object_disabled_set(wd->prev, EINA_FALSE);
+   elm_object_disabled_set(wd->rewind, EINA_FALSE);
+   elm_object_disabled_set(wd->next, EINA_FALSE);
+
+   wd->emotion = elm_video_emotion_get(wd->video);
+   emotion_object_priority_set(wd->emotion, EINA_TRUE);
+   evas_object_event_callback_add(wd->video, EVAS_CALLBACK_DEL,
+                                  _track_video, wd);
+
+   seekable = elm_video_is_seekable_get(wd->video);
+   length = elm_video_play_length_get(wd->video);
+   pos = elm_video_play_position_get(wd->video);
+
+   elm_object_disabled_set(wd->slider, !seekable);
+   elm_slider_min_max_set(wd->slider, 0, length);
+   elm_slider_value_set(wd->slider, pos);
+
+   if (elm_video_is_playing_get(wd->video)) edje_object_signal_emit(wd->layout, "elm,player,play", "elm");
+   else edje_object_signal_emit(wd->layout, "elm,player,pause", "elm");
+
+   evas_object_smart_callback_add(wd->emotion, "frame_decode",
+                                  _update_slider, obj);
+   evas_object_smart_callback_add(wd->emotion, "frame_resize",
+                                  _update_slider, obj);
+   evas_object_smart_callback_add(wd->emotion, "length_change",
+                                  _update_slider, obj);
+   evas_object_smart_callback_add(wd->emotion, "position_update",
+                                  _update_slider, obj);
+   evas_object_smart_callback_add(wd->emotion, "playback_started",
+                                  _play_started, obj);
+   evas_object_smart_callback_add(wd->emotion, "playback_finished",
+                                  _play_finished, obj);
+
+   /* FIXME: track info from video */
+#else
+   (void) obj;
+   (void) content;
+#endif
+
+}
+
 EAPI Evas_Object *
 elm_player_add(Evas_Object *parent)
 {
@@ -471,6 +539,7 @@ elm_player_add(Evas_Object *parent)
    elm_widget_theme_hook_set(obj, _theme_hook);
    elm_widget_can_focus_set(obj, EINA_TRUE);
    elm_widget_event_hook_set(obj, _event_hook);
+   elm_widget_content_set_hook_set(obj, _content_set_hook);
 
    wd->layout = edje_object_add(e);
    _elm_theme_object_set(obj, wd->layout, "player", "base", "default");
@@ -516,65 +585,5 @@ elm_player_add(Evas_Object *parent)
 EAPI void
 elm_player_video_set(Evas_Object *player, Evas_Object *video)
 {
-#ifdef HAVE_EMOTION
-   ELM_CHECK_WIDTYPE(player, widtype);
-   Widget_Data *wd = elm_widget_data_get(player);
-   double pos, length;
-   Eina_Bool seekable;
-
-   if (!_elm_video_check(video)) return ;
-
-   _cleanup_callback(wd);
-
-   wd->video = video;
-
-   if (!wd->video)
-     {
-        wd->emotion = NULL;
-        return ;
-     }
-
-   elm_object_disabled_set(wd->slider, EINA_FALSE);
-   elm_object_disabled_set(wd->forward, EINA_FALSE);
-   elm_object_disabled_set(wd->info, EINA_FALSE);
-   elm_object_disabled_set(wd->next, EINA_FALSE);
-   elm_object_disabled_set(wd->pause, EINA_FALSE);
-   elm_object_disabled_set(wd->play, EINA_FALSE);
-   elm_object_disabled_set(wd->prev, EINA_FALSE);
-   elm_object_disabled_set(wd->rewind, EINA_FALSE);
-   elm_object_disabled_set(wd->next, EINA_FALSE);
-
-   wd->emotion = elm_video_emotion_get(wd->video);
-   evas_object_event_callback_add(wd->video, EVAS_CALLBACK_DEL,
-                                  _track_video, player);
-
-   seekable = elm_video_is_seekable(wd->video);
-   length = elm_video_play_length_get(wd->video);
-   pos = elm_video_play_position_get(wd->video);
-
-   elm_object_disabled_set(wd->slider, !seekable);
-   elm_slider_min_max_set(wd->slider, 0, length);
-   elm_slider_value_set(wd->slider, pos);
-
-   if (elm_video_is_playing(wd->video)) edje_object_signal_emit(wd->layout, "elm,player,play", "elm");
-   else edje_object_signal_emit(wd->layout, "elm,player,pause", "elm");
-
-   evas_object_smart_callback_add(wd->emotion, "frame_decode",
-                                  _update_slider, player);
-   evas_object_smart_callback_add(wd->emotion, "frame_resize",
-                                  _update_slider, player);
-   evas_object_smart_callback_add(wd->emotion, "length_change",
-                                  _update_slider, player);
-   evas_object_smart_callback_add(wd->emotion, "position_update",
-                                  _update_slider, player);
-   evas_object_smart_callback_add(wd->emotion, "playback_started",
-                                  _play_started, player);
-   evas_object_smart_callback_add(wd->emotion, "playback_finished",
-                                  _play_finished, player);
-
-   /* FIXME: track info from video */
-#else
-   (void) player;
-   (void) video;
-#endif
+   _content_set_hook(player, "video", video);
 }