jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=348bd1160986e43aa76dd712741d8dcaa1f0c6c8
commit 348bd1160986e43aa76dd712741d8dcaa1f0c6c8 Author: Jean-Philippe Andre <[email protected]> Date: Fri Dec 2 17:01:44 2016 +0900 ecore_evas/x: Fix window size when framespace != 0 This fixes the sizing of EDI. And elm_test "States 2" The sizes stored in ecore_evas are the "window content" sizes, excluding the framespace which thus must be added to all calls to ecore_x / Xlib. --- src/modules/ecore_evas/engines/x/ecore_evas_x.c | 74 +++++++++++++------------ 1 file changed, 40 insertions(+), 34 deletions(-) diff --git a/src/modules/ecore_evas/engines/x/ecore_evas_x.c b/src/modules/ecore_evas/engines/x/ecore_evas_x.c index e1eb9f7..3bafb41 100644 --- a/src/modules/ecore_evas/engines/x/ecore_evas_x.c +++ b/src/modules/ecore_evas/engines/x/ecore_evas_x.c @@ -2174,12 +2174,12 @@ _ecore_evas_x_resize(Ecore_Evas *ee, int w, int h) { Ecore_Evas_Engine_Data_X11 *edata = ee->engine.data; Eina_Bool changed = EINA_FALSE; - int fw = 0, fh = 0; + int fw = 0, fh = 0, vw = w, vh = h; evas_output_framespace_get(ee->evas, NULL, NULL, &fw, &fh); - if (ECORE_EVAS_PORTRAIT(ee)) SWAP_INT(fw, fh); - w -= fw; - h -= fh; + if (!ECORE_EVAS_PORTRAIT(ee)) SWAP_INT(fw, fh); + vw += fw; + vh += fh; if ((ee->req.w != w) || (ee->req.h != h)) { @@ -2194,7 +2194,7 @@ _ecore_evas_x_resize(Ecore_Evas *ee, int w, int h) if (!ee->prop.window) { /* the ecore_evas was resized. we need to free the back pixmap */ - if ((edata->pixmap.w != w) || (edata->pixmap.h != h)) + if ((edata->pixmap.w != vw) || (edata->pixmap.h != vh)) { /* free the backing pixmap */ if (edata->pixmap.back) @@ -2210,16 +2210,16 @@ _ecore_evas_x_resize(Ecore_Evas *ee, int w, int h) ee->w = w; ee->h = h; if (changed) edata->configure_reqs++; - if (ee->prop.window) ecore_x_window_resize(ee->prop.window, w, h); + if (ee->prop.window) ecore_x_window_resize(ee->prop.window, vw, vh); if (ECORE_EVAS_PORTRAIT(ee)) { - evas_output_size_set(ee->evas, ee->w, ee->h); - evas_output_viewport_set(ee->evas, 0, 0, ee->w, ee->h); + evas_output_size_set(ee->evas, vw, vh); + evas_output_viewport_set(ee->evas, 0, 0, vw, vh); } else { - evas_output_size_set(ee->evas, ee->h, ee->w); - evas_output_viewport_set(ee->evas, 0, 0, ee->h, ee->w); + evas_output_size_set(ee->evas, vh, vw); + evas_output_viewport_set(ee->evas, 0, 0, vh, vw); } if (ee->prop.avoid_damage) { @@ -2237,7 +2237,7 @@ _ecore_evas_x_resize(Ecore_Evas *ee, int w, int h) { edata->configure_coming = 1; if (changed) edata->configure_reqs++; - if (ee->prop.window) ecore_x_window_resize(ee->prop.window, w + fw, h + fh); + if (ee->prop.window) ecore_x_window_resize(ee->prop.window, vw, vh); } } @@ -2246,6 +2246,13 @@ _ecore_evas_x_move_resize(Ecore_Evas *ee, int x, int y, int w, int h) { Ecore_Evas_Engine_Data_X11 *edata = ee->engine.data; Eina_Bool changed = EINA_FALSE; + int fx = 0, fy = 0, fw = 0, fh = 0, vw = w, vh = h; + + // vw,vh is viewport/output size + evas_output_framespace_get(ee->evas, &fx, &fy, &fw, &fh); + if (ECORE_EVAS_PORTRAIT(ee)) SWAP_INT(fw, fh); + vw += fw; + vh += fh; if ((ee->req.x != x) || (ee->req.y != y) || (ee->req.w != w) || (ee->req.h != h)) @@ -2269,7 +2276,7 @@ _ecore_evas_x_move_resize(Ecore_Evas *ee, int x, int y, int w, int h) if ((x != ee->x) || (y != ee->y)) change_pos = 1; } if (changed) edata->configure_reqs++; - ecore_x_window_move_resize(ee->prop.window, x, y, w, h); + ecore_x_window_move_resize(ee->prop.window, x, y, vw, vh); if (!edata->managed) { ee->x = x; @@ -2279,13 +2286,13 @@ _ecore_evas_x_move_resize(Ecore_Evas *ee, int x, int y, int w, int h) ee->h = h; if (ECORE_EVAS_PORTRAIT(ee)) { - evas_output_size_set(ee->evas, ee->w, ee->h); - evas_output_viewport_set(ee->evas, 0, 0, ee->w, ee->h); + evas_output_size_set(ee->evas, vw, vh); + evas_output_viewport_set(ee->evas, 0, 0, vw, vh); } else { - evas_output_size_set(ee->evas, ee->h, ee->w); - evas_output_viewport_set(ee->evas, 0, 0, ee->h, ee->w); + evas_output_size_set(ee->evas, vh, vw); + evas_output_viewport_set(ee->evas, 0, 0, vh, vw); } if (ee->prop.avoid_damage) { @@ -2313,7 +2320,7 @@ _ecore_evas_x_move_resize(Ecore_Evas *ee, int x, int y, int w, int h) { edata->configure_coming = 1; if (changed) edata->configure_reqs++; - ecore_x_window_move_resize(ee->prop.window, x, y, w, h); + ecore_x_window_move_resize(ee->prop.window, x, y, vw, vh); if (!edata->managed) { ee->x = x; @@ -2324,7 +2331,7 @@ _ecore_evas_x_move_resize(Ecore_Evas *ee, int x, int y, int w, int h) { edata->configure_coming = 1; if (changed) edata->configure_reqs++; - if (ee->prop.window) ecore_x_window_resize(ee->prop.window, w, h); + if (ee->prop.window) ecore_x_window_resize(ee->prop.window, vw, vh); } } } @@ -2342,9 +2349,6 @@ _ecore_evas_x_rotation_set_internal(Ecore_Evas *ee, int rotation, int resize, evas_output_framespace_get(ee->evas, NULL, NULL, &fw, &fh); - if (!PORTRAIT_CHECK(rotation)) - SWAP_INT(fw, fh); - if (rot_dif != 180) { int minw, minh, maxw, maxh, basew, baseh, stepw, steph; @@ -2373,16 +2377,15 @@ _ecore_evas_x_rotation_set_internal(Ecore_Evas *ee, int rotation, int resize, ecore_x_window_resize(ee->prop.window, h, w); if (PORTRAIT_CHECK(rotation)) { - evas_output_size_set(ee->evas, ee->req.w, ee->req.h); - evas_output_viewport_set(ee->evas, 0, 0, ee->req.w, ee->req.h); + evas_output_size_set(ee->evas, ee->req.w + fw, ee->req.h + fh); + evas_output_viewport_set(ee->evas, 0, 0, ee->req.w + fw, ee->req.h + fh); } else { - evas_output_size_set(ee->evas, ee->req.h, ee->req.w); - evas_output_viewport_set(ee->evas, 0, 0, ee->req.h, ee->req.w); + evas_output_size_set(ee->evas, ee->req.h + fw, ee->req.w + fh); + evas_output_viewport_set(ee->evas, 0, 0, ee->req.h + fw, ee->req.w + fh); } if (ee->func.fn_resize) ee->func.fn_resize(ee); - fw = fh = 0; } if (PORTRAIT_CHECK(rotation)) evas_damage_rectangle_add(ee->evas, 0, 0, ee->req.w + fw, ee->req.h + fh); @@ -2396,19 +2399,19 @@ _ecore_evas_x_rotation_set_internal(Ecore_Evas *ee, int rotation, int resize, /* ecore_x_window_size_get(ee->prop.window, &w, &h); */ if (PORTRAIT_CHECK(rotation)) { - evas_output_size_set(ee->evas, ee->w, ee->h); - evas_output_viewport_set(ee->evas, 0, 0, ee->w, ee->h); + evas_output_size_set(ee->evas, ee->w + fw, ee->h + fh); + evas_output_viewport_set(ee->evas, 0, 0, ee->w + fw, ee->h + fh); } else { - evas_output_size_set(ee->evas, ee->h, ee->w); - evas_output_viewport_set(ee->evas, 0, 0, ee->h, ee->w); + evas_output_size_set(ee->evas, ee->h + fw, ee->w + fh); + evas_output_viewport_set(ee->evas, 0, 0, ee->h + fw, ee->w + fh); } if (ee->func.fn_resize) ee->func.fn_resize(ee); if (PORTRAIT_CHECK(rotation)) - evas_damage_rectangle_add(ee->evas, 0, 0, ee->w, ee->h); + evas_damage_rectangle_add(ee->evas, 0, 0, ee->w + fw, ee->h + fh); else - evas_damage_rectangle_add(ee->evas, 0, 0, ee->h, ee->w); + evas_damage_rectangle_add(ee->evas, 0, 0, ee->h + fw, ee->w + fh); } ecore_evas_size_min_get(ee, &minw, &minh); ecore_evas_size_max_get(ee, &maxw, &maxh); @@ -3808,6 +3811,8 @@ _ecore_evas_x_render_pre(void *data, Evas *e EINA_UNUSED, void *event_info EINA_ * create a new one at the proper size */ if ((edata->pixmap.w != ee->w) || (edata->pixmap.h != ee->h)) { + int fw = 0, fh = 0; + /* free the backing pixmap */ if (edata->pixmap.back) ecore_x_pixmap_free(edata->pixmap.back); @@ -3816,8 +3821,9 @@ _ecore_evas_x_render_pre(void *data, Evas *e EINA_UNUSED, void *event_info EINA_ ecore_x_pixmap_new(edata->win_root, ee->w, ee->h, edata->pixmap.depth); - edata->pixmap.w = ee->w; - edata->pixmap.h = ee->h; + evas_output_framespace_get(ee->evas, NULL, NULL, &fw, &fh); + edata->pixmap.w = ee->w + fw; + edata->pixmap.h = ee->h + fh; if (!strcmp(ee->driver, "software_x11")) { --
