From 304434ccf69f88fcd78208beeca9c89897936d52 Mon Sep 17 00:00:00 2001 From: Davide Andreoli Date: Sun, 24 Jun 2012 11:55:46 +0000 Subject: [PATCH] also add a slider for seek in the video SVN revision: 72765 --- data/themes/default.edc | 48 +++++++++++++++++++++++++++++++++++------ src/bin/media.c | 35 ++++++++++++++++++++++++------ 2 files changed, 70 insertions(+), 13 deletions(-) diff --git a/data/themes/default.edc b/data/themes/default.edc index de02cdcc..310a3633 100644 --- a/data/themes/default.edc +++ b/data/themes/default.edc @@ -573,8 +573,8 @@ collections { } description { state: "expanded" 0.0; inherit: "default" 0.0; - min: 200 24; - max: 200 24; + min: 216 24; + max: 216 24; } } part { name: "play"; @@ -604,18 +604,52 @@ collections { rel2.offset: 16 0; } } + part { name: "posline"; + mouse_events: 0; + repeat_events: 1; + clip_to: "media_clip"; + description { state: "default" 0.0; + image.normal: "media_line.png"; + min: 90 10; + max: 90 10; + rel1.to: "stop"; + rel2.to: "stop"; + rel1.offset: 25 0; + rel2.offset: 90 0; + } + } + part { name: "terminology.posdrag"; type: RECT; + mouse_events: 1; + repeat_events: 1; + clip_to: "media_clip"; + dragable { + confine: "posline"; + x: 1 1 0; + y: 0 0 0; + } + description { state: "default" 0.0; + color: 255 0 0 150; + min: 10 10; + max: 10 10; + } + description { state: "muted" 0.0; + visible: 0; + } + } part { name: "volline"; mouse_events: 0; repeat_events: 1; clip_to: "media_clip"; description { state: "default" 0.0; image.normal: "media_line.png"; - min: 150 10; - max: 150 10; - rel1.to: "stop"; - rel2.to: "stop"; + min: 60 10; + max: 60 10; + rel1.to: "posline"; + rel2.to: "posline"; + rel1.relative: 1.0 0.0; + rel2.relative: 1.0 1.0; rel1.offset: 25 0; - rel2.offset: 150 0; + rel2.offset: 60 0; } } part { name: "terminology.voldrag"; type: RECT; diff --git a/src/bin/media.c b/src/bin/media.c index 23fded0f..25ba8f3e 100644 --- a/src/bin/media.c +++ b/src/bin/media.c @@ -299,11 +299,17 @@ _cb_mov_frame_decode(void *data, Evas_Object *obj __UNUSED__, void *event __UNUS { Media *sd = evas_object_smart_data_get(data); Evas_Coord ox, oy, ow, oh; + double len, pos; if (!sd) return; evas_object_geometry_get(data, &ox, &oy, &ow, &oh); evas_object_show(sd->o_img); _type_mov_calc(data, ox, oy, ow, oh); + + len = emotion_object_play_length_get(sd->o_img); + pos = emotion_object_position_get(sd->o_img); + pos /= len; + edje_object_part_drag_value_set(sd->o_ctrl, "terminology.posdrag", pos, pos); } static void @@ -392,6 +398,16 @@ _cb_media_vol(void *data, Evas_Object *obj, const char *emission, const char *so media_volume_set(data, vx + vy); } +static void +_cb_media_pos(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + double vx, vy; + Media *sd = evas_object_smart_data_get(data); + if (!sd) return; + edje_object_part_drag_value_get(sd->o_ctrl, "terminology.posdrag", &vx, &vy); + media_position_set(data, vx + vy); +} + static void _type_mov_init(Evas_Object *obj) { @@ -441,10 +457,16 @@ _type_mov_init(Evas_Object *obj) theme_apply(o, sd->config, "terminology/mediactrl"); vol = emotion_object_audio_volume_get(sd->o_img); edje_object_part_drag_value_set(o, "terminology.voldrag", vol, vol); - edje_object_signal_callback_add(o, "play", "", _cb_media_play, obj); - edje_object_signal_callback_add(o, "pause", "", _cb_media_pause, obj); - edje_object_signal_callback_add(o, "stop", "", _cb_media_stop, obj); - edje_object_signal_callback_add(o, "drag", "terminology.voldrag", _cb_media_vol, obj); + edje_object_signal_callback_add(o, "play", "", + _cb_media_play, obj); + edje_object_signal_callback_add(o, "pause", "", + _cb_media_pause, obj); + edje_object_signal_callback_add(o, "stop", "", + _cb_media_stop, obj); + edje_object_signal_callback_add(o, "drag", "terminology.posdrag", + _cb_media_pos, obj); + edje_object_signal_callback_add(o, "drag", "terminology.voldrag", + _cb_media_vol, obj); /* TODO where to stack the object in the ui? controls cannot be part of * the 'media smart obj' becouse controls need to be on top of the term obj. * @@ -661,10 +683,11 @@ media_play_set(Evas_Object *obj, Eina_Bool play) void media_position_set(Evas_Object *obj, double pos) { + double len; Media *sd = evas_object_smart_data_get(obj); if ((!sd) || (sd->type != TYPE_MOV)) return; - emotion_object_position_set(sd->o_img, pos); - edje_object_part_drag_value_set(sd->o_ctrl, "terminology.posdrag", pos, pos); + len = emotion_object_play_length_get(sd->o_img); + emotion_object_position_set(sd->o_img, len * pos); } void