rimmed pushed a commit to branch master. http://git.enlightenment.org/tools/eflete.git/commit/?id=80ac01de0a001c1795df9a7dfb32c63d4f75fd3d
commit 80ac01de0a001c1795df9a7dfb32c63d4f75fd3d Author: Vitalii Vorobiov <vi.vorob...@samsung.com> Date: Wed Nov 2 15:56:46 2016 +0200 workspace: move part marker on scroll because on scroll all sizes weren't changing, its important to get sizes and positions of the primitive and use those, more fresh data. Groupedit_Geometry is not required since its not always updated Fixes T4475 --- src/bin/ui/workspace/groupview.c | 29 ++++++++++++++++++ src/bin/ui/workspace/groupview.h | 63 ++++++++++++++++++++++++++++++++++++++-- src/bin/ui/workspace/workspace.c | 46 ++++++++++++++--------------- 3 files changed, 112 insertions(+), 26 deletions(-) diff --git a/src/bin/ui/workspace/groupview.c b/src/bin/ui/workspace/groupview.c index da68fe1..b01e181 100644 --- a/src/bin/ui/workspace/groupview.c +++ b/src/bin/ui/workspace/groupview.c @@ -345,6 +345,19 @@ groupview_part_geom_get(Evas_Object *obj, const char *part) return geom; } +void +groupview_primitive_geom_get(Evas_Object *obj, const char *part, Evas_Coord *x1, Evas_Coord *y1, Evas_Coord *w1, Evas_Coord *h1) +{ + Groupview_Part *gp; + + GROUPVIEW_DATA_GET(obj, sd) + + gp = _parts_list_find(sd->parts, part); + if (!gp) return; + + evas_object_geometry_get(gp->draw, x1, y1, w1, h1); +} + const Groupview_Geom * groupview_part_selected_geom_get(Evas_Object *obj) { @@ -357,6 +370,14 @@ groupview_part_selected_geom_get(Evas_Object *obj) return geom; } +void +groupview_primitive_selected_geom_get(Evas_Object *obj, Evas_Coord *x1, Evas_Coord *y1, Evas_Coord *w1, Evas_Coord *h1) +{ + GROUPVIEW_DATA_GET(obj, sd) + + evas_object_geometry_get(sd->selected->draw, x1, y1, w1, h1); +} + Eina_Bool groupview_part_add(Evas_Object *obj, Part2 *part) { @@ -420,6 +441,14 @@ groupview_part_object_area_visible_set(Evas_Object *obj, Eina_Bool visible) highlight_handler_align_visible_set(sd->highlight, visible); } +void +groupview_primitive_area_selected_geom_get(Evas_Object *obj, Evas_Coord *x1, Evas_Coord *y1, Evas_Coord *w1, Evas_Coord *h1) +{ + GROUPVIEW_DATA_GET(obj, sd) + + evas_object_geometry_get(sd->object_area, x1, y1, w1, h1); +} + Eina_Bool groupview_part_object_area_visible_get(Evas_Object *obj) { diff --git a/src/bin/ui/workspace/groupview.h b/src/bin/ui/workspace/groupview.h index e1986b0..cbd9282 100644 --- a/src/bin/ui/workspace/groupview.h +++ b/src/bin/ui/workspace/groupview.h @@ -48,6 +48,7 @@ #include "highlight.h" #include "resource_manager2.h" +TODO("Check if this structure is really important and required for workspace/groupedit modules") struct _Geom{ int x, y, w, h; }; @@ -133,10 +134,10 @@ groupview_hard_update(Evas_Object *obj); /** * Get the geomentry. * - * @paramaram obj The groupview object, - * @paramaram part The part name. + * @param obj The groupview object, + * @param part The part name. * - * @returneturn The Groupview_Geom, or NULL if any part is notselected + * @return The Groupview_Geom, or NULL if any part is notselected * * @ingroup Groupview */ @@ -144,6 +145,26 @@ const Groupview_Geom * groupview_part_geom_get(Evas_Object *obj, const char *part); /** + * Get the geomentry of the primitive of given part. + * + * @param obj The groupview object, + * @param part The part name. + * @param x Variable to store geometry value x (position). + * @param y Variable to store geometry value y (position). + * @param w Variable to store geometry value w (width). + * @param h Variable to store geometry value h (height). + * + * @ingroup Groupview + */ +void +groupview_primitive_geom_get(Evas_Object *obj, + const char *part, + Evas_Coord *x, + Evas_Coord *y, + Evas_Coord *w, + Evas_Coord *h); + +/** * Get the selected part geomentry. * * @param obj The groupview object, @@ -156,6 +177,24 @@ const Groupview_Geom * groupview_part_selected_geom_get(Evas_Object *obj); /** + * Get the geomentry of the primitive of selected part. + * + * @param obj The groupview object, + * @param x Variable to store geometry value x (position). + * @param y Variable to store geometry value y (position). + * @param w Variable to store geometry value w (width). + * @param h Variable to store geometry value h (height). + * + * @ingroup Groupview + */ +void +groupview_primitive_selected_geom_get(Evas_Object *obj, + Evas_Coord *x, + Evas_Coord *y, + Evas_Coord *w, + Evas_Coord *h); + +/** * Add to groupview a new part. The function add part to edje edit object and * add groupview part. * @@ -193,6 +232,24 @@ groupview_part_del(Evas_Object *obj, Part2 *part); */ const Groupview_Geom * groupview_part_selected_object_area_geom_get(Evas_Object *obj); + +/** + * Get the geomentry of the object area of currently selected part. + * + * @param obj The groupview object, + * @param x Variable to store geometry value x (position). + * @param y Variable to store geometry value y (position). + * @param w Variable to store geometry value w (width). + * @param h Variable to store geometry value h (height). + * + * @ingroup Groupview + */ +void +groupview_primitive_area_selected_geom_get(Evas_Object *obj, + Evas_Coord *x1, + Evas_Coord *y1, + Evas_Coord *w1, + Evas_Coord *h1); /** * Set the object area visibility. * diff --git a/src/bin/ui/workspace/workspace.c b/src/bin/ui/workspace/workspace.c index a2111fd..00c1049 100644 --- a/src/bin/ui/workspace/workspace.c +++ b/src/bin/ui/workspace/workspace.c @@ -720,8 +720,7 @@ _group_part_selected_get(const Group2 *group) static void _markers_calculate(Workspace_Data *wd) { - const Groupview_Geom *part_geom = NULL; - Evas_Coord x, y; + Evas_Coord x, y, x1,y1,w1,h1; Scroll_Area *area; Eina_Stringshare *to; const Part2 *part; @@ -730,7 +729,8 @@ _markers_calculate(Workspace_Data *wd) area = _scroll_area_get(wd); assert(area != NULL); - if (((MODE_NORMAL != wd->mode) && (MODE_CODE != wd->mode)) || !wd->markers) goto hide_all; + if (((MODE_NORMAL != wd->mode) && (MODE_CODE != wd->mode)) || !wd->markers) + goto hide_all; evas_object_geometry_get(area->ruler_h.obj, &x, NULL, NULL, NULL); evas_object_geometry_get(area->ruler_v.obj, NULL, &y, NULL, NULL); @@ -742,18 +742,19 @@ _markers_calculate(Workspace_Data *wd) ewe_ruler_marker_visible_set (RULER, MARKER, true); part = _group_part_selected_get(wd->group); - part_geom = groupview_part_selected_geom_get(area->content); - if (part_geom) + + if (part) { + groupview_primitive_selected_geom_get(area->content, &x1, &y1, &w1, &h1); buf = eina_strbuf_new(); - eina_strbuf_append_printf(buf, _("Part '%s' width: %d"), part->common.name, part_geom->w); + eina_strbuf_append_printf(buf, _("Part '%s' width: %d"), part->common.name, w1); MARKER_GEOM_SET(area->ruler_h.obj, area->ruler_h.mr_part, - part_geom->x - x, part_geom->w, eina_strbuf_string_get(buf)); + x1 - x, w1, eina_strbuf_string_get(buf)); eina_strbuf_reset(buf); - eina_strbuf_append_printf(buf, _("Part '%s' heigth: %d"), part->common.name, part_geom->h); + eina_strbuf_append_printf(buf, _("Part '%s' heigth: %d"), part->common.name, h1); MARKER_GEOM_SET(area->ruler_v.obj, area->ruler_v.mr_part, - part_geom->y - y, part_geom->h, eina_strbuf_string_get(buf)); + y1 - y, h1, eina_strbuf_string_get(buf)); eina_strbuf_free(buf); } else @@ -763,58 +764,57 @@ _markers_calculate(Workspace_Data *wd) if (groupview_part_object_area_visible_get(area->content)) { - part_geom = groupview_part_selected_object_area_geom_get(area->content); - if (!part_geom) return; + groupview_primitive_area_selected_geom_get(area->content, &x1, &y1, &w1, &h1); buf = eina_strbuf_new(); - eina_strbuf_append_printf(buf, _("Part '%s' object area width: %d"), part->common.name, part_geom->w); + eina_strbuf_append_printf(buf, _("Part '%s' object area width: %d"), part->common.name, w1); MARKER_GEOM_SET(area->ruler_h.obj, area->ruler_h.mr_obj_area, - part_geom->x - x, part_geom->w, eina_strbuf_string_get(buf)); + x1 - x, w1, eina_strbuf_string_get(buf)); eina_strbuf_reset(buf); - eina_strbuf_append_printf(buf, _("Part '%s' object area heigth: %d"), part->common.name, part_geom->h); + eina_strbuf_append_printf(buf, _("Part '%s' object area heigth: %d"), part->common.name, h1); MARKER_GEOM_SET(area->ruler_v.obj, area->ruler_v.mr_obj_area, - part_geom->y - y, part_geom->h, eina_strbuf_string_get(buf)); + y1 - y, h1, eina_strbuf_string_get(buf)); to = edje_edit_state_rel1_to_x_get(wd->group->edit_object, part->common.name, part->current_state->common.name, part->current_state->val); if (to) { - part_geom = groupview_part_geom_get(area->content, to); + groupview_primitive_geom_get(area->content, to, &x1, &y1, &w1, &h1); eina_strbuf_reset(buf); eina_strbuf_append_printf(buf, _("Part '%s'"), to); MARKER_GEOM_SET(area->ruler_h.obj, area->ruler_h.mr_rel1, - part_geom->x - x, part_geom->w, eina_strbuf_string_get(buf)); + x1 - x, w1, eina_strbuf_string_get(buf)); } to = edje_edit_state_rel2_to_x_get(wd->group->edit_object, part->common.name, part->current_state->common.name, part->current_state->val); if (to) { - part_geom = groupview_part_geom_get(area->content, to); + groupview_primitive_geom_get(area->content, to, &x1, &y1, &w1, &h1); eina_strbuf_reset(buf); eina_strbuf_append_printf(buf, _("Part '%s'"), to); MARKER_GEOM_SET(area->ruler_h.obj, area->ruler_h.mr_rel2, - part_geom->x - x, part_geom->w, eina_strbuf_string_get(buf)); + x1 - x, w1, eina_strbuf_string_get(buf)); } to = edje_edit_state_rel1_to_y_get(wd->group->edit_object, part->common.name, part->current_state->common.name, part->current_state->val); if (to) { - part_geom = groupview_part_geom_get(area->content, to); + groupview_primitive_geom_get(area->content, to, &x1, &y1, &w1, &h1); eina_strbuf_reset(buf); eina_strbuf_append_printf(buf, _("Part '%s'"), to); MARKER_GEOM_SET(area->ruler_v.obj, area->ruler_v.mr_rel1, - part_geom->y - y, part_geom->h, eina_strbuf_string_get(buf)); + y1 - y, h1, eina_strbuf_string_get(buf)); } to = edje_edit_state_rel2_to_y_get(wd->group->edit_object, part->common.name, part->current_state->common.name, part->current_state->val); if (to) { - part_geom = groupview_part_geom_get(area->content, to); + groupview_primitive_geom_get(area->content, to, &x1, &y1, &w1, &h1); eina_strbuf_reset(buf); eina_strbuf_append_printf(buf, _("Part '%s'"), to); MARKER_GEOM_SET(area->ruler_v.obj, area->ruler_v.mr_rel2, - part_geom->y - y, part_geom->h, eina_strbuf_string_get(buf)); + y1 - y, h1, eina_strbuf_string_get(buf)); } eina_strbuf_free(buf); return; --