Enlightenment CVS committal Author : moom Project : e17 Module : libs/etk
Dir : e17/libs/etk/src/lib Modified Files: etk_cache.c etk_entry.c etk_entry.h etk_label.c etk_main.c etk_tree2.c etk_tree2.h etk_tree2_model.c etk_tree2_model.h etk_widget.c etk_widget.h etk_window.c etk_window.h Log Message: Lib: ---- * [Tree2] More work and some fixes * [Widget] Add etk_widget_padding_set() * Various fixes Engine: ------- * [FB engine] Fb engine now supports mouse pointers, window's titles, borderless window, + a lot of fixes Theme: ------ * The widget theme has been separated from the WM theme (the WM theme is used by the FB engine) =================================================================== RCS file: /cvs/e/e17/libs/etk/src/lib/etk_cache.c,v retrieving revision 1.11 retrieving revision 1.12 diff -u -3 -r1.11 -r1.12 --- etk_cache.c 7 Jan 2007 03:46:05 -0000 1.11 +++ etk_cache.c 12 Jan 2007 02:53:56 -0000 1.12 @@ -37,6 +37,8 @@ cache = malloc(sizeof(Etk_Cache)); cache->cached_objects = NULL; cache->size = ETK_MAX(0, size); + cache->free_cb = NULL; + cache->free_cb_data = NULL; return cache; } @@ -254,7 +256,7 @@ if (!cache || !filename) return NULL; - for (l = evas_list_last(cache->cached_objects); l; l = l->prev) + for (l = cache->cached_objects; l; l = l->next) { item = l->data; if (strcmp(item->filename, filename) == 0 =================================================================== RCS file: /cvs/e/e17/libs/etk/src/lib/etk_entry.c,v retrieving revision 1.22 retrieving revision 1.23 diff -u -3 -r1.22 -r1.23 --- etk_entry.c 28 Nov 2006 21:40:07 -0000 1.22 +++ etk_entry.c 12 Jan 2007 02:53:56 -0000 1.23 @@ -181,6 +181,7 @@ entry->editable_object = NULL; entry->password_mode = ETK_FALSE; entry->selection_dragging = ETK_FALSE; + entry->pointer_set = ETK_FALSE; entry->text = NULL; etk_signal_connect("realize", ETK_OBJECT(entry), ETK_CALLBACK(_etk_entry_realize_cb), NULL); @@ -256,6 +257,7 @@ return; entry->editable_object = etk_editable_add(evas); + evas_object_pass_events_set(entry->editable_object, 1); etk_editable_theme_set(entry->editable_object, etk_widget_theme_file_get(ETK_WIDGET(entry)), etk_widget_theme_group_get(ETK_WIDGET(entry))); etk_editable_text_set(entry->editable_object, entry->text); @@ -420,24 +422,36 @@ etk_signal_stop(); } +static int _i = 0; + /* Called when the mouse enters the entry */ static void _etk_entry_mouse_in_cb(Etk_Object *object, Etk_Event_Mouse_In *event, void *data) { - Etk_Widget *entry_widget; + Etk_Entry *entry; - if (!(entry_widget = ETK_WIDGET(object))) + if (!(entry = ETK_ENTRY(object))) return; - etk_toplevel_pointer_push(etk_widget_toplevel_parent_get(entry_widget), ETK_POINTER_TEXT_EDIT); + + if (!entry->pointer_set) + { + entry->pointer_set = ETK_TRUE; + etk_toplevel_pointer_push(etk_widget_toplevel_parent_get(ETK_WIDGET(entry)), ETK_POINTER_TEXT_EDIT); + } } /* Called when the mouse leaves the entry */ static void _etk_entry_mouse_out_cb(Etk_Object *object, Etk_Event_Mouse_Out *event, void *data) { - Etk_Widget *entry_widget; + Etk_Entry *entry; - if (!(entry_widget = ETK_WIDGET(object))) + if (!(entry = ETK_ENTRY(object))) return; - etk_toplevel_pointer_pop(entry_widget->toplevel_parent, ETK_POINTER_TEXT_EDIT); + + if (entry->pointer_set) + { + entry->pointer_set = ETK_FALSE; + etk_toplevel_pointer_pop(etk_widget_toplevel_parent_get(ETK_WIDGET(entry)), ETK_POINTER_TEXT_EDIT); + } } /* Called when the entry is pressed by the mouse */ =================================================================== RCS file: /cvs/e/e17/libs/etk/src/lib/etk_entry.h,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- etk_entry.h 6 Oct 2006 17:04:14 -0000 1.7 +++ etk_entry.h 12 Jan 2007 02:53:56 -0000 1.8 @@ -32,6 +32,7 @@ Evas_Object *editable_object; Etk_Bool password_mode; Etk_Bool selection_dragging; + Etk_Bool pointer_set; char *text; }; =================================================================== RCS file: /cvs/e/e17/libs/etk/src/lib/etk_label.c,v retrieving revision 1.24 retrieving revision 1.25 diff -u -3 -r1.24 -r1.25 --- etk_label.c 27 Dec 2006 17:35:12 -0000 1.24 +++ etk_label.c 12 Jan 2007 02:53:56 -0000 1.25 @@ -259,7 +259,7 @@ if (!(label = ETK_LABEL(widget))) return; - etk_widget_size_request(widget, &requested_size); + _etk_label_size_request(widget, &requested_size); evas_object_move(label->text_object, geometry.x + (geometry.w - requested_size.w) * label->xalign, geometry.y + (geometry.h - requested_size.h) * label->yalign); evas_object_resize(label->text_object, requested_size.w + 1, requested_size.h); =================================================================== RCS file: /cvs/e/e17/libs/etk/src/lib/etk_main.c,v retrieving revision 1.35 retrieving revision 1.36 diff -u -3 -r1.35 -r1.36 --- etk_main.c 6 Oct 2006 17:04:14 -0000 1.35 +++ etk_main.c 12 Jan 2007 02:53:56 -0000 1.36 @@ -256,7 +256,16 @@ etk_toplevel_size_get(ETK_TOPLEVEL(widget), &geometry.w, &geometry.h); } else + { + int left, right, top, bottom; + etk_widget_geometry_get(widget, &geometry.x, &geometry.y, &geometry.w, &geometry.h); + etk_widget_padding_get(widget, &left, &right, &top, &bottom); + geometry.x -= left; + geometry.y -= top; + geometry.w += left + right; + geometry.h += top + bottom; + } etk_widget_size_allocate(widget, geometry); for (l = widget->children; l; l = l->next) =================================================================== RCS file: /cvs/e/e17/libs/etk/src/lib/etk_tree2.c,v retrieving revision 1.14 retrieving revision 1.15 diff -u -3 -r1.14 -r1.15 --- etk_tree2.c 6 Jan 2007 20:24:43 -0000 1.14 +++ etk_tree2.c 12 Jan 2007 02:53:56 -0000 1.15 @@ -13,6 +13,8 @@ #include "etk_signal_callback.h" #include "etk_utils.h" +/* TODO: bugs with several objects per model.. combining them.. */ + /** * @addtogroup Etk_Tree2 * @{ @@ -25,7 +27,6 @@ #define COL_RESIZE_THRESHOLD 3 #define MIN_ROW_HEIGHT 12 #define DEFAULT_ROW_HEIGHT 24 -#define MAX_OBJECTS_PER_MODEL 1 #define CELL_HMARGINS 4 #define CELL_VMARGINS 2 #define MODEL_INTERSPACE 8 @@ -2552,6 +2553,9 @@ etk_widget_theme_signal_emit(tree->grid, "etk,state,unfocused", ETK_FALSE); } +/* TODO: row_clicked event: sometimes it's a Etk_Event_Mouse_Up, sometimes a Etk_Event_Mouse_Down... */ +/* TODO: get_row_at_xy... */ + /* Called when a key is pressed while the tree is focused */ static void _etk_tree2_key_down_cb(Etk_Object *object, Etk_Event_Key_Down *event, void *data) { @@ -2570,13 +2574,14 @@ /* Up arrow: Select the previous row */ else if (strcmp(event->keyname, "Up") == 0) { - if (!(selected_row = etk_tree2_selected_row_get(tree)) - || !(row_to_select = etk_tree2_row_walk_prev(selected_row, ETK_FALSE))) + if (!(selected_row = etk_tree2_selected_row_get(tree))) { row_to_select = etk_tree2_last_row_get(tree); while (!etk_tree2_row_is_folded(row_to_select) && etk_tree2_row_last_child_get(row_to_select)) row_to_select = etk_tree2_row_last_child_get(row_to_select); } + else + row_to_select = etk_tree2_row_walk_prev(selected_row, ETK_FALSE); _etk_tree2_row_select(tree, row_to_select, event->modifiers); etk_tree2_row_scroll_to(row_to_select, ETK_FALSE); @@ -2585,11 +2590,10 @@ /* Down arrow: Select the next row */ else if (strcmp(event->keyname, "Down") == 0) { - if (!(selected_row = etk_tree2_selected_row_get(tree)) - || !(row_to_select = etk_tree2_row_walk_next(selected_row, ETK_FALSE))) - { + if (!(selected_row = etk_tree2_selected_row_get(tree))) row_to_select = etk_tree2_first_row_get(tree); - } + else + row_to_select = etk_tree2_row_walk_next(selected_row, ETK_FALSE); _etk_tree2_row_select(tree, row_to_select, event->modifiers); etk_tree2_row_scroll_to(row_to_select, ETK_FALSE); =================================================================== RCS file: /cvs/e/e17/libs/etk/src/lib/etk_tree2.h,v retrieving revision 1.11 retrieving revision 1.12 diff -u -3 -r1.11 -r1.12 --- etk_tree2.h 6 Jan 2007 20:24:43 -0000 1.11 +++ etk_tree2.h 12 Jan 2007 02:53:56 -0000 1.12 @@ -15,7 +15,8 @@ * @{ */ -#define MAX_MODELS_PER_COL 2 +#define MAX_MODELS_PER_COL 5 +#define MAX_OBJECTS_PER_MODEL 5 /** Gets the type of a tree */ #define ETK_TREE2_TYPE (etk_tree2_type_get()) =================================================================== RCS file: /cvs/e/e17/libs/etk/src/lib/etk_tree2_model.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- etk_tree2_model.c 6 Jan 2007 23:44:39 -0000 1.7 +++ etk_tree2_model.c 12 Jan 2007 02:53:56 -0000 1.8 @@ -46,44 +46,44 @@ static void _text_cell_data_free(Etk_Tree2_Model *model, void *cell_data); static void _text_cell_data_set(Etk_Tree2_Model *model, void *cell_data, va_list *args); static void _text_cell_data_get(Etk_Tree2_Model *model, void *cell_data, va_list *args); -static void _text_objects_create(Etk_Tree2_Model *model, Evas_Object **cell_objects, Evas *evas); -static Etk_Bool _text_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects, Evas *evas); -static int _text_width_get(Etk_Tree2_Model *model, void *cell_data, Evas_Object **cell_objects); +static void _text_objects_create(Etk_Tree2_Model *model, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL], Evas *evas); +static Etk_Bool _text_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL], Evas *evas); +static int _text_width_get(Etk_Tree2_Model *model, void *cell_data, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL]); /* Integer model */ static void _int_cell_data_set(Etk_Tree2_Model *model, void *cell_data, va_list *args); static void _int_cell_data_get(Etk_Tree2_Model *model, void *cell_data, va_list *args); -static Etk_Bool _int_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects, Evas *evas); +static Etk_Bool _int_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL], Evas *evas); /* Double model */ static void _double_cell_data_set(Etk_Tree2_Model *model, void *cell_data, va_list *args); static void _double_cell_data_get(Etk_Tree2_Model *model, void *cell_data, va_list *args); -static Etk_Bool _double_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects, Evas *evas); +static Etk_Bool _double_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL], Evas *evas); /* Image model */ static void _image_model_free(Etk_Tree2_Model *model); static void _image_cell_data_free(Etk_Tree2_Model *model, void *cell_data); static void _image_cell_data_set(Etk_Tree2_Model *model, void *cell_data, va_list *args); static void _image_cell_data_get(Etk_Tree2_Model *model, void *cell_data, va_list *args); -static void _image_objects_cache(Etk_Tree2_Model *model, void *cell_data, Evas_Object **cell_objects); -static Etk_Bool _image_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects, Evas *evas); -static int _image_width_get(Etk_Tree2_Model *model, void *cell_data, Evas_Object **cell_objects); +static void _image_objects_cache(Etk_Tree2_Model *model, void *cell_data, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL]); +static Etk_Bool _image_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL], Evas *evas); +static int _image_width_get(Etk_Tree2_Model *model, void *cell_data, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL]); /* Checkbox model */ static void _checkbox_cell_data_set(Etk_Tree2_Model *model, void *cell_data, va_list *args); static void _checkbox_cell_data_get(Etk_Tree2_Model *model, void *cell_data, va_list *args); -static void _checkbox_objects_create(Etk_Tree2_Model *model, Evas_Object **cell_objects, Evas *evas); -static Etk_Bool _checkbox_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects, Evas *evas); -static int _checkbox_width_get(Etk_Tree2_Model *model, void *cell_data, Evas_Object **cell_objects); +static void _checkbox_objects_create(Etk_Tree2_Model *model, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL], Evas *evas); +static Etk_Bool _checkbox_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL], Evas *evas); +static int _checkbox_width_get(Etk_Tree2_Model *model, void *cell_data, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL]); static void _checkbox_clicked_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); /* Progressbar model */ static void _progress_bar_cell_data_free(Etk_Tree2_Model *model, void *cell_data); static void _progress_bar_cell_data_set(Etk_Tree2_Model *model, void *cell_data, va_list *args); static void _progress_bar_cell_data_get(Etk_Tree2_Model *model, void *cell_data, va_list *args); -static void _progress_bar_objects_create(Etk_Tree2_Model *model, Evas_Object **cell_objects, Evas *evas); -static Etk_Bool _progress_bar_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects, Evas *evas); -static int _progress_bar_width_get(Etk_Tree2_Model *model, void *cell_data, Evas_Object **cell_objects); +static void _progress_bar_objects_create(Etk_Tree2_Model *model, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL], Evas *evas); +static Etk_Bool _progress_bar_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL], Evas *evas); +static int _progress_bar_width_get(Etk_Tree2_Model *model, void *cell_data, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL]); /************************** @@ -341,9 +341,9 @@ } /* Text: objects_create() */ -static void _text_objects_create(Etk_Tree2_Model *model, Evas_Object **cell_objects, Evas *evas) +static void _text_objects_create(Etk_Tree2_Model *model, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL], Evas *evas) { - if (!cell_objects || !evas) + if (!evas) return; cell_objects[0] = evas_object_text_add(evas); @@ -354,12 +354,12 @@ } /* Text: render() */ -static Etk_Bool _text_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects, Evas *evas) +static Etk_Bool _text_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL], Evas *evas) { char **text_data; int th; - if (!(text_data = cell_data) || !cell_objects || !cell_objects[0]) + if (!(text_data = cell_data) || !cell_objects[0]) return ETK_FALSE; evas_object_text_text_set(cell_objects[0], *text_data); @@ -371,11 +371,11 @@ } /* Text: width_get() */ -static int _text_width_get(Etk_Tree2_Model *model, void *cell_data, Evas_Object **cell_objects) +static int _text_width_get(Etk_Tree2_Model *model, void *cell_data, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL]) { int w; - if (!cell_objects || !cell_objects[0]) + if (!cell_objects[0]) return 0; evas_object_geometry_get(cell_objects[0], NULL, NULL, &w, NULL); @@ -411,13 +411,13 @@ } /* Int: render() */ -static Etk_Bool _int_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects, Evas *evas) +static Etk_Bool _int_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL], Evas *evas) { int *int_data; char string[256]; int th; - if (!(int_data = cell_data) || !cell_objects || !cell_objects[0]) + if (!(int_data = cell_data) || !cell_objects[0]) return ETK_FALSE; snprintf(string, 255, "%d", *int_data); @@ -458,13 +458,13 @@ } /* Double: render() */ -static Etk_Bool _double_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects, Evas *evas) +static Etk_Bool _double_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL], Evas *evas) { double *double_data; char string[256]; int th; - if (!(double_data = cell_data) || !model || !cell_objects || !cell_objects[0]) + if (!(double_data = cell_data) || !model || !cell_objects[0]) return ETK_FALSE; snprintf(string, 255, "%.2f", *double_data); @@ -546,12 +546,12 @@ } /* Image: objects_cache() */ -static void _image_objects_cache(Etk_Tree2_Model *model, void *cell_data, Evas_Object **cell_objects) +static void _image_objects_cache(Etk_Tree2_Model *model, void *cell_data, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL]) { Etk_Tree2_Model_Image *image_model; Etk_Tree2_Model_Image_Data *image_data; - if (!(image_model = (Etk_Tree2_Model_Image *)model) || !cell_objects || !cell_objects[0]) + if (!(image_model = (Etk_Tree2_Model_Image *)model) || !cell_objects[0]) return; image_data = cell_data; @@ -564,7 +564,7 @@ } /* Image: render() */ -static Etk_Bool _image_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects, Evas *evas) +static Etk_Bool _image_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL], Evas *evas) { Etk_Tree2_Model_Image *image_model; Etk_Tree2_Model_Image_Data *image_data; @@ -574,7 +574,7 @@ float aspect; char *ext; - if (!(image_model = (Etk_Tree2_Model_Image *)model) || !(image_data = cell_data) || !cell_objects || !evas) + if (!(image_model = (Etk_Tree2_Model_Image *)model) || !(image_data = cell_data) || !evas) return ETK_FALSE; if (!image_data->filename || image_data->type == ETK_TREE2_MODEL_NOT_FOUND) @@ -697,12 +697,12 @@ } /* Image: width_get() */ -static int _image_width_get(Etk_Tree2_Model *model, void *cell_data, Evas_Object **cell_objects) +static int _image_width_get(Etk_Tree2_Model *model, void *cell_data, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL]) { Etk_Tree2_Model_Image *image_model; int w; - if (!(image_model = (Etk_Tree2_Model_Image *)model) || !cell_objects || !cell_objects[0]) + if (!(image_model = (Etk_Tree2_Model_Image *)model) || !cell_objects[0]) return 0; if (image_model->width > 0) @@ -743,9 +743,9 @@ } /* Checkbox: objects_create() */ -static void _checkbox_objects_create(Etk_Tree2_Model *model, Evas_Object **cell_objects, Evas *evas) +static void _checkbox_objects_create(Etk_Tree2_Model *model, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL], Evas *evas) { - if (!model || !cell_objects || !evas) + if (!model || !evas) return; cell_objects[0] = edje_object_add(evas); @@ -754,12 +754,12 @@ } /* Checkbox: render() */ -static Etk_Bool _checkbox_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects, Evas *evas) +static Etk_Bool _checkbox_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL], Evas *evas) { Etk_Bool *checked; int w, h; - if (!(checked = cell_data) || !cell_objects || !cell_objects[0]) + if (!(checked = cell_data) || !cell_objects[0]) return ETK_FALSE; if (*checked) @@ -779,11 +779,11 @@ } /* Checkbox: width_get() */ -static int _checkbox_width_get(Etk_Tree2_Model *model, void *cell_data, Evas_Object **cell_objects) +static int _checkbox_width_get(Etk_Tree2_Model *model, void *cell_data, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL]) { int w; - if (!cell_objects || !cell_objects[0]) + if (!cell_objects[0]) return 0; evas_object_geometry_get(cell_objects[0], NULL, NULL, &w, NULL); @@ -869,9 +869,9 @@ } /* Progressbar: objects_create() */ -static void _progress_bar_objects_create(Etk_Tree2_Model *model, Evas_Object **cell_objects, Evas *evas) +static void _progress_bar_objects_create(Etk_Tree2_Model *model, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL], Evas *evas) { - if (!model || !cell_objects || !evas) + if (!model || !evas) return; cell_objects[0] = edje_object_add(evas); @@ -879,12 +879,12 @@ } /* Progressbar: render() */ -static Etk_Bool _progress_bar_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects, Evas *evas) +static Etk_Bool _progress_bar_render(Etk_Tree2_Model *model, Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL], Evas *evas) { Etk_Tree2_Model_Progressbar_Data *pbar_data; int w, h; - if (!(pbar_data = cell_data) || !cell_objects || !cell_objects[0]) + if (!(pbar_data = cell_data) || !cell_objects[0]) return ETK_FALSE; edje_object_part_drag_value_set(cell_objects[0], "etk.dragable.filler", 0.0, 0.0); @@ -902,11 +902,11 @@ } /* Progressbar: width_get() */ -static int _progress_bar_width_get(Etk_Tree2_Model *model, void *cell_data, Evas_Object **cell_objects) +static int _progress_bar_width_get(Etk_Tree2_Model *model, void *cell_data, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL]) { int w; - if (!cell_objects || !cell_objects[0]) + if (!cell_objects[0]) return 0; evas_object_geometry_get(cell_objects[0], NULL, NULL, &w, NULL); =================================================================== RCS file: /cvs/e/e17/libs/etk/src/lib/etk_tree2_model.h,v retrieving revision 1.6 retrieving revision 1.7 diff -u -3 -r1.6 -r1.7 --- etk_tree2_model.h 6 Jan 2007 23:44:39 -0000 1.6 +++ etk_tree2_model.h 12 Jan 2007 02:53:56 -0000 1.7 @@ -4,6 +4,7 @@ #include <stdarg.h> #include <Evas.h> +#include "etk_tree2.h" #include "etk_types.h" /** @@ -27,10 +28,10 @@ void (*cell_data_free)(Etk_Tree2_Model *model, void *cell_data); void (*cell_data_set)(Etk_Tree2_Model *model, void *cell_data, va_list *args); void (*cell_data_get)(Etk_Tree2_Model *model, void *cell_data, va_list *args); - void (*objects_create)(Etk_Tree2_Model *model, Evas_Object **cell_objects, Evas *evas); - void (*objects_cache)(Etk_Tree2_Model *model, void *cell_data, Evas_Object **cell_objects); - Etk_Bool (*render)(Etk_Tree2_Model *model, Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object **cell_objects, Evas *evas); - int (*width_get)(Etk_Tree2_Model *model, void *cell_data, Evas_Object **cell_objects); + void (*objects_create)(Etk_Tree2_Model *model, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL], Evas *evas); + void (*objects_cache)(Etk_Tree2_Model *model, void *cell_data, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL]); + Etk_Bool (*render)(Etk_Tree2_Model *model, Etk_Tree2_Row *row, Etk_Geometry geometry, void *cell_data, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL], Evas *evas); + int (*width_get)(Etk_Tree2_Model *model, void *cell_data, Evas_Object *cell_objects[MAX_OBJECTS_PER_MODEL]); }; Etk_Tree2_Model *etk_tree2_model_text_new(void); =================================================================== RCS file: /cvs/e/e17/libs/etk/src/lib/etk_widget.c,v retrieving revision 1.92 retrieving revision 1.93 diff -u -3 -r1.92 -r1.93 --- etk_widget.c 31 Dec 2006 13:04:44 -0000 1.92 +++ etk_widget.c 12 Jan 2007 02:53:56 -0000 1.93 @@ -73,6 +73,7 @@ ETK_WIDGET_THEME_FILE_PROPERTY, ETK_WIDGET_THEME_GROUP_PROPERTY, ETK_WIDGET_THEME_PARENT_PROPERTY, + ETK_WIDGET_PADDING_PROPERTY, ETK_WIDGET_GEOMETRY_PROPERTY, ETK_WIDGET_WIDTH_REQUEST_PROPERTY, ETK_WIDGET_HEIGHT_REQUEST_PROPERTY, @@ -183,7 +184,7 @@ * @brief Gets the type of an Etk_Widget * @return Returns the type of an Etk_Widget */ -Etk_Type *etk_widget_type_get() +Etk_Type *etk_widget_type_get(void) { static Etk_Type *widget_type = NULL; @@ -253,6 +254,8 @@ ETK_PROPERTY_STRING, ETK_PROPERTY_READABLE_WRITABLE, etk_property_value_string(NULL)); etk_type_property_add(widget_type, "theme_parent", ETK_WIDGET_THEME_PARENT_PROPERTY, ETK_PROPERTY_POINTER, ETK_PROPERTY_READABLE_WRITABLE, etk_property_value_pointer(NULL)); + etk_type_property_add(widget_type, "padding", ETK_WIDGET_PADDING_PROPERTY, + ETK_PROPERTY_OTHER, ETK_PROPERTY_NO_ACCESS, NULL); etk_type_property_add(widget_type, "geometry", ETK_WIDGET_GEOMETRY_PROPERTY, ETK_PROPERTY_OTHER, ETK_PROPERTY_NO_ACCESS, NULL); etk_type_property_add(widget_type, "width_request", ETK_WIDGET_WIDTH_REQUEST_PROPERTY, @@ -324,7 +327,8 @@ /** * @brief Gets the inner geometry of the widget, relative to the top-left corner of the Evas where it is drawn. @n - * The inner geometry takes the inset values (horizontal and vertical paddings) into account + * The inner geometry corresponds to the rectangle in which the widget's children are rendered. This rectangle may be + * smaller than the geometry of the widget because inset values can be set by the theme * @param widget a widget * @param x the location where to store the inner x position of the widget * @param y the location where to store the inner y position of the widget @@ -340,6 +344,49 @@ } /** + * @brief Sets the padding on the different sides of the widget. + * The padding adds blank space to the sides of the widget + * @param widget a widget + * @param left the padding at the left of the widget + * @param right the padding at the right of the widget + * @param top the padding at the top of the widget + * @param bottom the padding at the bottom of the widget + */ +void etk_widget_padding_set(Etk_Widget *widget, int left, int right, int top, int bottom) +{ + if (!widget) + return; + + widget->padding.left = ETK_MAX(0, left); + widget->padding.right = ETK_MAX(0, right); + widget->padding.top = ETK_MAX(0, top); + widget->padding.bottom = ETK_MAX(0, bottom); + + etk_object_notify(ETK_OBJECT(widget), "padding"); + etk_widget_size_recalc_queue(widget); +} + +/** + * @brief Gets the padding on the different sides of the widget + * @param widget a widget + * @param left the location where to store the padding at the left of the widget + * @param right the location where to store the padding at the right of the widget + * @param top the location where to store the padding at the top of the widget + * @param bottom the location where to store the padding at the bottom of the widget + */ +void etk_widget_padding_get(Etk_Widget *widget, int *left, int *right, int *top, int *bottom) +{ + if (left) + *left = widget ? widget->padding.left : 0; + if (right) + *right = widget ? widget->padding.right : 0; + if (top) + *top = widget ? widget->padding.top : 0; + if (bottom) + *bottom = widget ? widget->padding.bottom : 0; +} + +/** * @brief Gets the toplevel widget that contains @a widget * @param widget a widget * @return Returns the toplevel widget if @a widget is contained by a toplevel widget, or NULL otherwise @@ -945,6 +992,7 @@ * @param widget a widget * @param w the width to request (-1 will make Etk calculate it automatically) * @param h the height to request (-1 will make Etk calculate it automatically) + * @note The padding values will be added to the final size-request */ void etk_widget_size_request_set(Etk_Widget *widget, int w, int h) { @@ -990,8 +1038,8 @@ if (!widget->realized) { - size_requisition->w = 0; - size_requisition->h = 0; + size_requisition->w = widget->padding.left + widget->padding.right; + size_requisition->h = widget->padding.top + widget->padding.bottom; return; } @@ -1042,8 +1090,11 @@ if (widget->visible || !hidden_has_no_size) widget->last_calced_size = *size_requisition; + + size_requisition->w += widget->padding.left + widget->padding.right; + size_requisition->h += widget->padding.top + widget->padding.bottom; + widget->need_size_recalc = ETK_FALSE; - etk_signal_emit(_etk_widget_signals[ETK_WIDGET_SIZE_REQUEST_SIGNAL], ETK_OBJECT(widget), NULL, size_requisition); } @@ -1056,12 +1107,15 @@ */ void etk_widget_size_allocate(Etk_Widget *widget, Etk_Geometry geometry) { + int x, y, w, h; + if (!widget || widget->swallowed || !widget->smart_object) return; - - if (geometry.x != widget->geometry.x || geometry.y != widget->geometry.y || widget->need_redraw) + + evas_object_geometry_get(widget->smart_object, &x, &y, &w, &h); + if (geometry.x != x || geometry.y != y || widget->need_redraw) evas_object_move(widget->smart_object, geometry.x, geometry.y); - if (geometry.w != widget->geometry.w || geometry.h != widget->geometry.h || widget->need_redraw) + if (geometry.w != w || geometry.h != h || widget->need_redraw) evas_object_resize(widget->smart_object, geometry.w, geometry.h); } @@ -1800,7 +1854,7 @@ * @brief Gets the list of the widgets that are dnd destinations * @return Returns the list of the dnd destination widgets */ -Evas_List *etk_widget_dnd_dest_widgets_get() +Evas_List *etk_widget_dnd_dest_widgets_get(void) { return _etk_widget_dnd_dest_widgets; } @@ -1924,6 +1978,10 @@ widget->inset.right = 0; widget->inset.top = 0; widget->inset.bottom = 0; + widget->padding.left = 0; + widget->padding.right = 0; + widget->padding.top = 0; + widget->padding.bottom = 0; widget->geometry.x = -1; widget->geometry.y = -1; @@ -3178,6 +3236,9 @@ if (!obj || !(widget = ETK_WIDGET(evas_object_smart_data_get(obj)))) return; + + x += widget->padding.left; + y += widget->padding.top; if (x != widget->geometry.x || y != widget->geometry.y) { @@ -3231,6 +3292,9 @@ if (!obj || !(widget = ETK_WIDGET(evas_object_smart_data_get(obj)))) return; + + w -= widget->padding.left + widget->padding.right; + h -= widget->padding.top + widget->padding.bottom; if (w != widget->geometry.w || h != widget->geometry.h || widget->need_redraw) { @@ -3711,6 +3775,11 @@ * \par * @prop_name "geometry": The geometry of the widget (use etk_widget_geometry_get() to get it) * @prop_type Other (Etk_Geometry) + * @prop_na + * \par + * @prop_name "padding": The padding on the different sides of the widget + * (see etk_widget_padding_set() and etk_widget_padding_get()) + * @prop_type Other (quadruplets of integers) * @prop_na * \par * @prop_name "width_request": The width requested for the widget (-1 means it's calculated automatically) =================================================================== RCS file: /cvs/e/e17/libs/etk/src/lib/etk_widget.h,v retrieving revision 1.41 retrieving revision 1.42 diff -u -3 -r1.41 -r1.42 --- etk_widget.h 20 Oct 2006 17:51:44 -0000 1.41 +++ etk_widget.h 12 Jan 2007 02:53:56 -0000 1.42 @@ -66,7 +66,7 @@ struct { int left, right, top, bottom; - } inset; + } inset, padding; Etk_Geometry geometry; Etk_Geometry inner_geometry; Etk_Size theme_min_size; @@ -116,11 +116,13 @@ }; -Etk_Type *etk_widget_type_get(); +Etk_Type *etk_widget_type_get(void); Etk_Widget *etk_widget_new(Etk_Type *widget_type, const char *first_property, ...); void etk_widget_geometry_get(Etk_Widget *widget, int *x, int *y, int *w, int *h); void etk_widget_inner_geometry_get(Etk_Widget *widget, int *x, int *y, int *w, int *h); +void etk_widget_padding_set(Etk_Widget *widget, int left, int right, int top, int bottom); +void etk_widget_padding_get(Etk_Widget *widget, int *left, int *right, int *top, int *bottom); Etk_Toplevel *etk_widget_toplevel_parent_get(Etk_Widget *widget); Evas *etk_widget_toplevel_evas_get(Etk_Widget *widget); @@ -196,7 +198,7 @@ void etk_widget_dnd_dest_set(Etk_Widget *widget, Etk_Bool on); Etk_Bool etk_widget_dnd_dest_get(Etk_Widget *widget); -Evas_List *etk_widget_dnd_dest_widgets_get(); +Evas_List *etk_widget_dnd_dest_widgets_get(void); void etk_widget_dnd_source_set(Etk_Widget *widget, Etk_Bool on); Etk_Bool etk_widget_dnd_source_get(Etk_Widget *widget); void etk_widget_dnd_drag_widget_set(Etk_Widget *widget, Etk_Widget *drag_widget); =================================================================== RCS file: /cvs/e/e17/libs/etk/src/lib/etk_window.c,v retrieving revision 1.40 retrieving revision 1.41 diff -u -3 -r1.40 -r1.41 --- etk_window.c 6 Oct 2006 17:04:15 -0000 1.40 +++ etk_window.c 12 Jan 2007 02:53:56 -0000 1.41 @@ -526,8 +526,6 @@ if (!window) return; - window->width = 0; - window->height = 0; window->wait_size_request = ETK_TRUE; window->center = ETK_FALSE; window->center_on_window = NULL; @@ -695,12 +693,6 @@ if (requested_size->w >= 0 && requested_size->h >= 0) { etk_engine_window_size_min_set(window, requested_size->w, requested_size->h); - if (window->width < requested_size->w || window->height < requested_size->h) - { - window->width = ETK_MAX(window->width, requested_size->w); - window->height = ETK_MAX(window->height, requested_size->h); - etk_engine_window_resize(window, window->width, window->height); - } if (window->wait_size_request) { =================================================================== RCS file: /cvs/e/e17/libs/etk/src/lib/etk_window.h,v retrieving revision 1.18 retrieving revision 1.19 diff -u -3 -r1.18 -r1.19 --- etk_window.h 6 Oct 2006 17:04:15 -0000 1.18 +++ etk_window.h 12 Jan 2007 02:53:56 -0000 1.19 @@ -38,9 +38,6 @@ void *engine_data; - int width; - int height; - Etk_Bool (*delete_event)(Etk_Window *window); Etk_Bool wait_size_request; Etk_Bool center; @@ -95,7 +92,6 @@ void etk_window_skip_pager_hint_set(Etk_Window *window, Etk_Bool skip_pager_hint); Etk_Bool etk_window_skip_pager_hint_get(Etk_Window *window); -/* Misc */ Etk_Bool etk_window_hide_on_delete(Etk_Object *window, void *data); /** @} */ ------------------------------------------------------------------------- Take Surveys. Earn Cash. Influence the Future of IT Join SourceForge.net's Techsay panel and you'll get the chance to share your opinions on IT & business topics through brief surveys - and earn cash http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs