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 {
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;

View File

@ -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);

View File

@ -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);

View File

@ -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;