From: Junkyeong Kim Date: Fri, 16 Mar 2018 07:16:27 +0000 (+0900) Subject: e_output: add internal API e_output_mode_change X-Git-Tag: submit/tizen/20180405.054304~3 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7a36096a00efc54e918fdf0a10a8b846897c9b44;p=platform%2Fupstream%2Fenlightenment.git e_output: add internal API e_output_mode_change Change-Id: Id2f9756c6ff94df6479cbe32188b340ed3a791fe Signed-off-by: Junkyeong Kim --- diff --git a/src/bin/e_output.c b/src/bin/e_output.c index 3d21e7b..f6a07c9 100644 --- a/src/bin/e_output.c +++ b/src/bin/e_output.c @@ -2358,6 +2358,65 @@ e_output_mode_apply(E_Output *output, E_Output_Mode *mode) } EINTERN Eina_Bool +e_output_mode_change(E_Output *output, E_Output_Mode *mode) +{ + E_Output *primary_output = NULL; + E_Output_Mode *emode = NULL; + Eina_List *l; + Eina_Bool found = EINA_FALSE; + int w, h; + + EINA_SAFETY_ON_NULL_RETURN_VAL(output, EINA_FALSE); + EINA_SAFETY_ON_NULL_RETURN_VAL(mode, EINA_FALSE); + + /* support only primay output */ + primary_output = e_comp_screen_primary_output_get(e_comp->e_comp_screen); + EINA_SAFETY_ON_NULL_RETURN_VAL(primary_output, EINA_FALSE); + EINA_SAFETY_ON_FALSE_RETURN_VAL(output == primary_output, EINA_FALSE); + + if (e_output_connected(output) != EINA_TRUE) + return EINA_FALSE; + + EINA_LIST_FOREACH(output->info.modes, l, emode) + { + if (mode == emode) + { + found = EINA_TRUE; + break; + } + } + EINA_SAFETY_ON_FALSE_RETURN_VAL(found == EINA_TRUE, EINA_FALSE); + + e_comp_canvas_norender_push(); + + if (e_output_mode_apply(output, mode) == EINA_FALSE) + { + ERR("fail to e_output_mode_apply."); + return EINA_FALSE; + } + + e_output_size_get(output, &w, &h); + if (w == e_comp->w && h == e_comp->h) + { + _e_output_render_update(output); + e_comp_canvas_norender_pop(); + return EINA_TRUE; + } + + ecore_evas_resize(e_comp->ee, mode->w, mode->h); + e_comp->w = mode->w; + e_comp->h = mode->h; + + ecore_event_add(E_EVENT_SCREEN_CHANGE, NULL, NULL, NULL); + + _e_output_client_resize(e_comp->w, e_comp->h); + + e_comp_canvas_norender_pop(); + + return EINA_TRUE; +} + +EINTERN Eina_Bool e_output_setup(E_Output *output) { E_Output_Hwc *output_hwc = NULL; diff --git a/src/bin/e_output.h b/src/bin/e_output.h index d65ce64..e1cb2e7 100644 --- a/src/bin/e_output.h +++ b/src/bin/e_output.h @@ -169,6 +169,7 @@ EINTERN void e_output_del(E_Output *output); EINTERN Eina_Bool e_output_rotate(E_Output *output, int rotate); EINTERN Eina_Bool e_output_update(E_Output *output); EINTERN Eina_Bool e_output_mode_apply(E_Output *output, E_Output_Mode *mode); +EINTERN Eina_Bool e_output_mode_change(E_Output *output, E_Output_Mode *mode); EINTERN Eina_Bool e_output_commit(E_Output *output); EINTERN Eina_Bool e_output_render(E_Output *output); EINTERN Eina_Bool e_output_setup(E_Output *output);