In this code, we place a (vertical) box with two rectangles as child elements.
That should be self explanatory. Change those values (possibly resizing the box, which will resize together with the example's window) to get how size hints are honored by a container object, which in this case is the Evas box.
#ifdef HAVE_CONFIG_H
#include "config.h"
#else
#define PACKAGE_EXAMPLES_DIR "."
#endif
#include <Ecore.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include "evas-common.h"
#define WIDTH 320
#define HEIGHT 480
static const char commands[] = \
"commands are:\n"
"\tShift + a - change alignment hints on top rectangle\n"
"\tShift + m - change min. size hint on top rectangle\n"
"\tShift + n - change max. size hint on top rectangle\n"
"\tShift + p - change padding hints on top rectangle\n"
"\tShift + w - change weight hints on top rectangle\n\n"
"\tControl + a - change alignment hints on bottom rectangle\n"
"\tControl + m - change min. size hint on bottom rectangle\n"
"\tControl + n - change max. size hint on bottom rectangle\n"
"\tControl + p - change padding hints on bottom rectangle\n"
"\tControl + w - change weight hints on bottom rectangle\n\n"
"\ts - print current hints information\n"
"\th - print help\n";
static const char *border_img_path = PACKAGE_EXAMPLES_DIR EVAS_IMAGE_FOLDER "/red.png";
struct coord_tuple
{
};
struct weight_tuple
{
double x, y;
};
struct padding_tuple
{
};
struct rect_data
{
struct coord_tuple *min_ptr;
struct coord_tuple min[4];
struct coord_tuple *max_ptr;
struct coord_tuple max[4];
struct weight_tuple *align_ptr;
struct weight_tuple align[3];
struct weight_tuple *weight_ptr;
struct weight_tuple weight[3];
struct padding_tuple *padding_ptr;
struct padding_tuple padding[3];
};
struct test_data
{
Ecore_Evas *ee;
struct rect_data t_data, b_data;
};
static struct test_data d = {0};
static void
_canvas_resize_cb(Ecore_Evas *ee)
{
int w, h;
}
static void
{
double x, y;
printf("\talign hints: h(%f), v(%f)\n",
x, y);
cmin = efl_gfx_hint_size_combined_min_get(rect);
printf("\tmin. size hints: h(%d), v(%d)\n",
cmin.w, cmin.h);
printf("\tmax. size hints: h(%d), v(%d)\n",
w, h);
printf("\tpadding hints: l(%d), r(%d), t(%d), b(%d)\n",
l, r, t, b);
printf("\tweight hints: h(%f), v(%f)\n",
x, y);
}
static void
void *einfo)
{
struct rect_data *r_data = NULL;
const Evas_Modifier *mods;
const char *name = NULL;
{
rect = d.t_rect;
r_data = &d.t_data;
name = "top";
}
{
rect = d.b_rect;
r_data = &d.b_data;
name = "bottom";
}
else if (strcmp(ev->
key,
"h") == 0)
{
printf(commands);
return;
}
else if (strcmp(ev->
key,
"s") == 0)
{
printf("Top rectangle:\n");
_print_rect_stats(d.t_rect);
printf("\nBottom rectangle:\n");
_print_rect_stats(d.b_rect);
return;
}
if (!rect) return;
if (strcmp(ev->
key,
"a") == 0)
{
(r_data->align_ptr)++;
if ((unsigned int)
(((unsigned char *)(r_data->align_ptr)) - ((unsigned char *)(r_data->align))) >=
sizeof(r_data->align))
r_data->align_ptr = r_data->align;
rect, r_data->align_ptr->x, r_data->align_ptr->y);
printf("Changing align hints for %s rect. to (%f, %f)\n",
name, r_data->align_ptr->x, r_data->align_ptr->y);
return;
}
if (strcmp(ev->
key,
"m") == 0)
{
(r_data->min_ptr)++;
if ((unsigned int)
(((unsigned char *)(r_data->min_ptr)) - ((unsigned char *)(r_data->min))) >=
sizeof(r_data->min))
r_data->min_ptr = r_data->min;
rect, r_data->min_ptr->w, r_data->min_ptr->h);
printf("Changing min. size hints for %s rect. to (%d, %d)\n",
name, r_data->min_ptr->w, r_data->min_ptr->h);
return;
}
if (strcmp(ev->
key,
"n") == 0)
{
(r_data->max_ptr)++;
if ((unsigned int)
(((unsigned char *)(r_data->max_ptr)) - ((unsigned char *)(r_data->max))) >=
sizeof(r_data->max))
r_data->max_ptr = r_data->max;
rect, r_data->max_ptr->w, r_data->max_ptr->h);
printf("Changing max. size hints for %s rect. to (%d, %d)\n",
name, r_data->max_ptr->w, r_data->max_ptr->h);
return;
}
if (strcmp(ev->
key,
"p") == 0)
{
(r_data->padding_ptr)++;
if ((unsigned int)
(((unsigned char *)(r_data->padding_ptr)) - ((unsigned char *)(r_data->padding))) >=
sizeof(r_data->padding))
r_data->padding_ptr = r_data->padding;
rect, r_data->padding_ptr->l, r_data->padding_ptr->r,
r_data->padding_ptr->t, r_data->padding_ptr->b);
printf("Changing padding size hints for %s rect. to (%d, %d, %d, %d)\n",
name, r_data->padding_ptr->l, r_data->padding_ptr->r,
r_data->padding_ptr->t, r_data->padding_ptr->b);
return;
}
if (strcmp(ev->
key,
"w") == 0)
{
(r_data->weight_ptr)++;
if ((unsigned int)
(((unsigned char *)(r_data->weight_ptr)) - ((unsigned char *)(r_data->weight))) >=
sizeof(r_data->weight))
r_data->weight_ptr = r_data->weight;
rect, r_data->weight_ptr->x, r_data->weight_ptr->y);
printf("Changing weight hints for %s rect. to (%f, %f)\n",
name, r_data->weight_ptr->x, r_data->weight_ptr->y);
return;
}
}
static void
{
}
int
main(void)
{
return EXIT_FAILURE;
struct rect_data init_data = \
{
.min = {{0, 0}, {30, 30}, {100, 70}, {200, 200}},
.max = {{0, 0}, {100, 100}, {100, 70}, {300, 300}},
.align = {{0.0, 0.0}, {0.5, 0.5}, {1.0, 0.5}},
.weight = {{0.0, 0.0}, {3, 6}, {10, 100}},
.padding = {{0, 0, 0, 0}, {3, 6, 9, 12}, {10, 20, 0, 30}}
};
d.t_data = init_data;
d.t_data.min_ptr = d.t_data.min + 1;
d.t_data.max_ptr = d.t_data.max + 1;
d.t_data.align_ptr = d.t_data.align;
d.t_data.weight_ptr = d.t_data.weight;
d.t_data.padding_ptr = d.t_data.padding;
d.b_data = init_data;
d.b_data.min_ptr = d.b_data.min + 1;
d.b_data.max_ptr = d.b_data.max + 1;
d.b_data.align_ptr = d.b_data.align;
d.b_data.weight_ptr = d.b_data.weight;
d.b_data.padding_ptr = d.b_data.padding;
if (!d.ee)
goto error;
d.t_rect, d.t_data.min_ptr->w, d.t_data.min_ptr->h);
d.b_rect, d.b_data.min_ptr->w, d.b_data.min_ptr->h);
_canvas_resize_cb(d.ee);
printf(commands);
return 0;
error:
fprintf(stderr, "error: Requires at least one Evas engine built and linked"
" to ecore-evas for this example to run properly.\n");
return -1;
}