summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFelipe Magno de Almeida <felipe@expertisesolutions.com.br>2017-10-22 19:20:28 -0200
committerSangHyeon Jade Lee <dltkdgus1764@gmail.com>2017-11-15 17:06:45 +0900
commit8788c22e5aa54bd862ecf0caae3b80358c86362c (patch)
tree365241e64898d1f5498ff30a4736de2a841f3af7
parent0c95e35aa1e592879eb0099a2a4d8afb8e6da482 (diff)
downloadefl-8788c22e5aa54bd862ecf0caae3b80358c86362c.tar.gz
elm: efl_ui_list avoiding layout'ing without size min calc calculated
-rw-r--r--src/lib/elementary/efl_ui_list.c1
-rw-r--r--src/lib/elementary/efl_ui_list_precise_layouter.c49
2 files changed, 37 insertions, 13 deletions
diff --git a/src/lib/elementary/efl_ui_list.c b/src/lib/elementary/efl_ui_list.c
index 031cded085..a818451e09 100644
--- a/src/lib/elementary/efl_ui_list.c
+++ b/src/lib/elementary/efl_ui_list.c
@@ -85,6 +85,7 @@ _efl_ui_list_pan_elm_pan_pos_set(Eo *obj EINA_UNUSED, Efl_Ui_List_Pan_Data *psd
Evas_Coord x EINA_UNUSED, Evas_Coord y EINA_UNUSED)
{
DBG("x: %d y: %d", (int)x, (int)y);
+ _layout(psd->wpd);
}
/* EOLIAN static void */
/* _efl_ui_list_pan_elm_pan_pos_set(Eo *obj EINA_UNUSED, Efl_Ui_List_Pan_Data *psd, Evas_Coord x, Evas_Coord y) */
diff --git a/src/lib/elementary/efl_ui_list_precise_layouter.c b/src/lib/elementary/efl_ui_list_precise_layouter.c
index 11cad449d0..6ea2d183cc 100644
--- a/src/lib/elementary/efl_ui_list_precise_layouter.c
+++ b/src/lib/elementary/efl_ui_list_precise_layouter.c
@@ -117,32 +117,50 @@ _efl_ui_list_precise_layouter_efl_ui_list_relayout_layout_do
// cache size of new items
EINA_ACCESSOR_FOREACH(items, i, layout_item)
{
- DBG("size %d", size);
printf("item %d\n", i);
size = eina_hash_find(pd->size_information, &layout_item);
+ DBG("size %p", size);
if(!size)
{
if(!layout_item->layout)
- efl_ui_list_model_realize(modeler, layout_item);
- if(!layout_item->layout)
{
- // error
- continue;
+ DBG("no layout, realizing");
+ efl_ui_list_model_realize(modeler, layout_item);
}
+ else
+ {
+ DBG("already realized");
+ /* if(!layout_item->layout) */
+ /* { */
+ /* // error */
+ /* continue; */
+ /* } */
size = calloc(1, sizeof(Efl_Ui_List_Precise_Layouter_Size));
edje_object_size_min_calc(layout_item->layout, &size->min_width, &size->min_height);
- efl_gfx_size_hint_margin_get(layout_item->layout, &pad[0], &pad[1], &pad[2], &pad[3]);
- efl_gfx_size_hint_weight_get(layout_item->layout, &size->weight_x, &size->weight_y);
- size->min_width += pad[0] + pad[1];
- size->min_height += pad[2] + pad[3];
- pd->height += size->min_height;
+ if(size->min_width && size->min_height)
+ {
+ DBG("size was calculated");
+ efl_gfx_size_hint_margin_get(layout_item->layout, &pad[0], &pad[1], &pad[2], &pad[3]);
+ efl_gfx_size_hint_weight_get(layout_item->layout, &size->weight_x, &size->weight_y);
+
+ size->min_width += pad[0] + pad[1];
+ size->min_height += pad[2] + pad[3];
+ pd->height += size->min_height;
- if (pd->width < size->min_width)
- pd->width = size->min_width;
+ if (pd->width < size->min_width)
+ pd->width = size->min_width;
- eina_hash_add(pd->size_information, &layout_item, size);
+ eina_hash_add(pd->size_information, &layout_item, size);
+ DBG("size information for item %d width %d height %d", i, size->min_width, size->min_height);
+ }
+ else
+ {
+ DBG("size was NOT calculated, not loaded yet probably");
+ free(size);
+ }
+ }
}
}
@@ -259,6 +277,10 @@ _efl_ui_list_precise_layouter_efl_ui_list_relayout_layout_do
size = eina_hash_find(pd->size_information, &layout_item);
+ if(size)
+ {
+ DBG("size information for item %d width %d height %d", i, size->min_width, size->min_height);
+
assert(layout_item->layout != NULL);
efl_gfx_size_hint_align_get(layout_item->layout, &align[0], &align[1]);
max = efl_gfx_size_hint_max_get(layout_item->layout);
@@ -365,6 +387,7 @@ _efl_ui_list_precise_layouter_efl_ui_list_relayout_layout_do
/* // , (float)litem->x, (float)litem->y, (float)litem->w, (float)litem->h); fflush(stderr); */
/* // printf("obj=%d currpos=%.2f moved to X=%.2f, Y=%.2f average_item_size %d\n", litem->index, cur_pos, x, y */
/* // , eina_inarray_count(&pd->items.array) ? (/\*horz*\/ EINA_FALSE ? pd->realized.w : pd->realized.h) / eina_inarray_count(&pd->items.array) : AVERAGE_SIZE_INIT); */
+ }
}
}