ui.box, ui.table: respect parent hint size min
authorYeongjong Lee <cleanlyj@naver.com>
Tue, 5 Mar 2019 08:12:52 +0000 (09:12 +0100)
committerJunsuChoi <jsuya.choi@samsung.com>
Thu, 14 Mar 2019 05:46:26 +0000 (14:46 +0900)
Summary:
This patch fixes issue that parent hint size min is ignored when it is greater
than children hint size min sum.

Thanks to segfaultxavi for reporting this.

Test Plan:
1. make check
2. 'hello-gui' or 'texteditor' example in examples.git

Reviewers: segfaultxavi, zmike

Reviewed By: segfaultxavi

Subscribers: cedric, #reviewers, #committers

Tags: #efl

Differential Revision: https://phab.enlightenment.org/D8098

src/lib/elementary/efl_ui_box_layout.c
src/lib/elementary/efl_ui_container_layout.c
src/lib/elementary/efl_ui_container_layout.h
src/lib/elementary/efl_ui_table_layout.c
src/tests/elementary/efl_ui_test_box.c
src/tests/elementary/efl_ui_test_table.c

index bc9ea63..c66a1a8 100644 (file)
@@ -199,5 +199,8 @@ _efl_ui_box_custom_layout(Efl_Ui_Box *ui_box, Evas_Object_Box_Data *bd)
    want[1] += (box_calc[1].margin[0] + box_calc[1].margin[1]) +
               (box_calc[1].pad * (count - 1));
 
+   if (want[0] < box_calc[0].min) want[0] = box_calc[0].min;
+   if (want[1] < box_calc[1].min) want[1] = box_calc[1].min;
+
    efl_gfx_hint_size_min_set(ui_box, EINA_SIZE2D(want[0], want[1]));
 }
index e8c5979..4fbdc07 100644 (file)
@@ -112,10 +112,14 @@ _efl_ui_container_layout_init(Eo* obj, Efl_Ui_Container_Layout_Calc *calc)
 {
    Eina_Rect geom;
    Eina_Bool pad_scalable;
+   Eina_Size2D min;
 
    geom = efl_gfx_entity_geometry_get(obj);
    efl_gfx_hint_margin_get(obj, &calc[0].margin[0], &calc[0].margin[1],
                                      &calc[1].margin[0], &calc[1].margin[1]);
+   min = efl_gfx_hint_size_combined_min_get(obj);
+   calc[0].min = min.w;
+   calc[1].min = min.h;
    calc[0].scale = calc[1].scale = efl_gfx_entity_scale_get(obj);
 
    efl_pack_padding_get(obj, &calc[0].pad, &calc[1].pad, &pad_scalable);
index 097abee..85d3695 100644 (file)
@@ -28,6 +28,7 @@ struct _Efl_Ui_Container_Layout_Calc
 {
    int pos;
    int size;
+   int min;
    int margin[2];
    double align;
    double scale;
index b3009e9..f017b33 100644 (file)
@@ -368,6 +368,11 @@ _efl_ui_table_custom_layout(Efl_Ui_Table *ui_table, Efl_Ui_Table_Data *pd)
                          + (table_calc.layout_calc[1].pad *
                             table_calc.cell_calc[1][rows - 1].index);
 
+   if (table_calc.want[0] < table_calc.layout_calc[0].min)
+     table_calc.want[0] = table_calc.layout_calc[0].min;
+   if (table_calc.want[1] < table_calc.layout_calc[1].min)
+     table_calc.want[1] = table_calc.layout_calc[1].min;
+
    efl_gfx_hint_size_min_set(ui_table, EINA_SIZE2D(table_calc.want[0],
                                                    table_calc.want[1]));
 }
index af4eab0..ee65322 100644 (file)
@@ -187,6 +187,7 @@ static void
 btn_hint_set(Eo *btn, Hint *hint)
 {
    efl_gfx_entity_size_set(layout, hint->layout_size);
+   efl_gfx_hint_size_min_set(layout, hint->layout_size);
    efl_gfx_hint_size_max_set(btn, hint->max);
    efl_gfx_hint_size_min_set(btn, hint->min);
    efl_gfx_hint_weight_set(btn, hint->weightx, hint->weighty);
index 467208e..66443ef 100644 (file)
@@ -212,6 +212,7 @@ static void
 btn_hint_set(Eo *btn, Hint *hint)
 {
    efl_gfx_entity_size_set(layout, hint->layout_size);
+   efl_gfx_hint_size_min_set(layout, hint->layout_size);
    efl_gfx_hint_size_max_set(btn, hint->max);
    efl_gfx_hint_size_min_set(btn, hint->min);
    efl_gfx_hint_margin_set(btn, hint->marginl, hint->marginr,