(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;
}
pd->self = obj;
/* legacy elm_image starts paused */
pd->paused = elm_widget_is_legacy(obj);
+ pd->playback_speed = 1;
return obj;
}
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
{
}
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)
{
EINA_SAFETY_ON_TRUE_RETURN(sec < 0.0);
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
{
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;
}
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;
}
(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;
}
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
{
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
{
}
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)
{
EINA_SAFETY_ON_TRUE_RETURN(sec < 0.0);
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; }
Ecore_Timer *anim_timer;
double frame_duration;
+ double playback_speed;
int cur_frame;
int frame_count;
double scale;
double frame_duration;
+ double playback_speed;
double align_x, align_y;
Eina_Size2D load_size;