bu5hm4n pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=9eef88331292a79a4c6b03240b35922d6a754ff8

commit 9eef88331292a79a4c6b03240b35922d6a754ff8
Author: Marcel Hollerbach <[email protected]>
Date:   Sun Aug 18 18:27:37 2019 +0200

    efl_ui_position_manager_common: generalize code
    
    move the same code to a common header file.
    
    Reviewed-by: Cedric BAIL <[email protected]>
    Differential Revision: https://phab.enlightenment.org/D9630
---
 .../elementary/efl_ui_position_manager_common.h    | 21 +++++++++++++++++++
 src/lib/elementary/efl_ui_position_manager_grid.c  | 17 +--------------
 src/lib/elementary/efl_ui_position_manager_list.c  | 24 +---------------------
 3 files changed, 23 insertions(+), 39 deletions(-)

diff --git a/src/lib/elementary/efl_ui_position_manager_common.h 
b/src/lib/elementary/efl_ui_position_manager_common.h
index e74e6d48f2..0c6a847bae 100644
--- a/src/lib/elementary/efl_ui_position_manager_common.h
+++ b/src/lib/elementary/efl_ui_position_manager_common.h
@@ -11,6 +11,10 @@ typedef struct {
    Eina_Free_Cb free_cb;
 } Api_Callback;
 
+typedef struct {
+   unsigned int start_id, end_id;
+} Vis_Segment;
+
 static inline int
 _fill_buffer(Api_Callback *cb , int start_id, int len, int *group_id, void 
*data)
 {
@@ -57,3 +61,20 @@ vis_change_segment(Api_Callback *cb, int a, int b, Eina_Bool 
flag)
      }
 }
 #endif
+
+static inline void
+vis_segment_swap(Api_Callback *cb, Vis_Segment new, Vis_Segment old)
+{
+   if (new.end_id <= old.start_id || new.start_id >= old.end_id)
+     {
+        //it is important to first make the segment visible here, and then 
hide the rest
+        //otherwise we get a state where item_container has 0 subchildren, 
which triggers a lot of focus logic.
+        vis_change_segment(cb, new.start_id, new.end_id, EINA_TRUE);
+        vis_change_segment(cb, old.start_id, old.end_id, EINA_FALSE);
+     }
+   else
+     {
+        vis_change_segment(cb, old.start_id, new.start_id, (old.start_id > 
new.start_id));
+        vis_change_segment(cb, old.end_id, new.end_id, (old.end_id < 
new.end_id));
+     }
+}
diff --git a/src/lib/elementary/efl_ui_position_manager_grid.c 
b/src/lib/elementary/efl_ui_position_manager_grid.c
index db84dd7fe2..3968884442 100644
--- a/src/lib/elementary/efl_ui_position_manager_grid.c
+++ b/src/lib/elementary/efl_ui_position_manager_grid.c
@@ -12,10 +12,6 @@
 #define MY_DATA_GET(obj, pd) \
   Efl_Ui_Position_Manager_Grid_Data *pd = efl_data_scope_get(obj, MY_CLASS);
 
-typedef struct {
-   unsigned int start_id, end_id;
-} Vis_Segment;
-
 typedef struct {
    Api_Callback min_size, object;
    unsigned int size;
@@ -460,18 +456,7 @@ _reposition_content(Eo *obj EINA_UNUSED, 
Efl_Ui_Position_Manager_Grid_Data *pd)
 
    //to performance optimize the whole widget, we are setting the objects that 
are outside the viewport to visibility false
    //The code below ensures that things outside the viewport are always 
hidden, and things inside the viewport are visible
-   if (cur.end_id < pd->prev_run.start_id || cur.start_id > 
pd->prev_run.end_id)
-     {
-        //it is important to first make the segment visible here, and then 
hide the rest
-        //otherwise we get a state where item_container has 0 subchildren, 
which triggers a lot of focus logic.
-        vis_change_segment(&pd->object, cur.start_id, cur.end_id, EINA_TRUE);
-        vis_change_segment(&pd->object, pd->prev_run.start_id, 
pd->prev_run.end_id, EINA_FALSE);
-     }
-   else
-     {
-        vis_change_segment(&pd->object, pd->prev_run.start_id, cur.start_id, 
(pd->prev_run.start_id > cur.start_id));
-        vis_change_segment(&pd->object, pd->prev_run.end_id, cur.end_id, 
(pd->prev_run.end_id < cur.end_id));
-     }
+   vis_segment_swap(&pd->object, cur, pd->prev_run);
 
    ctx.new = cur;
    ctx.consumed_space = consumed_space;
diff --git a/src/lib/elementary/efl_ui_position_manager_list.c 
b/src/lib/elementary/efl_ui_position_manager_list.c
index a3bd452522..3200caad8b 100644
--- a/src/lib/elementary/efl_ui_position_manager_list.c
+++ b/src/lib/elementary/efl_ui_position_manager_list.c
@@ -13,11 +13,6 @@
 #define MY_DATA_GET(obj, pd) \
   Efl_Ui_Position_Manager_List_Data *pd = efl_data_scope_get(obj, MY_CLASS);
 
-
-typedef struct {
-   unsigned int start_id, end_id;
-} Vis_Segment;
-
 typedef struct {
    Api_Callback min_size, object;
    unsigned int size;
@@ -168,23 +163,6 @@ err:
    return cur;
 }
 
-static inline void
-_visual_segment_swap(Eo *obj EINA_UNUSED, Efl_Ui_Position_Manager_List_Data 
*pd, Vis_Segment new, Vis_Segment old)
-{
-   if (new.end_id <= old.start_id || new.start_id >= old.end_id)
-     {
-        //it is important to first make the segment visible here, and then 
hide the rest
-        //otherwise we get a state where item_container has 0 subchildren, 
which triggers a lot of focus logic.
-        vis_change_segment(&pd->object, new.start_id, new.end_id, EINA_TRUE);
-        vis_change_segment(&pd->object, old.start_id, old.end_id, EINA_FALSE);
-     }
-   else
-     {
-        vis_change_segment(&pd->object, old.start_id, new.start_id, 
(old.start_id > new.start_id));
-        vis_change_segment(&pd->object, old.end_id, new.end_id, (old.end_id < 
new.end_id));
-     }
-}
-
 static inline void
 _position_items(Eo *obj EINA_UNUSED, Efl_Ui_Position_Manager_List_Data *pd, 
Vis_Segment new, int relevant_space_size)
 {
@@ -327,7 +305,7 @@ position_content(Eo *obj EINA_UNUSED, 
Efl_Ui_Position_Manager_List_Data *pd)
    cur = _search_visual_segment(obj, pd, relevant_space_size, 
relevant_viewport);
    //to performance optimize the whole widget, we are setting the objects that 
are outside the viewport to visibility false
    //The code below ensures that things outside the viewport are always 
hidden, and things inside the viewport are visible
-   _visual_segment_swap(obj, pd, cur, pd->prev_run);
+   vis_segment_swap(&pd->object, cur, pd->prev_run);
 
    _position_items(obj, pd, cur, relevant_space_size);
 

-- 


Reply via email to