forked from enlightenment/efl
<glima> commit msg would be something like: "applying size recalcs on
childs in the case they have size hints for Evas_Object_Box'es. it was documented on the layouts api but never implemented" SVN revision: 43745
This commit is contained in:
parent
a6798a676f
commit
1f33962f78
|
@ -1231,6 +1231,7 @@ extern "C" {
|
|||
void *data;
|
||||
void (*free_data)(void *data);
|
||||
} layout;
|
||||
Eina_Bool layouting : 1;
|
||||
};
|
||||
|
||||
struct _Evas_Object_Box_Option
|
||||
|
|
|
@ -104,7 +104,8 @@ static void
|
|||
_on_child_resize(void *data, Evas *evas __UNUSED__, Evas_Object *o __UNUSED__, void *einfo __UNUSED__)
|
||||
{
|
||||
Evas_Object *box = data;
|
||||
evas_object_smart_changed(box);
|
||||
EVAS_OBJECT_BOX_DATA_GET_OR_RETURN(box, priv);
|
||||
if (!priv->layouting) evas_object_smart_changed(box);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -131,7 +132,8 @@ static void
|
|||
_on_child_hints_changed(void *data, Evas *evas __UNUSED__, Evas_Object *o __UNUSED__, void *einfo __UNUSED__)
|
||||
{
|
||||
Evas_Object *box = data;
|
||||
evas_object_smart_changed(box);
|
||||
EVAS_OBJECT_BOX_DATA_GET_OR_RETURN(box, priv);
|
||||
if (!priv->layouting) evas_object_smart_changed(box);
|
||||
}
|
||||
|
||||
static Evas_Object_Box_Option *
|
||||
|
@ -476,7 +478,11 @@ _evas_object_box_smart_calculate(Evas_Object *o)
|
|||
{
|
||||
EVAS_OBJECT_BOX_DATA_GET_OR_RETURN(o, priv);
|
||||
if (priv->layout.cb)
|
||||
{
|
||||
priv->layouting = 1;
|
||||
priv->layout.cb(o, priv, priv->layout.data);
|
||||
priv->layouting = 0;
|
||||
}
|
||||
else
|
||||
ERR("No layout function set for %p box.", o);
|
||||
}
|
||||
|
@ -625,6 +631,7 @@ _layout_set_offset_and_expand_dimension_space_max_bounded(int dim, int *new_dim,
|
|||
{
|
||||
if (align >= 0.0)
|
||||
{
|
||||
*new_dim = dim;
|
||||
*offset = (space_sz - (dim + pad_before + pad_after)) * align
|
||||
+ pad_before;
|
||||
}
|
||||
|
@ -648,16 +655,37 @@ static void
|
|||
_layout_set_offset_and_change_dimension_min_max_cell_bounded(int dim, int *new_dim, int min_dim, int max_dim, int cell_sz, int *offset, double align, int pad_before, int pad_after)
|
||||
{
|
||||
if (align >= 0.0)
|
||||
*offset = (cell_sz - (dim + pad_before + pad_after)) * align
|
||||
+ pad_before;
|
||||
{
|
||||
*new_dim = dim;
|
||||
*offset =
|
||||
(cell_sz - (dim + pad_before + pad_after)) * align + pad_before;
|
||||
}
|
||||
else
|
||||
{
|
||||
*offset = pad_before;
|
||||
_layout_dimension_change_min_max_cell_bound(
|
||||
dim, new_dim, min_dim, max_dim, cell_sz - pad_before - pad_after);
|
||||
_layout_dimension_change_min_max_cell_bound
|
||||
(dim, new_dim, min_dim, max_dim, cell_sz - pad_before - pad_after);
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
_sizing_eval(Evas_Object *obj)
|
||||
{
|
||||
Evas_Coord minw, minh, maxw, maxh;
|
||||
Evas_Coord w, h;
|
||||
|
||||
evas_object_size_hint_min_get(obj, &minw, &minh);
|
||||
evas_object_size_hint_max_get(obj, &maxw, &maxh);
|
||||
evas_object_geometry_get(obj, NULL, NULL, &w, &h);
|
||||
|
||||
if (w < minw) w = minw;
|
||||
if (h < minh) h = minh;
|
||||
if ((maxw >= 0) && (w > maxw)) w = maxw;
|
||||
if ((maxh >= 0) && (h > maxh)) h = maxh;
|
||||
|
||||
evas_object_resize(obj, w, h);
|
||||
}
|
||||
|
||||
static int
|
||||
_evas_object_box_layout_horizontal_weight_apply(Evas_Object_Box_Data *priv, Evas_Object_Box_Option **objects, int n_objects, int remaining, int weight_total)
|
||||
{
|
||||
|
@ -672,7 +700,7 @@ _evas_object_box_layout_horizontal_weight_apply(Evas_Object_Box_Data *priv, Evas
|
|||
|
||||
evas_object_geometry_get(o, NULL, NULL, NULL, &h);
|
||||
|
||||
if (remaining < 0)
|
||||
if (remaining <= 0)
|
||||
{
|
||||
int min_w;
|
||||
|
||||
|
@ -760,8 +788,6 @@ _evas_object_box_layout_horizontal_weight_apply(Evas_Object_Box_Data *priv, Evas
|
|||
* resized bounded to a minimum or maximum size, their size hint
|
||||
* properties must be set (by the
|
||||
* evas_object_size_hint_{min,max}_set() functions.
|
||||
*
|
||||
* @todo consider aspect hint and respect it.
|
||||
*/
|
||||
void
|
||||
evas_object_box_layout_horizontal(Evas_Object *o, Evas_Object_Box_Data *priv, void *data __UNUSED__)
|
||||
|
@ -793,6 +819,7 @@ evas_object_box_layout_horizontal(Evas_Object *o, Evas_Object_Box_Data *priv, vo
|
|||
int padding_l, padding_r;
|
||||
double weight_x;
|
||||
|
||||
_sizing_eval(opt->obj);
|
||||
evas_object_size_hint_weight_get(opt->obj, &weight_x, NULL);
|
||||
evas_object_size_hint_padding_get
|
||||
(opt->obj, &padding_l, &padding_r, NULL, NULL);
|
||||
|
@ -862,6 +889,7 @@ evas_object_box_layout_horizontal(Evas_Object *o, Evas_Object_Box_Data *priv, vo
|
|||
sub_pixel -= 1 << 16;
|
||||
}
|
||||
}
|
||||
|
||||
evas_object_size_hint_min_set(o, req_w, top_h);
|
||||
}
|
||||
|
||||
|
@ -879,7 +907,7 @@ _evas_object_box_layout_vertical_weight_apply(Evas_Object_Box_Data *priv, Evas_O
|
|||
|
||||
evas_object_geometry_get(o, NULL, NULL, &w, NULL);
|
||||
|
||||
if (remaining < 0)
|
||||
if (remaining <= 0)
|
||||
{
|
||||
int min_h;
|
||||
|
||||
|
@ -926,8 +954,6 @@ _evas_object_box_layout_vertical_weight_apply(Evas_Object_Box_Data *priv, Evas_O
|
|||
* This function behaves analogously to
|
||||
* evas_object_box_layout_horizontal(). The description of its
|
||||
* behaviour can be derived from that function's documentation.
|
||||
*
|
||||
* @todo consider aspect hint and respect it.
|
||||
*/
|
||||
void
|
||||
evas_object_box_layout_vertical(Evas_Object *o, Evas_Object_Box_Data *priv, void *data __UNUSED__)
|
||||
|
@ -959,6 +985,7 @@ evas_object_box_layout_vertical(Evas_Object *o, Evas_Object_Box_Data *priv, void
|
|||
int padding_t, padding_b;
|
||||
double weight_y;
|
||||
|
||||
_sizing_eval(opt->obj);
|
||||
evas_object_size_hint_weight_get(opt->obj, NULL, &weight_y);
|
||||
evas_object_size_hint_padding_get
|
||||
(opt->obj, NULL, NULL, &padding_t, &padding_b);
|
||||
|
@ -1028,6 +1055,7 @@ evas_object_box_layout_vertical(Evas_Object *o, Evas_Object_Box_Data *priv, void
|
|||
sub_pixel -= 1 << 16;
|
||||
}
|
||||
}
|
||||
|
||||
evas_object_size_hint_min_set(o, top_w, req_h);
|
||||
}
|
||||
|
||||
|
@ -1063,8 +1091,6 @@ evas_object_box_layout_vertical(Evas_Object *o, Evas_Object_Box_Data *priv, void
|
|||
* value of -1.0 to @c align_y makes the box try to resize this child
|
||||
* element to the exact height of its parent (respecting the max hint
|
||||
* on the child's height).
|
||||
*
|
||||
* @todo consider aspect hint and respect it.
|
||||
*/
|
||||
void
|
||||
evas_object_box_layout_homogeneous_horizontal(Evas_Object *o, Evas_Object_Box_Data *priv, void *data __UNUSED__)
|
||||
|
@ -1098,6 +1124,7 @@ evas_object_box_layout_homogeneous_horizontal(Evas_Object *o, Evas_Object_Box_Da
|
|||
evas_object_size_hint_max_get(opt->obj, &max_w, &max_h);
|
||||
evas_object_size_hint_min_get(opt->obj, &min_w, NULL);
|
||||
|
||||
_sizing_eval(opt->obj);
|
||||
evas_object_geometry_get(opt->obj, NULL, NULL, &child_w, &child_h);
|
||||
|
||||
new_w = child_w;
|
||||
|
@ -1122,6 +1149,7 @@ evas_object_box_layout_homogeneous_horizontal(Evas_Object *o, Evas_Object_Box_Da
|
|||
sub_pixel -= 1 << 16;
|
||||
}
|
||||
}
|
||||
|
||||
evas_object_size_hint_min_set(o, w, h);
|
||||
}
|
||||
|
||||
|
@ -1132,8 +1160,6 @@ evas_object_box_layout_homogeneous_horizontal(Evas_Object *o, Evas_Object_Box_Da
|
|||
* This function behaves analogously to
|
||||
* evas_object_box_layout_homogeneous_horizontal(). The description
|
||||
* of its behaviour can be derived from that function's documentation.
|
||||
*
|
||||
* @todo consider aspect hint and respect it.
|
||||
*/
|
||||
void
|
||||
evas_object_box_layout_homogeneous_vertical(Evas_Object *o, Evas_Object_Box_Data *priv, void *data __UNUSED__)
|
||||
|
@ -1167,6 +1193,7 @@ evas_object_box_layout_homogeneous_vertical(Evas_Object *o, Evas_Object_Box_Data
|
|||
evas_object_size_hint_max_get(opt->obj, &max_w, &max_h);
|
||||
evas_object_size_hint_min_get(opt->obj, NULL, &min_h);
|
||||
|
||||
_sizing_eval(opt->obj);
|
||||
evas_object_geometry_get(opt->obj, NULL, NULL, &child_w, &child_h);
|
||||
new_w = child_w;
|
||||
new_h = child_h;
|
||||
|
@ -1190,6 +1217,7 @@ evas_object_box_layout_homogeneous_vertical(Evas_Object *o, Evas_Object_Box_Data
|
|||
sub_pixel -= 1 << 16;
|
||||
}
|
||||
}
|
||||
|
||||
evas_object_size_hint_min_set(o, w, h);
|
||||
}
|
||||
|
||||
|
@ -1233,8 +1261,6 @@ evas_object_box_layout_homogeneous_vertical(Evas_Object *o, Evas_Object_Box_Data
|
|||
* value of -1.0 to @c align_y makes the box try to resize this child
|
||||
* element to the exact height of its parent (respecting the max hint
|
||||
* on the child's height).
|
||||
*
|
||||
* @todo consider aspect hint and respect it.
|
||||
*/
|
||||
void
|
||||
evas_object_box_layout_homogeneous_max_size_horizontal(Evas_Object *o, Evas_Object_Box_Data *priv, void *data __UNUSED__)
|
||||
|
@ -1257,6 +1283,7 @@ evas_object_box_layout_homogeneous_max_size_horizontal(Evas_Object *o, Evas_Obje
|
|||
{
|
||||
int child_w, padding_l, padding_r;
|
||||
|
||||
_sizing_eval(opt->obj);
|
||||
evas_object_size_hint_padding_get
|
||||
(opt->obj, &padding_l, &padding_r, NULL, NULL);
|
||||
evas_object_geometry_get(opt->obj, NULL, NULL, &child_w, NULL);
|
||||
|
@ -1315,6 +1342,7 @@ evas_object_box_layout_homogeneous_max_size_horizontal(Evas_Object *o, Evas_Obje
|
|||
sub_pixel -= 1 << 16;
|
||||
}
|
||||
}
|
||||
|
||||
evas_object_size_hint_min_set(o, x, top_h);
|
||||
}
|
||||
|
||||
|
@ -1326,8 +1354,6 @@ evas_object_box_layout_homogeneous_max_size_horizontal(Evas_Object *o, Evas_Obje
|
|||
* evas_object_box_layout_homogeneous_max_size_horizontal(). The
|
||||
* description of its behaviour can be derived from that function's
|
||||
* documentation.
|
||||
*
|
||||
* @todo consider aspect hint and respect it.
|
||||
*/
|
||||
void
|
||||
evas_object_box_layout_homogeneous_max_size_vertical(Evas_Object *o, Evas_Object_Box_Data *priv, void *data __UNUSED__)
|
||||
|
@ -1350,6 +1376,7 @@ evas_object_box_layout_homogeneous_max_size_vertical(Evas_Object *o, Evas_Object
|
|||
{
|
||||
int child_h, padding_t, padding_b;
|
||||
|
||||
_sizing_eval(opt->obj);
|
||||
evas_object_size_hint_padding_get
|
||||
(opt->obj, NULL, NULL, &padding_t, &padding_b);
|
||||
evas_object_geometry_get(opt->obj, NULL, NULL, NULL, &child_h);
|
||||
|
@ -1408,6 +1435,7 @@ evas_object_box_layout_homogeneous_max_size_vertical(Evas_Object *o, Evas_Object
|
|||
sub_pixel -= 1 << 16;
|
||||
}
|
||||
}
|
||||
|
||||
evas_object_size_hint_min_set(o, top_w, y);
|
||||
}
|
||||
|
||||
|
@ -1427,6 +1455,7 @@ _evas_object_box_layout_flow_horizontal_row_info_collect(Evas_Object_Box_Data *p
|
|||
evas_object_size_hint_padding_get
|
||||
(opt->obj, &padding_l, &padding_r, &padding_t, &padding_b);
|
||||
|
||||
_sizing_eval(opt->obj);
|
||||
evas_object_geometry_get(opt->obj, NULL, NULL, &child_w, &child_h);
|
||||
|
||||
child_w += padding_l + padding_r + priv->pad.h;
|
||||
|
@ -1472,9 +1501,6 @@ _evas_object_box_layout_flow_horizontal_row_info_collect(Evas_Object_Box_Data *p
|
|||
*row_count = n_rows;
|
||||
*off_y_ret = off_y;
|
||||
*max_h_ret = max_h;
|
||||
|
||||
//TODO set size hints
|
||||
//evas_object_size_hint_min_set(o, w,h);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1511,8 +1537,6 @@ _evas_object_box_layout_flow_horizontal_row_info_collect(Evas_Object_Box_Data *p
|
|||
* row justifying) of setting space between rows. Note, however, that
|
||||
* @c align_y dictates positioning relative to the *largest height*
|
||||
* required by a child object in the actual row.
|
||||
*
|
||||
* @todo consider aspect hint and respect it.
|
||||
*/
|
||||
void
|
||||
evas_object_box_layout_flow_horizontal(Evas_Object *o, Evas_Object_Box_Data *priv, void *data __UNUSED__)
|
||||
|
@ -1646,6 +1670,7 @@ _evas_object_box_layout_flow_vertical_col_info_collect(Evas_Object_Box_Data *pri
|
|||
evas_object_size_hint_padding_get
|
||||
(opt->obj, &padding_l, &padding_r, &padding_t, &padding_b);
|
||||
|
||||
_sizing_eval(opt->obj);
|
||||
evas_object_geometry_get(opt->obj, NULL, NULL, &child_w, &child_h);
|
||||
|
||||
child_w += padding_l + padding_r;
|
||||
|
@ -1692,9 +1717,6 @@ _evas_object_box_layout_flow_vertical_col_info_collect(Evas_Object_Box_Data *pri
|
|||
*col_count = n_cols;
|
||||
*off_x_ret = off_x;
|
||||
*max_w_ret = max_w;
|
||||
|
||||
//TODO set size hints
|
||||
//evas_object_size_hint_min_set(o, w,h);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1704,8 +1726,6 @@ _evas_object_box_layout_flow_vertical_col_info_collect(Evas_Object_Box_Data *pri
|
|||
* This function behaves analogously to
|
||||
* evas_object_box_layout_flow_horizontal(). The description of its
|
||||
* behaviour can be derived from that function's documentation.
|
||||
*
|
||||
* @todo consider aspect hint and respect it.
|
||||
*/
|
||||
void
|
||||
evas_object_box_layout_flow_vertical(Evas_Object *o, Evas_Object_Box_Data *priv, void *data __UNUSED__)
|
||||
|
@ -1842,8 +1862,6 @@ evas_object_box_layout_flow_vertical(Evas_Object *o, Evas_Object_Box_Data *priv,
|
|||
* (respecting the min and max hints on the child's width *and*
|
||||
* accounting its horizontal padding properties). Same applies to
|
||||
* vertical axis.
|
||||
*
|
||||
* @todo consider aspect hint and respect it.
|
||||
*/
|
||||
void
|
||||
evas_object_box_layout_stack(Evas_Object *o, Evas_Object_Box_Data *priv, void *data __UNUSED__)
|
||||
|
@ -1869,6 +1887,7 @@ evas_object_box_layout_stack(Evas_Object *o, Evas_Object_Box_Data *priv, void *d
|
|||
evas_object_size_hint_max_get(child, &max_w, &max_h);
|
||||
evas_object_size_hint_min_get(child, &min_w, &min_h);
|
||||
|
||||
_sizing_eval(opt->obj);
|
||||
evas_object_geometry_get(child, NULL, NULL, &child_w, &child_h);
|
||||
new_w = child_w;
|
||||
new_h = child_h;
|
||||
|
@ -1888,6 +1907,7 @@ evas_object_box_layout_stack(Evas_Object *o, Evas_Object_Box_Data *priv, void *d
|
|||
evas_object_stack_above(child, old_child);
|
||||
old_child = child;
|
||||
}
|
||||
|
||||
evas_object_size_hint_min_set(o, top_w, top_h);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue