hermet pushed a commit to branch master. http://git.enlightenment.org/tools/enventor.git/commit/?id=6b3bbeb65b741a05a74b77309f283ea2d468351f
commit 6b3bbeb65b741a05a74b77309f283ea2d468351f Author: ChunEon Park <her...@hermet.pe.kr> Date: Sun Feb 9 12:20:51 2014 +0900 edj_viewer - keep the current viewport in the scroller while scaling up/down --- src/bin/edj_viewer.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/bin/edj_viewer.c b/src/bin/edj_viewer.c index 407e80a..543bc8c 100644 --- a/src/bin/edj_viewer.c +++ b/src/bin/edj_viewer.c @@ -371,14 +371,32 @@ view_scale_set(view_data *vd, double scale) if (!vd->layout) return; if (scale == edje_object_scale_get(vd->layout)) return; + int pminw, pminh; + evas_object_size_hint_min_get(vd->layout, &pminw, &pminh); + Evas_Coord sx, sy, sw, sh; + elm_scroller_region_get(vd->scroller, &sx, &sy, &sw, &sh); + edje_object_scale_set(vd->layout, scale); view_obj_min_update(vd->layout); + //adjust scroller position according to the scale change. + int minw, minh; + evas_object_size_hint_min_get(vd->layout, &minw, &minh); + + //a. center position of the scroller + double cx = ((double)sx + ((double)sw * 0.5)); + double cy = ((double)sy + ((double)sh * 0.5)); + + //b. multiply scale value + cx *= (1 + (((double)(minw - pminw))/pminw)); + cy *= (1 + (((double)(minh - pminh))/pminh)); + + elm_scroller_region_show(vd->scroller, ((Evas_Coord) cx) - (sw / 2), + ((Evas_Coord) cy) - (sh / 2), sw, sh); + //FIXME: Update the size for weird text ellipsis. Evas_Coord w, h; evas_object_geometry_get(vd->layout, NULL, NULL, &w, &h); evas_object_resize(vd->layout, 0, 0); evas_object_resize(vd->layout, w, h); - - } --