efl_ui/image: implement efl.player::playback_speed methods

Reviewed-by: Cedric BAIL <cedric.bail@free.fr>
Differential Revision: https://phab.enlightenment.org/D10121
This commit is contained in:
Mike Blumenkrantz 2019-09-24 15:43:00 -04:00 committed by Cedric Bail
parent 5555c8e879
commit 3e7b7a47e7
6 changed files with 57 additions and 7 deletions

View File

@ -141,7 +141,7 @@ _efl_ui_image_animate_cb(void *data)
(sd->img, sd->cur_frame, 0);
if (sd->frame_duration > 0)
ecore_timer_interval_set(sd->anim_timer, sd->frame_duration);
ecore_timer_interval_set(sd->anim_timer, sd->frame_duration * sd->playback_speed);
return ECORE_CALLBACK_RENEW;
}
@ -873,6 +873,7 @@ _efl_ui_image_efl_object_constructor(Eo *obj, Efl_Ui_Image_Data *pd)
pd->self = obj;
/* legacy elm_image starts paused */
pd->paused = elm_widget_is_legacy(obj);
pd->playback_speed = 1;
return obj;
}
@ -1761,7 +1762,7 @@ _efl_ui_image_animated_set_internal(Eo *obj, Efl_Ui_Image_Data *sd, Eina_Bool an
evas_object_image_animated_frame_set(sd->img, sd->cur_frame);
if (!sd->paused)//legacy
sd->anim_timer = ecore_timer_add
(sd->frame_duration, _efl_ui_image_animate_cb, obj);
(sd->frame_duration * sd->playback_speed, _efl_ui_image_animate_cb, obj);
}
else
{
@ -1809,6 +1810,28 @@ _efl_ui_image_efl_player_playing_get(const Eo *obj, Efl_Ui_Image_Data *sd)
return _efl_ui_image_animated_get_internal(obj, sd);
}
EOLIAN static void
_efl_ui_image_efl_player_playback_speed_set(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd, double factor)
{
EINA_SAFETY_ON_TRUE_RETURN(factor < 0.0);
EINA_SAFETY_ON_TRUE_RETURN(EINA_DBL_EQ(factor, 0.0));
if (EINA_DBL_EQ(sd->playback_speed, factor)) return;
sd->playback_speed = factor;
if (sd->edje)
efl_player_playback_speed_set(sd->img, factor);
else if (sd->anim_timer)
{
ecore_timer_interval_set(sd->anim_timer, sd->frame_duration * sd->playback_speed);
ecore_timer_reset(sd->anim_timer);
}
}
EOLIAN static double
_efl_ui_image_efl_player_playback_speed_get(const Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd)
{
return sd->playback_speed;
}
EOLIAN static void
_efl_ui_image_efl_player_playback_position_set(Eo *obj EINA_UNUSED, Efl_Ui_Image_Data *sd, double sec)
{
@ -1858,7 +1881,7 @@ _efl_ui_image_animated_paused_set_internal(Eo *obj, Efl_Ui_Image_Data *sd, Eina_
if (!paused)
{
sd->anim_timer = ecore_timer_add
(sd->frame_duration, _efl_ui_image_animate_cb, obj);
(sd->frame_duration * sd->playback_speed, _efl_ui_image_animate_cb, obj);
}
else
{

View File

@ -102,6 +102,7 @@ class Efl.Ui.Image extends Efl.Ui.Widget implements Efl.Input.Clickable, Efl.Ui.
Efl.Player.paused { get; set; }
Efl.Player.playback_position { get; set; }
Efl.Player.playback_progress { get; }
Efl.Player.playback_speed { get; set; }
Efl.Layout.Signal.signal_emit;
Efl.Layout.Signal.message_send;
Efl.Layout.Signal.signal_callback_add;

View File

@ -1938,12 +1938,13 @@ _efl_ui_image_zoomable_efl_canvas_group_group_member_add(Eo *obj, Efl_Ui_Image_Z
}
EOLIAN static Eo *
_efl_ui_image_zoomable_efl_object_constructor(Eo *obj, Efl_Ui_Image_Zoomable_Data *_pd EINA_UNUSED)
_efl_ui_image_zoomable_efl_object_constructor(Eo *obj, Efl_Ui_Image_Zoomable_Data *pd)
{
obj = efl_constructor(efl_super(obj, MY_CLASS));
evas_object_smart_callbacks_descriptions_set(obj, _smart_callbacks);
efl_access_object_role_set(obj, EFL_ACCESS_ROLE_IMAGE);
legacy_object_focus_handle(obj);
pd->playback_speed = 1;
return obj;
}
@ -3034,7 +3035,7 @@ _efl_ui_image_zoomable_animate_cb(void *data)
(sd->img, sd->cur_frame, 0);
if (sd->frame_duration > 0)
ecore_timer_interval_set(sd->anim_timer, sd->frame_duration);
ecore_timer_interval_set(sd->anim_timer, sd->frame_duration * sd->playback_speed);
return ECORE_CALLBACK_RENEW;
}
@ -3064,7 +3065,7 @@ _efl_ui_image_zoomable_animated_set_internal(Eo *obj EINA_UNUSED, Efl_Ui_Image_Z
evas_object_image_animated_frame_set(sd->img, sd->cur_frame);
if (!sd->paused)//legacy
sd->anim_timer = ecore_timer_add
(sd->frame_duration, _efl_ui_image_zoomable_animate_cb, obj);
(sd->frame_duration * sd->playback_speed, _efl_ui_image_zoomable_animate_cb, obj);
}
else
{
@ -3091,7 +3092,7 @@ _efl_ui_image_zoomable_animated_paused_set_internal(Eo *obj, Efl_Ui_Image_Zoomab
if (!paused)
{
sd->anim_timer = ecore_timer_add
(sd->frame_duration, _efl_ui_image_zoomable_animate_cb, obj);
(sd->frame_duration * sd->playback_speed, _efl_ui_image_zoomable_animate_cb, obj);
}
else
{
@ -3126,6 +3127,28 @@ _efl_ui_image_zoomable_efl_player_paused_get(const Eo *obj EINA_UNUSED, Efl_Ui_I
return sd->paused;
}
EOLIAN static void
_efl_ui_image_zoomable_efl_player_playback_speed_set(Eo *obj EINA_UNUSED, Efl_Ui_Image_Zoomable_Data *sd, double factor)
{
EINA_SAFETY_ON_TRUE_RETURN(factor < 0.0);
EINA_SAFETY_ON_TRUE_RETURN(EINA_DBL_EQ(factor, 0.0));
if (EINA_DBL_EQ(sd->playback_speed, factor)) return;
sd->playback_speed = factor;
if (sd->edje)
efl_player_playback_speed_set(sd->edje, factor);
else if (sd->anim_timer)
{
ecore_timer_interval_set(sd->anim_timer, sd->frame_duration * sd->playback_speed);
ecore_timer_reset(sd->anim_timer);
}
}
EOLIAN static double
_efl_ui_image_zoomable_efl_player_playback_speed_get(const Eo *obj EINA_UNUSED, Efl_Ui_Image_Zoomable_Data *sd)
{
return sd->playback_speed;
}
EOLIAN static void
_efl_ui_image_zoomable_efl_player_playback_position_set(Eo *obj EINA_UNUSED, Efl_Ui_Image_Zoomable_Data *sd, double sec)
{

View File

@ -48,6 +48,7 @@ class @beta Efl.Ui.Image_Zoomable extends Efl.Ui.Image implements Efl.Ui.Zoom
Efl.Player.paused { get; set; }
Efl.Player.playback_position { get; set; }
Efl.Player.playback_progress { get; }
Efl.Player.playback_speed { get; set; }
Efl.Ui.Zoom.zoom_animation { set; get; }
Efl.Ui.Zoom.zoom_level { set; get; }
Efl.Ui.Zoom.zoom_mode { set; get; }

View File

@ -125,6 +125,7 @@ struct _Efl_Ui_Image_Zoomable_Data
Ecore_Timer *anim_timer;
double frame_duration;
double playback_speed;
int cur_frame;
int frame_count;

View File

@ -56,6 +56,7 @@ struct _Efl_Ui_Image_Data
double scale;
double frame_duration;
double playback_speed;
double align_x, align_y;
Eina_Size2D load_size;