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;

-- 


Reply via email to