Player: add the pause feature

When pressing F2, the scenario will be paused/played. It can help to
understand complex scenarios.
master
Daniel Zaoui 4 years ago
parent 3b05bf5786
commit 8206e75fb9
  1. 38
      src/bin/player.c

@ -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…
Cancel
Save