From bc5be0a810a40d9c4005dd7a8e075ae5aee19374 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Thu, 8 Mar 2001 23:30:42 +0000 Subject: [PATCH] slightly more errr... mature things for packing... working on it.. all oo... :) SVN revision: 4356 --- src/e.h | 20 +++++++++++++++- src/entry.c | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main.c | 1 + src/pack.c | 22 +++++++++++++++++- 4 files changed, 108 insertions(+), 2 deletions(-) diff --git a/src/e.h b/src/e.h index 6a62155b4..2325dac10 100644 --- a/src/e.h +++ b/src/e.h @@ -555,6 +555,7 @@ struct _E_Entry int focused; int scroll_pos; int x, y, w, h; + int min_size; Ebits_Object obj_base; Ebits_Object obj_cursor; Ebits_Object obj_selection; @@ -590,8 +591,20 @@ struct _E_Pack_Object_Class void (*resize) (void *object, int w, int h); void (*min) (void *object, int *w, int *h); void (*max) (void *object, int *w, int *h); + void (*size) (void *object, int x, int y); }; +#define PACK_HBOX 0 +#define PACK_VBOX 1 +#define PACK_TABLE 2 +#define PACK_ENTRY 3 +#define PACK_LABEL 4 +#define PACK_BUTTON 5 +#define PACK_RADIO 6 +#define PACK_CHECK 7 + +#define PACK_MAX 8 + struct _E_Pack_Object { int type; @@ -610,7 +623,7 @@ struct _E_Pack_Object }; #define DO(_object, _method, _args...) \ -{ if (_object->class._method) _object->class._method(_object, ## _args); } +{ if (_object->class._method) _object->class._method(_object->data.object, ## _args); } void e_entry_init(void); void e_entry_free(E_Entry *entry); @@ -619,12 +632,17 @@ void e_entry_handle_keypress(E_Entry *entry, Ev_Key_Down *e); void e_entry_set_evas(E_Entry *entry, Evas evas); void e_entry_show(E_Entry *entry); void e_entry_hide(E_Entry *entry); +void e_entry_raise(E_Entry *entry); +void e_entry_lower(E_Entry *entry); void e_entry_set_layer(E_Entry *entry, int l); void e_entry_set_clip(E_Entry *entry, Evas_Object clip); void e_entry_unset_clip(E_Entry *entry); void e_entry_move(E_Entry *entry, int x, int y); void e_entry_resize(E_Entry *entry, int w, int h); void e_entry_query_max_size(E_Entry *entry, int *w, int *h); +void e_entry_max_size(E_Entry *entry, int *w, int *h); +void e_entry_min_size(E_Entry *entry, int *w, int *h); +void e_entry_set_size(E_Entry *entry, int w, int h); void e_entry_set_focus(E_Entry *entry, int focused); void e_entry_set_text(E_Entry *entry, const char *text); const char *e_entry_get_text(E_Entry *entry); diff --git a/src/entry.c b/src/entry.c index 226942925..462a00598 100644 --- a/src/entry.c +++ b/src/entry.c @@ -531,6 +531,28 @@ e_entry_hide(E_Entry *entry) evas_hide(entry->evas, entry->text); } +void +e_entry_raise(E_Entry *entry) +{ + if (entry->obj_base) ebits_raise(entry->obj_base); + evas_raise(entry->evas, entry->clip_box); + evas_raise(entry->evas, entry->text); + if (entry->obj_selection) ebits_raise(entry->obj_selection); + if (entry->obj_cursor) ebits_raise(entry->obj_cursor); + evas_raise(entry->evas, entry->event_box); +} + +void +e_entry_lower(E_Entry *entry) +{ + evas_lower(entry->evas, entry->event_box); + if (entry->obj_cursor) ebits_lower(entry->obj_cursor); + if (entry->obj_selection) ebits_lower(entry->obj_selection); + evas_lower(entry->evas, entry->text); + evas_lower(entry->evas, entry->clip_box); + if (entry->obj_base) ebits_lower(entry->obj_base); +} + void e_entry_set_layer(E_Entry *entry, int l) { @@ -589,6 +611,51 @@ e_entry_query_max_size(E_Entry *entry, int *w, int *h) if (h) *h = evas_get_text_height(entry->evas, entry->text) + p1t + p1b + p2t + p2b; } +void +e_entry_max_size(E_Entry *entry, int *w, int *h) +{ + int p1l, p1r, p1t, p1b; + int p2l, p2r, p2t, p2b; + + p1l = p1r = p1t = p1b = 0; + if (entry->obj_base) ebits_get_insets(entry->obj_base, &p1l, &p1r, &p1t, &p1b); + p2l = p2r = p2t = p2b = 0; + if (entry->obj_cursor) ebits_get_insets(entry->obj_cursor, &p2l, &p2r, &p2t, &p2b); + if (w) *w = 8000; + if (h) *h = evas_get_text_height(entry->evas, entry->text) + p1t + p1b + p2t + p2b; +} + +void +e_entry_min_size(E_Entry *entry, int *w, int *h) +{ + int p1l, p1r, p1t, p1b; + int p2l, p2r, p2t, p2b; + + p1l = p1r = p1t = p1b = 0; + if (entry->obj_base) ebits_get_insets(entry->obj_base, &p1l, &p1r, &p1t, &p1b); + p2l = p2r = p2t = p2b = 0; + if (entry->obj_cursor) ebits_get_insets(entry->obj_cursor, &p2l, &p2r, &p2t, &p2b); + if (w) *w = p1l + p1r + p2l + p2r + entry->min_size; + if (h) *h = evas_get_text_height(entry->evas, entry->text) + p1t + p1b + p2t + p2b; +} + +void +e_entry_set_size(E_Entry *entry, int w, int h) +{ + int p1l, p1r, p1t, p1b; + int p2l, p2r, p2t, p2b; + + p1l = p1r = p1t = p1b = 0; + if (entry->obj_base) ebits_get_insets(entry->obj_base, &p1l, &p1r, &p1t, &p1b); + p2l = p2r = p2t = p2b = 0; + if (entry->obj_cursor) ebits_get_insets(entry->obj_cursor, &p2l, &p2r, &p2t, &p2b); + if (p1l + p1r + p2l + p2r + w > entry->w) + { + entry->min_size = w; + e_entry_configure(entry); + } +} + void e_entry_set_focus(E_Entry *entry, int focused) { diff --git a/src/main.c b/src/main.c index 6115194bc..9368ef662 100644 --- a/src/main.c +++ b/src/main.c @@ -47,6 +47,7 @@ main(int argc, char **argv) e_event_filter_init(); e_ev_x_init(); + e_pack_object_init(); e_fs_init(); e_desktops_init(); e_border_init(); diff --git a/src/pack.c b/src/pack.c index 0714f132a..1f0c93ee0 100644 --- a/src/pack.c +++ b/src/pack.c @@ -1,10 +1,29 @@ #include "e.h" -E_Pack_Object_Class classes[1]; +E_Pack_Object_Class classes[PACK_MAX]; void e_pack_object_init(void) { + ZERO(classes, E_Pack_Object_Class, PACK_MAX); + classes[PACK_ENTRY] = (E_Pack_Object_Class) + { + e_entry_new, + e_entry_free, + e_entry_show, + e_entry_hide, + e_entry_raise, + e_entry_lower, + e_entry_set_layer, + e_entry_set_evas, + e_entry_set_clip, + e_entry_unset_clip, + e_entry_move, + e_entry_resize, + e_entry_min_size, + e_entry_max_size, + e_entry_set_size + }; } E_Pack_Object * @@ -16,5 +35,6 @@ e_pack_object_new(int type) ZERO(po, E_Pack_Object, 1); po->type = type; po->class = classes[type]; + po->data.object = po->class.new(); return po; }