Enlightenment CVS committal Author : raster Project : e17 Module : apps/e
Dir : e17/apps/e/src/bin Modified Files: e_container.c e_container.h e_gadman.c e_gadman.h e_main.c e_resist.c Log Message: gadman in. clock module poprted. others need porting. =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_container.c,v retrieving revision 1.21 retrieving revision 1.22 diff -u -3 -r1.21 -r1.22 --- e_container.c 19 Jan 2005 15:39:36 -0000 1.21 +++ e_container.c 21 Jan 2005 15:45:56 -0000 1.22 @@ -212,6 +212,23 @@ return NULL; } +E_Zone * +e_container_zone_number_get(E_Container *con, int num) +{ + Evas_List *l; + + E_OBJECT_CHECK_RETURN(con, NULL); + for (l = con->zones; l; l = l->next) + { + E_Zone *zone; + + zone = l->data; + if (zone->num == num) + return zone; + } + return NULL; +} + E_Container_Shape * e_container_shape_add(E_Container *con) { =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_container.h,v retrieving revision 1.10 retrieving revision 1.11 diff -u -3 -r1.10 -r1.11 --- e_container.h 19 Jan 2005 15:39:36 -0000 1.10 +++ e_container.h 21 Jan 2005 15:45:56 -0000 1.11 @@ -80,6 +80,7 @@ EAPI Evas_List *e_container_clients_list_get(E_Container *con); EAPI E_Zone *e_container_zone_at_point_get(E_Container *con, int x, int y); +EAPI E_Zone *e_container_zone_number_get(E_Container *con, int num); EAPI E_Container_Shape *e_container_shape_add(E_Container *con); EAPI void e_container_shape_show(E_Container_Shape *es); =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_gadman.c,v retrieving revision 1.13 retrieving revision 1.14 diff -u -3 -r1.13 -r1.14 --- e_gadman.c 20 Jan 2005 15:35:17 -0000 1.13 +++ e_gadman.c 21 Jan 2005 15:45:56 -0000 1.14 @@ -7,15 +7,26 @@ /* re-enter edit mode (cant access root menu) */ /* FIXME: resist can still jump on top of other gads... */ -/* FIXME: handle save */ -/* FIXME: handle load */ /* FIXME: handle resize resist */ /* local subsystem functions */ + +typedef struct _Gadman_Client_Config Gadman_Client_Config; + +struct _Gadman_Client_Config +{ + double ax, ay; + int w, h; + int edge; + int zone; + int use_autow, use_autoh; +}; + static void _e_gadman_free(E_Gadman *gm); static void _e_gadman_client_free(E_Gadman_Client *gmc); static void _e_gadman_client_edit_begin(E_Gadman_Client *gmc); static void _e_gadman_client_edit_end(E_Gadman_Client *gmc); +static void _e_gadman_client_overlap_deny(E_Gadman_Client *gmc); static void _e_gadman_client_down_store(E_Gadman_Client *gmc); static int _e_gadman_client_is_being_modified(E_Gadman_Client *gmc); static void _e_gadman_client_geometry_to_align(E_Gadman_Client *gmc); @@ -56,16 +67,33 @@ static void _e_gadman_cb_auto_height(void *data, E_Menu *m, E_Menu_Item *mi); static void _e_gadman_cb_center_vert(void *data, E_Menu *m, E_Menu_Item *mi); +static E_Config_DD *gadman_config_edd = NULL; + /* externally accessible functions */ int e_gadman_init(void) { + gadman_config_edd = E_CONFIG_DD_NEW("Gadman_Client_Config", Gadman_Client_Config); +#undef T +#undef D +#define T Gadman_Client_Config +#define D gadman_config_edd + E_CONFIG_VAL(D, T, ax, DOUBLE); + E_CONFIG_VAL(D, T, ay, DOUBLE); + E_CONFIG_VAL(D, T, w, INT); + E_CONFIG_VAL(D, T, h, INT); + E_CONFIG_VAL(D, T, edge, INT); + E_CONFIG_VAL(D, T, zone, INT); + E_CONFIG_VAL(D, T, use_autow, INT); + E_CONFIG_VAL(D, T, use_autoh, INT); return 1; } int e_gadman_shutdown(void) { + E_CONFIG_DD_FREE(gadman_config_edd); + gadman_config_edd = NULL; return 1; } @@ -118,13 +146,13 @@ gmc->gadman = gm; gmc->policy = E_GADMAN_POLICY_ANYWHERE | E_GADMAN_POLICY_HSIZE | E_GADMAN_POLICY_VSIZE | E_GADMAN_POLICY_HMOVE | E_GADMAN_POLICY_VMOVE; gmc->zone = e_zone_current_get(gm->container); - gmc->edge = E_GADMAN_EDGE_BOTTOM; + gmc->edge = E_GADMAN_EDGE_TOP; gmc->minw = 1; gmc->minh = 1; gmc->maxw = 0; gmc->maxh = 0; gmc->ax = 0.0; - gmc->ay = 1.0; + gmc->ay = 0.0; gmc->mina = 0.0; gmc->maxa = 9999999.0; gm->clients = evas_list_append(gm->clients, gmc); @@ -134,8 +162,21 @@ void e_gadman_client_save(E_Gadman_Client *gmc) { + Gadman_Client_Config cf; + char buf[1024]; + E_OBJECT_CHECK(gmc); /* save all values */ + cf.ax = gmc->ax; + cf.ay = gmc->ay; + cf.w = gmc->w; + cf.h = gmc->h; + cf.edge = gmc->edge; + cf.zone = gmc->zone->num; + cf.use_autow = gmc->use_autow; + cf.use_autoh = gmc->use_autoh; + snprintf(buf, sizeof(buf), "gadman.%s.%i", gmc->domain, gmc->instance); + e_config_domain_save(buf, gadman_config_edd, &cf); } void @@ -148,9 +189,55 @@ void e_gadman_client_load(E_Gadman_Client *gmc) { + Gadman_Client_Config *cf; + char buf[1024]; + E_OBJECT_CHECK(gmc); - /* load all the vales */ - /* implement all the values */ + snprintf(buf, sizeof(buf), "gadman.%s.%i", gmc->domain, gmc->instance); + cf = e_config_domain_load(buf, gadman_config_edd); + if (cf) + { + E_Zone *zone; + + E_CONFIG_LIMIT(cf->ax, 0.0, 1.0); + E_CONFIG_LIMIT(cf->ay, 0.0, 1.0); + E_CONFIG_LIMIT(cf->w, 0, 10000); + E_CONFIG_LIMIT(cf->h, 0, 10000); + E_CONFIG_LIMIT(cf->edge, E_GADMAN_EDGE_LEFT, E_GADMAN_EDGE_BOTTOM); + gmc->ax = cf->ax; + gmc->ay = cf->ay; + gmc->w = cf->w; + gmc->h = cf->h; + gmc->edge = cf->edge; + gmc->use_autow = cf->use_autow; + gmc->use_autoh = cf->use_autoh; + zone = e_container_zone_number_get(gmc->zone->container, cf->zone); + if (zone) gmc->zone = zone; + if (gmc->use_autow) + { + gmc->w = gmc->autow; + gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) * gmc->ax); + } + if (gmc->use_autoh) + { + gmc->h = gmc->autoh; + gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) * gmc->ay); + } + if (gmc->w > gmc->zone->w) gmc->w = gmc->zone->w; + if (gmc->h > gmc->zone->h) gmc->h = gmc->zone->h; + gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) * gmc->ax); + gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) * gmc->ay); + free(cf); + } + _e_gadman_client_overlap_deny(gmc); + e_object_ref(E_OBJECT(gmc)); + if (!e_object_del_get(E_OBJECT(gmc))) + _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_ZONE); + if (!e_object_del_get(E_OBJECT(gmc))) + _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_EDGE); + if (!e_object_del_get(E_OBJECT(gmc))) + _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE); + e_object_unref(E_OBJECT(gmc)); } void @@ -166,7 +253,16 @@ e_gadman_client_zone_set(E_Gadman_Client *gmc, E_Zone *zone) { E_OBJECT_CHECK(gmc); + if (zone == gmc->zone) return; gmc->zone = zone; + gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) * gmc->ax); + gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) * gmc->ay); + e_object_ref(E_OBJECT(gmc)); + if (!e_object_del_get(E_OBJECT(gmc))) + _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_ZONE); + if (!e_object_del_get(E_OBJECT(gmc))) + _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE); + e_object_unref(E_OBJECT(gmc)); } void @@ -180,24 +276,52 @@ e_gadman_client_min_size_set(E_Gadman_Client *gmc, Evas_Coord minw, Evas_Coord minh) { E_OBJECT_CHECK(gmc); + if ((gmc->minw == minw) && (gmc->minh == minh)) return; gmc->minw = minw; gmc->minh = minh; + if (gmc->minw > gmc->w) + { + gmc->w = gmc->minw; + gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) * gmc->ax); + } + if (gmc->minh > gmc->h) + { + gmc->h = gmc->minh; + gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) * gmc->ay); + } + _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE); } void e_gadman_client_max_size_set(E_Gadman_Client *gmc, Evas_Coord maxw, Evas_Coord maxh) { E_OBJECT_CHECK(gmc); + if ((gmc->maxw == maxw) && (gmc->maxh == maxh)) return; gmc->maxw = maxw; gmc->maxh = maxh; + if (gmc->maxw < gmc->w) + { + gmc->w = gmc->maxw; + gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) * gmc->ax); + } + if (gmc->maxh < gmc->h) + { + gmc->h = gmc->maxh; + gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) * gmc->ay); + } + _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE); } void e_gadman_client_align_set(E_Gadman_Client *gmc, double xalign, double yalign) { E_OBJECT_CHECK(gmc); + if ((gmc->ax == xalign) && (gmc->ay == yalign)) return; gmc->ax = xalign; gmc->ay = yalign; + gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) * gmc->ax); + gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) * gmc->ay); + _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE); } void @@ -214,6 +338,31 @@ E_OBJECT_CHECK(gmc); gmc->autow = autow; gmc->autoh = autoh; + if (gmc->use_autow) + { + gmc->w = gmc->autow; + gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) * gmc->ax); + } + if (gmc->use_autoh) + { + gmc->h = gmc->autoh; + gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) * gmc->ay); + } + _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE); +} + +void +e_gadman_client_edge_set(E_Gadman_Client *gmc, E_Gadman_Edge edge) +{ + E_OBJECT_CHECK(gmc); + gmc->edge = edge; +} + +E_Gadman_Edge +e_gadman_client_edge_get(E_Gadman_Client *gmc) +{ + E_OBJECT_CHECK_RETURN(gmc, E_GADMAN_EDGE_TOP); + return gmc->edge; } void @@ -227,6 +376,20 @@ } void +e_gadman_client_resize(E_Gadman_Client *gmc, Evas_Coord w, Evas_Coord h) +{ + E_OBJECT_CHECK(gmc); + if ((gmc->w == w) && (gmc->h == h)) return; + gmc->w = w; + if (gmc->w > gmc->zone->w) gmc->w = gmc->zone->w; + gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) * gmc->ax); + gmc->h = h; + if (gmc->h > gmc->zone->h) gmc->h = gmc->zone->h; + gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) * gmc->ay); + _e_gadman_client_callback_call(gmc, E_GADMAN_CHANGE_MOVE_RESIZE); +} + +void e_gadman_client_change_func_set(E_Gadman_Client *gmc, void (*func) (void *data, E_Gadman_Client *gmc, E_Gadman_Change change), void *data) { E_OBJECT_CHECK(gmc); @@ -422,6 +585,93 @@ } static void +_e_gadman_client_overlap_deny(E_Gadman_Client *gmc) +{ + Evas_List *l; + Evas_Coord ox, oy; + int ok = 0; + int iterate = 0; + + ox = gmc->x; + oy = gmc->y; + ok = 0; + while ((!ok) && (iterate < 1000)) + { + for (l = gmc->zone->container->gadman->clients; l; l = l->next) + { + E_Gadman_Client *gmc2; + + gmc2 = l->data; + if ((E_SPANS_COMMON(gmc->x, gmc->w, gmc2->x, gmc2->w)) && + (E_SPANS_COMMON(gmc->y, gmc->h, gmc2->y, gmc2->h))) + { + gmc->x = gmc2->x + gmc2->w; + } + } + if ((gmc->x + gmc->w) > (gmc->zone->x + gmc->zone->w)) + gmc->x = gmc->zone->x + gmc->zone->w - gmc->w; + ok = 1; + for (l = gmc->zone->container->gadman->clients; l; l = l->next) + { + E_Gadman_Client *gmc2; + + gmc2 = l->data; + if ((E_SPANS_COMMON(gmc->x, gmc->w, gmc2->x, gmc2->w)) && + (E_SPANS_COMMON(gmc->y, gmc->h, gmc2->y, gmc2->h))) + ok = 0; + } + if (ok) break; + for (l = gmc->zone->container->gadman->clients; l; l = l->next) + { + E_Gadman_Client *gmc2; + + gmc2 = l->data; + if ((E_SPANS_COMMON(gmc->x, gmc->w, gmc2->x, gmc2->w)) && + (E_SPANS_COMMON(gmc->y, gmc->h, gmc2->y, gmc2->h))) + { + gmc->x = gmc2->x - gmc->w; + } + } + if (gmc->x < gmc->zone->x) + gmc->x = gmc->zone->x; + ok = 1; + for (l = gmc->zone->container->gadman->clients; l; l = l->next) + { + E_Gadman_Client *gmc2; + + gmc2 = l->data; + if ((E_SPANS_COMMON(gmc->x, gmc->w, gmc2->x, gmc2->w)) && + (E_SPANS_COMMON(gmc->y, gmc->h, gmc2->y, gmc2->h))) + ok = 0; + } + if (ok) break; + if (gmc->y > (gmc->zone->y + (gmc->zone->h / 2))) + gmc->y -= 8; + else + gmc->y += 8; + if (oy < (gmc->zone->y + (gmc->zone->h / 2))) + { + if ((gmc->y - oy) > (gmc->zone->h / 3)) + { + gmc->x = ox; + gmc->y = oy; + break; + } + } + else + { + if ((oy - gmc->y) > (gmc->zone->h / 3)) + { + gmc->x = ox; + gmc->y = oy; + break; + } + } + iterate++; + } +} + +static void _e_gadman_client_down_store(E_Gadman_Client *gmc) { gmc->down_store_x = gmc->x; @@ -808,7 +1058,7 @@ /* limit to max size */ if (gmc->maxw > 0) { - if (gmc->w > gmc->minw) + if (gmc->w > gmc->maxw) { gmc->x -= (gmc->maxw - gmc->w); gmc->w = gmc->maxw; @@ -942,7 +1192,7 @@ /* limit to max size */ if (gmc->maxh > 0) { - if (gmc->h > gmc->minh) + if (gmc->h > gmc->maxh) { gmc->y -= (gmc->maxh - gmc->h); gmc->h = gmc->maxh; =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_gadman.h,v retrieving revision 1.8 retrieving revision 1.9 diff -u -3 -r1.8 -r1.9 --- e_gadman.h 20 Jan 2005 13:42:51 -0000 1.8 +++ e_gadman.h 21 Jan 2005 15:45:56 -0000 1.9 @@ -98,7 +98,10 @@ EAPI void e_gadman_client_align_set(E_Gadman_Client *gmc, double xalign, double yalign); EAPI void e_gadman_client_aspect_set(E_Gadman_Client *gmc, double mina, double maxa); EAPI void e_gadman_client_auto_size_set(E_Gadman_Client *gmc, Evas_Coord autow, Evas_Coord autoh); +EAPI void e_gadman_client_edge_set(E_Gadman_Client *gmc, E_Gadman_Edge edge); +EAPI E_Gadman_Edge e_gadman_client_edge_get(E_Gadman_Client *gmc); EAPI void e_gadman_client_geometry_get(E_Gadman_Client *gmc, Evas_Coord *x, Evas_Coord *y, Evas_Coord *w, Evas_Coord *h); +EAPI void e_gadman_client_resize(E_Gadman_Client *gmc, Evas_Coord w, Evas_Coord h); EAPI void e_gadman_client_change_func_set(E_Gadman_Client *gmc, void (*func) (void *data, E_Gadman_Client *gmc, E_Gadman_Change change), void *data); EAPI E_Menu *e_gadman_client_menu_new(E_Gadman_Client *gmc); =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_main.c,v retrieving revision 1.36 retrieving revision 1.37 diff -u -3 -r1.36 -r1.37 --- e_main.c 20 Jan 2005 14:22:51 -0000 1.36 +++ e_main.c 21 Jan 2005 15:45:56 -0000 1.37 @@ -573,7 +573,7 @@ i); return 0; } - /* FIXME: testing... */ + /* { E_Gadman_Client *gmc; @@ -593,6 +593,8 @@ e_gadman_client_auto_size_set(gmc, 50, 200); e_gadman_client_align_set(gmc, 0.0, 0.5); e_client_gadman_edge_set(gmc, E_GADMAN_EDGE_LEFT); + e_gadman_client_domain_set(gmc, "test", 0); + e_gadman_client_load(gmc); gmc = e_gadman_client_new(con->gadman); gmc->x = 0; @@ -610,6 +612,8 @@ e_gadman_client_auto_size_set(gmc, 50, 200); e_gadman_client_align_set(gmc, 0.0, 0.5); e_client_gadman_edge_set(gmc, E_GADMAN_EDGE_LEFT); + e_gadman_client_domain_set(gmc, "test", 1); + e_gadman_client_load(gmc); gmc = e_gadman_client_new(con->gadman); gmc->x = 0; @@ -627,7 +631,10 @@ e_gadman_client_auto_size_set(gmc, 50, 200); e_gadman_client_align_set(gmc, 0.0, 0.5); e_client_gadman_edge_set(gmc, E_GADMAN_EDGE_LEFT); + e_gadman_client_domain_set(gmc, "test", 2); + e_gadman_client_load(gmc); } + */ } free(roots); ecore_x_sync(); =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_resist.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- e_resist.c 20 Jan 2005 13:42:51 -0000 1.3 +++ e_resist.c 21 Jan 2005 15:45:56 -0000 1.4 @@ -233,7 +233,7 @@ int *rx, int *ry) { int resist = 1; - int gad_resist = 4800; + int gad_resist = 32; int dx, dy, d, pd; int resist_x = 0, resist_y = 0; Evas_List *l, *ll, *rects = NULL; ------------------------------------------------------- This SF.Net email is sponsored by: IntelliVIEW -- Interactive Reporting Tool for open source databases. Create drag-&-drop reports. Save time by over 75%! Publish reports on the web. Export to DOC, XLS, RTF, etc. Download a FREE copy at http://www.intelliview.com/go/osdn_nl _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs