From 6262a884fb746cd0e52bb7b249b46944238311cc Mon Sep 17 00:00:00 2001 From: Gustavo Sverzut Barbieri Date: Thu, 1 Apr 2010 03:59:39 +0000 Subject: [PATCH] Initial support for Emotion as Edje EXTERNAL. Very crude, needs testing... but I can already play videos from inside editje and edje_player :-D SVN revision: 47642 --- legacy/emotion/configure.ac | 26 + legacy/emotion/data/Makefile.am | 14 +- legacy/emotion/data/e_logo.png | Bin 46481 -> 7833 bytes legacy/emotion/data/icon.edc | 14 + legacy/emotion/m4/emotion_check.m4 | 1 + legacy/emotion/src/Makefile.am | 4 + legacy/emotion/src/edje_external/Makefile.am | 17 + legacy/emotion/src/edje_external/emotion.c | 501 +++++++++++++++++++ legacy/emotion/src/lib/emotion_smart.c | 58 ++- 9 files changed, 619 insertions(+), 16 deletions(-) create mode 100644 legacy/emotion/data/icon.edc create mode 100644 legacy/emotion/src/edje_external/Makefile.am create mode 100644 legacy/emotion/src/edje_external/emotion.c diff --git a/legacy/emotion/configure.ac b/legacy/emotion/configure.ac index 2eaf796182..934a20e64c 100644 --- a/legacy/emotion/configure.ac +++ b/legacy/emotion/configure.ac @@ -108,6 +108,29 @@ PKG_CHECK_EXISTS([evas-opengl-x11], [AC_DEFINE(HAVE_EVAS_OPENGL_X11, 1, [Evas Op PKG_CHECK_EXISTS([evas-fb], [AC_DEFINE(HAVE_EVAS_FB, 1, [Evas Framebuffer Engine Support])]) +enable_edje_external="yes" +want_edje_external="auto" +AC_MSG_CHECKING([if should provide Edje EXTERNAL support...]) +AC_ARG_ENABLE([edje-external], + [AC_HELP_STRING([--disable-edje-external], [disable providing Edje EXTERNAL support. @<:@default=detect@:>@])], + [want_edje_external=$enableval], []) +AC_MSG_RESULT([${enable_edje_external}]) +if test "x$want_edje_external" != "xno"; then + PKG_CHECK_MODULES([EDJE_EXTERNAL], + [edje], + [enable_edje_external="yes"], + [enable_edje_external="no"] + ) +else + enable_edje_external="no" +fi +if test "x$want_edje_external" = "xyes" -a "x$enable_edje_external" = "xno"; then + AC_MSG_ERROR([Edje EXTERNAL support requested, but Edje not found by pkg-config.]) +fi +AM_CONDITIONAL(ENABLE_EDJE_EXTERNAL, test "x$enable_edje_external" = "xyes") +AC_SUBST(EDJE_EXTERNAL_CFLAGS) +AC_SUBST(EDJE_EXTERNAL_LIBS) + ### Checks for header files AC_HEADER_STDC @@ -174,6 +197,7 @@ src/modules/Makefile src/modules/xine/Makefile src/modules/gstreamer/Makefile src/modules/vlc/Makefile +src/edje_external/Makefile src/bin/Makefile data/Makefile ]) @@ -201,6 +225,8 @@ echo echo " Build emotion_test...: $have_emotion_test" echo " edje_cc..............: ${edje_cc}" echo +echo " Edje EXTERNAL support: ${enable_edje_external}" +echo echo "Compilation............: make (or gmake)" echo " CPPFLAGS.............: $CPPFLAGS" echo " CFLAGS...............: $CFLAGS" diff --git a/legacy/emotion/data/Makefile.am b/legacy/emotion/data/Makefile.am index 425c37a73e..db772b13a6 100644 --- a/legacy/emotion/data/Makefile.am +++ b/legacy/emotion/data/Makefile.am @@ -4,14 +4,16 @@ MAINTAINERCLEANFILES = Makefile.in EDJE_CC = @edje_cc@ EDJE_FLAGS = -v -id $(top_srcdir)/data -fd $(top_srcdir)/data -filesdir = $(datadir)/emotion/data +filesdir = $(datadir)/$(PACKAGE)/data files_DATA = if BUILD_EMOTION_TEST - files_DATA += theme.edj +endif +if ENABLE_EDJE_EXTERNAL +files_DATA += icon.edj endif EXTRA_DIST = \ @@ -38,12 +40,18 @@ video_frame_right.png \ video_frame_top.png \ whb.png \ window_inner_shadow.png \ -theme.edc +theme.edc \ +icon.edc theme.edj: Makefile $(EDJE_CC) $(EDJE_FLAGS) \ $(top_srcdir)/data/theme.edc \ $(top_builddir)/data/theme.edj +icon.edj: Makefile + $(EDJE_CC) $(EDJE_FLAGS) \ + $(top_srcdir)/data/icon.edc \ + $(top_builddir)/data/icon.edj + clean-local: rm -f *.edj diff --git a/legacy/emotion/data/e_logo.png b/legacy/emotion/data/e_logo.png index 54100d5b65776e3ff1a13de913369caa2480717e..0b79b69ab39d1dec20bcc729bd17dd51bc31ccdb 100644 GIT binary patch literal 7833 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 KMNUMnLSTZ;UlY0j diff --git a/legacy/emotion/data/icon.edc b/legacy/emotion/data/icon.edc new file mode 100644 index 0000000000..0a3ea3dc7a --- /dev/null +++ b/legacy/emotion/data/icon.edc @@ -0,0 +1,14 @@ +collections { + images.image: "e_logo.png" COMP; + group { name: "icon"; + min: 20 10; + parts { + part { name: "icon"; type: IMAGE; + mouse_events: 0; + description { state: "default" 0.0; + image.normal: "e_logo.png"; + } + } + } + } +} diff --git a/legacy/emotion/m4/emotion_check.m4 b/legacy/emotion/m4/emotion_check.m4 index 16c3236cbd..b25d48b37a 100644 --- a/legacy/emotion/m4/emotion_check.m4 +++ b/legacy/emotion/m4/emotion_check.m4 @@ -140,6 +140,7 @@ fi enable_[]DOWN="no" if test "x${have_module}" = "xyes" ; then enable_[]DOWN=${enable_module} + AC_DEFINE(EMOTION_BUILD_[]UP, 1, [Set to 1 if $1 is built]) fi AS_IF([test "x$have_module" = "xyes"], [$3], [$4]) diff --git a/legacy/emotion/src/Makefile.am b/legacy/emotion/src/Makefile.am index 2ab111e4ff..75fc40bc9b 100644 --- a/legacy/emotion/src/Makefile.am +++ b/legacy/emotion/src/Makefile.am @@ -2,3 +2,7 @@ MAINTAINERCLEANFILES = Makefile.in SUBDIRS = lib bin modules + +if ENABLE_EDJE_EXTERNAL +SUBDIRS += edje_external +endif diff --git a/legacy/emotion/src/edje_external/Makefile.am b/legacy/emotion/src/edje_external/Makefile.am new file mode 100644 index 0000000000..ff3b5c9aa8 --- /dev/null +++ b/legacy/emotion/src/edje_external/Makefile.am @@ -0,0 +1,17 @@ +MAINTAINERCLEANFILES = Makefile.in + +AM_CPPFLAGS = \ +-I$(top_srcdir) \ +-I$(top_srcdir)/src/lib \ +-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \ +@EMOTION_CPPFLAGS@ \ +@EMOTION_CFLAGS@ \ +@EFL_EMOTION_BUILD@ \ +@EDJE_EXTERNAL_CFLAGS@ + +pkgdir = $(libdir)/edje +pkg_LTLIBRARIES = emotion.la + +emotion_la_SOURCES = emotion.c +emotion_la_LIBADD = $(top_builddir)/src/lib/libemotion.la @EDJE_EXTERNAL_LIBS@ +emotion_la_LDFLAGS = -no-undefined -module -avoid-version -shared -fPIC diff --git a/legacy/emotion/src/edje_external/emotion.c b/legacy/emotion/src/edje_external/emotion.c new file mode 100644 index 0000000000..21de856e2e --- /dev/null +++ b/legacy/emotion/src/edje_external/emotion.c @@ -0,0 +1,501 @@ +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif +#include "Emotion.h" +#include + +typedef struct _External_Emotion_Params External_Emotion_Params; +typedef struct _External_Emotion_Signals_Proxy_Context External_Emotion_Signals_Proxy_Context; + +struct _External_Emotion_Params +{ +#define _STR(M) const char *M +#define _BOOL(M) Eina_Bool M:1; Eina_Bool M##_exists:1 +#define _INT(M) int M; Eina_Bool M##_exists:1 +#define _DOUBLE(M) double M; Eina_Bool M##_exists:1 + _STR(file); + _BOOL(play); + //_DOUBLE(position); + _BOOL(smooth_scale); + _DOUBLE(audio_volume); + _BOOL(audio_mute); + _INT(audio_channel); + _BOOL(video_mute); + _INT(video_channel); + _BOOL(spu_mute); + _INT(spu_channel); + _INT(chapter); + _DOUBLE(play_speed); + //_INT(vis); +#undef _STR +#undef _BOOL +#undef _INT +#undef _DOUBLE +}; + +struct _External_Emotion_Signals_Proxy_Context +{ + const char *emission; + const char *source; + Evas_Object *edje; +}; + +static int _log_dom = -1; +#define CRITICAL(...) EINA_LOG_DOM_CRIT(_log_dom, __VA_ARGS__) +#define ERR(...) EINA_LOG_DOM_ERR(_log_dom, __VA_ARGS__) +#define WRN(...) EINA_LOG_DOM_WARN(_log_dom, __VA_ARGS__) +#define INF(...) EINA_LOG_DOM_INFO(_log_dom, __VA_ARGS__) +#define DBG(...) EINA_LOG_DOM_DBG(_log_dom, __VA_ARGS__) + +static const char *_external_emotion_engines[] = { +#ifdef EMOTION_BUILD_XINE + "xine", +#endif +#ifdef EMOTION_BUILD_GSTREAMER + "gstreamer", +#endif +#ifdef EMOTION_BUILD_VLC + "vlc", +#endif + NULL, +}; + +static const char _external_emotion_engine_def[] = +#if defined(EMOTION_BUILD_XINE) + "xine"; +#elif defined(EMOTION_BUILD_GSTREAMER) + "gstreamer"; +#elif defined(EMOTION_BUILD_VLC) + "vlc"; +#else + NULL; +#endif + +static void +_external_emotion_signal_proxy_free_cb(void *data, Evas *e __UNUSED__, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + External_Emotion_Signals_Proxy_Context *ctxt = data; + free(ctxt); +} + +static void +_external_emotion_signal_proxy_cb(void *data, Evas_Object *obj __UNUSED__, void *event_info __UNUSED__) +{ + External_Emotion_Signals_Proxy_Context *ctxt = data; + // TODO: Is it worth to check Evas_Smart_Cb_Description and do something + // TODO: with event_info given its description? + edje_object_signal_emit(ctxt->edje, ctxt->emission, ctxt->source); +} + +static Evas_Object * +_external_emotion_add(void *data __UNUSED__, Evas *evas, Evas_Object *edje __UNUSED__, const Eina_List *params, const char *part_name) +{ + const Evas_Smart_Cb_Description **cls_descs, **inst_descs; + unsigned int cls_count, inst_count, total; + External_Emotion_Signals_Proxy_Context *ctxt; + Evas_Object *obj; + const char *engine; + + if (!edje_external_param_choice_get(params, "engine", &engine)) + engine = NULL; + if (!engine) engine = _external_emotion_engine_def; + + obj = emotion_object_add(evas); + if (!emotion_object_init(obj, engine)) + { + ERR("failed to initialize emotion with engine '%s'.", engine); + return NULL; + } + + evas_object_smart_callbacks_descriptions_get + (obj, &cls_descs, &cls_count, &inst_descs, &inst_count); + + total = cls_count + inst_count; + if (!total) goto end; + ctxt = malloc(sizeof(External_Emotion_Signals_Proxy_Context) * total); + if (!ctxt) goto end; + evas_object_event_callback_add + (obj, EVAS_CALLBACK_DEL, _external_emotion_signal_proxy_free_cb, ctxt); + + for (; cls_count > 0; cls_count--, cls_descs++, ctxt++) + { + const Evas_Smart_Cb_Description *d = *cls_descs; + ctxt->emission = d->name; + ctxt->source = part_name; + ctxt->edje = edje; + evas_object_smart_callback_add + (obj, d->name, _external_emotion_signal_proxy_cb, ctxt); + } + + for (; inst_count > 0; inst_count--, inst_descs++, ctxt++) + { + const Evas_Smart_Cb_Description *d = *inst_descs; + ctxt->emission = d->name; + ctxt->source = part_name; + ctxt->edje = edje; + evas_object_smart_callback_add + (obj, d->name, _external_emotion_signal_proxy_cb, ctxt); + } + + end: + return obj; +} + +static void +_external_emotion_signal(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const char *signal, const char *source) +{ + DBG("External Signal received: '%s' '%s'", signal, source); +} + +static void +_external_emotion_state_set(void *data __UNUSED__, Evas_Object *obj, const void *from_params, const void *to_params, float pos __UNUSED__) +{ + const External_Emotion_Params *p; + + if (to_params) p = to_params; + else if (from_params) p = from_params; + else return; + +#define _STR(M) if (p->M) emotion_object_##M##_set(obj, p->M) +#define _BOOL(M) if (p->M##_exists) emotion_object_##M##_set(obj, p->M) +#define _INT(M) if (p->M##_exists) emotion_object_##M##_set(obj, p->M) +#define _DOUBLE(M) if (p->M##_exists) emotion_object_##M##_set(obj, p->M) + _STR(file); + _BOOL(play); + //_DOUBLE(position); + _BOOL(smooth_scale); + _DOUBLE(audio_volume); + _BOOL(audio_mute); + _INT(audio_channel); + _BOOL(video_mute); + _INT(video_channel); + _BOOL(spu_mute); + _INT(spu_channel); + _INT(chapter); + _DOUBLE(play_speed); + //_INT(vis); +#undef _STR +#undef _BOOL +#undef _INT +#undef _DOUBLE +} + +static Eina_Bool +_external_emotion_param_set(void *data __UNUSED__, Evas_Object *obj, const Edje_External_Param *param) +{ + if (!strcmp(param->name, "engine")) + { + // TODO + WRN("engine is a property that can be set only at object creation!"); + return EINA_FALSE; + } + +#define _STR(M) \ + else if (!strcmp(param->name, #M)) \ + { \ + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING) \ + { \ + emotion_object_##M##_set(obj, param->s); \ + return EINA_TRUE; \ + } \ + } +#define _BOOL(M) \ + else if (!strcmp(param->name, #M)) \ + { \ + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL) \ + { \ + emotion_object_##M##_set(obj, param->i); \ + return EINA_TRUE; \ + } \ + } +#define _INT(M) \ + else if (!strcmp(param->name, #M)) \ + { \ + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_INT) \ + { \ + emotion_object_##M##_set(obj, param->i); \ + return EINA_TRUE; \ + } \ + } +#define _DOUBLE(M) \ + else if (!strcmp(param->name, #M)) \ + { \ + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE) \ + { \ + emotion_object_##M##_set(obj, param->d); \ + return EINA_TRUE; \ + } \ + } + + if (0) {} // so else if works... + _STR(file) + _BOOL(play) + //_DOUBLE(position) + _BOOL(smooth_scale) + _DOUBLE(audio_volume) + _BOOL(audio_mute) + _INT(audio_channel) + _BOOL(video_mute) + _INT(video_channel) + _BOOL(spu_mute) + _INT(spu_channel) + _INT(chapter) + _DOUBLE(play_speed) + //_INT(vis); +#undef _STR +#undef _BOOL +#undef _INT +#undef _DOUBLE + + ERR("unknown parameter '%s' of type '%s'", + param->name, edje_external_param_type_str(param->type)); + + return EINA_FALSE; +} + +static Eina_Bool +_external_emotion_param_get(void *data __UNUSED__, const Evas_Object *obj, Edje_External_Param *param) +{ +#define _STR(M) \ + else if (!strcmp(param->name, #M)) \ + { \ + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_STRING) \ + { \ + param->s = emotion_object_##M##_get(obj); \ + return EINA_TRUE; \ + } \ + } +#define _BOOL(M) \ + else if (!strcmp(param->name, #M)) \ + { \ + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_BOOL) \ + { \ + param->i = emotion_object_##M##_get(obj); \ + return EINA_TRUE; \ + } \ + } +#define _INT(M) \ + else if (!strcmp(param->name, #M)) \ + { \ + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_INT) \ + { \ + param->i = emotion_object_##M##_get(obj); \ + return EINA_TRUE; \ + } \ + } +#define _DOUBLE(M) \ + else if (!strcmp(param->name, #M)) \ + { \ + if (param->type == EDJE_EXTERNAL_PARAM_TYPE_DOUBLE) \ + { \ + param->d = emotion_object_##M##_get(obj); \ + return EINA_TRUE; \ + } \ + } + + if (0) {} // so else if works... + _STR(file) + _BOOL(play) + //_DOUBLE(position) + _BOOL(smooth_scale) + _DOUBLE(audio_volume) + _BOOL(audio_mute) + _INT(audio_channel) + _BOOL(video_mute) + _INT(video_channel) + _BOOL(spu_mute) + _INT(spu_channel) + _INT(chapter) + _DOUBLE(play_speed) + //_INT(vis) +#undef _STR +#undef _BOOL +#undef _INT +#undef _DOUBLE + + ERR("unknown parameter '%s' of type '%s'", + param->name, edje_external_param_type_str(param->type)); + + return EINA_FALSE; +} + +static void * +_external_emotion_params_parse(void *data __UNUSED__, Evas_Object *obj __UNUSED__, const Eina_List *params) +{ + const Edje_External_Param *param; + const Eina_List *l; + External_Emotion_Params *p = calloc(1, sizeof(External_Emotion_Params)); + if (!p) return NULL; + + EINA_LIST_FOREACH(params, l, param) + { +#define _STR(M) \ + if (!strcmp(param->name, #M)) p->M = eina_stringshare_add(param->s) +#define _BOOL(M) \ + if (!strcmp(param->name, #M)) \ + { \ + p->M = param->i; \ + p->M##_exists = EINA_TRUE; \ + } +#define _INT(M) \ + if (!strcmp(param->name, #M)) \ + { \ + p->M = param->i; \ + p->M##_exists = EINA_TRUE; \ + } +#define _DOUBLE(M) \ + if (!strcmp(param->name, #M)) \ + { \ + p->M = param->d; \ + p->M##_exists = EINA_TRUE; \ + } + + _STR(file); + _BOOL(play); + //_DOUBLE(position); + _BOOL(smooth_scale); + _DOUBLE(audio_volume); + _BOOL(audio_mute); + _INT(audio_channel); + _BOOL(video_mute); + _INT(video_channel); + _BOOL(spu_mute); + _INT(spu_channel); + _INT(chapter); + _DOUBLE(play_speed); + //_INT(vis); +#undef _STR +#undef _BOOL +#undef _INT +#undef _DOUBLE + } + + return p; +} + +static void +_external_emotion_params_free(void *params) +{ + External_Emotion_Params *p = params; + +#define _STR(M) eina_stringshare_del(p->M) +#define _BOOL(M) do {} while (0) +#define _INT(M) do {} while (0) +#define _DOUBLE(M) do {} while (0) + _STR(file); + _BOOL(play); + //_DOUBLE(position); + _BOOL(smooth_scale); + _DOUBLE(audio_volume); + _BOOL(audio_mute); + _INT(audio_channel); + _BOOL(video_mute); + _INT(video_channel); + _BOOL(spu_mute); + _INT(spu_channel); + _INT(chapter); + _DOUBLE(play_speed); + //_INT(vis); +#undef _STR +#undef _BOOL +#undef _INT +#undef _DOUBLE + free(p); +} + +static const char * +_external_emotion_label_get(void *data __UNUSED__) +{ + return "Emotion"; +} + +static Evas_Object * +_external_emotion_icon_add(void *data __UNUSED__, Evas *e) +{ + Evas_Object *ic; + int w = 0, h = 0; + + ic = edje_object_add(e); + edje_object_file_set(ic, PACKAGE_DATA_DIR"/data/icon.edj", "icon"); + edje_object_size_min_get(ic, &w, &h); + if (w < 1) w = 20; + if (h < 1) h = 10; + evas_object_size_hint_min_set(ic, w, h); + evas_object_size_hint_max_set(ic, w, h); + + return ic; +} + +static const char * +_external_emotion_translate(void *data __UNUSED__, const char *orig) +{ + // in future, mark all params as translatable and use dgettext() + // with "emotion" text domain here. + return orig; +} + +static Edje_External_Param_Info _external_emotion_params[] = { + EDJE_EXTERNAL_PARAM_INFO_CHOICE_FULL + ("engine", _external_emotion_engine_def, _external_emotion_engines), + EDJE_EXTERNAL_PARAM_INFO_STRING("file"), + EDJE_EXTERNAL_PARAM_INFO_BOOL_DEFAULT("play", EINA_FALSE), + //EDJE_EXTERNAL_PARAM_INFO_DOUBLE("position"), + EDJE_EXTERNAL_PARAM_INFO_BOOL_DEFAULT("smooth_scale", EINA_FALSE), + EDJE_EXTERNAL_PARAM_INFO_DOUBLE_DEFAULT("audio_volume", 0.9), + EDJE_EXTERNAL_PARAM_INFO_BOOL_DEFAULT("audio_mute", EINA_FALSE), + EDJE_EXTERNAL_PARAM_INFO_INT_DEFAULT("audio_channel", 0), + EDJE_EXTERNAL_PARAM_INFO_BOOL_DEFAULT("video_mute", EINA_FALSE), + EDJE_EXTERNAL_PARAM_INFO_INT_DEFAULT("video_channel", 0), + EDJE_EXTERNAL_PARAM_INFO_BOOL_DEFAULT("spu_mute", EINA_FALSE), + EDJE_EXTERNAL_PARAM_INFO_INT_DEFAULT("spu_channel", 0), + EDJE_EXTERNAL_PARAM_INFO_INT("chapter"), + EDJE_EXTERNAL_PARAM_INFO_DOUBLE_DEFAULT("play_speed", 1.0), + //EDJE_EXTERNAL_PARAM_INFO_CHOICE_FULL("vis", ...), + EDJE_EXTERNAL_PARAM_INFO_SENTINEL +}; + +static const Edje_External_Type _external_emotion_type = { + .abi_version = EDJE_EXTERNAL_TYPE_ABI_VERSION, + .module = "emotion", + .module_name = "Emotion", + .add = _external_emotion_add, + .state_set = _external_emotion_state_set, + .signal_emit = _external_emotion_signal, + .param_set = _external_emotion_param_set, + .param_get = _external_emotion_param_get, + .params_parse = _external_emotion_params_parse, + .params_free = _external_emotion_params_free, + .label_get = _external_emotion_label_get, + .description_get = NULL, + .icon_add = _external_emotion_icon_add, + .preview_add = NULL, + .translate = _external_emotion_translate, + .parameters_info = _external_emotion_params, + .data = NULL +}; + +static Edje_External_Type_Info _external_emotion_types[] = +{ + {"emotion", &_external_emotion_type}, + {NULL, NULL} +}; + +static Eina_Bool +external_emotion_mod_init(void) +{ + _log_dom = eina_log_domain_register + ("emotion-externals", EINA_COLOR_LIGHTBLUE); + edje_external_type_array_register(_external_emotion_types); + return EINA_TRUE; +} + +static void +external_emotion_mod_shutdown(void) +{ + edje_external_type_array_unregister(_external_emotion_types); + eina_log_domain_unregister(_log_dom); + _log_dom = -1; +} + +EINA_MODULE_INIT(external_emotion_mod_init); +EINA_MODULE_SHUTDOWN(external_emotion_mod_shutdown); diff --git a/legacy/emotion/src/lib/emotion_smart.c b/legacy/emotion/src/lib/emotion_smart.c index 2c83c4a31c..567a1b9176 100644 --- a/legacy/emotion/src/lib/emotion_smart.c +++ b/legacy/emotion/src/lib/emotion_smart.c @@ -94,6 +94,37 @@ static const char *_backend_priority[] = { "vlc" }; +static const char SIG_FRAME_DECODE[] = "frame_decode"; +static const char SIG_POSITION_UPDATE[] = "position_update"; +static const char SIG_LENGTH_CHANGE[] = "length_change"; +static const char SIG_FRAME_RESIZE[] = "frame_resize"; +static const char SIG_DECODE_STOP[] = "decode_stop"; +static const char SIG_PLAYBACK_FINISHED[] = "playback_finished"; +static const char SIG_AUDIO_LEVEL_CHANGE[] = "audio_level_change"; +static const char SIG_CHANNELS_CHANGE[] = "channels_change"; +static const char SIG_TITLE_CHANGE[] = "title_change"; +static const char SIG_PROGRESS_CHANGE[] = "progress_change"; +static const char SIG_REF_CHANGE[] = "ref_change"; +static const char SIG_BUTTON_NUM_CHANGE[] = "button_num_change"; +static const char SIG_BUTTON_CHANGE[] = "button_change"; +static const Evas_Smart_Cb_Description _smart_callbacks[] = { + {SIG_FRAME_DECODE, ""}, + {SIG_POSITION_UPDATE, ""}, + {SIG_LENGTH_CHANGE, ""}, + {SIG_FRAME_RESIZE, ""}, + {SIG_DECODE_STOP, ""}, + {SIG_PLAYBACK_FINISHED, ""}, + {SIG_AUDIO_LEVEL_CHANGE, ""}, + {SIG_CHANNELS_CHANGE, ""}, + {SIG_TITLE_CHANGE, ""}, + {SIG_PROGRESS_CHANGE, ""}, + {SIG_REF_CHANGE, ""}, + {SIG_BUTTON_NUM_CHANGE, ""}, + {SIG_BUTTON_CHANGE, ""}, + {NULL, NULL} +}; + + EAPI Eina_Bool _emotion_module_register(const char *name, Emotion_Module_Open open, Emotion_Module_Close close) { @@ -905,7 +936,7 @@ _emotion_frame_new(Evas_Object *obj) E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME); // printf("pix get set 1 %p\n", sd->obj); evas_object_image_pixels_dirty_set(sd->obj, 1); - evas_object_smart_callback_call(obj, "frame_decode", NULL); + evas_object_smart_callback_call(obj, SIG_FRAME_DECODE, NULL); } EAPI void @@ -919,8 +950,8 @@ _emotion_video_pos_update(Evas_Object *obj, double pos, double len) if (len != sd->len) nlen = 1; sd->pos = pos; sd->len = len; - if (npos) evas_object_smart_callback_call(obj, "position_update", NULL); - if (nlen) evas_object_smart_callback_call(obj, "length_change", NULL); + if (npos) evas_object_smart_callback_call(obj, SIG_POSITION_UPDATE, NULL); + if (nlen) evas_object_smart_callback_call(obj, SIG_LENGTH_CHANGE, NULL); } EAPI void @@ -944,7 +975,7 @@ _emotion_frame_resize(Evas_Object *obj, int w, int h, double ratio) sd->ratio = ratio; changed = 1; } - if (changed) evas_object_smart_callback_call(obj, "frame_resize", NULL); + if (changed) evas_object_smart_callback_call(obj, SIG_FRAME_RESIZE, NULL); } EAPI void @@ -956,20 +987,20 @@ _emotion_decode_stop(Evas_Object *obj) if (sd->play) { sd->play = 0; - evas_object_smart_callback_call(obj, "decode_stop", NULL); + evas_object_smart_callback_call(obj, SIG_DECODE_STOP, NULL); } } EAPI void _emotion_playback_finished(Evas_Object *obj) { - evas_object_smart_callback_call(obj, "playback_finished", NULL); + evas_object_smart_callback_call(obj, SIG_PLAYBACK_FINISHED, NULL); } EAPI void _emotion_audio_level_change(Evas_Object *obj) { - evas_object_smart_callback_call(obj, "audio_level_change", NULL); + evas_object_smart_callback_call(obj, SIG_AUDIO_LEVEL_CHANGE, NULL); } EAPI void @@ -978,7 +1009,7 @@ _emotion_channels_change(Evas_Object *obj) Smart_Data *sd; E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME); - evas_object_smart_callback_call(obj, "channels_change", NULL); + evas_object_smart_callback_call(obj, SIG_CHANNELS_CHANGE, NULL); } EAPI void @@ -989,7 +1020,7 @@ _emotion_title_set(Evas_Object *obj, char *title) E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME); free(sd->title); sd->title = strdup(title); - evas_object_smart_callback_call(obj, "title_change", NULL); + evas_object_smart_callback_call(obj, SIG_TITLE_CHANGE, NULL); } EAPI void @@ -1001,7 +1032,7 @@ _emotion_progress_set(Evas_Object *obj, char *info, double stat) free(sd->progress.info); sd->progress.info = strdup(info); sd->progress.stat = stat; - evas_object_smart_callback_call(obj, "progress_change", NULL); + evas_object_smart_callback_call(obj, SIG_PROGRESS_CHANGE, NULL); } EAPI void @@ -1013,7 +1044,7 @@ _emotion_file_ref_set(Evas_Object *obj, const char *file, int num) free(sd->ref.file); sd->ref.file = strdup(file); sd->ref.num = num; - evas_object_smart_callback_call(obj, "ref_change", NULL); + evas_object_smart_callback_call(obj, SIG_REF_CHANGE, NULL); } EAPI void @@ -1023,7 +1054,7 @@ _emotion_spu_button_num_set(Evas_Object *obj, int num) E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME); sd->spu.button_num = num; - evas_object_smart_callback_call(obj, "button_num_change", NULL); + evas_object_smart_callback_call(obj, SIG_BUTTON_NUM_CHANGE, NULL); } EAPI void @@ -1033,7 +1064,7 @@ _emotion_spu_button_set(Evas_Object *obj, int button) E_SMART_OBJ_GET(sd, obj, E_OBJ_NAME); sd->spu.button = button; - evas_object_smart_callback_call(obj, "button_change", NULL); + evas_object_smart_callback_call(obj, SIG_BUTTON_CHANGE, NULL); } @@ -1277,6 +1308,7 @@ _smart_init(void) sc.color_set = _smart_color_set; sc.clip_set = _smart_clip_set; sc.clip_unset = _smart_clip_unset; + sc.callbacks = _smart_callbacks; } smart = evas_smart_class_new(&sc); }