From 477a40e79bc7851c775604676d4111d972158be9 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Tue, 14 Feb 2006 13:09:01 +0000 Subject: [PATCH] working on shelves ... and a bit on gadcon. SVN revision: 20456 --- src/bin/e_gadcon.c | 5 ++ src/bin/e_gadcon.h | 10 ++- src/bin/e_main.c | 2 +- src/bin/e_shelf.c | 114 ++++++++++++++++++++++++++++++--- src/bin/e_shelf.h | 11 +++- src/modules/start/e_mod_main.c | 6 ++ 6 files changed, 134 insertions(+), 14 deletions(-) diff --git a/src/bin/e_gadcon.c b/src/bin/e_gadcon.c index 73a5b2012..cfc519355 100644 --- a/src/bin/e_gadcon.c +++ b/src/bin/e_gadcon.c @@ -458,6 +458,11 @@ e_gadcon_client_size_request(E_Gadcon_Client *gcc, Evas_Coord w, Evas_Coord h) case E_GADCON_ORIENT_RIGHT: e_gadcon_layout_pack_size_set(gcc->o_base, h); break; + case E_GADCON_ORIENT_FLOAT: + case E_GADCON_ORIENT_CORNER_TL: + case E_GADCON_ORIENT_CORNER_TR: + case E_GADCON_ORIENT_CORNER_BL: + case E_GADCON_ORIENT_CORNER_BR: default: break; } diff --git a/src/bin/e_gadcon.h b/src/bin/e_gadcon.h index 7e2fa3e94..d90ac4afb 100644 --- a/src/bin/e_gadcon.h +++ b/src/bin/e_gadcon.h @@ -12,13 +12,17 @@ typedef enum _E_Gadcon_Layout_Policy typedef enum _E_Gadcon_Orient { /* generic orientations */ - E_GADCON_ORIENT_HORIZ, + E_GADCON_ORIENT_FLOAT, + E_GADCON_ORIENT_HORIZ, E_GADCON_ORIENT_VERT, - /* specific oreintations */ E_GADCON_ORIENT_LEFT, E_GADCON_ORIENT_RIGHT, E_GADCON_ORIENT_TOP, - E_GADCON_ORIENT_BOTTOM + E_GADCON_ORIENT_BOTTOM, + E_GADCON_ORIENT_CORNER_TL, + E_GADCON_ORIENT_CORNER_TR, + E_GADCON_ORIENT_CORNER_BL, + E_GADCON_ORIENT_CORNER_BR } E_Gadcon_Orient; typedef struct _E_Gadcon E_Gadcon; diff --git a/src/bin/e_main.c b/src/bin/e_main.c index 865c5a976..0c4326bea 100644 --- a/src/bin/e_main.c +++ b/src/bin/e_main.c @@ -683,7 +683,7 @@ main(int argc, char **argv) E_Shelf *es; zone = l3->data; - es = e_shelf_zone_new(zone, "shelf"); + es = e_shelf_zone_new(zone, "shelf", 0, 200); e_shelf_populate(es); } } diff --git a/src/bin/e_shelf.c b/src/bin/e_shelf.c index 3dbb1e454..206ce8db2 100644 --- a/src/bin/e_shelf.c +++ b/src/bin/e_shelf.c @@ -22,7 +22,7 @@ e_shelf_shutdown(void) } EAPI E_Shelf * -e_shelf_zone_new(E_Zone *zone, char *name) +e_shelf_zone_new(E_Zone *zone, char *name, int popup, int layer) { E_Shelf *es; char buf[1024]; @@ -32,21 +32,43 @@ e_shelf_zone_new(E_Zone *zone, char *name) /* FIXME: geometry, layer and style shoudl be loaded from config for this named shelf */ - es->popup = e_popup_new(zone, 0, 0, zone->w, 32); - e_popup_layer_set(es->popup, 255); + es->x = 0; + es->y = 0; + es->w = zone->w; + es->h = 32; + if (popup) + { + es->popup = e_popup_new(zone, es->x, es->y, es->w, es->h); + e_popup_layer_set(es->popup, layer); + es->ee = es->popup->ecore_evas; + es->evas = es->popup->evas; + } + else + { + es->ee = zone->container->bg_ecore_evas; + es->evas = zone->container->bg_evas; + } + es->layer = layer; + es->zone = zone; es->style = strdup("default"); - es->ee = es->popup->ecore_evas; - es->evas = es->popup->evas; es->o_base = edje_object_add(es->evas); es->name = strdup(name); snprintf(buf, sizeof(buf), "shelf/%s/base", es->style); - evas_object_resize(es->o_base, es->popup->w, es->popup->h); + evas_object_resize(es->o_base, es->w, es->h); if (!e_theme_edje_object_set(es->o_base, "base/theme/shelf", buf)) e_theme_edje_object_set(es->o_base, "base/theme/shelf", "shelf/default/base"); + if (es->popup) + { + e_popup_edje_bg_object_set(es->popup, es->o_base); + e_popup_show(es->popup); + } + else + { + evas_object_move(es->o_base, es->zone->x + es->x, es->zone->y + es->y); + evas_object_layer_set(es->o_base, layer); + } evas_object_show(es->o_base); - e_popup_edje_bg_object_set(es->popup, es->o_base); - e_popup_show(es->popup); snprintf(buf, sizeof(buf), "%i", shelf_id); shelf_id++; @@ -67,6 +89,80 @@ e_shelf_populate(E_Shelf *es) e_gadcon_populate(es->gadcon); } +EAPI void +e_shelf_move(E_Shelf *es, int x, int y) +{ + E_OBJECT_CHECK(es); + E_OBJECT_TYPE_CHECK(es, E_GADMAN_SHELF_TYPE); + es->x = x; + es->y = y; + if (es->popup) + e_popup_move(es->popup, es->x, es->y); + else + evas_object_move(es->o_base, es->zone->x + es->x, es->zone->y + es->y); +} + +EAPI void +e_shelf_resize(E_Shelf *es, int w, int h) +{ + E_OBJECT_CHECK(es); + E_OBJECT_TYPE_CHECK(es, E_GADMAN_SHELF_TYPE); + es->w = w; + es->h = h; + if (es->popup) + e_popup_resize(es->popup, es->w, es->h); + else + evas_object_resize(es->o_base, es->w, es->h); +} + +EAPI void +e_shelf_move_resize(E_Shelf *es, int x, int y, int w, int h) +{ + E_OBJECT_CHECK(es); + E_OBJECT_TYPE_CHECK(es, E_GADMAN_SHELF_TYPE); + es->x = x; + es->y = y; + es->w = w; + es->h = h; + if (es->popup) + e_popup_move_resize(es->popup, es->x, es->y, es->w, es->h); + else + { + evas_object_move(es->o_base, es->zone->x + es->x, es->zone->y + es->y); + evas_object_resize(es->o_base, es->w, es->h); + } +} + +EAPI void +e_shelf_layer_set(E_Shelf *es, int layer) +{ + E_OBJECT_CHECK(es); + E_OBJECT_TYPE_CHECK(es, E_GADMAN_SHELF_TYPE); + es->layer = layer; + if (es->popup) + e_popup_layer_set(es->popup, es->layer); + else + evas_object_layer_set(es->o_base, es->layer); +} + +EAPI void +e_shelf_save(E_Shelf *es) +{ + E_OBJECT_CHECK(es); + E_OBJECT_TYPE_CHECK(es, E_GADMAN_SHELF_TYPE); + /* FIXME: find or create saved shelf node and then modify and queue a + * save + */ +} + +EAPI void +e_shelf_orient(E_Shelf *es, E_Gadcon_Orient orient) +{ + E_OBJECT_CHECK(es); + E_OBJECT_TYPE_CHECK(es, E_GADMAN_SHELF_TYPE); + e_gadcon_orient(es->gadcon, orient); +} + /* local subsystem functions */ static void _e_shelf_free(E_Shelf *es) @@ -76,6 +172,6 @@ _e_shelf_free(E_Shelf *es) E_FREE(es->name); E_FREE(es->style); evas_object_del(es->o_base); - e_object_del(E_OBJECT(es->popup)); + if (es->popup) e_object_del(E_OBJECT(es->popup)); free(es); } diff --git a/src/bin/e_shelf.h b/src/bin/e_shelf.h index ae8194ff3..0d83e7f0b 100644 --- a/src/bin/e_shelf.h +++ b/src/bin/e_shelf.h @@ -14,7 +14,10 @@ typedef struct _E_Shelf E_Shelf; struct _E_Shelf { E_Object e_obj_inherit; + int x, y, w, h; + int layer; E_Popup *popup; /* NULL if its within an existing canvas */ + E_Zone *zone; Evas_Object *o_base; Ecore_Evas *ee; Evas *evas; @@ -28,8 +31,14 @@ struct _E_Shelf EAPI int e_shelf_init(void); EAPI int e_shelf_shutdown(void); -EAPI E_Shelf *e_shelf_zone_new(E_Zone *zone, char *name); +EAPI E_Shelf *e_shelf_zone_new(E_Zone *zone, char *name, int popup, int layer); EAPI void e_shelf_populate(E_Shelf *es); +EAPI void e_shelf_move(E_Shelf *es, int x, int y); +EAPI void e_shelf_resize(E_Shelf *es, int w, int h); +EAPI void e_shelf_move_resize(E_Shelf *es, int x, int y, int w, int h); +EAPI void e_shelf_layer_set(E_Shelf *es, int layer); +EAPI void e_shelf_save(E_Shelf *es); +EAPI void e_shelf_orient(E_Shelf *es, E_Gadcon_Orient orient); #endif #endif diff --git a/src/modules/start/e_mod_main.c b/src/modules/start/e_mod_main.c index 5e964ff66..b93f9a1f2 100644 --- a/src/modules/start/e_mod_main.c +++ b/src/modules/start/e_mod_main.c @@ -136,7 +136,13 @@ _button_cb_mouse_down(void *data, Evas *e, Evas_Object *obj, void *event_info) case E_GADCON_ORIENT_RIGHT: dir = E_MENU_POP_DIRECTION_LEFT; break; + case E_GADCON_ORIENT_FLOAT: + case E_GADCON_ORIENT_CORNER_TL: + case E_GADCON_ORIENT_CORNER_TR: + case E_GADCON_ORIENT_CORNER_BL: + case E_GADCON_ORIENT_CORNER_BR: default: + dir = E_MENU_POP_DIRECTION_AUTO; break; } e_menu_activate_mouse(inst->main_menu,