zmike pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=3dc3deba6280349021d877c29362fd80eaed57aa

commit 3dc3deba6280349021d877c29362fd80eaed57aa
Author: JunsuChoi <[email protected]>
Date:   Tue Dec 31 09:53:10 2019 -0500

    Efl.Player: Add setter of playback_progress
    
    Summary:
    The setter of Efl.Player.playback_progress is implemented in each class 
below.
    Efl.Ui.Animation_View
    Efl.Ui.Image
    Efl.Ui.Image_Zoomable
    Efl.Canvas.Video
    
    ref T8476
    Depends on D10915
    
    Test Plan: N/A
    
    Reviewers: Hermet, bu5hm4n, kimcinoo, Jaehyun_Cho, segfaultxavi, zmike
    
    Reviewed By: zmike
    
    Subscribers: zmike, cedric, #reviewers, #committers
    
    Tags: #efl
    
    Maniphest Tasks: T8476
    
    Differential Revision: https://phab.enlightenment.org/D10931
---
 .../elementary/test_efl_gfx_vg_value_provider.c    |  2 +-
 src/bin/elementary/test_efl_ui_animation_view.c    |  2 +-
 src/lib/efl/interfaces/efl_player.eo               |  6 ++-
 src/lib/elementary/efl_ui_animation_view.c         | 46 +++++++++++-----------
 src/lib/elementary/efl_ui_animation_view.eo        | 16 +-------
 .../elementary/efl_ui_animation_view_eo.legacy.c   |  2 +-
 src/lib/elementary/efl_ui_image.c                  | 18 +++++++--
 src/lib/elementary/efl_ui_image.eo                 |  2 +-
 src/lib/elementary/efl_ui_image_zoomable.c         | 21 ++++++++--
 src/lib/elementary/efl_ui_image_zoomable.eo        |  2 +-
 src/lib/emotion/efl_canvas_video.eo                |  2 +-
 src/lib/emotion/emotion_smart.c                    |  7 ++++
 12 files changed, 74 insertions(+), 52 deletions(-)

diff --git a/src/bin/elementary/test_efl_gfx_vg_value_provider.c 
b/src/bin/elementary/test_efl_gfx_vg_value_provider.c
index e7a15206d6..22a55d5545 100644
--- a/src/bin/elementary/test_efl_gfx_vg_value_provider.c
+++ b/src/bin/elementary/test_efl_gfx_vg_value_provider.c
@@ -241,7 +241,7 @@ static void
 _slider_changed_cb(void *data, const Efl_Event *ev)
 {
    Evas_Object *anim_view = data;
-   efl_ui_animation_view_progress_set(anim_view, 
efl_ui_range_value_get(ev->object));
+   efl_player_playback_progress_set(anim_view, 
efl_ui_range_value_get(ev->object));
 }
 
 static void
diff --git a/src/bin/elementary/test_efl_ui_animation_view.c 
b/src/bin/elementary/test_efl_ui_animation_view.c
index 912aa7164a..fe828a7534 100644
--- a/src/bin/elementary/test_efl_ui_animation_view.c
+++ b/src/bin/elementary/test_efl_ui_animation_view.c
@@ -133,7 +133,7 @@ static void
 _slider_changed_cb(void *data, const Efl_Event *ev)
 {
    Evas_Object *anim_view = data;
-   efl_ui_animation_view_progress_set(anim_view, 
efl_ui_range_value_get(ev->object));
+   efl_player_playback_progress_set(anim_view, 
efl_ui_range_value_get(ev->object));
 }
 
 static void
diff --git a/src/lib/efl/interfaces/efl_player.eo 
b/src/lib/efl/interfaces/efl_player.eo
index afeb7c2d13..434482ab63 100644
--- a/src/lib/efl/interfaces/efl_player.eo
+++ b/src/lib/efl/interfaces/efl_player.eo
@@ -67,9 +67,11 @@ interface Efl.Player
         @property playback_progress {
            [[How much of the file has been played.
 
-             This function gets the progress in playing the file, the
-             return value is in the [0, 1] range.
+             This function sets or gets the progress in playing the file, the
+             value is in the [0, 1] range.
            ]]
+           set {
+           }
            get {
            }
            values {
diff --git a/src/lib/elementary/efl_ui_animation_view.c 
b/src/lib/elementary/efl_ui_animation_view.c
index 2240624623..6669d53ff3 100644
--- a/src/lib/elementary/efl_ui_animation_view.c
+++ b/src/lib/elementary/efl_ui_animation_view.c
@@ -508,31 +508,10 @@ _playing_stop(Eo* obj, Efl_Ui_Animation_View_Data *pd)
    return EINA_TRUE;
 }
 
-EOLIAN static void
-_efl_ui_animation_view_progress_set(Eo *obj EINA_UNUSED, 
Efl_Ui_Animation_View_Data *pd, double progress)
-{
-   if (progress < 0) progress = 0;
-   else if (progress > 1) progress = 1;
-   if (pd->progress == progress) return;
-
-   pd->progress = progress;
-
-   if (pd->frame_cnt > 0)
-     evas_object_vg_animated_frame_set(pd->vg, (int) ((pd->frame_cnt - 1) * 
progress));
-
-   if (pd->transit)
-     {
-        if (pd->playing_reverse)
-          elm_transit_progress_value_set(pd->transit, 1 - progress);
-        else
-          elm_transit_progress_value_set(pd->transit, progress);
-     }
-}
-
 EOLIAN static void
 _efl_ui_animation_view_frame_set(Eo *obj EINA_UNUSED, 
Efl_Ui_Animation_View_Data *pd, int frame_num)
 {
-   efl_ui_animation_view_progress_set(obj, (double) frame_num / (double) 
(evas_object_vg_animated_frame_count_get(pd->vg) - 1));
+   efl_player_playback_progress_set(obj, (double) frame_num / (double) 
(evas_object_vg_animated_frame_count_get(pd->vg) - 1));
 }
 
 EOLIAN static int
@@ -768,7 +747,7 @@ _efl_ui_animation_view_efl_player_playback_position_set(Eo 
*obj, Efl_Ui_Animatio
    EINA_SAFETY_ON_TRUE_RETURN(sec < 0);
    EINA_SAFETY_ON_TRUE_RETURN(sec > pd->frame_duration);
 
-   efl_ui_animation_view_progress_set(obj, pd->frame_duration != 0 ? sec / 
pd->frame_duration : 0);
+   efl_player_playback_progress_set(obj, pd->frame_duration != 0 ? sec / 
pd->frame_duration : 0);
 }
 
 EOLIAN static double
@@ -783,6 +762,27 @@ 
_efl_ui_animation_view_efl_player_playback_progress_get(const Eo *obj EINA_UNUSE
    return pd->progress;
 }
 
+EOLIAN static void
+_efl_ui_animation_view_efl_player_playback_progress_set(Eo *obj EINA_UNUSED, 
Efl_Ui_Animation_View_Data *pd, double progress)
+{
+   if (progress < 0) progress = 0;
+   else if (progress > 1) progress = 1;
+   if (pd->progress == progress) return;
+
+   pd->progress = progress;
+
+   if (pd->frame_cnt > 0)
+     evas_object_vg_animated_frame_set(pd->vg, (int) ((pd->frame_cnt - 1) * 
progress));
+
+   if (pd->transit)
+     {
+        if (pd->playing_reverse)
+          elm_transit_progress_value_set(pd->transit, 1 - progress);
+        else
+          elm_transit_progress_value_set(pd->transit, progress);
+     }
+}
+
 EOLIAN static void
 _efl_ui_animation_view_efl_player_playback_speed_set(Eo *obj EINA_UNUSED, 
Efl_Ui_Animation_View_Data *pd, double speed)
 {
diff --git a/src/lib/elementary/efl_ui_animation_view.eo 
b/src/lib/elementary/efl_ui_animation_view.eo
index 1d7d0c23ae..c14b927e3c 100644
--- a/src/lib/elementary/efl_ui_animation_view.eo
+++ b/src/lib/elementary/efl_ui_animation_view.eo
@@ -75,20 +75,6 @@ class @beta Efl.Ui.Animation_View extends Efl.Ui.Widget 
implements Efl.Gfx.View,
             frame_duration: double; [[duration time in the seconds]]
          }
       }
-      @property progress {
-         [[Set current progress position of animation view object.
-
-           When you required to jump on a certain frame instantly,
-           you can change current position by using this API.
-
-           Warning: The range of progress is 0 ~ 1.
-         ]]
-         set {
-         }
-         values {
-            progress: double; [[Progress position. Value must be 0 ~ 1.]]
-         }
-      }
       @property frame {
          [[Number of current frame.
 
@@ -224,7 +210,7 @@ class @beta Efl.Ui.Animation_View extends Efl.Ui.Widget 
implements Efl.Gfx.View,
       Efl.Player.playing { set; get; }
       Efl.Player.paused { set; get; }
       Efl.Player.playback_position { set; get; }
-      Efl.Player.playback_progress { get; }
+      Efl.Player.playback_progress { get; set; }
       Efl.Player.playback_speed { set; get; }
    }
    events {
diff --git a/src/lib/elementary/efl_ui_animation_view_eo.legacy.c 
b/src/lib/elementary/efl_ui_animation_view_eo.legacy.c
index e213ebb6e9..b109e0ef5e 100644
--- a/src/lib/elementary/efl_ui_animation_view_eo.legacy.c
+++ b/src/lib/elementary/efl_ui_animation_view_eo.legacy.c
@@ -46,7 +46,7 @@ elm_animation_view_duration_time_get(const 
Efl_Ui_Animation_View *obj)
 EAPI void
 elm_animation_view_progress_set(Efl_Ui_Animation_View *obj, double progress)
 {
-   efl_ui_animation_view_progress_set(obj, progress);
+   efl_player_playback_progress_set(obj, progress);
 }
 
 EAPI double
diff --git a/src/lib/elementary/efl_ui_image.c 
b/src/lib/elementary/efl_ui_image.c
index 213d55edd2..2d9ce304fe 100644
--- a/src/lib/elementary/efl_ui_image.c
+++ b/src/lib/elementary/efl_ui_image.c
@@ -1753,7 +1753,7 @@ _efl_ui_image_animated_set_internal(Eo *obj, 
Efl_Ui_Image_Data *sd, Eina_Bool an
    if (anim)
      {
         sd->frame_count = evas_object_image_animated_frame_count_get(sd->img);
-        sd->cur_frame = 1;
+        sd->cur_frame = 0;
         sd->frame_duration =
           evas_object_image_animated_frame_duration_get
             (sd->img, sd->cur_frame, 0);
@@ -1859,11 +1859,23 @@ _efl_ui_image_efl_player_playback_progress_get(const Eo 
*obj EINA_UNUSED, Efl_Ui
 {
    if (sd->edje)
      efl_player_playback_progress_get(sd->img);
-   else if ((sd->frame_count > 0) && (sd->frame_duration > 0.0))
-     return (sd->cur_frame * sd->frame_duration) / sd->frame_count;
+   else if (sd->frame_count > 1)
+     return sd->cur_frame / (sd->frame_count - 1);
    return 0.0;
 }
 
+EOLIAN static void
+_efl_ui_image_efl_player_playback_progress_set(Eo *obj EINA_UNUSED, 
Efl_Ui_Image_Data *sd, double progress)
+{
+   EINA_SAFETY_ON_TRUE_RETURN(progress > 1 || progress < 0);
+   if (sd->edje)
+     efl_player_playback_progress_set(sd->img, progress);
+   else if (sd->frame_count > 1)
+     sd->cur_frame = lround(progress * (sd->frame_count - 1));
+   else
+     sd->cur_frame = 0;
+}
+
 static Eina_Bool
 _efl_ui_image_animated_paused_set_internal(Eo *obj, Efl_Ui_Image_Data *sd, 
Eina_Bool paused)
 {
diff --git a/src/lib/elementary/efl_ui_image.eo 
b/src/lib/elementary/efl_ui_image.eo
index 207a264e70..0cabaa0290 100644
--- a/src/lib/elementary/efl_ui_image.eo
+++ b/src/lib/elementary/efl_ui_image.eo
@@ -103,7 +103,7 @@ class Efl.Ui.Image extends Efl.Ui.Widget implements 
Efl.Input.Clickable, Efl.Ui.
       Efl.Player.playing { get; set; }
       Efl.Player.paused { get; set; }
       Efl.Player.playback_position { get; set; }
-      Efl.Player.playback_progress { get; }
+      Efl.Player.playback_progress { get; set; }
       Efl.Player.playback_speed { get; set; }
       Efl.Layout.Signal.signal_emit;
       Efl.Layout.Signal.message_send;
diff --git a/src/lib/elementary/efl_ui_image_zoomable.c 
b/src/lib/elementary/efl_ui_image_zoomable.c
index 19d2e0155b..62a146422f 100644
--- a/src/lib/elementary/efl_ui_image_zoomable.c
+++ b/src/lib/elementary/efl_ui_image_zoomable.c
@@ -3058,7 +3058,7 @@ _efl_ui_image_zoomable_animated_set_internal(Eo *obj 
EINA_UNUSED, Efl_Ui_Image_Z
    if (anim)
      {
         sd->frame_count = evas_object_image_animated_frame_count_get(sd->img);
-        sd->cur_frame = 1;
+        sd->cur_frame = 0;
         sd->frame_duration =
           evas_object_image_animated_frame_duration_get
             (sd->img, sd->cur_frame, 0);
@@ -3178,11 +3178,26 @@ 
_efl_ui_image_zoomable_efl_player_playback_progress_get(const Eo *obj EINA_UNUSE
 {
    if (sd->edje)
      efl_player_playback_progress_get(sd->edje);
-   else if ((sd->frame_count > 0) && (sd->frame_duration > 0.0))
-     return (sd->cur_frame * sd->frame_duration) / sd->frame_count;
+   else if (sd->frame_count > 1)
+     return sd->cur_frame / (sd->frame_count - 1);
    return 0.0;
 }
 
+EOLIAN static void
+_efl_ui_image_zoomable_efl_player_playback_progress_set(Eo *obj EINA_UNUSED, 
Efl_Ui_Image_Zoomable_Data *sd, double progress)
+{
+   EINA_SAFETY_ON_TRUE_RETURN(progress > 1 || progress < 0);
+   if (sd->edje)
+     {
+        efl_player_playback_progress_set(sd->img, progress);
+     }
+   else if (sd->frame_count > 1)
+     sd->cur_frame = lround(progress * (sd->frame_count - 1));
+   else
+     sd->cur_frame = 0;
+}
+
+
 EOLIAN static void
 _efl_ui_image_zoomable_class_constructor(Efl_Class *klass EINA_UNUSED)
 {
diff --git a/src/lib/elementary/efl_ui_image_zoomable.eo 
b/src/lib/elementary/efl_ui_image_zoomable.eo
index 5b097e1fab..4887128503 100644
--- a/src/lib/elementary/efl_ui_image_zoomable.eo
+++ b/src/lib/elementary/efl_ui_image_zoomable.eo
@@ -50,7 +50,7 @@ class Efl.Ui.Image_Zoomable extends Efl.Ui.Image implements 
Efl.Ui.Zoom
       Efl.Player.playing { get; set; }
       Efl.Player.paused { get; set; }
       Efl.Player.playback_position { get; set; }
-      Efl.Player.playback_progress { get; }
+      Efl.Player.playback_progress { get; set; }
       Efl.Player.playback_speed { get; set; }
       Efl.Ui.Zoom.zoom_animation { set; get; }
       Efl.Ui.Zoom.zoom_level { set; get; }
diff --git a/src/lib/emotion/efl_canvas_video.eo 
b/src/lib/emotion/efl_canvas_video.eo
index 162e0fcc27..0f2ffa7435 100644
--- a/src/lib/emotion/efl_canvas_video.eo
+++ b/src/lib/emotion/efl_canvas_video.eo
@@ -60,7 +60,7 @@ class @beta Efl.Canvas.Video extends Efl.Canvas.Group
         Efl.Player.playing { get; set; }
         Efl.Player.paused { get; set; }
         Efl.Player.playback_position { get; set; }
-        Efl.Player.playback_progress { get; }
+        Efl.Player.playback_progress { get; set; }
         Efl.Audio_Control.volume { get; set; }
         Efl.Audio_Control.mute { get; set; }
         Efl.Playable.length { get; }
diff --git a/src/lib/emotion/emotion_smart.c b/src/lib/emotion/emotion_smart.c
index a642386fbe..9f723e5bef 100644
--- a/src/lib/emotion/emotion_smart.c
+++ b/src/lib/emotion/emotion_smart.c
@@ -1217,6 +1217,13 @@ _efl_canvas_video_efl_player_playback_progress_get(const 
Eo *obj EINA_UNUSED, Ef
    return sd->progress.stat;
 }
 
+EOLIAN static void
+_efl_canvas_video_efl_player_playback_progress_set(Eo *obj, 
Efl_Canvas_Video_Data *sd EINA_UNUSED, double progress)
+{
+   const char *info = emotion_object_progress_info_get((const 
Evas_Object*)obj);
+   _emotion_progress_set(obj, (char*)info, progress);
+}
+
 EOLIAN static double
 _efl_canvas_video_efl_playable_length_get(const Eo *obj EINA_UNUSED, 
Efl_Canvas_Video_Data *sd)
 {

-- 


Reply via email to