diff --git a/src/bin/e_gadman.c b/src/bin/e_gadman.c index d229b3cec..20015bc3e 100644 --- a/src/bin/e_gadman.c +++ b/src/bin/e_gadman.c @@ -16,6 +16,9 @@ struct _Gadman_Client_Config struct { int x, y, w, h; } pos; + struct { + int l, r, t, b; + } pad; int w, h; int edge; int zone; @@ -91,6 +94,10 @@ e_gadman_init(void) E_CONFIG_VAL(D, T, pos.y, INT); E_CONFIG_VAL(D, T, pos.w, INT); E_CONFIG_VAL(D, T, pos.h, INT); + E_CONFIG_VAL(D, T, pad.l, INT); + E_CONFIG_VAL(D, T, pad.r, INT); + E_CONFIG_VAL(D, T, pad.t, INT); + E_CONFIG_VAL(D, T, pad.b, INT); E_CONFIG_VAL(D, T, w, INT); E_CONFIG_VAL(D, T, h, INT); E_CONFIG_VAL(D, T, edge, INT); @@ -297,19 +304,27 @@ e_gadman_client_load(E_Gadman_Client *gmc) E_CONFIG_LIMIT(cf->pos.y, 0, 10000); E_CONFIG_LIMIT(cf->pos.w, 1, 10000); E_CONFIG_LIMIT(cf->pos.h, 1, 10000); + E_CONFIG_LIMIT(cf->pad.l, 0, 1000); + E_CONFIG_LIMIT(cf->pad.r, 0, 1000); + E_CONFIG_LIMIT(cf->pad.t, 0, 1000); + E_CONFIG_LIMIT(cf->pad.b, 0, 1000); 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); if (cf->pos.w != cf->w) - gmc->ax = (double)(cf->pos.x - cf->w) / (double)(cf->pos.w - cf->w); + gmc->ax = (double)(cf->pos.x) / (double)(cf->pos.w - cf->w); else gmc->ax = 0.0; if (cf->pos.h != cf->h) - gmc->ay = (double)(cf->pos.y - cf->h) / (double)(cf->pos.h - cf->h); + gmc->ay = (double)(cf->pos.y) / (double)(cf->pos.h - cf->h); else gmc->ay = 0.0; gmc->w = cf->w; + gmc->w -= (cf->pad.l + cf->pad.r); + gmc->w += (gmc->pad.l + gmc->pad.r); gmc->h = cf->h; + gmc->h -= (cf->pad.t + cf->pad.b); + gmc->h += (gmc->pad.t + gmc->pad.b); gmc->edge = cf->edge; gmc->use_autow = cf->use_autow; gmc->use_autoh = cf->use_autoh; @@ -330,11 +345,11 @@ e_gadman_client_load(E_Gadman_Client *gmc) // gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) * gmc->ax); // gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) * gmc->ay); if (cf->pos.w != cf->w) - gmc->x = gmc->zone->x + ((cf->pos.x * (gmc->zone->w - gmc->w)) / (cf->pos.w - gmc->w)); + gmc->x = gmc->zone->x + ((gmc->zone->w - gmc->w) * gmc->ax); else gmc->x = gmc->zone->x; if (cf->pos.h != cf->h) - gmc->y = gmc->zone->y + ((cf->pos.y * (gmc->zone->h - gmc->h)) / (cf->pos.h - gmc->h)); + gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) * gmc->ay); else gmc->y = gmc->zone->y; gmc->config = cf; @@ -475,6 +490,17 @@ e_gadman_client_aspect_set(E_Gadman_Client *gmc, double mina, double maxa) gmc->maxa = maxa; } +void +e_gadman_client_padding_set(E_Gadman_Client *gmc, int l, int r, int t, int b) +{ + E_OBJECT_CHECK(gmc); + E_OBJECT_TYPE_CHECK(gmc, E_GADMAN_CLIENT_TYPE); + gmc->pad.l = l; + gmc->pad.r = r; + gmc->pad.t = t; + gmc->pad.b = b; +} + void e_gadman_client_auto_size_set(E_Gadman_Client *gmc, Evas_Coord autow, Evas_Coord autoh) { @@ -1069,30 +1095,33 @@ _e_gadman_client_aspect_enforce(E_Gadman_Client *gmc, double cx, double cy, int double aspect; int change = 0; + neww = gmc->w - (gmc->pad.l + gmc->pad.r); + newh = gmc->h - (gmc->pad.t + gmc->pad.b); if (gmc->h > 0) - aspect = (double)gmc->w / (double) gmc->h; + aspect = (double)neww / (double)newh; else aspect = 0.0; - neww = gmc->w; - newh = gmc->h; + if (aspect > gmc->maxa) { if (use_horiz) - newh = gmc->w / gmc->maxa; + newh = neww / gmc->maxa; else - neww = gmc->h * gmc->mina; + neww = newh * gmc->mina; change = 1; } else if (aspect < gmc->mina) { if (use_horiz) - newh = gmc->w / gmc->maxa; + newh = neww / gmc->maxa; else - neww = gmc->h * gmc->mina; + neww = newh * gmc->mina; change = 1; } if (change) { + neww += (gmc->pad.l + gmc->pad.r); + newh += (gmc->pad.t + gmc->pad.b); gmc->x = gmc->x + ((gmc->w - neww) * cx); gmc->y = gmc->y + ((gmc->h - newh) * cy); gmc->w = neww; @@ -1963,6 +1992,10 @@ _e_gadman_client_geom_store(E_Gadman_Client *gmc) cf->pos.y = gmc->y - gmc->zone->y; cf->pos.w = gmc->zone->w; cf->pos.h = gmc->zone->h; + cf->pad.l = gmc->pad.l; + cf->pad.r = gmc->pad.r; + cf->pad.t = gmc->pad.t; + cf->pad.b = gmc->pad.b; cf->w = gmc->w; cf->h = gmc->h; cf->edge = gmc->edge; diff --git a/src/bin/e_gadman.h b/src/bin/e_gadman.h index eede38397..93fb855bd 100644 --- a/src/bin/e_gadman.h +++ b/src/bin/e_gadman.h @@ -83,6 +83,9 @@ struct _E_Gadman_Client Evas_Coord autow, autoh; double ax, ay; double mina, maxa; + struct { + int l, r, t, b; + } pad; void (*func) (void *data, E_Gadman_Client *gmc, E_Gadman_Change change); void *data; void *config; @@ -106,6 +109,7 @@ EAPI void e_gadman_client_min_size_set(E_Gadman_Client *gmc, Evas_Co EAPI void e_gadman_client_max_size_set(E_Gadman_Client *gmc, Evas_Coord maxw, Evas_Coord maxh); 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_padding_set(E_Gadman_Client *gmc, int l, int r, int t, int b); 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); diff --git a/src/modules/pager/e_mod_main.c b/src/modules/pager/e_mod_main.c index 95ac41e94..c4b3b186d 100644 --- a/src/modules/pager/e_mod_main.c +++ b/src/modules/pager/e_mod_main.c @@ -8,6 +8,7 @@ * which options should be in main menu, and which in face menu? * check if a new desk is in the current zone * check if padding changes on resize + * include deskname in padding */ /* module private routines */ @@ -505,6 +506,7 @@ _pager_face_new(Pager *pager, E_Zone *zone, Evas *evas) Pager_Face *face; Evas_Object *o; Evas_Coord x, y, w, h; + double aspect; face = E_NEW(Pager_Face, 1); if (!face) return NULL; @@ -535,11 +537,6 @@ _pager_face_new(Pager *pager, E_Zone *zone, Evas *evas) face->inset.t = y; face->inset.b = 1000 - (y + h); - face->desk_inset.l = -1; - face->desk_inset.r = -1; - face->desk_inset.t = -1; - face->desk_inset.b = -1; - face->drop_handler = e_drop_handler_add(face, _pager_face_cb_enter, _pager_face_cb_move, _pager_face_cb_leave, _pager_face_cb_drop, @@ -566,9 +563,18 @@ _pager_face_new(Pager *pager, E_Zone *zone, Evas *evas) E_GADMAN_POLICY_VSIZE); e_gadman_client_min_size_set(face->gmc, 8, 8); e_gadman_client_max_size_set(face->gmc, 600, 600); - e_gadman_client_auto_size_set(face->gmc, 186, 40); + e_gadman_client_auto_size_set(face->gmc, + (face->xnum * 40) + (face->inset.l + face->inset.r), + (face->ynum * 30) + (face->inset.t + face->inset.b)); e_gadman_client_align_set(face->gmc, 0.0, 1.0); - e_gadman_client_resize(face->gmc, 186, 40); + aspect = (double)(face->xnum * face->zone->w) / (double)(face->ynum * face->zone->h); + e_gadman_client_aspect_set(face->gmc, aspect, aspect); + e_gadman_client_padding_set(face->gmc, + face->inset.l, face->inset.r, + face->inset.t, face->inset.b); + e_gadman_client_resize(face->gmc, + (face->xnum * 40) + (face->inset.l + face->inset.r), + (face->ynum * 30) + (face->inset.t + face->inset.b)); e_gadman_client_change_func_set(face->gmc, _pager_face_cb_gmc_change, face); e_gadman_client_load(face->gmc); @@ -727,7 +733,6 @@ _pager_desk_new(Pager_Face *face, E_Desk *desk, int xpos, int ypos) Evas_Object *o; E_Border_List *bl; E_Border *bd; - Evas_Coord x, y, w, h; pd = E_NEW(Pager_Desk, 1); if (!pd) return NULL; @@ -747,21 +752,6 @@ _pager_desk_new(Pager_Face *face, E_Desk *desk, int xpos, int ypos) e_table_pack_options_set(o, 1, 1, 1, 1, 0.5, 0.5, 0, 0, -1, -1); evas_object_show(o); - if ((face->desk_inset.l == -1) && - (face->desk_inset.r == -1) && - (face->desk_inset.t == -1) && - (face->desk_inset.b == -1)) - { - evas_object_resize(pd->desk_object, 1000, 1000); - edje_object_calc_force(pd->desk_object); - edje_object_part_geometry_get(pd->desk_object, "items", &x, &y, &w, &h); - - face->desk_inset.l = x; - face->desk_inset.r = 1000 - (x + w); - face->desk_inset.t = y; - face->desk_inset.b = 1000 - (y + h); - } - o = evas_object_rectangle_add(face->evas); pd->event_object = o; evas_object_layer_set(o, 2); @@ -2422,11 +2412,9 @@ _pager_menu_cb_aspect_keep_height(void *data, E_Menu *m, E_Menu_Item *mi) face = l->data; - h = ((face->fh - (face->inset.t + face->inset.b)) / face->ynum) - - (face->desk_inset.t + face->desk_inset.b); + h = ((face->fh - (face->inset.t + face->inset.b)) / face->ynum); w = h * face->zone->w / (double)face->zone->h; - w += (face->desk_inset.l + face->desk_inset.r); w *= face->xnum; w += (face->inset.l + face->inset.r); @@ -2449,11 +2437,9 @@ _pager_menu_cb_aspect_keep_width(void *data, E_Menu *m, E_Menu_Item *mi) face = l->data; - w = ((face->fw - (face->inset.l + face->inset.r)) / face->xnum) - - (face->desk_inset.l + face->desk_inset.r); + w = ((face->fw - (face->inset.l + face->inset.r)) / face->xnum); h = w * face->zone->h / (double)face->zone->w; - h += (face->desk_inset.t + face->desk_inset.b); h *= face->ynum; h += (face->inset.t + face->inset.b); diff --git a/src/modules/pager/e_mod_main.h b/src/modules/pager/e_mod_main.h index ee91b92cd..d7a69aded 100644 --- a/src/modules/pager/e_mod_main.h +++ b/src/modules/pager/e_mod_main.h @@ -88,9 +88,6 @@ struct _Pager_Face struct { Evas_Coord l, r, t, b; } inset; - struct { - Evas_Coord l, r, t, b; - } desk_inset; /* Current nr. of desktops */ int xnum, ynum;