summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <zmike@samsung.com>2020-01-15 09:24:07 -0500
committerMike Blumenkrantz <zmike@samsung.com>2020-01-15 09:24:07 -0500
commita63306a9087893bb894329306fe4149394db832f (patch)
tree6f2f2bec1d40755d3228e5839e57b496e2825a03
parent2f7eef14d8bd58a93577c1a0bf8d467c2f0aaca4 (diff)
downloadefl-a63306a9087893bb894329306fe4149394db832f.tar.gz
efl/player: merge in and rework events from vg_animation
Summary: this adds comprehensive events for the player interface which can be used to provide details about the state of the playback ref T8476 Depends on D11098 Reviewers: jsuya, bu5hm4n Reviewed By: jsuya Subscribers: jsuya, segfaultxavi, cedric, #reviewers, #committers Tags: #efl Maniphest Tasks: T8476 Differential Revision: https://phab.enlightenment.org/D11080
-rw-r--r--src/lib/efl/interfaces/efl_player.eo8
-rw-r--r--src/lib/elementary/efl_ui_vg_animation.c71
-rw-r--r--src/lib/elementary/efl_ui_vg_animation.eo9
3 files changed, 66 insertions, 22 deletions
diff --git a/src/lib/efl/interfaces/efl_player.eo b/src/lib/efl/interfaces/efl_player.eo
index 434482ab63..90717ff7a3 100644
--- a/src/lib/efl/interfaces/efl_player.eo
+++ b/src/lib/efl/interfaces/efl_player.eo
@@ -94,4 +94,12 @@ interface Efl.Player
}
}
}
+ events {
+ playing,changed: bool; [[Called when the playing state has changed. The event value reflects the current state. @since 1.24]]
+ paused,changed: bool; [[Called when the paused state has changed. The event value reflects the current state. @since 1.24]]
+ playback_progress,changed: double; [[Called when the playback_progress state has changed. The event value reflects the current state. @since 1.24]]
+ playback_position,changed: double; [[Called when the playback_position state has changed. The event value reflects the current state. @since 1.24]]
+ playback,repeated: int; [[Called when the player has begun to repeat its data stream. The event value is the current number of repeats. @since 1.24]]
+ playback,finished: void; [[Called when the player has completed playing its data stream. @since 1.24]]
+ }
}
diff --git a/src/lib/elementary/efl_ui_vg_animation.c b/src/lib/elementary/efl_ui_vg_animation.c
index 210c5ec29c..503ea856e6 100644
--- a/src/lib/elementary/efl_ui_vg_animation.c
+++ b/src/lib/elementary/efl_ui_vg_animation.c
@@ -64,12 +64,16 @@ _size_hint_event_cb(void *data, const Efl_Event *event)
static void
_transit_go_facade(Eo* obj, Efl_Ui_Vg_Animation_Data *pd)
{
+ Eina_Bool playing = EINA_TRUE;
pd->repeat_times = 0;
if (pd->playing_reverse)
pd->state = EFL_UI_VG_ANIMATION_STATE_PLAYING_BACKWARDS;
else
pd->state = EFL_UI_VG_ANIMATION_STATE_PLAYING;
- evas_object_smart_callback_call(obj, SIG_PLAY_START, NULL);
+ if (elm_widget_is_legacy(obj))
+ evas_object_smart_callback_call(obj, SIG_PLAY_START, NULL);
+ else
+ efl_event_callback_call(obj, EFL_PLAYER_EVENT_PLAYING_CHANGED, &playing);
if (pd->transit) elm_transit_go(pd->transit);}
static Eina_Bool
@@ -106,25 +110,33 @@ _autoplay(Eo *obj, Efl_Ui_Vg_Animation_Data *pd, Eina_Bool vis)
{
if (pd->state == EFL_UI_VG_ANIMATION_STATE_PAUSED && pd->autoplay_pause)
{
+ Eina_Bool paused = EINA_FALSE;
elm_transit_paused_set(pd->transit, EINA_FALSE);
if (pd->playing_reverse)
pd->state = EFL_UI_VG_ANIMATION_STATE_PLAYING_BACKWARDS;
else
pd->state = EFL_UI_VG_ANIMATION_STATE_PLAYING;
pd->autoplay_pause = EINA_FALSE;
- evas_object_smart_callback_call(obj, SIG_PLAY_RESUME, NULL);
+ if (elm_widget_is_legacy(obj))
+ evas_object_smart_callback_call(obj, SIG_PLAY_RESUME, NULL);
+ else
+ efl_event_callback_call(obj, EFL_PLAYER_EVENT_PAUSED_CHANGED, &paused);
}
}
//Pause Animation
else
{
+ Eina_Bool paused = EINA_TRUE;
if ((pd->state == EFL_UI_VG_ANIMATION_STATE_PLAYING) ||
(pd->state == EFL_UI_VG_ANIMATION_STATE_PLAYING_BACKWARDS))
{
elm_transit_paused_set(pd->transit, EINA_TRUE);
pd->state = EFL_UI_VG_ANIMATION_STATE_PAUSED;
pd->autoplay_pause = EINA_TRUE;
- evas_object_smart_callback_call(obj, SIG_PLAY_PAUSE, NULL);
+ if (elm_widget_is_legacy(obj))
+ evas_object_smart_callback_call(obj, SIG_PLAY_PAUSE, NULL);
+ else
+ efl_event_callback_call(obj, EFL_PLAYER_EVENT_PAUSED_CHANGED, &paused);
}
}
}
@@ -138,7 +150,12 @@ _transit_del_cb(Elm_Transit_Effect *effect, Elm_Transit *transit)
if ((pd->state == EFL_UI_VG_ANIMATION_STATE_PLAYING && pd->progress == 1) ||
(pd->state == EFL_UI_VG_ANIMATION_STATE_PLAYING_BACKWARDS && pd->progress == 0))
- evas_object_smart_callback_call(obj, SIG_PLAY_DONE, NULL);
+ {
+ if (elm_widget_is_legacy(obj))
+ evas_object_smart_callback_call(obj, SIG_PLAY_DONE, NULL);
+ else
+ efl_event_callback_call(obj, EFL_PLAYER_EVENT_PLAYBACK_FINISHED, NULL);
+ }
if (pd->transit != transit) return;
@@ -149,7 +166,11 @@ _transit_del_cb(Elm_Transit_Effect *effect, Elm_Transit *transit)
if (prev_state != EFL_UI_VG_ANIMATION_STATE_STOPPED)
{
- evas_object_smart_callback_call(obj, SIG_PLAY_STOP, NULL);
+ Eina_Bool playing = EINA_FALSE;
+ if (elm_widget_is_legacy(obj))
+ evas_object_smart_callback_call(obj, SIG_PLAY_STOP, NULL);
+ else
+ efl_event_callback_call(obj, EFL_PLAYER_EVENT_PLAYING_CHANGED, &playing);
pd->progress = 0;
}
}
@@ -201,15 +222,25 @@ _transit_cb(Elm_Transit_Effect *effect, Elm_Transit *transit, double progress)
int repeat_times = elm_transit_current_repeat_times_get(pd->transit);
if (pd->repeat_times != repeat_times)
{
- evas_object_smart_callback_call(obj, SIG_PLAY_REPEAT, NULL);
+ if (elm_widget_is_legacy(obj))
+ evas_object_smart_callback_call(obj, SIG_PLAY_REPEAT, NULL);
+ else
+ efl_event_callback_call(obj, EFL_PLAYER_EVENT_PLAYBACK_REPEATED, &repeat_times);
pd->repeat_times = repeat_times;
}
}
//transit_cb is always called with a progress value 0 ~ 1.
//SIG_PLAY_UPDATE callback is called only when there is a real change.
- if (update_frame != current_frame)
+ if (update_frame == current_frame) return;
+ if (elm_widget_is_legacy(obj))
evas_object_smart_callback_call(obj, SIG_PLAY_UPDATE, NULL);
+ else
+ {
+ double position = pd->frame_duration * pd->progress;
+ efl_event_callback_call(obj, EFL_PLAYER_EVENT_PLAYBACK_POSITION_CHANGED, &position);
+ efl_event_callback_call(obj, EFL_PLAYER_EVENT_PLAYBACK_PROGRESS_CHANGED, &pd->progress);
+ }
}
EOLIAN static void
@@ -354,10 +385,14 @@ _efl_ui_vg_animation_efl_file_load(Eo *obj, Efl_Ui_Vg_Animation_Data *pd)
if (!_visible_check(obj))
{
+ Eina_Bool paused = EINA_TRUE;
elm_transit_paused_set(pd->transit, EINA_TRUE);
pd->state = EFL_UI_VG_ANIMATION_STATE_PAUSED;
pd->autoplay_pause = EINA_TRUE;
- evas_object_smart_callback_call(obj, SIG_PLAY_PAUSE, NULL);
+ if (elm_widget_is_legacy(obj))
+ evas_object_smart_callback_call(obj, SIG_PLAY_PAUSE, NULL);
+ else
+ efl_event_callback_call(obj, EFL_PLAYER_EVENT_PAUSED_CHANGED, &paused);
}
}
return 0;
@@ -492,6 +527,7 @@ Eina_Bool _efl_ui_vg_animation_playing_sector(Eo *obj, Efl_Ui_Vg_Animation_Data
Eina_Bool
_playing_stop(Eo* obj, Efl_Ui_Vg_Animation_Data *pd)
{
+ Eina_Bool playing = EINA_FALSE;
if (!pd->transit) return EINA_FALSE;
if ((pd->state == EFL_UI_VG_ANIMATION_STATE_NOT_READY) ||
@@ -501,7 +537,11 @@ _playing_stop(Eo* obj, Efl_Ui_Vg_Animation_Data *pd)
evas_object_vg_animated_frame_set(pd->vg, 0);
pd->progress = 0;
pd->state = EFL_UI_VG_ANIMATION_STATE_STOPPED;
- evas_object_smart_callback_call(obj, SIG_PLAY_STOP, NULL);
+ if (elm_widget_is_legacy(obj))
+ evas_object_smart_callback_call(obj, SIG_PLAY_STOP, NULL);
+ else
+ efl_event_callback_call(obj, EFL_PLAYER_EVENT_PLAYING_CHANGED, &playing);
+
elm_transit_del(pd->transit);
return EINA_TRUE;
}
@@ -696,7 +736,7 @@ _efl_ui_vg_animation_efl_player_playing_get(const Eo *obj EINA_UNUSED, Efl_Ui_Vg
EOLIAN static Eina_Bool
_efl_ui_vg_animation_efl_player_paused_set(Eo *obj EINA_UNUSED, Efl_Ui_Vg_Animation_Data *pd, Eina_Bool paused)
{
-
+ paused = !!paused;
if (paused)
{
if ((pd->state == EFL_UI_VG_ANIMATION_STATE_PLAYING) ||
@@ -705,7 +745,10 @@ _efl_ui_vg_animation_efl_player_paused_set(Eo *obj EINA_UNUSED, Efl_Ui_Vg_Animat
elm_transit_paused_set(pd->transit, paused);
pd->state = EFL_UI_VG_ANIMATION_STATE_PAUSED;
pd->autoplay_pause = EINA_FALSE;
- evas_object_smart_callback_call(obj, SIG_PLAY_PAUSE, NULL);
+ if (elm_widget_is_legacy(obj))
+ evas_object_smart_callback_call(obj, SIG_PLAY_PAUSE, NULL);
+ else
+ efl_event_callback_call(obj, EFL_PLAYER_EVENT_PAUSED_CHANGED, &paused);
}
}
else
@@ -718,8 +761,10 @@ _efl_ui_vg_animation_efl_player_paused_set(Eo *obj EINA_UNUSED, Efl_Ui_Vg_Animat
else
pd->state = EFL_UI_VG_ANIMATION_STATE_PLAYING;
pd->autoplay_pause = EINA_FALSE;
-
- evas_object_smart_callback_call(obj, SIG_PLAY_RESUME, NULL);
+ if (elm_widget_is_legacy(obj))
+ evas_object_smart_callback_call(obj, SIG_PLAY_RESUME, NULL);
+ else
+ efl_event_callback_call(obj, EFL_PLAYER_EVENT_PAUSED_CHANGED, &paused);
}
}
return EINA_TRUE;
diff --git a/src/lib/elementary/efl_ui_vg_animation.eo b/src/lib/elementary/efl_ui_vg_animation.eo
index 69971f95c2..12dcfe96c6 100644
--- a/src/lib/elementary/efl_ui_vg_animation.eo
+++ b/src/lib/elementary/efl_ui_vg_animation.eo
@@ -204,13 +204,4 @@ class @beta Efl.Ui.Vg_Animation extends Efl.Ui.Widget implements Efl.Gfx.View, E
Efl.Playable.playable { get; }
Efl.Playable.seekable { get; }
}
- events {
- play,start: void; [[Called when animation is just started]]
- play,repeat: void; [[Called when animation is just repeated]]
- play,done: void; [[Called when animation is just finished]]
- play,pause: void; [[Called when animation is just paused]]
- play,resume: void; [[Called when animation is just resumed]]
- play,stop: void; [[Called when animation is just stopped]]
- play,update: void; [[Called when animation is just updated]]
- }
}