881 lines
28 KiB
C
881 lines
28 KiB
C
#ifdef HAVE_CONFIG_H
|
|
# include <config.h>
|
|
#endif
|
|
|
|
#include <stdio.h>
|
|
#include <limits.h>
|
|
#include <sys/types.h>
|
|
#include <sys/stat.h>
|
|
#include <unistd.h>
|
|
|
|
#include <Eina.h>
|
|
#include <Eet.h>
|
|
#include <Evas.h>
|
|
|
|
#include "Exactness.h"
|
|
|
|
#define CACHE_FILE_ENTRY "cache"
|
|
|
|
enum _Tsuite_Event_Type
|
|
{ /* Add any supported events here */
|
|
TSUITE_EVENT_NOT_SUPPORTED = 0,
|
|
TSUITE_EVENT_MOUSE_IN,
|
|
TSUITE_EVENT_MOUSE_OUT,
|
|
TSUITE_EVENT_MOUSE_DOWN,
|
|
TSUITE_EVENT_MOUSE_UP,
|
|
TSUITE_EVENT_MOUSE_MOVE,
|
|
TSUITE_EVENT_MOUSE_WHEEL,
|
|
TSUITE_EVENT_MULTI_DOWN,
|
|
TSUITE_EVENT_MULTI_UP,
|
|
TSUITE_EVENT_MULTI_MOVE,
|
|
TSUITE_EVENT_KEY_DOWN,
|
|
TSUITE_EVENT_KEY_UP,
|
|
TSUITE_EVENT_KEY_DOWN_WITH_KEYCODE,
|
|
TSUITE_EVENT_KEY_UP_WITH_KEYCODE,
|
|
TSUITE_EVENT_TAKE_SHOT
|
|
};
|
|
typedef enum _Tsuite_Event_Type Tsuite_Event_Type;
|
|
|
|
struct _eet_event_type_mapping
|
|
{
|
|
Tsuite_Event_Type t;
|
|
const char *name;
|
|
};
|
|
typedef struct _eet_event_type_mapping eet_event_type_mapping;
|
|
|
|
struct _Variant_Type_st
|
|
{
|
|
const char *type;
|
|
Eina_Bool unknow : 1;
|
|
};
|
|
typedef struct _Variant_Type_st Variant_Type_st;
|
|
|
|
struct _Variant_st
|
|
{
|
|
Variant_Type_st t;
|
|
void *data; /* differently than the union type, we
|
|
* don't need to pre-allocate the memory
|
|
* for the field*/
|
|
};
|
|
typedef struct _Variant_st Variant_st;
|
|
|
|
struct _Timer_Data
|
|
{
|
|
unsigned int recent_event_time;
|
|
Eina_List *current_event;
|
|
};
|
|
typedef struct _Timer_Data Timer_Data;
|
|
|
|
struct _Tsuite_Data
|
|
{
|
|
int serial; /**< Serial number of current-file */
|
|
Timer_Data *td;
|
|
};
|
|
typedef struct _Tsuite_Data Tsuite_Data;
|
|
|
|
struct _mouse_in_mouse_out
|
|
{
|
|
unsigned int timestamp;
|
|
int n_evas;
|
|
};
|
|
|
|
struct _mouse_down_mouse_up
|
|
{
|
|
int b;
|
|
Evas_Button_Flags flags;
|
|
unsigned int timestamp;
|
|
int n_evas;
|
|
};
|
|
|
|
struct _mouse_move
|
|
{
|
|
int x;
|
|
int y;
|
|
unsigned int timestamp;
|
|
int n_evas;
|
|
};
|
|
|
|
struct _mouse_wheel
|
|
{
|
|
int direction;
|
|
int z;
|
|
unsigned int timestamp;
|
|
int n_evas;
|
|
};
|
|
|
|
struct _key_down_key_up
|
|
{
|
|
unsigned int timestamp;
|
|
const char *keyname;
|
|
const char *key;
|
|
const char *string;
|
|
const char *compose;
|
|
int n_evas;
|
|
};
|
|
|
|
struct _key_down_key_up_with_keycode
|
|
{
|
|
unsigned int timestamp;
|
|
const char *keyname;
|
|
const char *key;
|
|
const char *string;
|
|
const char *compose;
|
|
int n_evas;
|
|
unsigned int keycode;
|
|
};
|
|
|
|
struct _multi_event
|
|
{
|
|
int d;
|
|
int b; /* In case of simple mouse down/up, corresponds to the button */
|
|
int x;
|
|
int y;
|
|
double rad;
|
|
double radx;
|
|
double rady;
|
|
double pres;
|
|
double ang;
|
|
double fx;
|
|
double fy;
|
|
Evas_Button_Flags flags;
|
|
unsigned int timestamp;
|
|
int n_evas;
|
|
};
|
|
|
|
struct _multi_move
|
|
{
|
|
int d;
|
|
int x;
|
|
int y;
|
|
double rad;
|
|
double radx;
|
|
double rady;
|
|
double pres;
|
|
double ang;
|
|
double fx;
|
|
double fy;
|
|
unsigned int timestamp;
|
|
int n_evas;
|
|
};
|
|
|
|
typedef struct _mouse_in_mouse_out mouse_in_mouse_out;
|
|
typedef struct _mouse_down_mouse_up mouse_down_mouse_up;
|
|
typedef struct _mouse_move mouse_move;
|
|
typedef struct _mouse_wheel mouse_wheel;
|
|
typedef struct _multi_event multi_event;
|
|
typedef struct _multi_move multi_move;
|
|
typedef struct _key_down_key_up key_down_key_up;
|
|
typedef struct _key_down_key_up_with_keycode key_down_key_up_with_keycode;
|
|
typedef struct _mouse_in_mouse_out take_screenshot;
|
|
|
|
/* START - EET support typedefs */
|
|
#define TSUITE_EVENT_MOUSE_IN_STR "tsuite_event_mouse_in"
|
|
#define TSUITE_EVENT_MOUSE_OUT_STR "tsuite_event_mouse_out"
|
|
#define TSUITE_EVENT_MOUSE_DOWN_STR "tsuite_event_mouse_down"
|
|
#define TSUITE_EVENT_MOUSE_UP_STR "tsuite_event_mouse_up"
|
|
#define TSUITE_EVENT_MOUSE_MOVE_STR "tsuite_event_mouse_move"
|
|
#define TSUITE_EVENT_MOUSE_WHEEL_STR "tsuite_event_mouse_wheel"
|
|
#define TSUITE_EVENT_MULTI_DOWN_STR "tsuite_event_multi_down"
|
|
#define TSUITE_EVENT_MULTI_UP_STR "tsuite_event_multi_up"
|
|
#define TSUITE_EVENT_MULTI_MOVE_STR "tsuite_event_multi_move"
|
|
#define TSUITE_EVENT_KEY_DOWN_STR "tsuite_event_key_down"
|
|
#define TSUITE_EVENT_KEY_UP_STR "tsuite_event_key_up"
|
|
#define TSUITE_EVENT_KEY_DOWN_WITH_KEYCODE_STR "tsuite_event_key_down_with_keycode"
|
|
#define TSUITE_EVENT_KEY_UP_WITH_KEYCODE_STR "tsuite_event_key_up_with_keycode"
|
|
#define TSUITE_EVENT_TAKE_SHOT_STR "tsuite_event_take_shot"
|
|
|
|
struct _Lists_st
|
|
{
|
|
Eina_List *variant_list;
|
|
unsigned int first_timestamp;
|
|
};
|
|
typedef struct _Lists_st Lists_st;
|
|
|
|
struct _data_desc
|
|
{
|
|
Eet_Data_Descriptor *take_screenshot;
|
|
Eet_Data_Descriptor *mouse_in_mouse_out;
|
|
Eet_Data_Descriptor *mouse_down_mouse_up;
|
|
Eet_Data_Descriptor *mouse_move;
|
|
Eet_Data_Descriptor *mouse_wheel;
|
|
Eet_Data_Descriptor *multi_event;
|
|
Eet_Data_Descriptor *multi_move;
|
|
Eet_Data_Descriptor *key_down_key_up;
|
|
Eet_Data_Descriptor *key_down_key_up_with_keycode;
|
|
|
|
/* list, variant EET desc support */
|
|
Eet_Data_Descriptor *lists_descriptor;
|
|
Eet_Data_Descriptor *variant_descriptor;
|
|
Eet_Data_Descriptor *variant_unified_descriptor;
|
|
};
|
|
typedef struct _data_desc data_desc;
|
|
/* END - EET support typedefs */
|
|
|
|
static data_desc *_desc = NULL; /* this struct holds descs (alloc on init) */
|
|
|
|
static eet_event_type_mapping eet_mapping[] = {
|
|
{ TSUITE_EVENT_MOUSE_IN, TSUITE_EVENT_MOUSE_IN_STR },
|
|
{ TSUITE_EVENT_MOUSE_OUT, TSUITE_EVENT_MOUSE_OUT_STR },
|
|
{ TSUITE_EVENT_MOUSE_DOWN, TSUITE_EVENT_MOUSE_DOWN_STR },
|
|
{ TSUITE_EVENT_MOUSE_UP, TSUITE_EVENT_MOUSE_UP_STR },
|
|
{ TSUITE_EVENT_MOUSE_MOVE, TSUITE_EVENT_MOUSE_MOVE_STR },
|
|
{ TSUITE_EVENT_MOUSE_WHEEL, TSUITE_EVENT_MOUSE_WHEEL_STR },
|
|
{ TSUITE_EVENT_MULTI_DOWN, TSUITE_EVENT_MULTI_DOWN_STR },
|
|
{ TSUITE_EVENT_MULTI_UP, TSUITE_EVENT_MULTI_UP_STR },
|
|
{ TSUITE_EVENT_MULTI_MOVE, TSUITE_EVENT_MULTI_MOVE_STR },
|
|
{ TSUITE_EVENT_KEY_DOWN, TSUITE_EVENT_KEY_DOWN_STR },
|
|
{ TSUITE_EVENT_KEY_UP, TSUITE_EVENT_KEY_UP_STR },
|
|
{ TSUITE_EVENT_KEY_DOWN_WITH_KEYCODE, TSUITE_EVENT_KEY_DOWN_WITH_KEYCODE_STR },
|
|
{ TSUITE_EVENT_KEY_UP_WITH_KEYCODE, TSUITE_EVENT_KEY_UP_WITH_KEYCODE_STR },
|
|
{ TSUITE_EVENT_TAKE_SHOT, TSUITE_EVENT_TAKE_SHOT_STR },
|
|
{ TSUITE_EVENT_NOT_SUPPORTED, NULL }
|
|
};
|
|
|
|
static Tsuite_Event_Type
|
|
_event_mapping_type_get(const char *name)
|
|
{
|
|
int i;
|
|
for (i = 0; eet_mapping[i].name != NULL; ++i)
|
|
if (strcmp(name, eet_mapping[i].name) == 0)
|
|
return eet_mapping[i].t;
|
|
|
|
return TSUITE_EVENT_NOT_SUPPORTED;
|
|
}
|
|
|
|
static unsigned int
|
|
_evt_time_get(unsigned int tm, Variant_st *v)
|
|
{
|
|
if (!v) return tm;
|
|
switch(_event_mapping_type_get(v->t.type))
|
|
{
|
|
case TSUITE_EVENT_MOUSE_IN:
|
|
{
|
|
mouse_in_mouse_out *t = v->data;
|
|
return t->timestamp;
|
|
}
|
|
case TSUITE_EVENT_MOUSE_OUT:
|
|
{
|
|
mouse_in_mouse_out *t = v->data;
|
|
return t->timestamp;
|
|
}
|
|
case TSUITE_EVENT_MOUSE_DOWN:
|
|
{
|
|
mouse_down_mouse_up *t = v->data;
|
|
return t->timestamp;
|
|
}
|
|
case TSUITE_EVENT_MOUSE_UP:
|
|
{
|
|
mouse_down_mouse_up *t = v->data;
|
|
return t->timestamp;
|
|
}
|
|
case TSUITE_EVENT_MOUSE_MOVE:
|
|
{
|
|
mouse_move *t = v->data;
|
|
return t->timestamp;
|
|
}
|
|
case TSUITE_EVENT_MOUSE_WHEEL:
|
|
{
|
|
mouse_wheel *t = v->data;
|
|
return t->timestamp;
|
|
}
|
|
case TSUITE_EVENT_MULTI_DOWN:
|
|
{
|
|
multi_event *t = v->data;
|
|
return t->timestamp;
|
|
}
|
|
case TSUITE_EVENT_MULTI_UP:
|
|
{
|
|
multi_event *t = v->data;
|
|
return t->timestamp;
|
|
}
|
|
case TSUITE_EVENT_MULTI_MOVE:
|
|
{
|
|
multi_move *t = v->data;
|
|
return t->timestamp;
|
|
}
|
|
case TSUITE_EVENT_KEY_DOWN:
|
|
{
|
|
key_down_key_up *t = v->data;
|
|
return t->timestamp;
|
|
}
|
|
case TSUITE_EVENT_KEY_UP:
|
|
{
|
|
key_down_key_up *t = v->data;
|
|
return t->timestamp;
|
|
}
|
|
case TSUITE_EVENT_KEY_DOWN_WITH_KEYCODE:
|
|
{
|
|
key_down_key_up_with_keycode *t = v->data;
|
|
return t->timestamp;
|
|
}
|
|
case TSUITE_EVENT_KEY_UP_WITH_KEYCODE:
|
|
{
|
|
key_down_key_up_with_keycode *t = v->data;
|
|
return t->timestamp;
|
|
}
|
|
case TSUITE_EVENT_TAKE_SHOT:
|
|
{
|
|
take_screenshot *t = v->data;
|
|
return t->timestamp;
|
|
}
|
|
default: /* All non-input events are not handeled */
|
|
return tm;
|
|
break;
|
|
}
|
|
}
|
|
|
|
static Lists_st *
|
|
_free_events(Lists_st *st)
|
|
{
|
|
Variant_st *v;
|
|
if (!st) goto end;
|
|
EINA_LIST_FREE(st->variant_list, v)
|
|
{
|
|
free(v->data);
|
|
free(v);
|
|
}
|
|
|
|
free(st); /* Allocated when reading data from EET file */
|
|
end:
|
|
return NULL;
|
|
}
|
|
|
|
static const char *
|
|
_variant_type_get(const void *data, Eina_Bool *unknow)
|
|
{
|
|
const Variant_Type_st *type = data;
|
|
int i;
|
|
|
|
if (unknow)
|
|
*unknow = type->unknow;
|
|
|
|
for (i = 0; eet_mapping[i].name != NULL; ++i)
|
|
if (strcmp(type->type, eet_mapping[i].name) == 0)
|
|
return eet_mapping[i].name;
|
|
|
|
if (unknow)
|
|
*unknow = EINA_FALSE;
|
|
|
|
return type->type;
|
|
} /* _variant_type_get */
|
|
|
|
static Eina_Bool
|
|
_variant_type_set(const char *type,
|
|
void *data,
|
|
Eina_Bool unknow)
|
|
{
|
|
Variant_Type_st *vt = data;
|
|
|
|
vt->type = type;
|
|
vt->unknow = unknow;
|
|
return EINA_TRUE;
|
|
} /* _variant_type_set */
|
|
|
|
/* START Event struct descriptors */
|
|
static Eet_Data_Descriptor *
|
|
_take_screenshot_desc_make(void)
|
|
{
|
|
Eet_Data_Descriptor_Class eddc;
|
|
Eet_Data_Descriptor *_d;
|
|
EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, take_screenshot);
|
|
_d = eet_data_descriptor_stream_new(&eddc);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, take_screenshot, "timestamp",
|
|
timestamp, EET_T_UINT);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, take_screenshot, "n_evas",
|
|
n_evas, EET_T_INT);
|
|
|
|
return _d;
|
|
}
|
|
|
|
static Eet_Data_Descriptor *
|
|
_mouse_in_mouse_out_desc_make(void)
|
|
{
|
|
Eet_Data_Descriptor_Class eddc;
|
|
Eet_Data_Descriptor *_d;
|
|
EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, mouse_in_mouse_out);
|
|
_d = eet_data_descriptor_stream_new(&eddc);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, mouse_in_mouse_out, "timestamp",
|
|
timestamp, EET_T_UINT);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, mouse_in_mouse_out, "n_evas",
|
|
n_evas, EET_T_INT);
|
|
|
|
return _d;
|
|
}
|
|
|
|
static Eet_Data_Descriptor *
|
|
_mouse_down_mouse_up_desc_make(void)
|
|
{
|
|
Eet_Data_Descriptor_Class eddc;
|
|
Eet_Data_Descriptor *_d;
|
|
EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, mouse_down_mouse_up);
|
|
_d = eet_data_descriptor_stream_new(&eddc);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, mouse_down_mouse_up, "b", b, EET_T_INT);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, mouse_down_mouse_up, "flags",
|
|
flags, EET_T_INT);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, mouse_down_mouse_up, "timestamp",
|
|
timestamp, EET_T_UINT);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, mouse_down_mouse_up, "n_evas",
|
|
n_evas, EET_T_INT);
|
|
|
|
return _d;
|
|
}
|
|
|
|
static Eet_Data_Descriptor *
|
|
_mouse_move_desc_make(void)
|
|
{
|
|
Eet_Data_Descriptor_Class eddc;
|
|
Eet_Data_Descriptor *_d;
|
|
EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, mouse_move);
|
|
_d = eet_data_descriptor_stream_new(&eddc);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, mouse_move, "x", x, EET_T_INT);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, mouse_move, "y", y, EET_T_INT);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, mouse_move, "timestamp",
|
|
timestamp, EET_T_UINT);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, mouse_move, "n_evas",
|
|
n_evas, EET_T_INT);
|
|
|
|
return _d;
|
|
}
|
|
|
|
static Eet_Data_Descriptor *
|
|
_mouse_wheel_desc_make(void)
|
|
{
|
|
Eet_Data_Descriptor_Class eddc;
|
|
Eet_Data_Descriptor *_d;
|
|
EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, mouse_wheel);
|
|
_d = eet_data_descriptor_stream_new(&eddc);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, mouse_wheel, "direction",
|
|
direction, EET_T_INT);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, mouse_wheel, "z", z, EET_T_INT);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, mouse_wheel, "timestamp",
|
|
timestamp, EET_T_UINT);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, mouse_wheel, "n_evas",
|
|
n_evas, EET_T_INT);
|
|
|
|
return _d;
|
|
}
|
|
|
|
static Eet_Data_Descriptor *
|
|
_key_down_key_up_desc_make(void)
|
|
{
|
|
Eet_Data_Descriptor_Class eddc;
|
|
Eet_Data_Descriptor *_d;
|
|
EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, key_down_key_up);
|
|
_d = eet_data_descriptor_stream_new(&eddc);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, key_down_key_up, "timestamp",
|
|
timestamp, EET_T_UINT);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, key_down_key_up, "keyname",
|
|
keyname, EET_T_STRING);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, key_down_key_up, "key",
|
|
key, EET_T_STRING);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, key_down_key_up, "string",
|
|
string, EET_T_STRING);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, key_down_key_up, "compose",
|
|
compose, EET_T_STRING);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, key_down_key_up, "n_evas",
|
|
n_evas, EET_T_INT);
|
|
|
|
return _d;
|
|
}
|
|
|
|
static Eet_Data_Descriptor *
|
|
_key_down_key_up_with_keycode_desc_make(void)
|
|
{
|
|
Eet_Data_Descriptor_Class eddc;
|
|
Eet_Data_Descriptor *_d;
|
|
EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, key_down_key_up_with_keycode);
|
|
_d = eet_data_descriptor_stream_new(&eddc);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, key_down_key_up_with_keycode, "timestamp",
|
|
timestamp, EET_T_UINT);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, key_down_key_up_with_keycode, "keyname",
|
|
keyname, EET_T_STRING);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, key_down_key_up_with_keycode, "key",
|
|
key, EET_T_STRING);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, key_down_key_up_with_keycode, "string",
|
|
string, EET_T_STRING);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, key_down_key_up_with_keycode, "compose",
|
|
compose, EET_T_STRING);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, key_down_key_up_with_keycode, "n_evas",
|
|
n_evas, EET_T_INT);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, key_down_key_up_with_keycode, "keycode",
|
|
keycode, EET_T_INT);
|
|
|
|
return _d;
|
|
}
|
|
|
|
static Eet_Data_Descriptor *
|
|
_multi_event_desc_make(void)
|
|
{
|
|
Eet_Data_Descriptor_Class eddc;
|
|
Eet_Data_Descriptor *_d;
|
|
EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, multi_event);
|
|
_d = eet_data_descriptor_stream_new(&eddc);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, multi_event, "d", d, EET_T_UINT);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, multi_event, "b", b, EET_T_UINT);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, multi_event, "x", x, EET_T_UINT);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, multi_event, "y", y, EET_T_UINT);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, multi_event, "rad", rad, EET_T_DOUBLE);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, multi_event, "radx", radx, EET_T_DOUBLE);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, multi_event, "rady", rady, EET_T_DOUBLE);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, multi_event, "pres", pres, EET_T_DOUBLE);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, multi_event, "ang", ang, EET_T_DOUBLE);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, multi_event, "fx", fx, EET_T_DOUBLE);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, multi_event, "fy", fy, EET_T_DOUBLE);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, multi_event, "flags", flags, EET_T_INT);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, multi_event, "timestamp",
|
|
timestamp, EET_T_UINT);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, multi_event, "n_evas",
|
|
n_evas, EET_T_INT);
|
|
|
|
return _d;
|
|
}
|
|
|
|
static Eet_Data_Descriptor *
|
|
_multi_move_desc_make(void)
|
|
{
|
|
Eet_Data_Descriptor_Class eddc;
|
|
Eet_Data_Descriptor *_d;
|
|
EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, multi_move);
|
|
_d = eet_data_descriptor_stream_new(&eddc);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, multi_move, "d", d, EET_T_UINT);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, multi_move, "x", x, EET_T_UINT);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, multi_move, "y", y, EET_T_UINT);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, multi_move, "rad", rad, EET_T_DOUBLE);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, multi_move, "radx", radx, EET_T_DOUBLE);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, multi_move, "rady", rady, EET_T_DOUBLE);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, multi_move, "pres", pres, EET_T_DOUBLE);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, multi_move, "ang", ang, EET_T_DOUBLE);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, multi_move, "fx", fx, EET_T_DOUBLE);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, multi_move, "fy", fy, EET_T_DOUBLE);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, multi_move, "timestamp",
|
|
timestamp, EET_T_UINT);
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_d, multi_move, "n_evas",
|
|
n_evas, EET_T_INT);
|
|
|
|
return _d;
|
|
}
|
|
|
|
/* declaring types */
|
|
static data_desc *
|
|
_data_descriptors_init(void)
|
|
{
|
|
if (_desc) /* Was allocated */
|
|
return _desc;
|
|
|
|
_desc = calloc(1, sizeof(data_desc));
|
|
|
|
Eet_Data_Descriptor_Class eddc;
|
|
|
|
EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Lists_st);
|
|
_desc->lists_descriptor = eet_data_descriptor_file_new(&eddc);
|
|
|
|
_desc->take_screenshot = _take_screenshot_desc_make();
|
|
_desc->mouse_in_mouse_out = _mouse_in_mouse_out_desc_make();
|
|
_desc->mouse_down_mouse_up = _mouse_down_mouse_up_desc_make();
|
|
_desc->mouse_move = _mouse_move_desc_make();
|
|
_desc->mouse_wheel = _mouse_wheel_desc_make();
|
|
_desc->multi_event = _multi_event_desc_make();
|
|
_desc->multi_move = _multi_move_desc_make();
|
|
_desc->key_down_key_up = _key_down_key_up_desc_make();
|
|
_desc->key_down_key_up_with_keycode = _key_down_key_up_with_keycode_desc_make();
|
|
|
|
/* for variant */
|
|
EET_EINA_FILE_DATA_DESCRIPTOR_CLASS_SET(&eddc, Variant_st);
|
|
_desc->variant_descriptor = eet_data_descriptor_file_new(&eddc);
|
|
|
|
eddc.version = EET_DATA_DESCRIPTOR_CLASS_VERSION;
|
|
eddc.func.type_get = _variant_type_get;
|
|
eddc.func.type_set = _variant_type_set;
|
|
_desc->variant_unified_descriptor = eet_data_descriptor_stream_new(&eddc);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_MAPPING(_desc->variant_unified_descriptor,
|
|
TSUITE_EVENT_MOUSE_IN_STR, _desc->mouse_in_mouse_out);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_MAPPING(_desc->variant_unified_descriptor,
|
|
TSUITE_EVENT_MOUSE_OUT_STR, _desc->mouse_in_mouse_out);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_MAPPING(_desc->variant_unified_descriptor,
|
|
TSUITE_EVENT_MOUSE_DOWN_STR, _desc->mouse_down_mouse_up);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_MAPPING(_desc->variant_unified_descriptor,
|
|
TSUITE_EVENT_MOUSE_UP_STR, _desc->mouse_down_mouse_up);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_MAPPING(_desc->variant_unified_descriptor,
|
|
TSUITE_EVENT_MOUSE_MOVE_STR, _desc->mouse_move);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_MAPPING(_desc->variant_unified_descriptor,
|
|
TSUITE_EVENT_MOUSE_WHEEL_STR, _desc->mouse_wheel);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_MAPPING(_desc->variant_unified_descriptor,
|
|
TSUITE_EVENT_MULTI_DOWN_STR, _desc->multi_event);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_MAPPING(_desc->variant_unified_descriptor,
|
|
TSUITE_EVENT_MULTI_UP_STR, _desc->multi_event);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_MAPPING(_desc->variant_unified_descriptor,
|
|
TSUITE_EVENT_MULTI_MOVE_STR, _desc->multi_move);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_MAPPING(_desc->variant_unified_descriptor,
|
|
TSUITE_EVENT_KEY_DOWN_STR, _desc->key_down_key_up);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_MAPPING(_desc->variant_unified_descriptor,
|
|
TSUITE_EVENT_KEY_UP_STR, _desc->key_down_key_up);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_MAPPING(_desc->variant_unified_descriptor,
|
|
TSUITE_EVENT_KEY_DOWN_WITH_KEYCODE_STR, _desc->key_down_key_up_with_keycode);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_MAPPING(_desc->variant_unified_descriptor,
|
|
TSUITE_EVENT_KEY_UP_WITH_KEYCODE_STR, _desc->key_down_key_up_with_keycode);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_MAPPING(_desc->variant_unified_descriptor,
|
|
TSUITE_EVENT_TAKE_SHOT_STR, _desc->take_screenshot);
|
|
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_VARIANT(_desc->variant_descriptor,
|
|
Variant_st, "data", data, t, _desc->variant_unified_descriptor);
|
|
|
|
EET_DATA_DESCRIPTOR_ADD_BASIC(_desc->lists_descriptor,
|
|
Lists_st, "first_timestamp", first_timestamp, EET_T_UINT);
|
|
EET_DATA_DESCRIPTOR_ADD_LIST(_desc->lists_descriptor,
|
|
Lists_st, "variant_list", variant_list, _desc->variant_descriptor);
|
|
|
|
return _desc;
|
|
}
|
|
|
|
static void
|
|
_data_descriptors_shutdown(void)
|
|
{
|
|
if (_desc)
|
|
{
|
|
eet_data_descriptor_free(_desc->mouse_in_mouse_out);
|
|
eet_data_descriptor_free(_desc->mouse_down_mouse_up);
|
|
eet_data_descriptor_free(_desc->mouse_move);
|
|
eet_data_descriptor_free(_desc->mouse_wheel);
|
|
eet_data_descriptor_free(_desc->multi_event);
|
|
eet_data_descriptor_free(_desc->multi_move);
|
|
eet_data_descriptor_free(_desc->key_down_key_up);
|
|
eet_data_descriptor_free(_desc->key_down_key_up_with_keycode);
|
|
eet_data_descriptor_free(_desc->take_screenshot);
|
|
eet_data_descriptor_free(_desc->lists_descriptor);
|
|
eet_data_descriptor_free(_desc->variant_descriptor);
|
|
eet_data_descriptor_free(_desc->variant_unified_descriptor);
|
|
|
|
free(_desc);
|
|
_desc = NULL;
|
|
/* FIXME: Should probably only init and shutdown once */
|
|
}
|
|
}
|
|
|
|
EAPI Exactness_Unit *
|
|
legacy_rec_file_read(const char *filename)
|
|
{
|
|
Lists_st *vr_list;
|
|
Eina_List *itr;
|
|
Variant_st *v, *prev_v = NULL;
|
|
Exactness_Unit *unit = NULL;
|
|
Eet_File *fp = eet_open(filename, EET_FILE_MODE_READ);
|
|
if (!fp)
|
|
{
|
|
printf("Failed to open input file <%s>.\n", filename);
|
|
return NULL;
|
|
}
|
|
|
|
/* Read events list */
|
|
_data_descriptors_init();
|
|
vr_list = eet_data_read(fp, _desc->lists_descriptor, CACHE_FILE_ENTRY);
|
|
eet_close(fp);
|
|
_data_descriptors_shutdown();
|
|
|
|
unit = calloc(1, sizeof(*unit));
|
|
|
|
EINA_LIST_FOREACH(vr_list->variant_list, itr, v)
|
|
{
|
|
Exactness_Action *act = calloc(1, sizeof(*act));
|
|
Tsuite_Event_Type old_type = _event_mapping_type_get(v->t.type);
|
|
unsigned int vtm = _evt_time_get(0, v);
|
|
if (!vtm) continue;
|
|
switch (old_type)
|
|
{
|
|
case TSUITE_EVENT_MOUSE_IN:
|
|
{
|
|
mouse_in_mouse_out *d_i = v->data;
|
|
act->type = EXACTNESS_ACTION_MOUSE_IN;
|
|
act->n_evas = d_i->n_evas;
|
|
break;
|
|
}
|
|
case TSUITE_EVENT_MOUSE_OUT:
|
|
{
|
|
mouse_in_mouse_out *d_i = v->data;
|
|
act->type = EXACTNESS_ACTION_MOUSE_OUT;
|
|
act->n_evas = d_i->n_evas;
|
|
break;
|
|
}
|
|
case TSUITE_EVENT_MOUSE_DOWN:
|
|
case TSUITE_EVENT_MOUSE_UP:
|
|
{
|
|
mouse_down_mouse_up *d_i = v->data;
|
|
Exactness_Action_Multi_Event *d_o = calloc(1, sizeof(*d_o));
|
|
d_o->b = d_i->b;
|
|
d_o->flags = d_i->flags;
|
|
if (old_type == TSUITE_EVENT_MOUSE_DOWN)
|
|
act->type = EXACTNESS_ACTION_MULTI_DOWN;
|
|
else
|
|
act->type = EXACTNESS_ACTION_MULTI_UP;
|
|
act->n_evas = d_i->n_evas;
|
|
act->data = d_o;
|
|
break;
|
|
}
|
|
case TSUITE_EVENT_MOUSE_MOVE:
|
|
{
|
|
mouse_move *d_i = v->data;
|
|
Exactness_Action_Multi_Move *d_o = calloc(1, sizeof(*d_o));
|
|
d_o->x = d_i->x;
|
|
d_o->y = d_i->y;
|
|
act->type = EXACTNESS_ACTION_MULTI_MOVE;
|
|
act->n_evas = d_i->n_evas;
|
|
act->data = d_o;
|
|
break;
|
|
}
|
|
case TSUITE_EVENT_MOUSE_WHEEL:
|
|
{
|
|
mouse_wheel *d_i = v->data;
|
|
Exactness_Action_Mouse_Wheel *d_o = calloc(1, sizeof(*d_o));
|
|
d_o->direction = d_i->direction;
|
|
d_o->z = d_i->z;
|
|
act->type = EXACTNESS_ACTION_MOUSE_WHEEL;
|
|
act->n_evas = d_i->n_evas;
|
|
act->data = d_o;
|
|
break;
|
|
}
|
|
case TSUITE_EVENT_MULTI_DOWN:
|
|
case TSUITE_EVENT_MULTI_UP:
|
|
{
|
|
multi_event *d_i = v->data;
|
|
Exactness_Action_Multi_Event *d_o = calloc(1, sizeof(*d_o));
|
|
d_o->d = d_i->d;
|
|
d_o->b = d_i->b;
|
|
d_o->x = d_i->x;
|
|
d_o->y = d_i->y;
|
|
d_o->rad = d_i->rad;
|
|
d_o->radx = d_i->radx;
|
|
d_o->rady = d_i->rady;
|
|
d_o->pres = d_i->pres;
|
|
d_o->ang = d_i->ang;
|
|
d_o->fx = d_i->fx;
|
|
d_o->fy = d_i->fy;
|
|
d_o->flags = d_i->flags;
|
|
if (old_type == TSUITE_EVENT_MULTI_DOWN)
|
|
act->type = EXACTNESS_ACTION_MULTI_DOWN;
|
|
else
|
|
act->type = EXACTNESS_ACTION_MULTI_UP;
|
|
act->n_evas = d_i->n_evas;
|
|
act->data = d_o;
|
|
break;
|
|
}
|
|
case TSUITE_EVENT_MULTI_MOVE:
|
|
{
|
|
multi_move *d_i = v->data;
|
|
Exactness_Action_Multi_Move *d_o = calloc(1, sizeof(*d_o));
|
|
d_o->d = d_i->d;
|
|
d_o->x = d_i->x;
|
|
d_o->y = d_i->y;
|
|
d_o->rad = d_i->rad;
|
|
d_o->radx = d_i->radx;
|
|
d_o->rady = d_i->rady;
|
|
d_o->pres = d_i->pres;
|
|
d_o->ang = d_i->ang;
|
|
d_o->fx = d_i->fx;
|
|
d_o->fy = d_i->fy;
|
|
act->type = EXACTNESS_ACTION_MULTI_MOVE;
|
|
act->n_evas = d_i->n_evas;
|
|
act->data = d_o;
|
|
break;
|
|
}
|
|
case TSUITE_EVENT_KEY_DOWN:
|
|
case TSUITE_EVENT_KEY_UP:
|
|
{
|
|
key_down_key_up *d_i = v->data;
|
|
Exactness_Action_Key_Down_Up *d_o = calloc(1, sizeof(*d_o));
|
|
d_o->keyname = d_i->keyname;
|
|
d_o->key = d_i->key;
|
|
d_o->string = d_i->string;
|
|
d_o->compose = d_i->compose;
|
|
if (old_type == TSUITE_EVENT_KEY_DOWN)
|
|
act->type = EXACTNESS_ACTION_KEY_DOWN;
|
|
else
|
|
act->type = EXACTNESS_ACTION_KEY_UP;
|
|
act->n_evas = d_i->n_evas;
|
|
act->data = d_o;
|
|
break;
|
|
}
|
|
case TSUITE_EVENT_KEY_DOWN_WITH_KEYCODE:
|
|
case TSUITE_EVENT_KEY_UP_WITH_KEYCODE:
|
|
{
|
|
key_down_key_up_with_keycode *d_i = v->data;
|
|
Exactness_Action_Key_Down_Up *d_o = calloc(1, sizeof(*d_o));
|
|
d_o->keyname = d_i->keyname;
|
|
d_o->key = d_i->key;
|
|
d_o->string = d_i->string;
|
|
d_o->compose = d_i->compose;
|
|
d_o->keycode = d_i->keycode;
|
|
if (old_type == TSUITE_EVENT_KEY_DOWN_WITH_KEYCODE)
|
|
act->type = EXACTNESS_ACTION_KEY_DOWN;
|
|
else
|
|
act->type = EXACTNESS_ACTION_KEY_UP;
|
|
act->n_evas = d_i->n_evas;
|
|
act->data = d_o;
|
|
break;
|
|
}
|
|
case TSUITE_EVENT_TAKE_SHOT:
|
|
{
|
|
take_screenshot *d_i = v->data;
|
|
act->type = EXACTNESS_ACTION_TAKE_SHOT;
|
|
act->n_evas = d_i->n_evas;
|
|
break;
|
|
}
|
|
default: break;
|
|
}
|
|
if (!prev_v)
|
|
{
|
|
if (vr_list->first_timestamp)
|
|
act->delay_ms = _evt_time_get(0, v) - vr_list->first_timestamp;
|
|
else
|
|
act->delay_ms = 0;
|
|
}
|
|
else
|
|
{
|
|
if (vtm > _evt_time_get(0, prev_v))
|
|
act->delay_ms = vtm - _evt_time_get(0, prev_v);
|
|
else act->delay_ms = 0;
|
|
}
|
|
unit->actions = eina_list_append(unit->actions, act);
|
|
prev_v = v;
|
|
}
|
|
#ifdef DEBUG_TSUITE
|
|
printf("%s number of actions in the scenario <%d>\n", __func__, eina_list_count(unit->actions));
|
|
#endif
|
|
_free_events(vr_list);
|
|
|
|
return unit;
|
|
}
|
|
|