This example covers the entire emotion API. Use it as a reference.
#ifdef HAVE_CONFIG_H
# include "config.h"
#endif
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <Evas.h>
#include <Ecore.h>
#include <Ecore_Getopt.h>
"emotion_test",
"%prog [options] <filename>",
"1.0.0",
"(C) 2011-2014 Enlightenment",
"BSD\nThis is a 3 clause bsd bla bla",
"a simple test program for emotion.",
1,
{
}
};
typedef struct _Frame_Data Frame_Data;
struct _Frame_Data
{
unsigned char moving : 1;
unsigned char resizing : 1;
int button;
};
static void main_resize(Ecore_Evas *ee);
static Eina_Bool main_signal_exit(
void *data,
int ev_type,
void *ev);
static void main_delete_request(Ecore_Evas *ee);
static void bg_setup(void);
static void bg_key_down(
void *data,
Evas * e,
Evas_Object * obj,
void *event_info);
static Ecore_Evas *ecore_evas = NULL;
static Evas *evas = NULL;
static int startw = 800;
static int starth = 600;
static unsigned char reflex = 0;
static unsigned char loop = 0;
static unsigned char last_position_load = 0;
static const char *theme_file = NULL;
static void
main_resize(Ecore_Evas *ee)
{
bg_resize(w, h);
}
{
{
}
}
static void
{
}
void
bg_setup(void)
{
o_bg = o;
}
void
{
}
static void
broadcast_event(Emotion_Event ev)
{
}
static void
{
if (!strcmp(ev->
keyname,
"Escape"))
else if (!strcmp(ev->
keyname,
"Up"))
broadcast_event(EMOTION_EVENT_UP);
else if (!strcmp(ev->
keyname,
"Down"))
broadcast_event(EMOTION_EVENT_DOWN);
else if (!strcmp(ev->
keyname,
"Left"))
broadcast_event(EMOTION_EVENT_LEFT);
else if (!strcmp(ev->
keyname,
"Right"))
broadcast_event(EMOTION_EVENT_RIGHT);
else if (!strcmp(ev->
keyname,
"Return"))
broadcast_event(EMOTION_EVENT_SELECT);
else if (!strcmp(ev->
keyname,
"m"))
broadcast_event(EMOTION_EVENT_MENU1);
else if (!strcmp(ev->
keyname,
"Prior"))
broadcast_event(EMOTION_EVENT_PREV);
else if (!strcmp(ev->
keyname,
"Next"))
broadcast_event(EMOTION_EVENT_NEXT);
else if (!strcmp(ev->
keyname,
"0"))
broadcast_event(EMOTION_EVENT_0);
else if (!strcmp(ev->
keyname,
"1"))
broadcast_event(EMOTION_EVENT_1);
else if (!strcmp(ev->
keyname,
"2"))
broadcast_event(EMOTION_EVENT_2);
else if (!strcmp(ev->
keyname,
"3"))
broadcast_event(EMOTION_EVENT_3);
else if (!strcmp(ev->
keyname,
"4"))
broadcast_event(EMOTION_EVENT_4);
else if (!strcmp(ev->
keyname,
"5"))
broadcast_event(EMOTION_EVENT_5);
else if (!strcmp(ev->
keyname,
"6"))
broadcast_event(EMOTION_EVENT_6);
else if (!strcmp(ev->
keyname,
"7"))
broadcast_event(EMOTION_EVENT_7);
else if (!strcmp(ev->
keyname,
"8"))
broadcast_event(EMOTION_EVENT_8);
else if (!strcmp(ev->
keyname,
"9"))
broadcast_event(EMOTION_EVENT_9);
else if (!strcmp(ev->
keyname,
"-"))
broadcast_event(EMOTION_EVENT_10);
else if (!strcmp(ev->
keyname,
"v"))
{
{
else
}
}
else if (!strcmp(ev->
keyname,
"a"))
{
{
{
printf("unmute\n");
}
else
{
printf("mute\n");
}
}
}
else if (!strcmp(ev->
keyname,
"i"))
{
{
printf("audio channels: %i\n", emotion_object_audio_channel_count(o));
printf("spu channels: %i\n", emotion_object_spu_channel_count(o));
}
}
else if (!strcmp(ev->
keyname,
"f"))
{
else
}
else if (!strcmp(ev->
keyname,
"d"))
{
else
}
else if (!strcmp(ev->
keyname,
"s"))
{
{
}
else
{
}
}
else if (!strcmp(ev->
keyname,
"b"))
{
else
}
else if (!strcmp(ev->
keyname,
"q"))
{
while (video_objs)
{
printf("del obj!\n");
printf("done\n");
}
}
else if (!strcmp(ev->
keyname,
"z"))
{
vis = (vis + 1) % EMOTION_VIS_LAST;
printf("new visualization: %d\n", vis);
{
if (supported)
else
{
const char *file;
printf("object %p (%s) does not support visualization %d\n",
o, file, vis);
}
}
}
else
{
printf(
"UNHANDLED: %s\n", ev->
keyname);
}
}
static void
{
free(data);
}
static void
{
double pos, len, scale;
char buf[256];
int ph, pm, ps, pf, lh, lm, ls;
scale = (len > 0.0) ? pos / len : 0.0;
lh = len / 3600;
lm = len / 60 - (lh * 60);
ls = len - (lh * 3600) - (lm * 60);
ph = pos / 3600;
pm = pos / 60 - (ph * 60);
ps = pos - (ph * 3600) - (pm * 60);
pf = pos * 100 - (ps * 100) - (pm * 60 * 100) - (ph * 60 * 60 * 100);
snprintf(buf, sizeof(buf), "%i:%02i:%02i.%02i / %i:%02i:%02i",
ph, pm, ps, pf, lh, lm, ls);
}
static void
{
video_obj_time_changed(obj, data);
if (0)
{
double t;
static double pt = 0.0;
printf("FPS: %3.3f\n", 1.0 / (t - pt));
pt = t;
}
}
static void
{
int iw, ih;
double ratio;
oe = data;
printf("HANDLE %ix%i @ %3.3f\n", iw, ih, ratio);
if (ratio > 0.0) iw = (ih * ratio) + 0.5;
}
static void
{
printf("len change!\n");
video_obj_time_changed(obj, data);
}
static void
{
printf("pos up!\n");
video_obj_time_changed(obj, data);
}
static void
{
printf("video stopped!!!\n");
if (loop)
{
}
}
static void
{
printf("channels changed: [AUD %i][VID %i][SPU %i]\n",
emotion_object_audio_channel_count(obj),
emotion_object_spu_channel_count(obj));
}
static void
{
}
static void
{
printf("progress: \"%s\" %3.3f\n",
}
static void
{
printf("video ref to: \"%s\" %i\n",
emotion_object_ref_file_get(obj),
emotion_object_ref_num_get(obj));
}
static void
{
printf("video spu buttons to: %i\n",
emotion_object_spu_button_count_get(obj));
}
static void
{
printf("video selected spu button: %i\n",
emotion_object_spu_button_get(obj));
}
static void
{
}
static void
{
}
static void
{
}
static void
{
double len;
double x, y;
}
static void
{
double alpha;
double x, y;
char buf[256];
alpha = 255 * y;
snprintf(buf, sizeof(buf), "alpha %.0f", alpha);
}
static void
{
double vol;
char buf[256];
snprintf(buf, sizeof(buf), "vol %.2f", vol);
}
static void
{
Frame_Data *fd;
if (!fd) return;
fd->moving = 1;
fd->x = x;
fd->y = y;
}
static void
{
Frame_Data *fd;
if (!fd) return;
fd->moving = 0;
}
static void
{
Frame_Data *fd;
if (!fd) return;
fd->resizing = 1;
fd->x = x;
fd->y = y;
}
static void
{
Frame_Data *fd;
if (!fd) return;
fd->resizing = 0;
}
static void
{
Frame_Data *fd;
if (!fd) return;
if (fd->moving)
{
fd->x = x;
fd->y = y;
}
else if (fd->resizing)
{
fd->x = x;
fd->y = y;
}
}
static void
init_video_object(const char *module_filename, const char *filename)
{
Frame_Data *fd;
if ((module_filename) && (!emotion_object_init(o, module_filename)))
return;
return;
if (last_position_load)
fd = calloc(1, sizeof(Frame_Data));
if (!fd) exit(1);
if (reflex)
else
}
int
main(int argc, char **argv)
{
int args;
char *engine = NULL;
char *backend = NULL;
unsigned char help = 0;
unsigned char engines_listed = 0;
};
return -1;
goto shutdown_ecore_evas;
struct stat st;
if (stat(PACKAGE_BUILD_DIR"/src/tests/emotion/data/theme.edj", &st) == 0)
theme_file = PACKAGE_BUILD_DIR"/src/tests/emotion/data/theme.edj";
else if (stat(PACKAGE_DATA_DIR"/data/theme.edj", &st) == 0)
theme_file = PACKAGE_DATA_DIR"/data/theme.edj";
else
{
printf("Cannot find the theme file\n");
goto shutdown_edje;
}
printf("theme file: %s\n", theme_file);
if (args < 0) goto shutdown_edje;
else if (help) goto shutdown_edje;
else if (engines_listed) goto shutdown_edje;
else if ((args == argc) && (!webcams))
{
printf("must provide at least one file to play!\n");
goto shutdown_edje;
}
if (geometry.
w == 0) geometry.
w = 320;
if (geometry.
h == 0) geometry.
h = 240;
vis = visual;
printf("evas engine: %s\n", engine ? engine : "<auto>");
printf("emotion backend: %s\n", backend ? backend : "<auto>");
printf("vis: %d\n", vis);
printf(
"geometry: %d %d %dx%d\n", geometry.
x, geometry.
y, geometry.
w, geometry.
h);
geometry.
w, geometry.
h, NULL);
if (!ecore_evas) goto shutdown_edje;
bg_setup();
for (; args < argc; args++)
init_video_object(backend, argv[args]);
if (webcams)
{
{
printf("Playing stream: '%s' url: '%s'\n",
}
}
main_signal_exit(NULL, 0, NULL);
return 0;
shutdown_edje:
shutdown_ecore_evas:
return -1;
}