2013-04-25 22:13:00 -07:00
|
|
|
#ifdef HAVE_CONFIG_H
|
|
|
|
# include "elementary_config.h"
|
|
|
|
#endif
|
|
|
|
|
2013-11-12 05:56:05 -08:00
|
|
|
#include <Emotion.h>
|
2013-09-14 10:18:19 -07:00
|
|
|
|
2011-07-05 07:05:59 -07:00
|
|
|
#include <Elementary.h>
|
|
|
|
#include "elm_priv.h"
|
2012-11-25 22:32:53 -08:00
|
|
|
#include "elm_widget_layout.h"
|
2012-07-31 15:07:23 -07:00
|
|
|
#include "elm_widget_player.h"
|
2011-07-05 07:05:59 -07:00
|
|
|
|
2014-06-10 19:07:15 -07:00
|
|
|
#define ELM_INTERFACE_ATSPI_ACCESSIBLE_PROTECTED
|
|
|
|
#include "elm_interface_atspi_accessible.h"
|
|
|
|
#include "elm_interface_atspi_accessible.eo.h"
|
|
|
|
|
2014-06-03 03:35:28 -07:00
|
|
|
#define MY_CLASS ELM_PLAYER_CLASS
|
2012-11-25 22:32:53 -08:00
|
|
|
|
2013-11-07 03:44:22 -08:00
|
|
|
#define MY_CLASS_NAME "Elm_Player"
|
|
|
|
#define MY_CLASS_NAME_LEGACY "elm_player"
|
2011-07-05 07:05:59 -07:00
|
|
|
|
|
|
|
static const char SIG_FORWARD_CLICKED[] = "forward,clicked";
|
|
|
|
static const char SIG_INFO_CLICKED[] = "info,clicked";
|
|
|
|
static const char SIG_NEXT_CLICKED[] = "next,clicked";
|
|
|
|
static const char SIG_PAUSE_CLICKED[] = "pause,clicked";
|
|
|
|
static const char SIG_PLAY_CLICKED[] = "play,clicked";
|
|
|
|
static const char SIG_PREV_CLICKED[] = "prev,clicked";
|
|
|
|
static const char SIG_REWIND_CLICKED[] = "rewind,clicked";
|
|
|
|
static const char SIG_STOP_CLICKED[] = "stop,clicked";
|
2013-07-25 02:29:59 -07:00
|
|
|
static const char SIG_EJECT_CLICKED[] = "eject,clicked";
|
|
|
|
static const char SIG_VOLUME_CLICKED[] = "volume,clicked";
|
|
|
|
static const char SIG_MUTE_CLICKED[] = "mute,clicked";
|
|
|
|
/*
|
2013-07-18 01:19:13 -07:00
|
|
|
static const char SIG_STOP_CLICKED[] = "repeat,clicked";
|
|
|
|
static const char SIG_STOP_CLICKED[] = "shuffle,clicked";
|
|
|
|
static const char SIG_STOP_CLICKED[] = "record,clicked";
|
|
|
|
static const char SIG_STOP_CLICKED[] = "replay,clicked";
|
|
|
|
static const char SIG_STOP_CLICKED[] = "power,clicked";
|
2013-07-18 05:24:17 -07:00
|
|
|
static const char SIG_STOP_CLICKED[] = "fullscreen,clicked";
|
|
|
|
static const char SIG_STOP_CLICKED[] = "normal,clicked";
|
|
|
|
static const char SIG_STOP_CLICKED[] = "quality,clicked";
|
2013-07-18 01:19:13 -07:00
|
|
|
*/
|
2013-06-09 02:54:43 -07:00
|
|
|
|
2012-05-03 15:44:21 -07:00
|
|
|
static const Evas_Smart_Cb_Description _smart_callbacks[] = {
|
|
|
|
{ SIG_FORWARD_CLICKED, "" },
|
|
|
|
{ SIG_INFO_CLICKED, "" },
|
|
|
|
{ SIG_NEXT_CLICKED, "" },
|
|
|
|
{ SIG_PAUSE_CLICKED, "" },
|
|
|
|
{ SIG_PLAY_CLICKED, "" },
|
|
|
|
{ SIG_PREV_CLICKED, "" },
|
|
|
|
{ SIG_REWIND_CLICKED, "" },
|
|
|
|
{ SIG_STOP_CLICKED, "" },
|
2013-07-25 02:29:59 -07:00
|
|
|
{ SIG_EJECT_CLICKED, "" },
|
|
|
|
{ SIG_VOLUME_CLICKED, "" },
|
|
|
|
{ SIG_MUTE_CLICKED, "" },
|
2014-01-23 03:07:20 -08:00
|
|
|
{ SIG_WIDGET_LANG_CHANGED, ""}, /**< handled by elm_widget */
|
2014-02-05 23:18:57 -08:00
|
|
|
{ SIG_LAYOUT_FOCUSED, ""}, /**< handled by elm_layout */
|
|
|
|
{ SIG_LAYOUT_UNFOCUSED, ""}, /**< handled by elm_layout */
|
2012-05-03 15:44:21 -07:00
|
|
|
{ NULL, NULL }
|
2011-07-05 07:05:59 -07:00
|
|
|
};
|
|
|
|
|
2014-04-14 22:46:39 -07:00
|
|
|
static Eina_Bool _key_action_move(Evas_Object *obj, const char *params);
|
|
|
|
static Eina_Bool _key_action_play(Evas_Object *obj, const char *params);
|
2013-10-28 07:06:14 -07:00
|
|
|
|
2014-04-14 22:46:39 -07:00
|
|
|
static const Elm_Action key_actions[] = {
|
|
|
|
{"move", _key_action_move},
|
|
|
|
{"play", _key_action_play},
|
|
|
|
{NULL, NULL}
|
|
|
|
};
|
|
|
|
|
|
|
|
static Eina_Bool
|
|
|
|
_key_action_move(Evas_Object *obj, const char *params)
|
|
|
|
{
|
|
|
|
ELM_PLAYER_DATA_GET(obj, sd);
|
|
|
|
const char *dir = params;
|
2012-05-03 15:44:21 -07:00
|
|
|
|
2014-04-14 22:46:39 -07:00
|
|
|
if (!strcmp(dir, "left"))
|
2011-07-05 07:05:59 -07:00
|
|
|
{
|
|
|
|
double current, last;
|
|
|
|
|
2012-05-03 15:44:21 -07:00
|
|
|
current = elm_video_play_position_get(sd->video);
|
|
|
|
last = elm_video_play_length_get(sd->video);
|
2011-07-05 07:05:59 -07:00
|
|
|
|
|
|
|
if (current < last)
|
|
|
|
{
|
2012-05-03 15:44:21 -07:00
|
|
|
current -= last / 100;
|
|
|
|
elm_video_play_position_set(sd->video, current);
|
2011-07-05 07:05:59 -07:00
|
|
|
}
|
|
|
|
}
|
2014-04-14 22:46:39 -07:00
|
|
|
else if (!strcmp(dir, "right"))
|
2011-07-05 07:05:59 -07:00
|
|
|
{
|
|
|
|
double current, last;
|
|
|
|
|
2012-05-03 15:44:21 -07:00
|
|
|
current = elm_video_play_position_get(sd->video);
|
|
|
|
last = elm_video_play_length_get(sd->video);
|
2011-07-05 07:05:59 -07:00
|
|
|
|
|
|
|
if (current > 0)
|
|
|
|
{
|
2012-05-03 15:44:21 -07:00
|
|
|
current += last / 100;
|
2011-07-05 07:05:59 -07:00
|
|
|
if (current < 0) current = 0;
|
2012-05-03 15:44:21 -07:00
|
|
|
elm_video_play_position_set(sd->video, current);
|
2011-07-05 07:05:59 -07:00
|
|
|
}
|
|
|
|
}
|
2014-04-14 22:46:39 -07:00
|
|
|
else return EINA_FALSE;
|
2013-11-12 17:29:30 -08:00
|
|
|
|
2014-04-14 22:46:39 -07:00
|
|
|
return EINA_TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static Eina_Bool
|
|
|
|
_key_action_play(Evas_Object *obj, const char *params EINA_UNUSED)
|
|
|
|
{
|
|
|
|
ELM_PLAYER_DATA_GET(obj, sd);
|
|
|
|
|
|
|
|
if (elm_video_is_playing_get(sd->video))
|
|
|
|
elm_video_pause(sd->video);
|
|
|
|
else
|
|
|
|
elm_video_play(sd->video);
|
|
|
|
|
|
|
|
return EINA_TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
EOLIAN static Eina_Bool
|
|
|
|
_elm_player_elm_widget_event(Eo *obj, Elm_Player_Data *sd, Evas_Object *src, Evas_Callback_Type type, void *event_info)
|
|
|
|
{
|
|
|
|
Evas_Event_Key_Down *ev = event_info;
|
|
|
|
(void) src;
|
|
|
|
|
|
|
|
if (type != EVAS_CALLBACK_KEY_DOWN) return EINA_FALSE;
|
|
|
|
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return EINA_FALSE;
|
|
|
|
if (!sd->video) return EINA_FALSE;
|
2013-11-12 17:29:30 -08:00
|
|
|
|
2014-04-14 22:46:39 -07:00
|
|
|
if (!_elm_config_key_binding_call(obj, ev, key_actions))
|
|
|
|
return EINA_FALSE;
|
2013-11-12 17:29:30 -08:00
|
|
|
|
|
|
|
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
|
2014-03-25 04:33:53 -07:00
|
|
|
return EINA_TRUE;
|
2012-05-02 18:19:05 -07:00
|
|
|
}
|
|
|
|
|
2013-07-23 03:15:50 -07:00
|
|
|
static void
|
|
|
|
_update_theme_button(Evas_Object *obj, Evas_Object *bt, const char *name)
|
|
|
|
{
|
|
|
|
Evas_Object *ic;
|
|
|
|
char buf[256];
|
2013-07-23 05:56:02 -07:00
|
|
|
|
|
|
|
if (!bt) return;
|
2013-07-23 03:15:50 -07:00
|
|
|
ic = evas_object_data_get(bt, "icon");
|
2013-07-23 05:56:02 -07:00
|
|
|
if (ic)
|
|
|
|
{
|
|
|
|
snprintf(buf, sizeof(buf), "media_player/%s/%s", name,
|
|
|
|
elm_widget_style_get(obj));
|
|
|
|
elm_icon_standard_set(ic, buf);
|
|
|
|
}
|
2013-07-23 03:15:50 -07:00
|
|
|
snprintf(buf, sizeof(buf), "media_player/%s/%s", name,
|
|
|
|
elm_widget_style_get(obj));
|
|
|
|
elm_object_style_set(bt, buf);
|
|
|
|
snprintf(buf, sizeof(buf), "elm.swallow.media_player.%s", name);
|
|
|
|
if (!elm_layout_content_set(obj, buf, bt))
|
|
|
|
evas_object_hide(bt);
|
|
|
|
elm_object_disabled_set(bt, elm_widget_disabled_get(obj));
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2013-07-25 02:29:59 -07:00
|
|
|
_update_theme_slider(Evas_Object *obj, Evas_Object *sl, const char *name, const char *name2)
|
2013-07-23 03:15:50 -07:00
|
|
|
{
|
|
|
|
char buf[256];
|
2013-07-23 05:56:02 -07:00
|
|
|
|
|
|
|
if (!sl) return;
|
2013-07-23 03:15:50 -07:00
|
|
|
snprintf(buf, sizeof(buf), "media_player/%s/%s", name,
|
|
|
|
elm_widget_style_get(obj));
|
|
|
|
elm_object_style_set(sl, buf);
|
2013-07-25 02:29:59 -07:00
|
|
|
snprintf(buf, sizeof(buf), "elm.swallow.media_player.%s", name2);
|
2013-07-23 03:15:50 -07:00
|
|
|
if (!elm_layout_content_set(obj, buf, sl))
|
|
|
|
evas_object_hide(sl);
|
|
|
|
elm_object_disabled_set(sl, elm_widget_disabled_get(obj));
|
|
|
|
}
|
2012-11-25 22:32:53 -08:00
|
|
|
|
2014-03-25 04:33:53 -07:00
|
|
|
EOLIAN static Eina_Bool
|
|
|
|
_elm_player_elm_widget_theme_apply(Eo *obj, Elm_Player_Data *sd)
|
2012-05-02 18:19:05 -07:00
|
|
|
{
|
2014-04-03 06:05:41 -07:00
|
|
|
Eina_Bool int_ret = EINA_FALSE;
|
|
|
|
eo_do_super(obj, MY_CLASS, int_ret = elm_obj_widget_theme_apply());
|
2014-03-25 04:33:53 -07:00
|
|
|
if (!int_ret) return EINA_FALSE;
|
|
|
|
|
2013-07-23 03:15:50 -07:00
|
|
|
_update_theme_button(obj, sd->forward, "forward");
|
|
|
|
_update_theme_button(obj, sd->info, "info");
|
|
|
|
_update_theme_button(obj, sd->next, "next");
|
|
|
|
_update_theme_button(obj, sd->pause, "pause");
|
|
|
|
_update_theme_button(obj, sd->play, "play");
|
|
|
|
_update_theme_button(obj, sd->prev, "prev");
|
|
|
|
_update_theme_button(obj, sd->rewind, "rewind");
|
|
|
|
_update_theme_button(obj, sd->next, "next");
|
|
|
|
_update_theme_button(obj, sd->stop, "stop");
|
2013-07-25 02:29:59 -07:00
|
|
|
_update_theme_button(obj, sd->eject, "eject");
|
|
|
|
_update_theme_button(obj, sd->volume, "volume");
|
|
|
|
_update_theme_button(obj, sd->mute, "mute");
|
|
|
|
_update_theme_slider(obj, sd->slider, "position", "positionslider");
|
|
|
|
_update_theme_slider(obj, sd->vslider, "volume", "volumeslider");
|
2012-05-03 15:44:21 -07:00
|
|
|
elm_layout_sizing_eval(obj);
|
|
|
|
|
2014-03-25 04:33:53 -07:00
|
|
|
return EINA_TRUE;
|
2012-05-02 18:19:05 -07:00
|
|
|
}
|
|
|
|
|
2014-03-25 04:33:53 -07:00
|
|
|
EOLIAN static void
|
|
|
|
_elm_player_elm_layout_sizing_eval(Eo *obj, Elm_Player_Data *sd EINA_UNUSED)
|
2012-05-02 18:19:05 -07:00
|
|
|
{
|
|
|
|
Evas_Coord w, h;
|
2013-10-05 01:13:09 -07:00
|
|
|
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
|
2012-05-03 15:44:21 -07:00
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
edje_object_size_min_get(wd->resize_obj, &w, &h);
|
2012-05-03 15:44:21 -07:00
|
|
|
edje_object_size_min_restricted_calc
|
2012-11-25 22:32:53 -08:00
|
|
|
(wd->resize_obj, &w, &h, w, h);
|
2011-07-05 07:05:59 -07:00
|
|
|
evas_object_size_hint_min_set(obj, w, h);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-05-03 15:44:21 -07:00
|
|
|
_update_slider(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
void *event_info EINA_UNUSED)
|
2011-07-05 07:05:59 -07:00
|
|
|
{
|
|
|
|
double pos, length;
|
|
|
|
Eina_Bool seekable;
|
|
|
|
|
2012-05-03 15:44:21 -07:00
|
|
|
ELM_PLAYER_DATA_GET(data, sd);
|
2013-02-12 03:10:55 -08:00
|
|
|
if (!sd) return;
|
2011-07-05 07:05:59 -07:00
|
|
|
|
2012-05-03 15:44:21 -07:00
|
|
|
seekable = elm_video_is_seekable_get(sd->video);
|
|
|
|
length = elm_video_play_length_get(sd->video);
|
|
|
|
pos = elm_video_play_position_get(sd->video);
|
|
|
|
|
2013-09-30 03:21:31 -07:00
|
|
|
elm_object_disabled_set(sd->slider,
|
2013-07-23 03:15:50 -07:00
|
|
|
(!seekable) | elm_widget_disabled_get(data));
|
2012-05-03 15:44:21 -07:00
|
|
|
elm_slider_min_max_set(sd->slider, 0, length);
|
2013-07-18 07:10:34 -07:00
|
|
|
if ((elm_slider_value_get(sd->slider) != pos) &&
|
|
|
|
(!sd->dragging))
|
|
|
|
elm_slider_value_set(sd->slider, pos);
|
2013-02-12 03:10:55 -08:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_update_frame(void *data,
|
|
|
|
Evas_Object *obj,
|
|
|
|
void *event_info)
|
|
|
|
{
|
|
|
|
ELM_PLAYER_DATA_GET(data, sd);
|
|
|
|
if (!sd) return;
|
|
|
|
_update_slider(data, obj, event_info);
|
2011-07-05 07:05:59 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-05-03 15:44:21 -07:00
|
|
|
_update_position(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
void *event_info EINA_UNUSED)
|
2011-07-05 07:05:59 -07:00
|
|
|
{
|
2013-07-18 07:10:34 -07:00
|
|
|
double pos;
|
2012-05-03 15:44:21 -07:00
|
|
|
ELM_PLAYER_DATA_GET(data, sd);
|
2011-07-05 07:05:59 -07:00
|
|
|
|
2013-07-18 07:10:34 -07:00
|
|
|
pos = elm_slider_value_get(sd->slider);
|
|
|
|
if (pos != elm_video_play_position_get(sd->video))
|
|
|
|
elm_video_play_position_set(sd->video, pos);
|
2011-07-05 07:05:59 -07:00
|
|
|
}
|
|
|
|
|
2013-07-17 03:29:30 -07:00
|
|
|
static void
|
|
|
|
_drag_start(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
void *event_info EINA_UNUSED)
|
2013-07-17 03:29:30 -07:00
|
|
|
{
|
|
|
|
ELM_PLAYER_DATA_GET(data, sd);
|
|
|
|
sd->dragging = EINA_TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_drag_stop(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
void *event_info EINA_UNUSED)
|
2013-07-17 03:29:30 -07:00
|
|
|
{
|
|
|
|
ELM_PLAYER_DATA_GET(data, sd);
|
|
|
|
sd->dragging = EINA_FALSE;
|
|
|
|
}
|
|
|
|
|
2013-07-25 02:29:59 -07:00
|
|
|
static void
|
|
|
|
_update_volume(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
void *event_info EINA_UNUSED)
|
2013-07-25 02:29:59 -07:00
|
|
|
{
|
|
|
|
double vol;
|
|
|
|
ELM_PLAYER_DATA_GET(data, sd);
|
|
|
|
|
|
|
|
vol = elm_slider_value_get(sd->vslider) / 100.0;
|
|
|
|
if (vol != elm_video_audio_level_get(sd->video))
|
|
|
|
elm_video_audio_level_set(sd->video, vol);
|
|
|
|
}
|
|
|
|
|
2011-07-05 07:05:59 -07:00
|
|
|
static void
|
2012-05-03 15:44:21 -07:00
|
|
|
_forward(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
void *event_info EINA_UNUSED)
|
2011-07-05 07:05:59 -07:00
|
|
|
{
|
|
|
|
double pos, length;
|
2012-05-03 15:44:21 -07:00
|
|
|
ELM_PLAYER_DATA_GET(data, sd);
|
2011-07-05 07:05:59 -07:00
|
|
|
|
2012-05-03 15:44:21 -07:00
|
|
|
length = elm_video_play_length_get(sd->video);
|
2013-07-23 03:15:50 -07:00
|
|
|
pos = elm_video_play_position_get(sd->video);
|
|
|
|
pos += 30.0;
|
|
|
|
if (pos > length) pos = length;
|
2012-05-03 15:44:21 -07:00
|
|
|
elm_video_play_position_set(sd->video, pos);
|
2011-07-05 07:05:59 -07:00
|
|
|
|
2012-05-03 15:44:21 -07:00
|
|
|
elm_layout_signal_emit(data, "elm,button,forward", "elm");
|
|
|
|
evas_object_smart_callback_call(data, SIG_FORWARD_CLICKED, NULL);
|
2011-07-05 07:05:59 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-05-03 15:44:21 -07:00
|
|
|
_info(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
void *event_info EINA_UNUSED)
|
2011-07-05 07:05:59 -07:00
|
|
|
{
|
2012-05-03 15:44:21 -07:00
|
|
|
elm_layout_signal_emit(data, "elm,button,info", "elm");
|
|
|
|
evas_object_smart_callback_call(data, SIG_INFO_CLICKED, NULL);
|
2011-07-05 07:05:59 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-05-03 15:44:21 -07:00
|
|
|
_next(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
void *event_info EINA_UNUSED)
|
2011-07-05 07:05:59 -07:00
|
|
|
{
|
2012-05-03 15:44:21 -07:00
|
|
|
elm_layout_signal_emit(data, "elm,button,next", "elm");
|
|
|
|
evas_object_smart_callback_call(data, SIG_NEXT_CLICKED, NULL);
|
2011-07-05 07:05:59 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-05-03 15:44:21 -07:00
|
|
|
_pause(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
void *event_info EINA_UNUSED)
|
2011-07-05 07:05:59 -07:00
|
|
|
{
|
2012-05-03 15:44:21 -07:00
|
|
|
ELM_PLAYER_DATA_GET(data, sd);
|
2011-07-05 07:05:59 -07:00
|
|
|
|
2012-05-03 15:44:21 -07:00
|
|
|
elm_layout_signal_emit(data, "elm,player,pause", "elm");
|
|
|
|
elm_video_pause(sd->video);
|
|
|
|
evas_object_smart_callback_call(data, SIG_PAUSE_CLICKED, NULL);
|
2011-07-05 07:05:59 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-05-03 15:44:21 -07:00
|
|
|
_play(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
void *event_info EINA_UNUSED)
|
2011-07-05 07:05:59 -07:00
|
|
|
{
|
2012-05-03 15:44:21 -07:00
|
|
|
ELM_PLAYER_DATA_GET(data, sd);
|
2011-07-05 07:05:59 -07:00
|
|
|
|
2013-02-12 03:22:05 -08:00
|
|
|
elm_layout_signal_emit(data, "elm,player,play", "elm");
|
2012-05-03 15:44:21 -07:00
|
|
|
elm_video_play(sd->video);
|
|
|
|
evas_object_smart_callback_call(data, SIG_PLAY_CLICKED, NULL);
|
2011-07-05 07:05:59 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-05-03 15:44:21 -07:00
|
|
|
_prev(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
void *event_info EINA_UNUSED)
|
2011-07-05 07:05:59 -07:00
|
|
|
{
|
2012-05-03 15:44:21 -07:00
|
|
|
evas_object_smart_callback_call(data, SIG_PREV_CLICKED, NULL);
|
|
|
|
elm_layout_signal_emit(data, "elm,button,prev", "elm");
|
2011-07-05 07:05:59 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-05-03 15:44:21 -07:00
|
|
|
_rewind(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
void *event_info EINA_UNUSED)
|
2011-07-05 07:05:59 -07:00
|
|
|
{
|
2013-07-23 03:15:50 -07:00
|
|
|
double pos;
|
2012-05-03 15:44:21 -07:00
|
|
|
ELM_PLAYER_DATA_GET(data, sd);
|
2011-07-05 07:05:59 -07:00
|
|
|
|
2013-07-23 03:15:50 -07:00
|
|
|
pos = elm_video_play_position_get(sd->video);
|
|
|
|
pos -= 30.0;
|
|
|
|
if (pos < 0.0) pos = 0.0;
|
|
|
|
elm_video_play_position_set(sd->video, pos);
|
|
|
|
|
2012-05-03 15:44:21 -07:00
|
|
|
elm_layout_signal_emit(data, "elm,button,rewind", "elm");
|
|
|
|
evas_object_smart_callback_call(data, SIG_REWIND_CLICKED, NULL);
|
2011-07-05 07:05:59 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-05-03 15:44:21 -07:00
|
|
|
_stop(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
void *event_info EINA_UNUSED)
|
2011-07-05 07:05:59 -07:00
|
|
|
{
|
2012-05-03 15:44:21 -07:00
|
|
|
elm_layout_signal_emit(data, "elm,button,stop", "elm");
|
|
|
|
evas_object_smart_callback_call(data, SIG_STOP_CLICKED, NULL);
|
2011-07-05 07:05:59 -07:00
|
|
|
}
|
|
|
|
|
2013-07-25 02:29:59 -07:00
|
|
|
static void
|
|
|
|
_eject(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
void *event_info EINA_UNUSED)
|
2013-07-25 02:29:59 -07:00
|
|
|
{
|
|
|
|
ELM_PLAYER_DATA_GET(data, sd);
|
2013-09-30 03:21:31 -07:00
|
|
|
|
2013-07-25 02:29:59 -07:00
|
|
|
elm_layout_signal_emit(data, "elm,button,eject", "elm");
|
|
|
|
emotion_object_eject(elm_video_emotion_get(sd->video));
|
|
|
|
evas_object_smart_callback_call(data, SIG_EJECT_CLICKED, NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_mute_toggle(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
ELM_PLAYER_DATA_GET(obj, sd);
|
2013-09-30 03:21:31 -07:00
|
|
|
|
2013-07-25 02:29:59 -07:00
|
|
|
if (!elm_video_audio_mute_get(sd->video))
|
|
|
|
{
|
|
|
|
elm_video_audio_mute_set(sd->video, EINA_TRUE);
|
|
|
|
elm_layout_signal_emit(obj, "elm,player,mute", "elm");
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
elm_video_audio_mute_set(sd->video, EINA_FALSE);
|
|
|
|
elm_layout_signal_emit(obj, "elm,player,unmute", "elm");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_volume(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
void *event_info EINA_UNUSED)
|
2013-07-25 02:29:59 -07:00
|
|
|
{
|
|
|
|
elm_layout_signal_emit(data, "elm,button,volume", "elm");
|
|
|
|
_mute_toggle(data);
|
|
|
|
evas_object_smart_callback_call(data, SIG_VOLUME_CLICKED, NULL);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
|
|
|
_mute(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
void *event_info EINA_UNUSED)
|
2013-07-25 02:29:59 -07:00
|
|
|
{
|
|
|
|
elm_layout_signal_emit(data, "elm,button,mute", "elm");
|
|
|
|
_mute_toggle(data);
|
|
|
|
evas_object_smart_callback_call(data, SIG_MUTE_CLICKED, NULL);
|
|
|
|
}
|
|
|
|
|
2011-07-05 07:05:59 -07:00
|
|
|
static void
|
2012-05-03 15:44:21 -07:00
|
|
|
_play_started(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
void *event_info EINA_UNUSED)
|
2011-07-05 07:05:59 -07:00
|
|
|
{
|
2012-05-03 15:44:21 -07:00
|
|
|
elm_layout_signal_emit(data, "elm,player,play", "elm");
|
2011-07-05 07:05:59 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-05-03 15:44:21 -07:00
|
|
|
_play_finished(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
void *event_info EINA_UNUSED)
|
2011-07-05 07:05:59 -07:00
|
|
|
{
|
2012-05-03 15:44:21 -07:00
|
|
|
elm_layout_signal_emit(data, "elm,player,pause", "elm");
|
2011-07-05 07:05:59 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2014-03-25 04:33:53 -07:00
|
|
|
_on_video_del(Elm_Player_Data *sd)
|
2011-07-05 07:05:59 -07:00
|
|
|
{
|
2012-05-03 15:44:21 -07:00
|
|
|
elm_object_disabled_set(sd->forward, EINA_TRUE);
|
|
|
|
elm_object_disabled_set(sd->info, EINA_TRUE);
|
|
|
|
elm_object_disabled_set(sd->next, EINA_TRUE);
|
|
|
|
elm_object_disabled_set(sd->pause, EINA_TRUE);
|
|
|
|
elm_object_disabled_set(sd->play, EINA_TRUE);
|
|
|
|
elm_object_disabled_set(sd->prev, EINA_TRUE);
|
|
|
|
elm_object_disabled_set(sd->rewind, EINA_TRUE);
|
|
|
|
elm_object_disabled_set(sd->next, EINA_TRUE);
|
2013-07-25 02:29:59 -07:00
|
|
|
elm_object_disabled_set(sd->stop, EINA_TRUE);
|
|
|
|
elm_object_disabled_set(sd->volume, EINA_TRUE);
|
|
|
|
elm_object_disabled_set(sd->mute, EINA_TRUE);
|
|
|
|
elm_object_disabled_set(sd->slider, EINA_TRUE);
|
|
|
|
elm_object_disabled_set(sd->vslider, EINA_TRUE);
|
2012-05-03 15:44:21 -07:00
|
|
|
|
|
|
|
sd->video = NULL;
|
|
|
|
sd->emotion = NULL;
|
2011-07-05 07:05:59 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-05-03 15:44:21 -07:00
|
|
|
_video_del(void *data,
|
2014-01-06 06:30:02 -08:00
|
|
|
Evas *e EINA_UNUSED,
|
|
|
|
Evas_Object *obj EINA_UNUSED,
|
|
|
|
void *event_info EINA_UNUSED)
|
2011-07-05 07:05:59 -07:00
|
|
|
{
|
2012-05-03 15:44:21 -07:00
|
|
|
_on_video_del(data);
|
2011-07-05 07:05:59 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
static Evas_Object *
|
2012-05-03 15:44:21 -07:00
|
|
|
_player_button_add(Evas_Object *obj,
|
|
|
|
const char *name,
|
|
|
|
Evas_Smart_Cb func)
|
2011-07-05 07:05:59 -07:00
|
|
|
{
|
|
|
|
Evas_Object *ic;
|
|
|
|
Evas_Object *bt;
|
2013-07-23 06:10:54 -07:00
|
|
|
char buf[256];
|
2013-09-30 03:21:31 -07:00
|
|
|
|
2012-05-03 15:44:21 -07:00
|
|
|
ic = elm_icon_add(obj);
|
2013-07-23 03:15:50 -07:00
|
|
|
snprintf(buf, sizeof(buf), "media_player/%s/%s", name,
|
|
|
|
elm_widget_style_get(obj));
|
|
|
|
elm_icon_standard_set(ic, buf);
|
2012-05-03 15:44:21 -07:00
|
|
|
|
|
|
|
bt = elm_button_add(obj);
|
2013-07-23 05:56:02 -07:00
|
|
|
if (ic) evas_object_data_set(bt, "icon", ic);
|
2011-07-05 07:05:59 -07:00
|
|
|
elm_widget_mirrored_automatic_set(bt, EINA_FALSE);
|
2013-07-23 03:15:50 -07:00
|
|
|
elm_object_content_set(bt, ic);
|
|
|
|
evas_object_show(ic);
|
2013-09-30 03:21:31 -07:00
|
|
|
|
2013-07-23 03:15:50 -07:00
|
|
|
snprintf(buf, sizeof(buf), "media_player/%s/%s", name,
|
|
|
|
elm_widget_style_get(obj));
|
|
|
|
elm_object_style_set(bt, buf);
|
2011-07-05 07:05:59 -07:00
|
|
|
evas_object_smart_callback_add(bt, "clicked", func, obj);
|
2013-07-23 03:15:50 -07:00
|
|
|
snprintf(buf, sizeof(buf), "elm.swallow.media_player.%s", name);
|
|
|
|
if (!elm_layout_content_set(obj, buf, bt))
|
2012-05-03 15:44:21 -07:00
|
|
|
{
|
|
|
|
elm_widget_sub_object_add(obj, bt);
|
|
|
|
evas_object_hide(bt);
|
|
|
|
}
|
2013-07-23 03:15:50 -07:00
|
|
|
evas_object_show(bt);
|
2011-07-05 07:05:59 -07:00
|
|
|
return bt;
|
|
|
|
}
|
|
|
|
|
2012-03-28 01:42:13 -07:00
|
|
|
static char *
|
2011-07-05 07:05:59 -07:00
|
|
|
_double_to_time(double value)
|
|
|
|
{
|
|
|
|
char buf[256];
|
|
|
|
int ph, pm, ps, pf;
|
|
|
|
|
|
|
|
ph = value / 3600;
|
|
|
|
pm = value / 60 - (ph * 60);
|
2013-02-12 03:22:05 -08:00
|
|
|
ps = value - (pm * 60) - (ph * 3600);
|
2011-07-05 07:05:59 -07:00
|
|
|
pf = value * 100 - (ps * 100) - (pm * 60 * 100) - (ph * 60 * 60 * 100);
|
2012-05-03 15:44:21 -07:00
|
|
|
|
2011-07-05 07:05:59 -07:00
|
|
|
if (ph)
|
|
|
|
snprintf(buf, sizeof(buf), "%i:%02i:%02i.%02i",
|
|
|
|
ph, pm, ps, pf);
|
|
|
|
else if (pm)
|
|
|
|
snprintf(buf, sizeof(buf), "%02i:%02i.%02i",
|
|
|
|
pm, ps, pf);
|
|
|
|
else
|
|
|
|
snprintf(buf, sizeof(buf), "%02i.%02i",
|
|
|
|
ps, pf);
|
2012-03-28 01:42:13 -07:00
|
|
|
return (char *)eina_stringshare_add(buf);
|
|
|
|
}
|
|
|
|
|
|
|
|
static void
|
2012-05-03 15:44:21 -07:00
|
|
|
_str_free(char *data)
|
2012-03-28 01:42:13 -07:00
|
|
|
{
|
|
|
|
eina_stringshare_del(data);
|
2011-07-05 07:05:59 -07:00
|
|
|
}
|
|
|
|
|
2012-05-03 15:44:21 -07:00
|
|
|
/* a video object is never parented by a player one, just tracked.
|
|
|
|
* treating this special case here and delegating other objects to own
|
|
|
|
* layout */
|
2012-11-25 22:32:53 -08:00
|
|
|
|
2014-03-25 04:33:53 -07:00
|
|
|
EOLIAN static Eina_Bool
|
|
|
|
_elm_player_elm_container_content_set(Eo *obj, Elm_Player_Data *sd, const char *part, Evas_Object *content)
|
2011-10-30 20:58:44 -07:00
|
|
|
{
|
2012-11-25 22:32:53 -08:00
|
|
|
Eina_Bool int_ret = EINA_FALSE;
|
2011-10-30 20:58:44 -07:00
|
|
|
double pos, length;
|
|
|
|
Eina_Bool seekable;
|
|
|
|
|
2012-05-03 15:44:21 -07:00
|
|
|
if (part && strcmp(part, "video"))
|
2012-11-25 22:32:53 -08:00
|
|
|
{
|
2013-09-30 03:21:31 -07:00
|
|
|
eo_do_super(obj, MY_CLASS,
|
2014-04-03 06:05:41 -07:00
|
|
|
int_ret = elm_obj_container_content_set(part, content));
|
2014-03-25 04:33:53 -07:00
|
|
|
return int_ret;
|
2012-11-25 22:32:53 -08:00
|
|
|
}
|
2013-07-23 03:15:50 -07:00
|
|
|
if ((!part) || (!strcmp(part, "video"))) part = "elm.swallow.content";
|
2013-09-30 03:21:31 -07:00
|
|
|
eo_do_super(obj, MY_CLASS,
|
2014-04-03 06:05:41 -07:00
|
|
|
int_ret = elm_obj_container_content_set(part, content));
|
2013-09-30 03:21:31 -07:00
|
|
|
|
2014-03-25 04:33:53 -07:00
|
|
|
if (!_elm_video_check(content)) return EINA_FALSE;
|
2012-11-25 22:32:53 -08:00
|
|
|
if (sd->video == content) goto end;
|
2012-05-02 10:01:43 -07:00
|
|
|
|
2014-01-21 17:38:55 -08:00
|
|
|
evas_object_del(sd->video);
|
2012-05-03 15:44:21 -07:00
|
|
|
sd->video = content;
|
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
if (!content) goto end;
|
2012-05-03 15:44:21 -07:00
|
|
|
|
|
|
|
elm_object_disabled_set(sd->forward, EINA_FALSE);
|
|
|
|
elm_object_disabled_set(sd->info, EINA_FALSE);
|
|
|
|
elm_object_disabled_set(sd->next, EINA_FALSE);
|
|
|
|
elm_object_disabled_set(sd->pause, EINA_FALSE);
|
|
|
|
elm_object_disabled_set(sd->play, EINA_FALSE);
|
|
|
|
elm_object_disabled_set(sd->prev, EINA_FALSE);
|
|
|
|
elm_object_disabled_set(sd->rewind, EINA_FALSE);
|
|
|
|
elm_object_disabled_set(sd->next, EINA_FALSE);
|
2013-07-25 02:29:59 -07:00
|
|
|
elm_object_disabled_set(sd->stop, EINA_FALSE);
|
|
|
|
elm_object_disabled_set(sd->volume, EINA_FALSE);
|
|
|
|
elm_object_disabled_set(sd->mute, EINA_FALSE);
|
|
|
|
elm_object_disabled_set(sd->slider, EINA_FALSE);
|
|
|
|
elm_object_disabled_set(sd->vslider, EINA_FALSE);
|
2012-05-02 10:01:43 -07:00
|
|
|
|
2012-05-03 15:44:21 -07:00
|
|
|
sd->emotion = elm_video_emotion_get(sd->video);
|
|
|
|
emotion_object_priority_set(sd->emotion, EINA_TRUE);
|
|
|
|
evas_object_event_callback_add
|
|
|
|
(sd->video, EVAS_CALLBACK_DEL, _video_del, sd);
|
|
|
|
|
|
|
|
seekable = elm_video_is_seekable_get(sd->video);
|
|
|
|
length = elm_video_play_length_get(sd->video);
|
|
|
|
pos = elm_video_play_position_get(sd->video);
|
|
|
|
|
|
|
|
elm_object_disabled_set(sd->slider, !seekable);
|
|
|
|
elm_slider_min_max_set(sd->slider, 0, length);
|
|
|
|
elm_slider_value_set(sd->slider, pos);
|
2013-09-30 03:21:31 -07:00
|
|
|
|
2013-07-25 02:29:59 -07:00
|
|
|
elm_slider_value_set(sd->vslider,
|
|
|
|
elm_video_audio_level_get(sd->video) * 100.0);
|
|
|
|
// XXX: get mute
|
2012-05-03 15:44:21 -07:00
|
|
|
|
|
|
|
if (elm_video_is_playing_get(sd->video))
|
|
|
|
elm_layout_signal_emit(obj, "elm,player,play", "elm");
|
|
|
|
else elm_layout_signal_emit(obj, "elm,player,pause", "elm");
|
|
|
|
|
|
|
|
evas_object_smart_callback_add(sd->emotion, "frame_decode",
|
2013-02-12 03:10:55 -08:00
|
|
|
_update_frame, obj);
|
2012-05-03 15:44:21 -07:00
|
|
|
evas_object_smart_callback_add(sd->emotion, "frame_resize",
|
2011-10-30 21:49:56 -07:00
|
|
|
_update_slider, obj);
|
2012-05-03 15:44:21 -07:00
|
|
|
evas_object_smart_callback_add(sd->emotion, "length_change",
|
2011-10-30 21:49:56 -07:00
|
|
|
_update_slider, obj);
|
2012-05-03 15:44:21 -07:00
|
|
|
evas_object_smart_callback_add(sd->emotion, "position_update",
|
2013-02-12 03:10:55 -08:00
|
|
|
_update_frame, obj);
|
2012-05-03 15:44:21 -07:00
|
|
|
evas_object_smart_callback_add(sd->emotion, "playback_started",
|
2011-10-30 21:49:56 -07:00
|
|
|
_play_started, obj);
|
2012-05-03 15:44:21 -07:00
|
|
|
evas_object_smart_callback_add(sd->emotion, "playback_finished",
|
2011-10-30 21:49:56 -07:00
|
|
|
_play_finished, obj);
|
2011-10-30 20:58:44 -07:00
|
|
|
|
|
|
|
/* FIXME: track info from video */
|
2012-11-25 22:32:53 -08:00
|
|
|
end:
|
2014-03-25 04:33:53 -07:00
|
|
|
return EINA_TRUE;
|
2011-10-30 20:58:44 -07:00
|
|
|
}
|
2012-05-03 15:44:21 -07:00
|
|
|
|
2014-03-25 04:33:53 -07:00
|
|
|
EOLIAN static void
|
2014-06-03 03:35:28 -07:00
|
|
|
_elm_player_evas_object_smart_add(Eo *obj, Elm_Player_Data *priv)
|
2012-05-03 15:44:21 -07:00
|
|
|
{
|
2013-07-23 06:10:54 -07:00
|
|
|
char buf[256];
|
2013-08-26 08:29:45 -07:00
|
|
|
|
2013-09-24 21:33:39 -07:00
|
|
|
eo_do_super(obj, MY_CLASS, evas_obj_smart_add());
|
|
|
|
elm_widget_sub_object_parent_add(obj);
|
2012-05-03 15:44:21 -07:00
|
|
|
|
2013-03-01 18:04:31 -08:00
|
|
|
if (!elm_layout_theme_set(obj, "player", "base", elm_widget_style_get(obj)))
|
2013-12-25 20:03:55 -08:00
|
|
|
CRI("Failed to set layout!");
|
2012-05-03 15:44:21 -07:00
|
|
|
|
2013-07-23 03:15:50 -07:00
|
|
|
priv->forward = _player_button_add(obj, "forward", _forward);
|
|
|
|
priv->info = _player_button_add(obj, "info", _info);
|
|
|
|
priv->next = _player_button_add(obj, "next", _next);
|
|
|
|
priv->pause = _player_button_add(obj, "pause", _pause);
|
|
|
|
priv->play = _player_button_add(obj, "play", _play);
|
|
|
|
priv->prev = _player_button_add(obj, "prev", _prev);
|
|
|
|
priv->rewind = _player_button_add(obj, "rewind", _rewind);
|
|
|
|
priv->stop = _player_button_add(obj, "stop", _stop);
|
2013-07-25 02:29:59 -07:00
|
|
|
priv->eject = _player_button_add(obj, "eject", _eject);
|
|
|
|
priv->volume = _player_button_add(obj, "volume", _volume);
|
|
|
|
priv->mute = _player_button_add(obj, "mute", _mute);
|
2013-07-23 06:10:54 -07:00
|
|
|
|
2012-05-03 15:44:21 -07:00
|
|
|
priv->slider = elm_slider_add(obj);
|
2013-07-23 06:10:54 -07:00
|
|
|
snprintf(buf, sizeof(buf), "media_player/position/%s",
|
|
|
|
elm_widget_style_get(obj));
|
|
|
|
elm_object_style_set(priv->slider, buf);
|
2013-07-18 06:19:44 -07:00
|
|
|
elm_slider_indicator_show_set(priv->slider, EINA_TRUE);
|
2012-05-03 15:44:21 -07:00
|
|
|
elm_slider_indicator_format_function_set
|
|
|
|
(priv->slider, _double_to_time, _str_free);
|
|
|
|
elm_slider_units_format_function_set
|
|
|
|
(priv->slider, _double_to_time, _str_free);
|
|
|
|
elm_slider_min_max_set(priv->slider, 0, 0);
|
|
|
|
elm_slider_value_set(priv->slider, 0);
|
|
|
|
elm_object_disabled_set(priv->slider, EINA_TRUE);
|
|
|
|
evas_object_size_hint_align_set(priv->slider, EVAS_HINT_FILL, 0.5);
|
|
|
|
evas_object_size_hint_weight_set
|
|
|
|
(priv->slider, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
2013-07-25 02:29:59 -07:00
|
|
|
elm_layout_content_set(obj, "elm.swallow.media_player.positionslider",
|
2013-07-23 03:15:50 -07:00
|
|
|
priv->slider);
|
2012-05-03 15:44:21 -07:00
|
|
|
evas_object_smart_callback_add
|
|
|
|
(priv->slider, "changed", _update_position, obj);
|
2013-07-17 03:29:30 -07:00
|
|
|
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);
|
2012-05-03 15:44:21 -07:00
|
|
|
|
2013-07-25 02:29:59 -07:00
|
|
|
priv->vslider = elm_slider_add(obj);
|
|
|
|
elm_slider_indicator_show_set(priv->vslider, EINA_FALSE);
|
|
|
|
snprintf(buf, sizeof(buf), "media_player/volume/%s",
|
|
|
|
elm_widget_style_get(obj));
|
|
|
|
elm_object_style_set(priv->vslider, buf);
|
|
|
|
elm_slider_min_max_set(priv->vslider, 0, 100);
|
|
|
|
elm_slider_value_set(priv->vslider, 100);
|
|
|
|
elm_slider_horizontal_set(priv->vslider, EINA_FALSE);
|
|
|
|
elm_slider_inverted_set(priv->vslider, EINA_TRUE);
|
|
|
|
evas_object_size_hint_align_set(priv->vslider, 0.5, EVAS_HINT_FILL);
|
|
|
|
evas_object_size_hint_weight_set
|
|
|
|
(priv->vslider, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
|
|
|
|
elm_layout_content_set(obj, "elm.swallow.media_player.volumeslider",
|
|
|
|
priv->vslider);
|
|
|
|
evas_object_smart_callback_add
|
|
|
|
(priv->vslider, "changed", _update_volume, obj);
|
|
|
|
|
2012-05-03 15:44:21 -07:00
|
|
|
elm_layout_sizing_eval(obj);
|
|
|
|
elm_widget_can_focus_set(obj, EINA_TRUE);
|
|
|
|
}
|
|
|
|
|
2014-03-25 04:33:53 -07:00
|
|
|
EOLIAN static void
|
2014-06-03 03:35:28 -07:00
|
|
|
_elm_player_evas_object_smart_del(Eo *obj, Elm_Player_Data *sd EINA_UNUSED)
|
2013-02-12 03:10:55 -08:00
|
|
|
{
|
2013-03-18 09:07:38 -07:00
|
|
|
eo_do_super(obj, MY_CLASS, evas_obj_smart_del());
|
2013-02-12 03:10:55 -08:00
|
|
|
}
|
|
|
|
|
2012-11-25 22:32:53 -08:00
|
|
|
EAPI Evas_Object *
|
|
|
|
elm_player_add(Evas_Object *parent)
|
2012-05-03 15:44:21 -07:00
|
|
|
{
|
2012-11-25 22:32:53 -08:00
|
|
|
EINA_SAFETY_ON_NULL_RETURN_VAL(parent, NULL);
|
|
|
|
Evas_Object *obj = eo_add(MY_CLASS, parent);
|
|
|
|
eo_unref(obj);
|
|
|
|
return obj;
|
2012-05-03 15:44:21 -07:00
|
|
|
}
|
2011-10-30 20:58:44 -07:00
|
|
|
|
2014-03-25 04:33:53 -07:00
|
|
|
EOLIAN static void
|
|
|
|
_elm_player_eo_base_constructor(Eo *obj, Elm_Player_Data *sd EINA_UNUSED)
|
2012-07-31 15:07:23 -07:00
|
|
|
{
|
2013-03-18 09:07:38 -07:00
|
|
|
eo_do_super(obj, MY_CLASS, eo_constructor());
|
2012-11-25 22:32:53 -08:00
|
|
|
eo_do(obj,
|
2013-11-07 03:44:22 -08:00
|
|
|
evas_obj_type_set(MY_CLASS_NAME_LEGACY),
|
2014-06-10 19:07:15 -07:00
|
|
|
evas_obj_smart_callbacks_descriptions_set(_smart_callbacks),
|
|
|
|
elm_interface_atspi_accessible_role_set(ELM_ATSPI_ROLE_ANIMATION));
|
2012-07-31 15:07:23 -07:00
|
|
|
}
|
|
|
|
|
2014-03-25 04:33:53 -07:00
|
|
|
EOLIAN static void
|
|
|
|
_elm_player_class_constructor(Eo_Class *klass)
|
2011-07-05 07:05:59 -07:00
|
|
|
{
|
2013-11-07 03:44:22 -08:00
|
|
|
evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass);
|
2011-07-05 07:05:59 -07:00
|
|
|
}
|
2012-11-25 22:32:53 -08:00
|
|
|
|
2014-03-25 04:33:53 -07:00
|
|
|
#include "elc_player.eo.c"
|