add optional emotion support for filepreview widget. this doesn't work on my machine, I think because I have a broken vlc library so the generic player doesn't work.

CEDRIC, THIS FEATURE NEEDS YOU!


SVN revision: 76959
This commit is contained in:
Mike Blumenkrantz 2012-09-21 11:10:04 +00:00
parent ac3aadc71a
commit c135778f5f
4 changed files with 114 additions and 1 deletions

View File

@ -588,6 +588,25 @@ if test "x$want_elementary" != "xno"; then
fi
fi
want_emotion=auto
have_emotion=no
AC_ARG_ENABLE(emotion,
AC_HELP_STRING([--enable-emotion], [enable emotion support @<:@default=detect@:>@]),
[want_emotion=$enableval],
[want_emotion=auto]
)
if test "x$want_emotion" != "xno"; then
PKG_CHECK_MODULES(EMOTION, [emotion >= ${efl_version}],
[have_emotion=yes], [have_emotion=no])
if test "x$want_emotion" = "xyes" -a "x$have_emotion" = "xno"; then
AC_MSG_ERROR([emotion support requested but it was not found])
fi
if test "x$have_emotion" = "xyes"; then
AC_DEFINE([HAVE_EMOTION], 1, "Have emotion support")
requirements_e="${requirements_e} emotion > ${efl_version}"
fi
fi
PKG_CHECK_MODULES(E_OPEN, [
ecore >= ${efl_version}
efreet >= ${efl_version}

View File

@ -13,6 +13,7 @@ INCLUDES = \
@VALGRIND_CFLAGS@ \
@EDJE_DEF@ \
@ELM_CFLAGS@ \
@EMOTION_CFLAGS@ \
-DPACKAGE_BIN_DIR=\"@PACKAGE_BIN_DIR@\" \
-DPACKAGE_LIB_DIR=\"@PACKAGE_LIB_DIR@\" \
-DPACKAGE_DATA_DIR=\"@PACKAGE_DATA_DIR@\" \
@ -363,7 +364,7 @@ e_main.c \
$(enlightenment_src)
enlightenment_LDFLAGS = -export-dynamic
enlightenment_LDADD = @e_libs@ @ELM_LIBS@ @dlopen_libs@ @cf_libs@ @VALGRIND_LIBS@ -lm
enlightenment_LDADD = @e_libs@ @ELM_LIBS@ @EMOTION_LIBS@ @dlopen_libs@ @cf_libs@ @VALGRIND_LIBS@ -lm
enlightenment_imc_SOURCES = \
e.h \

View File

@ -22,6 +22,10 @@ static double t0, t1, t2;
#include <Elementary.h>
#endif
#ifdef HAVE_EMOTION
#include <Emotion.h>
#endif
/*
* i need to make more use of these when i'm baffled as to when something is
* up. other hooks:
@ -392,6 +396,17 @@ main(int argc, char **argv)
_e_main_shutdown_push(elm_shutdown);
#endif
#ifdef HAVE_EMOTION
TS("Emotion Init");
if (!emotion_init())
{
e_error_message_show(_("Enlightenment cannot initialize Emotion!\n"));
_e_main_shutdown(-1);
}
TS("Emotion Init Done");
_e_main_shutdown_push((void*)emotion_shutdown);
#endif
/* e doesn't sync to compositor - it should be one */
ecore_evas_app_comp_sync_set(0);

View File

@ -1,6 +1,9 @@
#include "e.h"
#include "e_fm_device.h"
#include <sys/statvfs.h>
#ifdef HAVE_EMOTION
# include <Emotion.h>
#endif
typedef struct _E_Widget_Data E_Widget_Data;
struct _E_Widget_Data
@ -142,6 +145,74 @@ _e_wid_fprev_clear_widgets(E_Widget_Data *wd)
CLRWID(o_preview_scrollframe);
}
#ifdef HAVE_EMOTION
static void
_e_wid_fprev_preview_video_widgets(E_Widget_Data *wd)
{
Evas *evas = evas_object_evas_get(wd->obj);
Evas_Object *o;
int mw, mh, y = 1;
_e_wid_fprev_clear_widgets(wd);
o = e_widget_table_add(evas, 0);
e_widget_disabled_set(o, 1);
wd->o_preview_properties_table = o;
#define WIDROW(lab, labob, entob, entw) \
do { \
o = e_widget_label_add(evas, lab); \
e_widget_disabled_set(o, 1); \
wd->labob = o; \
e_widget_table_object_append(wd->o_preview_properties_table, \
wd->labob, \
0, y, 1, 1, 1, 1, 1, 1); \
o = e_widget_entry_add(evas, &(wd->preview_extra_text), NULL, NULL, NULL); \
e_widget_entry_readonly_set(o, 1); \
e_widget_disabled_set(o, 1); \
wd->entob = o; \
e_widget_size_min_set(o, entw, -1); \
e_widget_table_object_append(wd->o_preview_properties_table, \
wd->entob, \
1, y, 1, 1, 1, 1, 1, 1); \
y++; \
} while (0)
o = emotion_object_add(evas);
emotion_object_init(o, NULL);
emotion_object_file_set(o, wd->path);
evas_object_size_hint_aspect_set(o, EVAS_ASPECT_CONTROL_BOTH, wd->w, wd->h);
wd->o_preview_preview = e_widget_image_add_from_object(evas, o, wd->w, wd->h);
e_widget_table_object_append(wd->o_preview_properties_table,
wd->o_preview_preview, 0, 0, 1, 1, 1, 1, 1, 1);
WIDROW(_("Length:"), o_preview_extra, o_preview_extra_entry, 100);
WIDROW(_("Size:"), o_preview_size, o_preview_size_entry, 100);
/* FIXME: other infos? */
e_widget_list_object_append(wd->o_preview_list,
wd->o_preview_properties_table,
1, 1, 0.5);
e_widget_size_min_get(wd->o_preview_list, &mw, &mh);
e_widget_size_min_set(wd->obj, mw, mh);
evas_object_show(wd->o_preview_preview_table);
evas_object_show(wd->o_preview_extra);
evas_object_show(wd->o_preview_extra_entry);
evas_object_show(wd->o_preview_size);
evas_object_show(wd->o_preview_size_entry);
evas_object_show(wd->o_preview_owner);
evas_object_show(wd->o_preview_owner_entry);
evas_object_show(wd->o_preview_perms);
evas_object_show(wd->o_preview_perms_entry);
evas_object_show(wd->o_preview_time);
evas_object_show(wd->o_preview_time_entry);
evas_object_show(wd->o_preview_properties_table);
}
#endif
static void
_e_wid_fprev_preview_fs_widgets(E_Widget_Data *wd)
{
@ -390,6 +461,13 @@ _e_wid_fprev_preview_file(E_Widget_Data *wd)
}
if (desktop) efreet_desktop_free(desktop);
}
#ifdef HAVE_EMOTION
else if (wd->mime && (eina_str_has_prefix(wd->mime, "video/")))
{
_e_wid_fprev_preview_video_widgets(wd);
is_fs = EINA_TRUE;
}
#endif
if (is_fs) return;
_e_wid_fprev_preview_file_widgets(wd);