Player: add the pause feature
When pressing F2, the scenario will be paused/played. It can help to understand complex scenarios.
This commit is contained in:
parent
3b05bf5786
commit
8206e75fb9
|
@ -32,6 +32,7 @@
|
|||
|
||||
#define PATH_ 1024
|
||||
#define IMAGE_FILENAME_EXT ".png"
|
||||
#define PAUSE_KEY_STR "F2"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
|
@ -146,6 +147,8 @@ static Eina_Bool _stabilization_timer_cb(void *);
|
|||
static double _speed = 1.0;
|
||||
|
||||
static Eina_Bool _exit_required = EINA_FALSE;
|
||||
static Eina_Bool _pause_request = EINA_FALSE;
|
||||
static Eina_Bool _playing_status = EINA_FALSE;
|
||||
|
||||
static void
|
||||
_printf(int verbose, const char *fmt, ...)
|
||||
|
@ -580,6 +583,7 @@ wdg_found:
|
|||
act, prev_act);
|
||||
}
|
||||
else fprintf(stderr, "Failed finding %s.\n", t->wdg_name);
|
||||
break;
|
||||
}
|
||||
case EXACTNESS_ACTION_STABILIZE:
|
||||
{
|
||||
|
@ -596,6 +600,7 @@ wdg_found:
|
|||
static Eina_Bool
|
||||
_feed_event_timer_cb(void *data EINA_UNUSED)
|
||||
{
|
||||
if (_pause_request) return ECORE_CALLBACK_CANCEL;
|
||||
Exactness_Action *act = eina_list_data_get(_cur_event_list);
|
||||
if (act) _feed_event(act->type, act->n_evas, act->data);
|
||||
|
||||
|
@ -644,7 +649,8 @@ _stabilization_timer_cb(void *data EINA_UNUSED)
|
|||
}
|
||||
if (!need_more)
|
||||
{
|
||||
if (_src_type != FTYPE_REMOTE)
|
||||
_playing_status = EINA_FALSE;
|
||||
if (_src_type != FTYPE_REMOTE && !_pause_request)
|
||||
{
|
||||
Exactness_Action *act = eina_list_data_get(_cur_event_list);
|
||||
_printf(2, " %s timer_time=<%f>\n", __func__, act->delay_ms / 1000.0);
|
||||
|
@ -1039,6 +1045,33 @@ _evas_del_cb(void *data EINA_UNUSED, const Efl_Event *event)
|
|||
eina_list_data_set(p, NULL);
|
||||
}
|
||||
|
||||
static void
|
||||
_event_key_cb(void *data EINA_UNUSED, const Efl_Event *event)
|
||||
{
|
||||
Efl_Input_Key *evk = event->info;
|
||||
if (!evk) return;
|
||||
const char *key = efl_input_key_name_get(evk);
|
||||
|
||||
if (!strcmp(key, PAUSE_KEY_STR) && efl_input_key_pressed_get(evk))
|
||||
{
|
||||
_pause_request = !_pause_request;
|
||||
if (_pause_request) _printf(1, "Pausing scenario\n");
|
||||
else
|
||||
{
|
||||
_printf(1, "Playing scenario\n");
|
||||
if (!_playing_status)
|
||||
_feed_event_timer_cb(NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
EFL_CALLBACKS_ARRAY_DEFINE(_evas_callbacks,
|
||||
{ EFL_EVENT_DEL, _evas_del_cb },
|
||||
{ EFL_CANVAS_SCENE_EVENT_RENDER_POST, _evas_render_post_cb },
|
||||
{ EFL_EVENT_KEY_DOWN, _event_key_cb },
|
||||
{ EFL_EVENT_KEY_UP, _event_key_cb }
|
||||
)
|
||||
|
||||
static Evas *
|
||||
_my_evas_new(int w EINA_UNUSED, int h EINA_UNUSED)
|
||||
{
|
||||
|
@ -1049,8 +1082,7 @@ _my_evas_new(int w EINA_UNUSED, int h EINA_UNUSED)
|
|||
{
|
||||
_printf(1, "New Evas\n");
|
||||
_evas_list = eina_list_append(_evas_list, e);
|
||||
efl_event_callback_add(e, EFL_EVENT_DEL, _evas_del_cb, NULL);
|
||||
efl_event_callback_add(e, EFL_CANVAS_SCENE_EVENT_RENDER_POST, _evas_render_post_cb, NULL);
|
||||
efl_event_callback_array_add(e, _evas_callbacks(), NULL);
|
||||
}
|
||||
return e;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue