From: Sung-Jin Park Date: Wed, 28 Aug 2019 07:11:38 +0000 (+0900) Subject: pui_sample : add PUI event handlers, creates pui ani handlers @ intial time X-Git-Tag: accepted/tizen/5.5/unified/20200102.014046~27 X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Flibpui.git;a=commitdiff_plain;h=ff3e87573ea5d3483838203ea959db36a45fa382 pui_sample : add PUI event handlers, creates pui ani handlers @ intial time Change-Id: I5816552dd45acb1b745b728799ead358149229c3 Signed-off-by: Sung-Jin Park --- diff --git a/samples/PUI_sample.c b/samples/PUI_sample.c index 433e6e3..09b5a01 100644 --- a/samples/PUI_sample.c +++ b/samples/PUI_sample.c @@ -24,21 +24,27 @@ */ #include -#define NUM_ECORE_EVENT_HANDLERS 4 +#include + +#define NUM_ECORE_EVENT_HANDLERS 7 + +/* pre-requisite to use ecore_wl2 APIs */ #define EFL_BETA_API_SUPPORT #include #include #include +int gpid; + #define debug_error(msg, ...) \ do { \ - fprintf(stderr, "[ERROR][%s] " msg, __FUNCTION__, ##__VA_ARGS__); \ + fprintf(stderr, "[PUI sample][ERROR][PID:%d][%s] " msg, gpid, __FUNCTION__, ##__VA_ARGS__); \ } while(0) #define debug_info(msg, ...) \ do { \ - fprintf(stdout, "[INFO][%s] " msg, __FUNCTION__, ##__VA_ARGS__); \ + fprintf(stdout, "[PUI sample][INFO][PID:%d][%s] " msg, gpid, __FUNCTION__, ##__VA_ARGS__); \ } while(0) typedef struct _animation animation_t; @@ -53,7 +59,8 @@ typedef struct app_data app_data_t; struct app_data { pui_h ph; - pui_ani_h ani_h; + int ani_idx; + int n_animation; Ecore_Wl2_Display *ewd; Ecore_Wl2_Window *win; @@ -61,52 +68,21 @@ struct app_data static Eina_Array *_ecore_event_hdls = NULL; static animation_t ani_collection[] = { - { "processing", PUI_ANI_CMD_START, -1 }, - { "listening", PUI_ANI_CMD_START, -1 }, - { "speaking", PUI_ANI_CMD_START, -1 }, - { "streaming", PUI_ANI_CMD_START, -1 }, -#if 0 { "alarm calm", PUI_ANI_CMD_START, 1 }, { "bixby listening", PUI_ANI_CMD_START, -1 }, { "bixby speaking", PUI_ANI_CMD_START, -1 }, { "bixby_error", PUI_ANI_CMD_START, 1 }, { "blinking", PUI_ANI_CMD_START, -1 }, { "notification", PUI_ANI_CMD_START, -1 }, -#endif }; -static void -ani_stop(app_data_t *app) -{ - pui_error e = PUI_ERROR_NONE; - - debug_info("Animation(%s) will be stopped !\n", pui_ani_get_id(app->ani_h)); - - /* stop animation running already */ - e = pui_ani_control(app->ani_h, PUI_ANI_CMD_STOP, 0); - - if (PUI_ERROR_NONE != e) - { - debug_error("Failed on stopping an animation !(cmd:%d, repeat:%d)\n", PUI_ANI_CMD_STOP, 0); - return; - } -} +pui_ani_h ani_handles[sizeof(ani_collection) / sizeof(animation_t)]; static void ani_collection_play(app_data_t *app) { - static int ani_idx = 0; - int n_animation = 0; - pui_ani_h ani_h = NULL; pui_error e = PUI_ERROR_NONE; - - n_animation = sizeof(ani_collection) / sizeof(animation_t); - - if (n_animation < 0) - { - debug_error("No animation is available ! (n_animation=%d)\n", n_animation); - return; - } + pui_ani_h ani_h = NULL; if (!app->ph) { @@ -114,41 +90,28 @@ ani_collection_play(app_data_t *app) return; } - if (app->ani_h) + while (!ani_handles[app->ani_idx]) { - /* stop animation running already */ - ani_stop(app); - pui_ani_destroy(app->ani_h); - app->ani_h = NULL; - } - - ani_h = pui_ani_create(app->ph, ani_collection[ani_idx].id); - - if (!ani_h) - { - debug_error("Failed to create new PUI animation handle !\n"); - - if (++ani_idx >= n_animation) - ani_idx = 0; + app->ani_idx++; - return; + if (++app->ani_idx >= app->n_animation) + app->ani_idx = 0; } - app->ani_h = ani_h; - - debug_info("Animation(%s) will be started !\n", pui_ani_get_id(app->ani_h)); + debug_info("Animation(%s) will be started !\n", pui_ani_get_id(ani_handles[app->ani_idx])); /* play animation */ - e = pui_ani_control(app->ani_h, PUI_ANI_CMD_START, ani_collection[ani_idx].repeat); + ani_h = ani_handles[app->ani_idx]; + e = pui_ani_control(ani_h, PUI_ANI_CMD_START, ani_collection[app->ani_idx].repeat); if (PUI_ERROR_NONE != e) { - debug_error("Failed on playing an animation ! (cmd:%d, repeat:%d)\n", PUI_ANI_CMD_START, ani_collection[ani_idx].repeat); + debug_error("Failed on playing an animation ! (cmd:%d, repeat:%d)\n", PUI_ANI_CMD_START, ani_collection[app->ani_idx].repeat); return; } - if (++ani_idx >= n_animation) - ani_idx = 0; + if (++app->ani_idx >= app->n_animation) + app->ani_idx = 0; return; } @@ -202,20 +165,54 @@ _cb_visibility_change(void *data, int type EINA_UNUSED, void *event) app_data_t *app = (app_data_t *)data; Ecore_Wl2_Event_Window_Visibility_Change *ev; + (void) app; ev = event; - debug_info("Visibility change (window=0x%x, fully_obscured=%d)\n", ev->win, ev->fully_obscured); - if (ev->fully_obscured) - { - debug_info("Loose LED control !\n"); - ani_stop(app); - } - else - { - debug_info("Gain LED control !\n"); - ani_collection_play(app); - } + return ECORE_CALLBACK_PASS_ON; +} + +static Eina_Bool +_cb_ani_started(void *data, int type EINA_UNUSED, void *event) +{ + app_data_t *app = (app_data_t *)data; + PUI_Event_Animation_Status *ev; + + (void) app; + ev = event; + debug_info("[%s] ani id=%s, status=%d, window=0x%x\n", __FUNCTION__, pui_ani_get_id(ev->ani_h), ev->status, ev->win); + + return ECORE_CALLBACK_PASS_ON; +} + +static Eina_Bool +_cb_ani_stopped(void *data, int type EINA_UNUSED, void *event) +{ + app_data_t *app = (app_data_t *)data; + PUI_Event_Animation_Status *ev; + + (void) app; + ev = event; + debug_info("[%s] ani id=%s, status=%d, window=0x%x\n", __FUNCTION__, pui_ani_get_id(ev->ani_h), ev->status, ev->win); + + /* decrease animation idx for starting from stopped animation */ + app->ani_idx--; + + return ECORE_CALLBACK_PASS_ON; +} + +static Eina_Bool +_cb_ani_ready_to_start(void *data, int type EINA_UNUSED, void *event) +{ + app_data_t *app = (app_data_t *)data; + PUI_Event_Animation_Status *ev; + + (void) app; + ev = event; + debug_info("[%s] ani id=%s, status=%d, window=0x%x\n", __FUNCTION__, pui_ani_get_id(ev->ani_h), ev->status, ev->win); + + /* start animation */ + ani_collection_play(app); return ECORE_CALLBACK_PASS_ON; } @@ -237,6 +234,15 @@ event_handlers_init(app_data_t *app) h = ecore_event_handler_add(ECORE_WL2_EVENT_WINDOW_VISIBILITY_CHANGE, _cb_visibility_change, app); eina_array_push(_ecore_event_hdls, h); + + h = ecore_event_handler_add(PUI_EVENT_ANI_STARTED, _cb_ani_started, app); + eina_array_push(_ecore_event_hdls, h); + + h = ecore_event_handler_add(PUI_EVENT_ANI_STOPPED, _cb_ani_stopped, app); + eina_array_push(_ecore_event_hdls, h); + + h = ecore_event_handler_add(PUI_EVENT_ANI_READY_TO_START, _cb_ani_ready_to_start, app); + eina_array_push(_ecore_event_hdls, h); } int main() @@ -244,9 +250,11 @@ int main() app_data_t *app = NULL; const char *socket_name = NULL; + gpid = getpid(); + if (!ecore_wl2_init()) { - fprintf(stderr, "Failed to init ecore wl2 !\n"); + debug_error("Failed to init ecore wl2 !\n"); return EXIT_SUCCESS; } @@ -263,6 +271,7 @@ int main() goto err; } + app->ani_idx = 0; app->ewd = ecore_wl2_display_connect(socket_name); if (!app->ewd) @@ -298,12 +307,28 @@ int main() goto err; } + app->n_animation = sizeof(ani_collection) / sizeof(animation_t); + + for(int i=0;in_animation;i++) + { + ani_handles[i] = pui_ani_create(app->ph, ani_collection[i].id); + + if (!ani_handles[i]) + debug_error("Failed to create pui ani handle !(id:%s)\n", ani_collection[i].id); + } + event_handlers_init(app); ecore_main_loop_begin(); err: - if (app->ani_h) - pui_ani_destroy(app->ani_h); + if (app->n_animation > 0) + { + for(int i=0;in_animation;i++) + { + pui_ani_destroy(ani_handles[i]); + } + } + if (app->ph) pui_destroy(app->ph);