rimmed pushed a commit to branch master. http://git.enlightenment.org/tools/eflete.git/commit/?id=835074846f2f5118eaebed13d3bf1f84f07a643d
commit 835074846f2f5118eaebed13d3bf1f84f07a643d Author: Vyacheslav Reutskiy <v.reuts...@samsung.com> Date: Wed Dec 9 17:20:59 2015 +0200 groupedit: calculate part protrusion Protrusion values it's distinction of object geomentry, what calculated by smart object and real drawed geometry. The real drawed object geomentry needed for correct zoom. Change-Id: I65e6bfa23936eda6b08a4f29c85c5a38ec260a75 --- src/bin/ui/workspace/groupedit.c | 8 ++++++++ src/bin/ui/workspace/groupedit.h | 14 ++++++++++++++ src/bin/ui/workspace/groupedit_calc.c | 18 ++++++++++++++++-- src/bin/ui/workspace/groupedit_private.h | 1 + 4 files changed, 39 insertions(+), 2 deletions(-) diff --git a/src/bin/ui/workspace/groupedit.c b/src/bin/ui/workspace/groupedit.c index bdce63a..9a91203 100644 --- a/src/bin/ui/workspace/groupedit.c +++ b/src/bin/ui/workspace/groupedit.c @@ -501,6 +501,14 @@ groupedit_edit_object_part_item_selected_set(Evas_Object *obj, } } +const Groupedit_Geom * +groupedit_protrusion_get(Evas_Object *obj) +{ + WS_GROUPEDIT_DATA_GET(obj, sd); + + return &sd->protrusion; +} + #undef MY_CLASS_NAME #undef WS_GROUPSPACE_DATA_GET #undef WS_GROUPEDIT_DATA_GET_OR_RETURN_VAL diff --git a/src/bin/ui/workspace/groupedit.h b/src/bin/ui/workspace/groupedit.h index 4858c56..32f68ae 100644 --- a/src/bin/ui/workspace/groupedit.h +++ b/src/bin/ui/workspace/groupedit.h @@ -347,4 +347,18 @@ groupedit_edit_object_part_item_selected_set(Evas_Object *obj, Eina_Stringshare *item_name, Eina_Bool selected); +/** + * Protrusion values it's distinction of object geomentry, what calculated by + * smart object and real drawed geometry. The real drawed object geomentry + * needed for correct zoom. + * + * @param obj The groupedit object. + * + * @return The protrusion values. + * + * @ingroup Groupedit + */ +const Groupedit_Geom * +groupedit_protrusion_get(Evas_Object *obj); + #endif /* GROUPEDIT_H */ diff --git a/src/bin/ui/workspace/groupedit_calc.c b/src/bin/ui/workspace/groupedit_calc.c index 1da3330..1fc71c3 100644 --- a/src/bin/ui/workspace/groupedit_calc.c +++ b/src/bin/ui/workspace/groupedit_calc.c @@ -577,19 +577,29 @@ _part_container_del(Groupedit_Part *gp) static void _part_calc(Ws_Groupedit_Smart_Data *sd, Groupedit_Part *gp) { - Evas_Coord x, y, xe, ye, w, h; + Evas_Coord x, y, xe, ye, w, h, we, he; + int protrusion; assert(sd != NULL); assert(gp != NULL); edje_object_part_geometry_get(sd->group->edit_object, gp->part->name, &x, &y, &w, &h); - evas_object_geometry_get(sd->group->edit_object, &xe, &ye, NULL, NULL); + evas_object_geometry_get(sd->group->edit_object, &xe, &ye, &we, &he); gp->geom.x = x + xe; gp->geom.y = y + ye; gp->geom.w = w; gp->geom.h = h; + protrusion = abs((x <= 0) ? x : 0); + sd->protrusion.x = (protrusion > sd->protrusion.x) ? protrusion : sd->protrusion.x; + protrusion = abs((y <= 0) ? y : 0); + sd->protrusion.y = (protrusion > sd->protrusion.y) ? protrusion : sd->protrusion.y; + protrusion = ((x + w) > he) ? (x + w - we) : 0; + sd->protrusion.w = (protrusion > sd->protrusion.w) ? protrusion : sd->protrusion.w; + protrusion = ((y + h) > he) ? (y + h - he) : 0; + sd->protrusion.h = (protrusion > sd->protrusion.h) ? protrusion : sd->protrusion.h; + if ((gp->part->type == EDJE_PART_TYPE_TEXT) || (gp->part->type == EDJE_PART_TYPE_TEXTBLOCK)) { @@ -1080,6 +1090,10 @@ _parts_stack_layout(Evas_Object *o __UNUSED__, Eina_List *l; DBG("Recalc %p object. Object parts count: %d", sd->obj, eina_list_count(sd->parts)) + sd->protrusion.x = 0; + sd->protrusion.y = 0; + sd->protrusion.w = 0; + sd->protrusion.h = 0; EINA_LIST_FOREACH(sd->parts, l, gp) { _part_object_area_calc(sd, gp); diff --git a/src/bin/ui/workspace/groupedit_private.h b/src/bin/ui/workspace/groupedit_private.h index e685058..fbd377c 100644 --- a/src/bin/ui/workspace/groupedit_private.h +++ b/src/bin/ui/workspace/groupedit_private.h @@ -62,6 +62,7 @@ struct _Ws_Groupedit_Smart_Data Evas_Object *parent; Evas_Object *box; Groupedit_Geom geom; + Groupedit_Geom protrusion; Eina_List *parts; Groupedit_Part *selected; Evas_Object *clipper; --