efl/player: merge start+stop methods into 'playing' property

this has some overlap with the existing 'play' property which will
soon be renamed. the intent here is that there is a property for
controlling the 'playing' state and then another property for managing
'pausing' the play state

ref T7877

Reviewed-by: Cedric BAIL <cedric.bail@free.fr>
Differential Revision: https://phab.enlightenment.org/D10113
This commit is contained in:
Mike Blumenkrantz 2019-09-24 10:11:26 -04:00 committed by Cedric Bail
parent 9b0197e2af
commit 89bee7a11a
18 changed files with 103 additions and 71 deletions

View File

@ -53,7 +53,7 @@ _btn_clicked_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
}
//Let Animation Object start animation
efl_player_start(ad->anim_obj);
efl_player_playing_set(ad->anim_obj, EINA_TRUE);
}
static void

View File

@ -54,7 +54,7 @@ _btn_clicked_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
}
//Let Animation Object start animation
efl_player_start(ad->anim_obj);
efl_player_playing_set(ad->anim_obj, EINA_TRUE);
}
static void

View File

@ -53,7 +53,7 @@ _btn_clicked_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
}
//Let Animation Object start animation
efl_player_start(ad->anim_obj);
efl_player_playing_set(ad->anim_obj, EINA_TRUE);
}
static void

View File

@ -113,7 +113,7 @@ _anim_start(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
int index = (uintptr_t)evas_object_data_get(obj, "index");
//Let Animation Object start animation
efl_player_start(ad->anim_obj[index]);
efl_player_playing_set(ad->anim_obj[index], EINA_TRUE);
elm_object_disabled_set(obj, EINA_TRUE);
elm_object_disabled_set(ad->start_all_btn, EINA_TRUE);
@ -128,7 +128,7 @@ _anim_start_all(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
for (i = 0; i < INTERP_NUM; i++)
{
//Let Animation Object start animation
efl_player_start(ad->anim_obj[i]);
efl_player_playing_set(ad->anim_obj[i], EINA_TRUE);
elm_object_disabled_set(ad->btn[i], EINA_TRUE);
}

View File

@ -69,7 +69,7 @@ _start_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED
efl_text_set(obj, "Start Alpha Animation from 0.0 to 1.0");
}
//Let Animation Object start animation
efl_player_start(ad->anim_obj);
efl_player_playing_set(ad->anim_obj, EINA_TRUE);
}
static void

View File

@ -106,7 +106,7 @@ _start_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED
}
//Let Animation Object start animation
efl_player_start(ad->anim_obj);
efl_player_playing_set(ad->anim_obj, EINA_TRUE);
}
static void

View File

@ -53,7 +53,7 @@ _btn_clicked_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
}
//Let Animation Object start animation
efl_player_start(ad->anim_obj);
efl_player_playing_set(ad->anim_obj, EINA_TRUE);
}
static void

View File

@ -53,7 +53,7 @@ _btn_clicked_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
}
//Let Animation Object start animation
efl_player_start(ad->anim_obj);
efl_player_playing_set(ad->anim_obj, EINA_TRUE);
}
static void

View File

@ -68,7 +68,7 @@ _start_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED
}
//Let Animation Object start animation
efl_player_start(ad->anim_obj);
efl_player_playing_set(ad->anim_obj, EINA_TRUE);
}
static void

View File

@ -53,7 +53,7 @@ _btn_clicked_cb(void *data, Evas_Object *obj, void *event_info EINA_UNUSED)
}
//Let Animation Object start animation
efl_player_start(ad->anim_obj);
efl_player_playing_set(ad->anim_obj, EINA_TRUE);
}
static void

View File

@ -124,7 +124,7 @@ main(void)
Eo *player = efl_add(EFL_CANVAS_ANIMATION_PLAYER_CLASS, evas);
efl_animation_player_animation_set(player, anim);
efl_event_callback_add(player, EFL_ANIMATION_PLAYER_EVENT_RUNNING, running_cb, NULL);
efl_player_start(player);
efl_player_playing_set(player, EINA_TRUE);
ecore_main_loop_begin();
ecore_evas_shutdown();

View File

@ -3,11 +3,25 @@ interface @beta Efl.Player
[[Efl media player interface]]
c_prefix: efl_player;
methods {
start {
[[Start a playing playable object.]]
}
stop {
[[Stop playable object.]]
@property playing {
[[Playback state of the media file.
This property sets the playback state of the object. Re-setting the current
playback state has no effect.
If set to $false, the object's @.progress property is reset to $0.0. Applying
the $false playing state also has the same effect as the player object reaching
the end of its playback, which may invoke additional behavior based on a class's
implementation.
]]
set {
return: bool(false); [[If $true, the property change has succeeded.]]
}
get {
}
values {
playing: bool; [[$true if playing, $false otherwise.]]
}
}
@property play {
[[Playback state of the media file.

View File

@ -176,9 +176,9 @@ _efl_ui_spotlight_manager_stack_efl_ui_spotlight_manager_content_del(Eo *obj EIN
static void
_setup_anim(Efl_Animation_Player *player, Efl_Gfx_Entity *entity)
{
efl_player_stop(player);
efl_player_playing_set(player, EINA_FALSE);
efl_animation_player_target_set(player, entity);
efl_player_start(player);
efl_player_playing_set(player, EINA_TRUE);
}
static Eina_Bool
@ -256,7 +256,7 @@ _reset_player(Efl_Animation_Player *player, Eina_Bool vis)
Efl_Gfx_Entity *obj;
obj = efl_animation_player_target_get(player);
efl_player_stop(player);
efl_player_playing_set(player, EINA_FALSE);
efl_animation_player_target_set(player, NULL);
efl_gfx_entity_visible_set(obj, vis);
}

View File

@ -327,13 +327,6 @@ _efl_ui_video_emotion_get(const Eo *obj EINA_UNUSED, Efl_Ui_Video_Data *sd)
return sd->emotion;
}
EOLIAN static void
_efl_ui_video_efl_player_start(Eo *obj, Efl_Ui_Video_Data *sd EINA_UNUSED)
{
efl_player_playback_position_set(obj, 0.0);
efl_player_play_set(obj, EINA_TRUE);
}
EOLIAN static void
_efl_ui_video_efl_player_play_set(Eo *obj, Efl_Ui_Video_Data *sd, Eina_Bool play)
{
@ -367,14 +360,25 @@ _efl_ui_video_efl_player_play_set(Eo *obj, Efl_Ui_Video_Data *sd, Eina_Bool play
/* FIXME: stop should go into hibernate state directly.
*/
EOLIAN static void
_efl_ui_video_efl_player_stop(Eo *obj, Efl_Ui_Video_Data *sd)
EOLIAN static Eina_Bool
_efl_ui_video_efl_player_playing_set(Eo *obj, Efl_Ui_Video_Data *sd, Eina_Bool playing)
{
if (!emotion_object_play_get(sd->emotion) && sd->stop) return;
playing = !!playing;
if (playing && emotion_object_play_get(sd->emotion)) return EINA_TRUE;
if ((!playing) && sd->stop) return EINA_TRUE;
ELM_SAFE_FREE(sd->timer, ecore_timer_del);
sd->stop = !playing;
if (playing)
{
emotion_object_play_set(sd->emotion, EINA_TRUE);
sd->stop = EINA_TRUE;
if(elm_widget_is_legacy(obj))
elm_layout_signal_emit(obj, "elm,video,play", "elm");
else
elm_layout_signal_emit(obj, "efl,video,play", "efl");
return EINA_TRUE;
}
efl_player_playback_position_set(obj, 0.0);
emotion_object_play_set(sd->emotion, EINA_FALSE);
if(elm_widget_is_legacy(obj))
@ -383,6 +387,13 @@ _efl_ui_video_efl_player_stop(Eo *obj, Efl_Ui_Video_Data *sd)
elm_layout_signal_emit(obj, "efl,video,stop", "efl");
emotion_object_suspend_set(sd->emotion, EMOTION_HIBERNATE);
return EINA_TRUE;
}
EOLIAN static Eina_Bool
_efl_ui_video_efl_player_playing_get(const Eo *obj EINA_UNUSED, Efl_Ui_Video_Data *sd)
{
return emotion_object_play_get(sd->emotion);
}
EOLIAN static Eina_Bool
@ -534,7 +545,7 @@ elm_video_play(Evas_Object *obj)
EAPI void
elm_video_stop(Evas_Object *obj)
{
efl_player_stop(obj);
efl_player_playing_set(obj, EINA_FALSE);
}
EAPI void

View File

@ -43,8 +43,7 @@ class @beta Efl.Ui.Video extends Efl.Ui.Layout_Base
Efl.Canvas.Group.group_calculate;
Efl.Ui.Widget.widget_input_event_handler;
Efl.Access.Widget.Action.elm_actions { get; }
Efl.Player.start;
Efl.Player.stop;
Efl.Player.playing { get; set; }
Efl.Player.play { get; set; }
}
}

View File

@ -61,7 +61,7 @@ _efl_canvas_animation_player_animation_set(Eo *eo_obj,
if (pd->animation)
{
efl_player_stop(eo_obj);
efl_player_playing_set(eo_obj, EINA_FALSE);
efl_unref(pd->animation);
}
pd->animation = anim;
@ -147,7 +147,7 @@ _animator_cb(void *data)
return ECORE_CALLBACK_RENEW;
}
efl_player_stop(eo_obj);
efl_player_playing_set(eo_obj, EINA_FALSE);
return ECORE_CALLBACK_CANCEL;
}
@ -188,30 +188,6 @@ _start_delay_timer_cb(void *data)
return ECORE_CALLBACK_CANCEL;
}
EOLIAN static void
_efl_canvas_animation_player_efl_player_start(Eo *eo_obj,
Efl_Canvas_Animation_Player_Data *pd)
{
double start_delay;
EFL_ANIMATION_PLAYER_ANIMATION_GET(eo_obj, anim);
if (!efl_playable_get(eo_obj)) return;
pd->is_play = EINA_TRUE;
//TODO: check this case is correct
if (pd->start_delay_timer) return;
pd->progress = 0.0;
start_delay = efl_animation_start_delay_get(anim);
if (start_delay > 0.0)
{
pd->start_delay_timer = ecore_timer_add(start_delay,
_start_delay_timer_cb, eo_obj);
return;
}
_start(eo_obj, pd);
}
static Eina_Bool
_is_final_state(Efl_Canvas_Animation *anim, double progress)
{
@ -240,12 +216,9 @@ _is_final_state(Efl_Canvas_Animation *anim, double progress)
return EINA_FALSE;
}
EOLIAN static void
_efl_canvas_animation_player_efl_player_stop(Eo *eo_obj,
Efl_Canvas_Animation_Player_Data *pd)
static void
_player_stop(Eo *eo_obj, Efl_Canvas_Animation_Player_Data *pd, Efl_Canvas_Animation *anim)
{
EFL_ANIMATION_PLAYER_ANIMATION_GET(eo_obj, anim);
//Reset the state of the target to the initial state
efl_gfx_mapping_reset(efl_animation_player_target_get(eo_obj));
@ -281,6 +254,42 @@ _efl_canvas_animation_player_efl_player_stop(Eo *eo_obj,
if (pd->auto_del) efl_del(eo_obj);
}
EOLIAN static Eina_Bool
_efl_canvas_animation_player_efl_player_playing_set(Eo *eo_obj, Efl_Canvas_Animation_Player_Data *pd, Eina_Bool playing)
{
double start_delay;
EFL_ANIMATION_PLAYER_ANIMATION_GET(eo_obj, anim);
if (!efl_playable_get(eo_obj)) return EINA_FALSE;
if ((!playing) && (!pd->is_play)) return EINA_TRUE;
if ((playing) && (pd->is_play)) return EINA_TRUE;
pd->is_play = !!playing;
if (!playing)
{
_player_stop(eo_obj, pd, anim);
return EINA_TRUE;
}
//TODO: check this case is correct
if (pd->start_delay_timer) return EINA_TRUE;
pd->progress = 0.0;
start_delay = efl_animation_start_delay_get(anim);
if (start_delay > 0.0)
{
pd->start_delay_timer = ecore_timer_add(start_delay,
_start_delay_timer_cb, eo_obj);
}
else
_start(eo_obj, pd);
return EINA_TRUE;
}
EOLIAN static Eina_Bool
_efl_canvas_animation_player_efl_player_playing_get(const Eo *eo_obj EINA_UNUSED, Efl_Canvas_Animation_Player_Data *pd)
{
return pd->is_play;
}
EOLIAN static void
_efl_canvas_animation_player_efl_player_play_set(Eo *eo_obj,
Efl_Canvas_Animation_Player_Data *pd,
@ -425,7 +434,7 @@ _efl_canvas_animation_player_efl_object_destructor(Eo *eo_obj,
pd->animator = NULL;
//Reset the state of the target to the initial state
efl_player_stop(eo_obj);
efl_player_playing_set(eo_obj, EINA_FALSE);
efl_event_callback_call(eo_obj, EFL_ANIMATION_PLAYER_EVENT_ENDED, NULL);
}

View File

@ -35,8 +35,7 @@ class @beta Efl.Canvas.Animation_Player extends Efl.Object implements Efl.Player
implements {
Efl.Object.constructor;
Efl.Object.destructor;
Efl.Player.start;
Efl.Player.stop;
Efl.Player.playing { get; set; }
Efl.Player.play { get; set; }
Efl.Playable.playable { get; }
Efl.Player.playback_position { get; set; }

View File

@ -1870,7 +1870,7 @@ static void
_show(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj)
{
if (obj->anim_player)
efl_player_stop(obj->anim_player);
efl_player_playing_set(obj->anim_player, EINA_FALSE);
if (obj->is_smart && obj->smart.smart && obj->smart.smart->smart_class->show)
{
obj->smart.smart->smart_class->show(eo_obj);
@ -2583,7 +2583,7 @@ _efl_canvas_object_event_animation_cancel(Eo *eo_obj)
Evas_Object_Protected_Data *obj = EVAS_OBJECT_DATA_SAFE_GET(eo_obj);
if (obj)
efl_player_stop(obj->anim_player);
efl_player_playing_set(obj->anim_player, EINA_FALSE);
}
/* legacy */