gadman padding.

SVN revision: 16890
This commit is contained in:
sebastid 2005-09-23 23:40:45 +00:00 committed by sebastid
parent cd9536f25c
commit 713810d7f0
4 changed files with 63 additions and 43 deletions

View File

@ -16,6 +16,9 @@ struct _Gadman_Client_Config
struct { struct {
int x, y, w, h; int x, y, w, h;
} pos; } pos;
struct {
int l, r, t, b;
} pad;
int w, h; int w, h;
int edge; int edge;
int zone; int zone;
@ -91,6 +94,10 @@ e_gadman_init(void)
E_CONFIG_VAL(D, T, pos.y, INT); E_CONFIG_VAL(D, T, pos.y, INT);
E_CONFIG_VAL(D, T, pos.w, INT); E_CONFIG_VAL(D, T, pos.w, INT);
E_CONFIG_VAL(D, T, pos.h, 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, w, INT);
E_CONFIG_VAL(D, T, h, INT); E_CONFIG_VAL(D, T, h, INT);
E_CONFIG_VAL(D, T, edge, 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.y, 0, 10000);
E_CONFIG_LIMIT(cf->pos.w, 1, 10000); E_CONFIG_LIMIT(cf->pos.w, 1, 10000);
E_CONFIG_LIMIT(cf->pos.h, 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->w, 0, 10000);
E_CONFIG_LIMIT(cf->h, 0, 10000); E_CONFIG_LIMIT(cf->h, 0, 10000);
E_CONFIG_LIMIT(cf->edge, E_GADMAN_EDGE_LEFT, E_GADMAN_EDGE_BOTTOM); E_CONFIG_LIMIT(cf->edge, E_GADMAN_EDGE_LEFT, E_GADMAN_EDGE_BOTTOM);
if (cf->pos.w != cf->w) 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 else
gmc->ax = 0.0; gmc->ax = 0.0;
if (cf->pos.h != cf->h) 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 else
gmc->ay = 0.0; gmc->ay = 0.0;
gmc->w = cf->w; 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->h;
gmc->h -= (cf->pad.t + cf->pad.b);
gmc->h += (gmc->pad.t + gmc->pad.b);
gmc->edge = cf->edge; gmc->edge = cf->edge;
gmc->use_autow = cf->use_autow; gmc->use_autow = cf->use_autow;
gmc->use_autoh = cf->use_autoh; 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->x = gmc->zone->x + ((gmc->zone->w - gmc->w) * gmc->ax);
// gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) * gmc->ay); // gmc->y = gmc->zone->y + ((gmc->zone->h - gmc->h) * gmc->ay);
if (cf->pos.w != cf->w) 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 else
gmc->x = gmc->zone->x; gmc->x = gmc->zone->x;
if (cf->pos.h != cf->h) 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 else
gmc->y = gmc->zone->y; gmc->y = gmc->zone->y;
gmc->config = cf; gmc->config = cf;
@ -475,6 +490,17 @@ e_gadman_client_aspect_set(E_Gadman_Client *gmc, double mina, double maxa)
gmc->maxa = 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 void
e_gadman_client_auto_size_set(E_Gadman_Client *gmc, Evas_Coord autow, Evas_Coord autoh) 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; double aspect;
int change = 0; 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) if (gmc->h > 0)
aspect = (double)gmc->w / (double) gmc->h; aspect = (double)neww / (double)newh;
else else
aspect = 0.0; aspect = 0.0;
neww = gmc->w;
newh = gmc->h;
if (aspect > gmc->maxa) if (aspect > gmc->maxa)
{ {
if (use_horiz) if (use_horiz)
newh = gmc->w / gmc->maxa; newh = neww / gmc->maxa;
else else
neww = gmc->h * gmc->mina; neww = newh * gmc->mina;
change = 1; change = 1;
} }
else if (aspect < gmc->mina) else if (aspect < gmc->mina)
{ {
if (use_horiz) if (use_horiz)
newh = gmc->w / gmc->maxa; newh = neww / gmc->maxa;
else else
neww = gmc->h * gmc->mina; neww = newh * gmc->mina;
change = 1; change = 1;
} }
if (change) 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->x = gmc->x + ((gmc->w - neww) * cx);
gmc->y = gmc->y + ((gmc->h - newh) * cy); gmc->y = gmc->y + ((gmc->h - newh) * cy);
gmc->w = neww; 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.y = gmc->y - gmc->zone->y;
cf->pos.w = gmc->zone->w; cf->pos.w = gmc->zone->w;
cf->pos.h = gmc->zone->h; 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->w = gmc->w;
cf->h = gmc->h; cf->h = gmc->h;
cf->edge = gmc->edge; cf->edge = gmc->edge;

View File

@ -83,6 +83,9 @@ struct _E_Gadman_Client
Evas_Coord autow, autoh; Evas_Coord autow, autoh;
double ax, ay; double ax, ay;
double mina, maxa; double mina, maxa;
struct {
int l, r, t, b;
} pad;
void (*func) (void *data, E_Gadman_Client *gmc, E_Gadman_Change change); void (*func) (void *data, E_Gadman_Client *gmc, E_Gadman_Change change);
void *data; void *data;
void *config; 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_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_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_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_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 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 E_Gadman_Edge e_gadman_client_edge_get(E_Gadman_Client *gmc);

View File

@ -8,6 +8,7 @@
* which options should be in main menu, and which in face menu? * which options should be in main menu, and which in face menu?
* check if a new desk is in the current zone * check if a new desk is in the current zone
* check if padding changes on resize * check if padding changes on resize
* include deskname in padding
*/ */
/* module private routines */ /* module private routines */
@ -505,6 +506,7 @@ _pager_face_new(Pager *pager, E_Zone *zone, Evas *evas)
Pager_Face *face; Pager_Face *face;
Evas_Object *o; Evas_Object *o;
Evas_Coord x, y, w, h; Evas_Coord x, y, w, h;
double aspect;
face = E_NEW(Pager_Face, 1); face = E_NEW(Pager_Face, 1);
if (!face) return NULL; if (!face) return NULL;
@ -535,11 +537,6 @@ _pager_face_new(Pager *pager, E_Zone *zone, Evas *evas)
face->inset.t = y; face->inset.t = y;
face->inset.b = 1000 - (y + h); 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, face->drop_handler = e_drop_handler_add(face,
_pager_face_cb_enter, _pager_face_cb_move, _pager_face_cb_enter, _pager_face_cb_move,
_pager_face_cb_leave, _pager_face_cb_drop, _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_POLICY_VSIZE);
e_gadman_client_min_size_set(face->gmc, 8, 8); e_gadman_client_min_size_set(face->gmc, 8, 8);
e_gadman_client_max_size_set(face->gmc, 600, 600); 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_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_change_func_set(face->gmc, _pager_face_cb_gmc_change, face);
e_gadman_client_load(face->gmc); 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; Evas_Object *o;
E_Border_List *bl; E_Border_List *bl;
E_Border *bd; E_Border *bd;
Evas_Coord x, y, w, h;
pd = E_NEW(Pager_Desk, 1); pd = E_NEW(Pager_Desk, 1);
if (!pd) return NULL; 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); e_table_pack_options_set(o, 1, 1, 1, 1, 0.5, 0.5, 0, 0, -1, -1);
evas_object_show(o); 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); o = evas_object_rectangle_add(face->evas);
pd->event_object = o; pd->event_object = o;
evas_object_layer_set(o, 2); 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; face = l->data;
h = ((face->fh - (face->inset.t + face->inset.b)) / face->ynum) - h = ((face->fh - (face->inset.t + face->inset.b)) / face->ynum);
(face->desk_inset.t + face->desk_inset.b);
w = h * face->zone->w / (double)face->zone->h; w = h * face->zone->w / (double)face->zone->h;
w += (face->desk_inset.l + face->desk_inset.r);
w *= face->xnum; w *= face->xnum;
w += (face->inset.l + face->inset.r); 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; face = l->data;
w = ((face->fw - (face->inset.l + face->inset.r)) / face->xnum) - w = ((face->fw - (face->inset.l + face->inset.r)) / face->xnum);
(face->desk_inset.l + face->desk_inset.r);
h = w * face->zone->h / (double)face->zone->w; h = w * face->zone->h / (double)face->zone->w;
h += (face->desk_inset.t + face->desk_inset.b);
h *= face->ynum; h *= face->ynum;
h += (face->inset.t + face->inset.b); h += (face->inset.t + face->inset.b);

View File

@ -88,9 +88,6 @@ struct _Pager_Face
struct { struct {
Evas_Coord l, r, t, b; Evas_Coord l, r, t, b;
} inset; } inset;
struct {
Evas_Coord l, r, t, b;
} desk_inset;
/* Current nr. of desktops */ /* Current nr. of desktops */
int xnum, ynum; int xnum, ynum;