raster pushed a commit to branch master.
commit 666b9c451e4d5594b06aecd2125bdef04556d602
Author: Carsten Haitzler (Rasterman) <[email protected]>
Date: Wed Jul 17 19:29:30 2013 +0900
fix player widget feedback loop with slider
---
src/lib/elc_player.c | 29 ++++++++++++++++++++++++++---
src/lib/elm_widget_player.h | 1 +
2 files changed, 27 insertions(+), 3 deletions(-)
diff --git a/src/lib/elc_player.c b/src/lib/elc_player.c
index fcf793b..52e5a6e 100644
--- a/src/lib/elc_player.c
+++ b/src/lib/elc_player.c
@@ -176,7 +176,7 @@ _update_slider(void *data,
elm_object_disabled_set(sd->slider, !seekable);
elm_slider_min_max_set(sd->slider, 0, length);
- elm_slider_value_set(sd->slider, pos);
+ if (!sd->dragging) elm_slider_value_set(sd->slider, pos);
sd->last_update_time = ecore_loop_time_get();
ELM_SAFE_FREE(sd->delay_update, ecore_timer_del);
}
@@ -199,10 +199,10 @@ _update_frame(void *data,
ELM_PLAYER_DATA_GET(data, sd);
if (!sd) return;
- if ((ecore_loop_time_get() - sd->last_update_time) < 0.25)
+ if ((ecore_loop_time_get() - sd->last_update_time) < 0.1)
{
if (sd->delay_update) ecore_timer_del(sd->delay_update);
- sd->delay_update = ecore_timer_add(0.30, _update_delay, data);
+ sd->delay_update = ecore_timer_add(0.15, _update_delay, data);
return;
}
_update_slider(data, obj, event_info);
@@ -215,10 +215,29 @@ _update_position(void *data,
{
ELM_PLAYER_DATA_GET(data, sd);
+ if ((ecore_loop_time_get() - sd->last_update_time) < 0.1) return;
elm_video_play_position_set(sd->video, elm_slider_value_get(sd->slider));
}
static void
+_drag_start(void *data,
+ Evas_Object *obj __UNUSED__,
+ void *event_info __UNUSED__)
+{
+ ELM_PLAYER_DATA_GET(data, sd);
+ sd->dragging = EINA_TRUE;
+}
+
+static void
+_drag_stop(void *data,
+ Evas_Object *obj __UNUSED__,
+ void *event_info __UNUSED__)
+{
+ ELM_PLAYER_DATA_GET(data, sd);
+ sd->dragging = EINA_FALSE;
+}
+
+static void
_forward(void *data,
Evas_Object *obj __UNUSED__,
void *event_info __UNUSED__)
@@ -544,6 +563,10 @@ _elm_player_smart_add(Eo *obj, void *_pd, va_list *list
EINA_UNUSED)
elm_layout_content_set(obj, "media_player/slider", priv->slider);
evas_object_smart_callback_add
(priv->slider, "changed", _update_position, obj);
+ evas_object_smart_callback_add
+ (priv->slider, "slider,drag,start", _drag_start, obj);
+ evas_object_smart_callback_add
+ (priv->slider, "slider,drag,stop", _drag_stop, obj);
elm_layout_sizing_eval(obj);
elm_widget_can_focus_set(obj, EINA_TRUE);
diff --git a/src/lib/elm_widget_player.h b/src/lib/elm_widget_player.h
index 0b776c4..b722a31 100644
--- a/src/lib/elm_widget_player.h
+++ b/src/lib/elm_widget_player.h
@@ -36,6 +36,7 @@ struct _Elm_Player_Smart_Data
Ecore_Timer *delay_update;
double last_update_time;
+ Eina_Bool dragging : 1;
};
/**
--
------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk