From 3c0d26e23e895a880a45aadecddac0e83dd4c812 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Sun, 13 Mar 2005 04:01:00 +0000 Subject: [PATCH] table smart that handles ONLY homogenous layout with table cells ONLY spanning 1 column or row... but hey - enough for the pager work... :) also fixed up e_box to properly clip and show/hide children etc. also optimised e_box to not re-configure on simple moves also remvoe typo from pager .edc SVN revision: 13719 --- data/themes/default_pager.edc | 2 +- src/bin/Makefile.am | 4 +- src/bin/e_box.c | 60 ++-- src/bin/e_includes.h | 1 + src/bin/e_table.c | 658 ++++++++++++++++++++++++++++++++++ src/bin/e_table.h | 23 ++ 6 files changed, 723 insertions(+), 25 deletions(-) create mode 100644 src/bin/e_table.c create mode 100644 src/bin/e_table.h diff --git a/data/themes/default_pager.edc b/data/themes/default_pager.edc index c5969cb49..c1b64cf78 100644 --- a/data/themes/default_pager.edc +++ b/data/themes/default_pager.edc @@ -47,7 +47,7 @@ group { } } } -//group { +group { name: "modules/pager/desk"; parts { part { diff --git a/src/bin/Makefile.am b/src/bin/Makefile.am index 4aba62777..12e22d3c9 100644 --- a/src/bin/Makefile.am +++ b/src/bin/Makefile.am @@ -41,7 +41,8 @@ e_iconify.h \ e_hints.h \ e_gadman.h \ e_signals.h \ -e_xinerama.h +e_xinerama.h \ +e_table.h enlightenment_SOURCES = \ @@ -77,6 +78,7 @@ e_hints.c \ e_gadman.c \ e_signals.c \ e_xinerama.c \ +e_table.c \ $(ENLIGHTENMENTHEADERS) enlightenment_LDFLAGS = -export-dynamic @e_libs@ @dlopen_libs@ diff --git a/src/bin/e_box.c b/src/bin/e_box.c index 22c9ff74f..0cbc403f1 100644 --- a/src/bin/e_box.c +++ b/src/bin/e_box.c @@ -10,6 +10,7 @@ struct _E_Smart_Data { Evas_Coord x, y, w, h; Evas_Object *obj; + Evas_Object *clip; int frozen; unsigned char changed : 1; unsigned char horizontal : 1; @@ -330,12 +331,14 @@ _e_box_smart_adopt(E_Smart_Data *sd, Evas_Object *obj) bi->min.h = 0; bi->max.w = 0; bi->max.h = 0; - evas_object_clip_set(obj, evas_object_clip_get(sd->obj)); + evas_object_clip_set(obj, sd->clip); evas_object_stack_above(obj, sd->obj); evas_object_smart_member_add(bi->sd->obj, obj); evas_object_data_set(obj, "e_box_data", bi); evas_object_event_callback_add(obj, EVAS_CALLBACK_FREE, _e_box_smart_item_del_hook, NULL); + if (!evas_object_visible_get(sd->clip)) + evas_object_show(sd->clip); return bi; } @@ -346,10 +349,16 @@ _e_box_smart_disown(Evas_Object *obj) bi = evas_object_data_get(obj, "e_box_data"); if (!bi) return; + if (!bi->sd->items) + { + if (evas_object_visible_get(bi->sd->clip)) + evas_object_hide(bi->sd->clip); + } evas_object_event_callback_del(obj, EVAS_CALLBACK_FREE, _e_box_smart_item_del_hook); evas_object_smart_member_del(bi->sd->obj); + evas_object_clip_unset(obj); evas_object_data_del(obj, "e_box_data"); free(bi); } @@ -512,13 +521,13 @@ _e_box_smart_reconfigure(E_Smart_Data *sd) sd->changed = 0; } -/* FIXME: need to have min/max size calc routines */ static void _e_box_smart_extents_calcuate(E_Smart_Data *sd) { Evas_List *l; int minw, minh; - + + /* FIXME: need to calc max */ sd->max.w = -1; /* max < 0 == unlimited */ sd->max.h = -1; @@ -612,6 +621,11 @@ _e_box_smart_add(Evas_Object *obj) sd->y = 0; sd->w = 0; sd->h = 0; + sd->clip = evas_object_rectangle_add(evas_object_evas_get(obj)); + evas_object_smart_member_add(obj, sd->clip); + evas_object_move(sd->clip, -100000, -100000); + evas_object_resize(sd->clip, 200000, 200000); + evas_object_color_set(sd->clip, 255, 255, 255, 255); evas_object_smart_data_set(obj, sd); } @@ -629,6 +643,7 @@ _e_box_smart_del(Evas_Object *obj) child = sd->items->data; e_box_unpack(child); } + evas_object_del(sd->clip); free(sd); } @@ -730,10 +745,22 @@ _e_box_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y) sd = evas_object_smart_data_get(obj); if (!sd) return; if ((x == sd->x) && (y == sd->y)) return; + { + Evas_List *l; + Evas_Coord dx, dy; + + dx = x - sd->x; + dy = y - sd->y; + for (l = sd->items; l; l = l->next) + { + Evas_Coord ox, oy; + + evas_object_geometry_get(l->data, &ox, &oy, NULL, NULL); + evas_object_move(l->data, ox + dx, oy + dy); + } + } sd->x = x; sd->y = y; - sd->changed = 1; - _e_box_smart_reconfigure(sd); } static void @@ -757,6 +784,7 @@ _e_box_smart_show(Evas_Object *obj) sd = evas_object_smart_data_get(obj); if (!sd) return; + if (sd->items) evas_object_show(sd->clip); } static void @@ -766,6 +794,7 @@ _e_box_smart_hide(Evas_Object *obj) sd = evas_object_smart_data_get(obj); if (!sd) return; + evas_object_hide(sd->clip); } static void @@ -775,6 +804,7 @@ _e_box_smart_color_set(Evas_Object *obj, int r, int g, int b, int a) sd = evas_object_smart_data_get(obj); if (!sd) return; + evas_object_color_set(sd->clip, r, g, b, a); } static void @@ -784,15 +814,7 @@ _e_box_smart_clip_set(Evas_Object *obj, Evas_Object *clip) sd = evas_object_smart_data_get(obj); if (!sd) return; - - { - Evas_List *l; - - for (l = sd->items; l; l = l->next) - { - evas_object_clip_set(l->data, clip); - } - } + evas_object_clip_set(sd->clip, clip); } static void @@ -802,13 +824,5 @@ _e_box_smart_clip_unset(Evas_Object *obj) sd = evas_object_smart_data_get(obj); if (!sd) return; - - { - Evas_List *l; - - for (l = sd->items; l; l = l->next) - { - evas_object_clip_unset(l->data); - } - } + evas_object_clip_unset(sd->clip); } diff --git a/src/bin/e_includes.h b/src/bin/e_includes.h index 4c8607a16..65177cacb 100644 --- a/src/bin/e_includes.h +++ b/src/bin/e_includes.h @@ -32,3 +32,4 @@ #include "e_gadman.h" #include "e_signals.h" #include "e_xinerama.h" +#include "e_table.h" diff --git a/src/bin/e_table.c b/src/bin/e_table.c new file mode 100644 index 000000000..ad20a92d6 --- /dev/null +++ b/src/bin/e_table.c @@ -0,0 +1,658 @@ +/* + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 + */ +#include "e.h" + +typedef struct _E_Smart_Data E_Smart_Data; +typedef struct _E_Table_Item E_Table_Item; + +struct _E_Smart_Data +{ + Evas_Coord x, y, w, h; + Evas_Object *obj; + Evas_Object *clip; + int frozen; + unsigned char changed : 1; + unsigned char homogenous : 1; + Evas_List *items; + struct { + Evas_Coord w, h; + } min, max; + struct { + double x, y; + } align; + struct { + int cols, rows; + } size; +}; + +struct _E_Table_Item +{ + E_Smart_Data *sd; + int col, row, colspan, rowspan; + unsigned char fill_w : 1; + unsigned char fill_h : 1; + unsigned char expand_w : 1; + unsigned char expand_h : 1; + struct { + Evas_Coord w, h; + } min, max; + struct { + double x, y; + } align; + Evas_Object *obj; +}; + +/* local subsystem functions */ +static E_Table_Item *_e_table_smart_adopt(E_Smart_Data *sd, Evas_Object *obj); +static void _e_table_smart_disown(Evas_Object *obj); +static void _e_table_smart_item_del_hook(void *data, Evas *e, Evas_Object *obj, void *event_info); +static void _e_table_smart_reconfigure(E_Smart_Data *sd); +static void _e_table_smart_extents_calcuate(E_Smart_Data *sd); + +static void _e_table_smart_init(void); +static void _e_table_smart_add(Evas_Object *obj); +static void _e_table_smart_del(Evas_Object *obj); +static void _e_table_smart_layer_set(Evas_Object *obj, int layer); +static void _e_table_smart_raise(Evas_Object *obj); +static void _e_table_smart_lower(Evas_Object *obj); +static void _e_table_smart_stack_above(Evas_Object *obj, Evas_Object * above); +static void _e_table_smart_stack_below(Evas_Object *obj, Evas_Object * below); +static void _e_table_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y); +static void _e_table_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h); +static void _e_table_smart_show(Evas_Object *obj); +static void _e_table_smart_hide(Evas_Object *obj); +static void _e_table_smart_color_set(Evas_Object *obj, int r, int g, int b, int a); +static void _e_table_smart_clip_set(Evas_Object *obj, Evas_Object *clip); +static void _e_table_smart_clip_unset(Evas_Object *obj); + +/* local subsystem globals */ +static Evas_Smart *_e_smart = NULL; + +/* externally accessible functions */ +Evas_Object * +e_table_add(Evas *evas) +{ + _e_table_smart_init(); + return evas_object_smart_add(evas, _e_smart); +} + +int +e_table_freeze(Evas_Object *obj) +{ + E_Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + sd->frozen++; + return sd->frozen; +} + +int +e_table_thaw(Evas_Object *obj) +{ + E_Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + sd->frozen--; + if (sd->frozen <= 0) _e_table_smart_reconfigure(sd); + return sd->frozen; +} + +void +e_table_homogenous_set(Evas_Object *obj, int homogenous) +{ + E_Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (sd->homogenous == homogenous) return; + sd->homogenous = homogenous; + sd->changed = 1; + if (sd->frozen <= 0) _e_table_smart_reconfigure(sd); +} + +int +e_table_pack(Evas_Object *obj, Evas_Object *child, int col, int row, int colspan, int rowspan) +{ + E_Smart_Data *sd; + E_Table_Item *ti; + + sd = evas_object_smart_data_get(obj); + _e_table_smart_adopt(sd, child); + sd->items = evas_list_append(sd->items, child); + ti = evas_object_data_get(obj, "e_table_data"); + if (ti) + { + ti->col = col; + ti->row = row; + ti->colspan = colspan; + ti->rowspan = rowspan; + if (sd->size.cols < (col + colspan)) sd->size.cols = col + colspan; + if (sd->size.rows < (row + rowspan)) sd->size.rows = row + rowspan; + } + sd->changed = 1; + if (sd->frozen <= 0) _e_table_smart_reconfigure(sd); + return 0; +} + +void +e_table_pack_options_set(Evas_Object *obj, int fill_w, int fill_h, int expand_w, int expand_h, double align_x, double align_y, Evas_Coord min_w, Evas_Coord min_h, Evas_Coord max_w, Evas_Coord max_h) +{ + E_Table_Item *ti; + + ti = evas_object_data_get(obj, "e_table_data"); + if (!ti) return; + ti->fill_w = fill_w; + ti->fill_h = fill_h; + ti->expand_w = expand_w; + ti->expand_h = expand_h; + ti->align.x = align_x; + ti->align.y = align_y; + ti->min.w = min_w; + ti->min.h = min_h; + ti->max.w = max_w; + ti->max.h = max_h; + ti->sd->changed = 1; + if (ti->sd->frozen <= 0) _e_table_smart_reconfigure(ti->sd); +} + +void +e_table_unpack(Evas_Object *obj) +{ + E_Table_Item *ti; + E_Smart_Data *sd; + + ti = evas_object_data_get(obj, "e_table_data"); + if (!ti) return; + sd = ti->sd; + sd->items = evas_list_remove(sd->items, obj); + _e_table_smart_disown(obj); + sd->changed = 1; + if (sd->frozen <= 0) _e_table_smart_reconfigure(sd); +} + +void +e_table_col_row_size_get(Evas_Object *obj, int *cols, int *rows) +{ + E_Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (sd->changed) _e_table_smart_extents_calcuate(sd); + if (cols) *cols = sd->size.cols; + if (rows) *rows = sd->size.rows; +} + +void +e_table_min_size_get(Evas_Object *obj, Evas_Coord *minw, Evas_Coord *minh) +{ + E_Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (sd->changed) _e_table_smart_extents_calcuate(sd); + if (minw) *minw = sd->min.w; + if (minh) *minh = sd->min.h; +} + +void +e_table_max_size_get(Evas_Object *obj, Evas_Coord *maxw, Evas_Coord *maxh) +{ + E_Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (sd->changed) _e_table_smart_extents_calcuate(sd); + if (maxw) *maxw = sd->max.w; + if (maxh) *maxh = sd->max.h; +} + +void +e_table_align_get(Evas_Object *obj, double *ax, double *ay) +{ + E_Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (ax) *ax = sd->align.x; + if (ay) *ay = sd->align.y; +} + +void +e_table_align_set(Evas_Object *obj, double ax, double ay) +{ + E_Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if ((sd->align.x == ax) && (sd->align.y == ay)) return; + sd->align.x = ax; + sd->align.y = ay; + sd->changed = 1; + if (sd->frozen <= 0) _e_table_smart_reconfigure(sd); +} + +/* local subsystem functions */ +static E_Table_Item * +_e_table_smart_adopt(E_Smart_Data *sd, Evas_Object *obj) +{ + E_Table_Item *ti; + + ti = calloc(1, sizeof(E_Table_Item)); + if (!ti) return NULL; + ti->sd = sd; + ti->obj = obj; + /* defaults */ + ti->col = 0; + ti->row = 0; + ti->colspan = 1; + ti->rowspan = 1; + ti->fill_w = 0; + ti->fill_h = 0; + ti->expand_w = 0; + ti->expand_h = 0; + ti->align.x = 0.5; + ti->align.y = 0.5; + ti->min.w = 0; + ti->min.h = 0; + ti->max.w = 0; + ti->max.h = 0; + evas_object_clip_set(obj, sd->clip); + evas_object_stack_above(obj, sd->obj); + evas_object_smart_member_add(ti->sd->obj, obj); + evas_object_data_set(obj, "e_table_data", ti); + evas_object_event_callback_add(obj, EVAS_CALLBACK_FREE, + _e_table_smart_item_del_hook, NULL); + if (!evas_object_visible_get(sd->clip)) + evas_object_show(sd->clip); + return ti; +} + +static void +_e_table_smart_disown(Evas_Object *obj) +{ + E_Table_Item *ti; + + ti = evas_object_data_get(obj, "e_table_data"); + if (!ti) return; + if (!ti->sd->items) + { + if (evas_object_visible_get(ti->sd->clip)) + evas_object_hide(ti->sd->clip); + } + evas_object_event_callback_del(obj, + EVAS_CALLBACK_FREE, + _e_table_smart_item_del_hook); + evas_object_smart_member_del(ti->sd->obj); + evas_object_data_del(obj, "e_table_data"); + free(ti); +} + +static void +_e_table_smart_item_del_hook(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + e_table_unpack(obj); +} + +static void +_e_table_smart_reconfigure(E_Smart_Data *sd) +{ + Evas_Coord x, y, w, h, xx, yy; + Evas_List *l; + int minw, minh, expandw, expandh; + + if (!sd->changed) return; + + x = sd->x; + y = sd->y; + w = sd->w; + h = sd->h; + + _e_table_smart_extents_calcuate(sd); + + minw = sd->min.w; + minh = sd->min.h; + expandw = 0; + expandh = 0; + if (w < minw) + { + x = x + ((w - minw) * (1.0 - sd->align.x)); + w = minw; + } + if (h < minh) + { + y = y + ((h - minh) * (1.0 - sd->align.y)); + h = minh; + } + for (l = sd->items; l; l = l->next) + { + E_Table_Item *ti; + Evas_Object *obj; + + obj = l->data; + ti = evas_object_data_get(obj, "e_table_data"); + if (ti->expand_w) expandw++; + if (ti->expand_w) expandh++; + } + if (expandw == 0) + { + x += (w - minw) / 2; + w = minw; + } + if (expandh == 0) + { + y += (h - minh) / 2; + h = minh; + } + xx = x; + yy = y; + for (l = sd->items; l; l = l->next) + { + E_Table_Item *ti; + Evas_Object *obj; + + obj = l->data; + ti = evas_object_data_get(obj, "e_table_data"); + if (sd->homogenous) + { + Evas_Coord ww, hh, ow, oh; + + xx = x + ((ti->col) * (w / (Evas_Coord)sd->size.cols)); + yy = y + ((ti->row) * (h / (Evas_Coord)sd->size.rows)); + ww = ((w / (Evas_Coord)sd->size.cols) * (ti->colspan)); + hh = ((h / (Evas_Coord)sd->size.rows) * (ti->rowspan)); + ow = ti->min.w; + if (ti->expand_w) ow = ww; + if ((ti->max.w >= 0) && (ti->max.w < ow)) ow = ti->max.w; + oh = ti->min.h; + if (ti->expand_h) oh = hh; + if ((ti->max.h >= 0) && (ti->max.h < oh)) oh = ti->max.h; + evas_object_move(obj, + xx + (Evas_Coord)(((double)(ww - ow)) * ti->align.x), + yy + (Evas_Coord)(((double)(hh - oh)) * ti->align.y)); + evas_object_resize(obj, ow, oh); + } + else + { + /* FIXME: not done - this is fucked atm */ + } + } + sd->changed = 0; +} + +static void +_e_table_smart_extents_calcuate(E_Smart_Data *sd) +{ + Evas_List *l; + int minw, minh; + + /* FIXME: need to calc max */ + sd->max.w = -1; /* max < 0 == unlimited */ + sd->max.h = -1; + sd->size.cols = 0; + sd->size.rows = 0; + + minw = 0; + minh = 0; + if (sd->homogenous) + { + for (l = sd->items; l; l = l->next) + { + E_Table_Item *ti; + Evas_Object *obj; + + obj = l->data; + ti = evas_object_data_get(obj, "e_table_data"); + if (sd->size.cols < (ti->col + ti->colspan)) + sd->size.cols = ti->col + ti->colspan; + if (sd->size.rows < (ti->row + ti->rowspan)) + sd->size.rows = ti->row + ti->rowspan; + /* FIXME: does not handle colspan or rowspan > 1 */ + if (minw < ti->min.w) minw = ti->min.w; + if (minh < ti->min.h) minh = ti->min.h; + } + minw *= sd->size.cols; + minh *= sd->size.rows; + } + else + { + /* FIXME: non homogenous does not work */ + } + sd->min.w = minw; + sd->min.h = minh; +} + +static void +_e_table_smart_init(void) +{ + if (_e_smart) return; + _e_smart = evas_smart_new("e_box", + _e_table_smart_add, + _e_table_smart_del, + _e_table_smart_layer_set, + _e_table_smart_raise, + _e_table_smart_lower, + _e_table_smart_stack_above, + _e_table_smart_stack_below, + _e_table_smart_move, + _e_table_smart_resize, + _e_table_smart_show, + _e_table_smart_hide, + _e_table_smart_color_set, + _e_table_smart_clip_set, + _e_table_smart_clip_unset, + NULL); +} + +static void +_e_table_smart_add(Evas_Object *obj) +{ + E_Smart_Data *sd; + + sd = calloc(1, sizeof(E_Smart_Data)); + if (!sd) return; + sd->obj = obj; + sd->x = 0; + sd->y = 0; + sd->w = 0; + sd->h = 0; + sd->clip = evas_object_rectangle_add(evas_object_evas_get(obj)); + evas_object_smart_member_add(obj, sd->clip); + evas_object_move(sd->clip, -100000, -100000); + evas_object_resize(sd->clip, 200000, 200000); + evas_object_color_set(sd->clip, 255, 255, 255, 255); + evas_object_smart_data_set(obj, sd); +} + +static void +_e_table_smart_del(Evas_Object *obj) +{ + E_Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + while (sd->items) + { + Evas_Object *child; + + child = sd->items->data; + e_table_unpack(child); + } + evas_object_del(sd->clip); + free(sd); +} + +static void +_e_table_smart_layer_set(Evas_Object *obj, int layer) +{ + E_Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + + { + Evas_List *l; + + for (l = sd->items; l; l = l->next) + { + evas_object_layer_set(l->data, layer); + } + } +} + +static void +_e_table_smart_raise(Evas_Object *obj) +{ + E_Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + + { + Evas_List *l; + + for (l = evas_list_last(sd->items); l; l = l->prev) + { + evas_object_raise(l->data); + } + } +} + +static void +_e_table_smart_lower(Evas_Object *obj) +{ + E_Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + + { + Evas_List *l; + + for (l = sd->items; l; l = l->next) + { + evas_object_lower(l->data); + } + } +} + +static void +_e_table_smart_stack_above(Evas_Object *obj, Evas_Object *above) +{ + E_Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + + { + Evas_List *l; + + for (l = sd->items; l; l = l->next) + { + evas_object_stack_above(l->data, above); + } + } +} + +static void +_e_table_smart_stack_below(Evas_Object *obj, Evas_Object *below) +{ + E_Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + + { + Evas_List *l; + + for (l = evas_list_last(sd->items); l; l = l->prev) + { + evas_object_stack_below(l->data, below); + } + } +} + +static void +_e_table_smart_move(Evas_Object *obj, Evas_Coord x, Evas_Coord y) +{ + E_Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + if ((x == sd->x) && (y == sd->y)) return; + if ((x == sd->x) && (y == sd->y)) return; + { + Evas_List *l; + Evas_Coord dx, dy; + + dx = x - sd->x; + dy = y - sd->y; + for (l = sd->items; l; l = l->next) + { + Evas_Coord ox, oy; + + evas_object_geometry_get(l->data, &ox, &oy, NULL, NULL); + evas_object_move(l->data, ox + dx, oy + dy); + } + } + sd->x = x; + sd->y = y; +} + +static void +_e_table_smart_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h) +{ + E_Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + if ((w == sd->w) && (h == sd->h)) return; + sd->w = w; + sd->h = h; + sd->changed = 1; + _e_table_smart_reconfigure(sd); +} + +static void +_e_table_smart_show(Evas_Object *obj) +{ + E_Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + if (sd->items) evas_object_show(sd->clip); +} + +static void +_e_table_smart_hide(Evas_Object *obj) +{ + E_Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + evas_object_hide(sd->clip); +} + +static void +_e_table_smart_color_set(Evas_Object *obj, int r, int g, int b, int a) +{ + E_Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + evas_object_color_set(sd->clip, r, g, b, a); +} + +static void +_e_table_smart_clip_set(Evas_Object *obj, Evas_Object *clip) +{ + E_Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + evas_object_clip_set(sd->clip, clip); +} + +static void +_e_table_smart_clip_unset(Evas_Object *obj) +{ + E_Smart_Data *sd; + + sd = evas_object_smart_data_get(obj); + if (!sd) return; + evas_object_clip_unset(sd->clip); +} diff --git a/src/bin/e_table.h b/src/bin/e_table.h new file mode 100644 index 000000000..985f6bffa --- /dev/null +++ b/src/bin/e_table.h @@ -0,0 +1,23 @@ +/* + * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2 + */ +#ifdef E_TYPEDEFS +#else +#ifndef E_TABLE_H +#define E_TABLE_H + +EAPI Evas_Object *e_table_add (Evas *evas); +EAPI int e_table_freeze (Evas_Object *obj); +EAPI int e_table_thaw (Evas_Object *obj); +EAPI void e_table_homogenous_set (Evas_Object *obj, int homogenous); +EAPI int e_table_pack (Evas_Object *obj, Evas_Object *child, int col, int row, int colspan, int rowspan); +EAPI void e_table_pack_options_set (Evas_Object *obj, int fill_w, int fill_h, int expand_w, int expand_h, double align_x, double align_y, Evas_Coord min_w, Evas_Coord min_h, Evas_Coord max_w, Evas_Coord max_h); +EAPI void e_table_unpack (Evas_Object *obj); +EAPI void e_table_col_row_size_get (Evas_Object *obj, int *cols, int *rows); +EAPI void e_table_min_size_get (Evas_Object *obj, Evas_Coord *minw, Evas_Coord *minh); +EAPI void e_table_max_size_get (Evas_Object *obj, Evas_Coord *maxw, Evas_Coord *maxh); +EAPI void e_table_align_get (Evas_Object *obj, double *ax, double *ay); +EAPI void e_table_align_set (Evas_Object *obj, double ax, double ay); + +#endif +#endif