Eolian: Integration of Player

This commit is contained in:
Daniel Zaoui 2014-03-25 13:33:53 +02:00
parent 8423df2f41
commit 246e0f4934
5 changed files with 75 additions and 87 deletions

View File

@ -624,7 +624,9 @@ BUILT_SOURCES = \
elm_photocam_pan.eo.c \
elm_photocam_pan.eo.h \
elm_photo.eo.c \
elm_photo.eo.h
elm_photo.eo.h \
elc_player.eo.c \
elc_player.eo.h
EXTRA_DIST += \
elm_widget.eo \
@ -676,7 +678,8 @@ EXTRA_DIST += \
elm_panes.eo \
elm_photocam.eo \
elm_photocam_pan.eo \
elm_photo.eo
elm_photo.eo \
elc_player.eo
nodist_includesunstable_HEADERS = \
elm_widget.eo.h \
@ -728,5 +731,6 @@ nodist_includesunstable_HEADERS = \
elm_panes.eo.h \
elm_photocam.eo.h \
elm_photocam_pan.eo.h \
elm_photo.eo.h
elm_photo.eo.h \
elc_player.eo.h

View File

@ -9,8 +9,6 @@
#include "elm_widget_layout.h"
#include "elm_widget_player.h"
EAPI Eo_Op ELM_OBJ_PLAYER_BASE_ID = EO_NOOP;
#define MY_CLASS ELM_OBJ_PLAYER_CLASS
#define MY_CLASS_NAME "Elm_Player"
@ -56,22 +54,16 @@ static const Evas_Smart_Cb_Description _smart_callbacks[] = {
{ NULL, NULL }
};
static void
_elm_player_smart_event(Eo *obj, void *_pd, va_list *list)
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_Object *src = va_arg(*list, Evas_Object *);
Evas_Callback_Type type = va_arg(*list, Evas_Callback_Type);
Evas_Event_Key_Down *ev = va_arg(*list, void *);
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
Elm_Player_Smart_Data *sd = _pd;
if (ret) *ret = EINA_FALSE;
Evas_Event_Key_Down *ev = event_info;
(void) src;
if (elm_widget_disabled_get(obj)) return;
if (type != EVAS_CALLBACK_KEY_DOWN) return;
if (ev->event_flags & EVAS_EVENT_FLAG_ON_HOLD) return;
if (!sd->video) return;
if (elm_widget_disabled_get(obj)) return EINA_FALSE;
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;
if ((!strcmp(ev->key, "Left")) ||
((!strcmp(ev->key, "KP_Left")) && (!ev->string)))
@ -116,11 +108,11 @@ _elm_player_smart_event(Eo *obj, void *_pd, va_list *list)
goto success;
}
return;
return EINA_FALSE;
success:
ev->event_flags |= EVAS_EVENT_FLAG_ON_HOLD;
if (ret) *ret = EINA_TRUE;
return EINA_TRUE;
}
static void
@ -161,16 +153,13 @@ _update_theme_slider(Evas_Object *obj, Evas_Object *sl, const char *name, const
elm_object_disabled_set(sl, elm_widget_disabled_get(obj));
}
static void
_elm_player_smart_theme(Eo *obj, void *_pd, va_list *list)
EOLIAN static Eina_Bool
_elm_player_elm_widget_theme_apply(Eo *obj, Elm_Player_Data *sd)
{
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
if (ret) *ret = EINA_FALSE;
Eina_Bool int_ret;
Elm_Player_Smart_Data *sd = _pd;
eo_do_super(obj, MY_CLASS, elm_obj_widget_theme_apply(&int_ret));
if (!int_ret) return;
if (!int_ret) return EINA_FALSE;
_update_theme_button(obj, sd->forward, "forward");
_update_theme_button(obj, sd->info, "info");
_update_theme_button(obj, sd->next, "next");
@ -187,11 +176,11 @@ _elm_player_smart_theme(Eo *obj, void *_pd, va_list *list)
_update_theme_slider(obj, sd->vslider, "volume", "volumeslider");
elm_layout_sizing_eval(obj);
if (ret) *ret = EINA_TRUE;
return EINA_TRUE;
}
static void
_elm_player_smart_sizing_eval(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED)
EOLIAN static void
_elm_player_elm_layout_sizing_eval(Eo *obj, Elm_Player_Data *sd EINA_UNUSED)
{
Evas_Coord w, h;
ELM_WIDGET_DATA_GET_OR_RETURN(obj, wd);
@ -440,7 +429,7 @@ _play_finished(void *data,
}
static void
_on_video_del(Elm_Player_Smart_Data *sd)
_on_video_del(Elm_Player_Data *sd)
{
elm_object_disabled_set(sd->forward, EINA_TRUE);
elm_object_disabled_set(sd->info, EINA_TRUE);
@ -536,16 +525,10 @@ _str_free(char *data)
* treating this special case here and delegating other objects to own
* layout */
static void
_elm_player_smart_content_set(Eo *obj, void *_pd, va_list *list)
EOLIAN static Eina_Bool
_elm_player_elm_container_content_set(Eo *obj, Elm_Player_Data *sd, const char *part, Evas_Object *content)
{
const char *part = va_arg(*list, const char *);
Evas_Object *content = va_arg(*list, Evas_Object *);
Eina_Bool *ret = va_arg(*list, Eina_Bool *);
if (ret) *ret = EINA_FALSE;
Eina_Bool int_ret = EINA_FALSE;
Elm_Player_Smart_Data *sd = _pd;
double pos, length;
Eina_Bool seekable;
@ -553,15 +536,13 @@ _elm_player_smart_content_set(Eo *obj, void *_pd, va_list *list)
{
eo_do_super(obj, MY_CLASS,
elm_obj_container_content_set(part, content, &int_ret));
if (ret) *ret = int_ret;
return;
return int_ret;
}
if ((!part) || (!strcmp(part, "video"))) part = "elm.swallow.content";
eo_do_super(obj, MY_CLASS,
elm_obj_container_content_set(part, content, &int_ret));
if (ret) *ret = int_ret;
if (!_elm_video_check(content)) return;
if (!_elm_video_check(content)) return EINA_FALSE;
if (sd->video == content) goto end;
evas_object_del(sd->video);
@ -619,13 +600,12 @@ _elm_player_smart_content_set(Eo *obj, void *_pd, va_list *list)
/* FIXME: track info from video */
end:
if (ret) *ret = EINA_TRUE;
return EINA_TRUE;
}
static void
_elm_player_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
EOLIAN static void
_elm_player_evas_smart_add(Eo *obj, Elm_Player_Data *priv)
{
Elm_Player_Smart_Data *priv = _pd;
char buf[256];
eo_do_super(obj, MY_CLASS, evas_obj_smart_add());
@ -691,8 +671,8 @@ _elm_player_smart_add(Eo *obj, void *_pd, va_list *list EINA_UNUSED)
elm_widget_can_focus_set(obj, EINA_TRUE);
}
static void
_elm_player_smart_del(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED)
EOLIAN static void
_elm_player_evas_smart_del(Eo *obj, Elm_Player_Data *sd EINA_UNUSED)
{
eo_do_super(obj, MY_CLASS, evas_obj_smart_del());
}
@ -706,8 +686,8 @@ elm_player_add(Evas_Object *parent)
return obj;
}
static void
_constructor(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED)
EOLIAN static void
_elm_player_eo_base_constructor(Eo *obj, Elm_Player_Data *sd EINA_UNUSED)
{
eo_do_super(obj, MY_CLASS, eo_constructor());
eo_do(obj,
@ -715,40 +695,10 @@ _constructor(Eo *obj, void *_pd EINA_UNUSED, va_list *list EINA_UNUSED)
evas_obj_smart_callbacks_descriptions_set(_smart_callbacks, NULL));
}
static void
_class_constructor(Eo_Class *klass)
EOLIAN static void
_elm_player_class_constructor(Eo_Class *klass)
{
const Eo_Op_Func_Description func_desc[] = {
EO_OP_FUNC(EO_BASE_ID(EO_BASE_SUB_ID_CONSTRUCTOR), _constructor),
EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_ADD), _elm_player_smart_add),
EO_OP_FUNC(EVAS_OBJ_SMART_ID(EVAS_OBJ_SMART_SUB_ID_DEL), _elm_player_smart_del),
EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_THEME_APPLY), _elm_player_smart_theme),
EO_OP_FUNC(ELM_OBJ_WIDGET_ID(ELM_OBJ_WIDGET_SUB_ID_EVENT), _elm_player_smart_event),
EO_OP_FUNC(ELM_OBJ_CONTAINER_ID(ELM_OBJ_CONTAINER_SUB_ID_CONTENT_SET), _elm_player_smart_content_set),
EO_OP_FUNC(ELM_OBJ_LAYOUT_ID(ELM_OBJ_LAYOUT_SUB_ID_SIZING_EVAL), _elm_player_smart_sizing_eval),
EO_OP_FUNC_SENTINEL
};
eo_class_funcs_set(klass, func_desc);
evas_smart_legacy_type_register(MY_CLASS_NAME_LEGACY, klass);
}
static const Eo_Op_Description op_desc[] = {
EO_OP_DESCRIPTION_SENTINEL
};
static const Eo_Class_Description class_desc = {
EO_VERSION,
MY_CLASS_NAME,
EO_CLASS_TYPE_REGULAR,
EO_CLASS_DESCRIPTION_OPS(&ELM_OBJ_PLAYER_BASE_ID, op_desc, ELM_OBJ_PLAYER_SUB_ID_LAST),
NULL,
sizeof(Elm_Player_Smart_Data),
_class_constructor,
NULL
};
EO_DEFINE_CLASS(elm_obj_player_class_get, &class_desc, ELM_OBJ_LAYOUT_CLASS, NULL);
#include "elc_player.eo.c"

View File

@ -0,0 +1,31 @@
class Elm_Player (Elm_Layout)
{
eo_prefix: elm_obj_player;
implements {
class::constructor;
Eo_Base::constructor;
Evas_Smart::add;
Evas_Smart::del;
Elm_Widget::theme_apply;
Elm_Widget::event;
Elm_Container::content_set;
Elm_Layout::sizing_eval;
}
events {
forward,clicked;
info,clicked;
next,clicked;
pause,clicked;
play,clicked;
prev,clicked;
rewind,clicked;
quality,clicked;
eject,clicked;
volume,clicked;
mute,clicked;
language,changed;
focused;
unfocused;
}
}

View File

@ -1,3 +1,5 @@
#include "elc_player.eo.h"
#if 0
#define ELM_OBJ_PLAYER_CLASS elm_obj_player_class_get()
const Eo_Class *elm_obj_player_class_get(void) EINA_CONST;
@ -10,6 +12,7 @@ enum
};
#define ELM_OBJ_PLAYER_ID(sub_id) (ELM_OBJ_PLAYER_BASE_ID + sub_id)
#endif
/**
* ELM_OBJ_VIDEO_CLASS

View File

@ -17,8 +17,8 @@
/**
* Base layout smart data extended with player instance data.
*/
typedef struct _Elm_Player_Smart_Data Elm_Player_Smart_Data;
struct _Elm_Player_Smart_Data
typedef struct _Elm_Player_Data Elm_Player_Data;
struct _Elm_Player_Data
{
Evas_Object *video;
Evas_Object *emotion;
@ -46,7 +46,7 @@ struct _Elm_Player_Smart_Data
*/
#define ELM_PLAYER_DATA_GET(o, sd) \
Elm_Player_Smart_Data * sd = eo_data_scope_get(o, ELM_OBJ_PLAYER_CLASS)
Elm_Player_Data * sd = eo_data_scope_get(o, ELM_OBJ_PLAYER_CLASS)
#define ELM_PLAYER_DATA_GET_OR_RETURN(o, ptr) \
ELM_PLAYER_DATA_GET(o, ptr); \