Eliminate Constraints.

SVN revision: 34104
This commit is contained in:
Kim Woelders 2008-03-24 09:47:50 +00:00
parent 9577d31aaf
commit e9230a8aa5
8 changed files with 94 additions and 92 deletions

View File

@ -209,10 +209,6 @@
*/
#include "etypes.h"
typedef struct {
int min, max;
} Constraints;
typedef struct {
Window xwin;
Win win;

View File

@ -28,6 +28,10 @@
#include "eimage.h"
#include "etypes.h"
typedef struct {
int min, max;
} WinLimit;
typedef struct {
int originbox;
struct {
@ -37,7 +41,7 @@ typedef struct {
} WinPoint;
typedef struct {
Constraints width, height;
WinLimit width, height;
WinPoint topleft, bottomright;
} Geometry;

View File

@ -42,7 +42,8 @@
PointerMotionMask)
typedef struct {
Constraints width, height;
int width_min, width_max;
int height_min, height_max;
int xorigin, yorigin;
int xabs, xrel;
int yabs, yrel;
@ -140,10 +141,10 @@ ButtonCreate(const char *name, int id, const char *iclass,
b->tclass = TextclassAlloc(tclass, 1);
b->flags = flags;
b->geom.width.min = minw;
b->geom.width.max = maxw;
b->geom.height.min = minh;
b->geom.height.max = maxh;
b->geom.width_min = minw;
b->geom.width_max = maxw;
b->geom.height_min = minh;
b->geom.height_max = maxh;
b->geom.xorigin = xo;
b->geom.yorigin = yo;
b->geom.xabs = xa;
@ -236,14 +237,14 @@ ButtonCalc(Button * b)
w = ((b->geom.xsizerel * VRoot.w) >> 10) + b->geom.xsizeabs;
h = ((b->geom.ysizerel * VRoot.h) >> 10) + b->geom.ysizeabs;
}
if (w > b->geom.width.max)
w = b->geom.width.max;
else if (w < b->geom.width.min)
w = b->geom.width.min;
if (h > b->geom.height.max)
h = b->geom.height.max;
else if (h < b->geom.height.min)
h = b->geom.height.min;
if (w > b->geom.width_max)
w = b->geom.width_max;
else if (w < b->geom.width_min)
w = b->geom.width_min;
if (h > b->geom.height_max)
h = b->geom.height_max;
else if (h < b->geom.height_min)
h = b->geom.height_min;
xo = (w * b->geom.xorigin) >> 10;
yo = (h * b->geom.yorigin) >> 10;
x = ((b->geom.xrel * VRoot.w) >> 10) + b->geom.xabs - xo;
@ -703,10 +704,10 @@ ButtonsConfigLoad(FILE * fs)
pbt->flags = flags;
pbt->internal = internal;
pbt->default_show = show;
pbt->geom.width.min = minw;
pbt->geom.width.max = maxw;
pbt->geom.height.min = minh;
pbt->geom.height.max = maxh;
pbt->geom.width_min = minw;
pbt->geom.width_max = maxw;
pbt->geom.height_min = minh;
pbt->geom.height_max = maxh;
pbt->geom.xorigin = xo;
pbt->geom.yorigin = yo;
pbt->geom.xabs = xa;
@ -853,10 +854,10 @@ ButtonsConfigSave(void)
fprintf(fs, "11 %s\n", ActionclassGetName(b->aclass));
if (EoGetLayer(b) >= 0)
fprintf(fs, "453 %i\n", EoGetLayer(b));
fprintf(fs, "456 %i\n", b->geom.width.min);
fprintf(fs, "457 %i\n", b->geom.width.max);
fprintf(fs, "468 %i\n", b->geom.height.min);
fprintf(fs, "469 %i\n", b->geom.height.max);
fprintf(fs, "456 %i\n", b->geom.width_min);
fprintf(fs, "457 %i\n", b->geom.width_max);
fprintf(fs, "468 %i\n", b->geom.height_min);
fprintf(fs, "469 %i\n", b->geom.height_max);
fprintf(fs, "528 %i\n", b->geom.xorigin);
fprintf(fs, "529 %i\n", b->geom.yorigin);
fprintf(fs, "530 %i\n", b->geom.xabs);

View File

@ -104,10 +104,10 @@ EwinCreate(int type)
ewin->icccm.need_input = 1;
ewin->icccm.width.min = 0;
ewin->icccm.height.min = 0;
ewin->icccm.width.max = 65535;
ewin->icccm.height.max = 65535;
ewin->icccm.width_min = 0;
ewin->icccm.height_min = 0;
ewin->icccm.width_max = 65535;
ewin->icccm.height_max = 65535;
ewin->icccm.base_w = 0;
ewin->icccm.base_h = 0;
ewin->icccm.w_inc = 1;

View File

@ -176,7 +176,8 @@ struct _ewin {
Window client_leader;
/* WM_NORMAL_HINTS */
Constraints width, height;
int width_min, width_max;
int height_min, height_max;
int base_w, base_h;
int w_inc, h_inc;
int grav;

View File

@ -1,6 +1,6 @@
/*
* Copyright (C) 2000-2007 Carsten Haitzler, Geoff Harrison and various contributors
* Copyright (C) 2004-2007 Kim Woelders
* Copyright (C) 2004-2008 Kim Woelders
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to
@ -167,14 +167,14 @@ ICCCM_SizeMatch(const EWin * ewin, int wi, int hi, int *pwo, int *pho)
w = wi;
h = hi;
if (w < ewin->icccm.width.min)
w = ewin->icccm.width.min;
if (w > ewin->icccm.width.max)
w = ewin->icccm.width.max;
if (h < ewin->icccm.height.min)
h = ewin->icccm.height.min;
if (h > ewin->icccm.height.max)
h = ewin->icccm.height.max;
if (w < ewin->icccm.width_min)
w = ewin->icccm.width_min;
if (w > ewin->icccm.width_max)
w = ewin->icccm.width_max;
if (h < ewin->icccm.height_min)
h = ewin->icccm.height_min;
if (h > ewin->icccm.height_max)
h = ewin->icccm.height_max;
if ((w > 0) && (h > 0))
{
w -= ewin->icccm.base_w;
@ -240,10 +240,10 @@ ICCCM_SetSizeConstraints(EWin * ewin, unsigned int wmin, unsigned int hmin,
unsigned int winc, unsigned int hinc,
double amin, double amax)
{
ewin->icccm.width.min = wmin;
ewin->icccm.height.min = hmin;
ewin->icccm.width.max = wmax;
ewin->icccm.height.max = hmax;
ewin->icccm.width_min = wmin;
ewin->icccm.height_min = hmin;
ewin->icccm.width_max = wmax;
ewin->icccm.height_max = hmax;
ewin->icccm.base_w = wbase;
ewin->icccm.base_h = hbase;
@ -443,24 +443,24 @@ ICCCM_GetGeoms(EWin * ewin)
if (hint.flags & PMinSize)
{
ewin->icccm.width.min = MAX(0, hint.min_width);
ewin->icccm.height.min = MAX(0, hint.min_height);
ewin->icccm.width_min = MAX(0, hint.min_width);
ewin->icccm.height_min = MAX(0, hint.min_height);
}
else
{
ewin->icccm.width.min = 0;
ewin->icccm.height.min = 0;
ewin->icccm.width_min = 0;
ewin->icccm.height_min = 0;
}
if (hint.flags & PMaxSize)
{
ewin->icccm.width.max = MIN(hint.max_width, 65535);
ewin->icccm.height.max = MIN(hint.max_height, 65535);
ewin->icccm.width_max = MIN(hint.max_width, 65535);
ewin->icccm.height_max = MIN(hint.max_height, 65535);
}
else
{
ewin->icccm.width.max = 65535;
ewin->icccm.height.max = 65535;
ewin->icccm.width_max = 65535;
ewin->icccm.height_max = 65535;
}
if (hint.flags & PResizeInc)
@ -508,23 +508,23 @@ ICCCM_GetGeoms(EWin * ewin)
}
else
{
ewin->icccm.base_w = ewin->icccm.width.min;
ewin->icccm.base_h = ewin->icccm.height.min;
ewin->icccm.base_w = ewin->icccm.width_min;
ewin->icccm.base_h = ewin->icccm.height_min;
}
if (ewin->icccm.width.min < ewin->icccm.base_w)
ewin->icccm.width.min = ewin->icccm.base_w;
if (ewin->icccm.height.min < ewin->icccm.base_h)
ewin->icccm.height.min = ewin->icccm.base_h;
if (ewin->icccm.width_min < ewin->icccm.base_w)
ewin->icccm.width_min = ewin->icccm.base_w;
if (ewin->icccm.height_min < ewin->icccm.base_h)
ewin->icccm.height_min = ewin->icccm.base_h;
if (ewin->icccm.width.max < ewin->icccm.base_w)
ewin->icccm.width.max = ewin->icccm.base_w;
if (ewin->icccm.height.max < ewin->icccm.base_h)
ewin->icccm.height.max = ewin->icccm.base_h;
if (ewin->icccm.width_max < ewin->icccm.base_w)
ewin->icccm.width_max = ewin->icccm.base_w;
if (ewin->icccm.height_max < ewin->icccm.base_h)
ewin->icccm.height_max = ewin->icccm.base_h;
}
ewin->props.no_resize_h = (ewin->icccm.width.min == ewin->icccm.width.max);
ewin->props.no_resize_v = (ewin->icccm.height.min == ewin->icccm.height.max);
ewin->props.no_resize_h = (ewin->icccm.width_min == ewin->icccm.width_max);
ewin->props.no_resize_v = (ewin->icccm.height_min == ewin->icccm.height_max);
if (EDebug(EDBUG_TYPE_SNAPS))
Eprintf("Snap get icccm %#lx: %4d+%4d %4dx%4d: %s\n",

View File

@ -1093,8 +1093,8 @@ EwinShowInfo(const EWin * ewin)
EwinIsTransient(ewin), EwinGetTransientFor(ewin),
ewin->props.no_resize_h, ewin->props.no_resize_v,
ewin->state.shaped, ewin->icccm.base_w, ewin->icccm.base_h,
ewin->icccm.width.min, ewin->icccm.height.min,
ewin->icccm.width.max, ewin->icccm.height.max,
ewin->icccm.width_min, ewin->icccm.height_min,
ewin->icccm.width_max, ewin->icccm.height_max,
ewin->icccm.w_inc, ewin->icccm.h_inc,
ewin->icccm.aspect_min, ewin->icccm.aspect_max,
ewin->strut.left, ewin->strut.right,

View File

@ -41,8 +41,8 @@ struct _windowmatch {
char prop;
char qual;
char *value;
Constraints width;
Constraints height;
int width_min, width_max;
int height_min, height_max;
/* Match actions */
char *args;
Border *border;
@ -108,8 +108,8 @@ WindowMatchCreate(const char *name)
ecore_list_prepend(wm_list, b);
b->name = Estrdup(name);
b->width.max = 99999;
b->height.max = 99999;
b->width_max = 99999;
b->height_max = 99999;
return b;
}
@ -188,7 +188,7 @@ WindowMatchConfigLoad(FILE * fs)
wm->match = MATCH_TYPE_SIZE;
else
wm->match = MATCH_TYPE_SIZE_H;
sscanf(s, "%*s %u %u", &(wm->width.min), &(wm->width.max));
sscanf(s, "%*s %u %u", &(wm->width_min), &(wm->width_max));
break;
case WINDOWMATCH_HEIGHT:
if (!wm)
@ -197,7 +197,7 @@ WindowMatchConfigLoad(FILE * fs)
wm->match = MATCH_TYPE_SIZE;
else
wm->match = MATCH_TYPE_SIZE_V;
sscanf(s, "%*s %u %u", &(wm->height.min), &(wm->height.max));
sscanf(s, "%*s %u %u", &(wm->height_min), &(wm->height_max));
break;
case WINDOWMATCH_TRANSIENT:
@ -325,24 +325,24 @@ WindowMatchDecode(const char *line)
num = sscanf(value, "%u-%ux%u-%u", &w1, &w2, &h1, &h2);
if (num < 4)
goto case_error;
wm->width.min = w1;
wm->width.max = w2;
wm->height.min = h1;
wm->height.max = h2;
wm->width_min = w1;
wm->width_max = w2;
wm->height_min = h1;
wm->height_max = h2;
break;
case MATCH_TYPE_SIZE_H:
num = sscanf(value, "%u-%u", &w1, &w2);
if (num < 2)
goto case_error;
wm->width.min = w1;
wm->width.max = w2;
wm->width_min = w1;
wm->width_max = w2;
break;
case MATCH_TYPE_SIZE_V:
num = sscanf(value, "%u-%u", &h1, &h2);
if (num < 2)
goto case_error;
wm->height.min = h1;
wm->height.max = h2;
wm->height_min = h1;
wm->height_max = h2;
break;
case MATCH_TYPE_PROP:
@ -427,16 +427,16 @@ WindowMatchEncode(WindowMatch * wm, char *buf, int len)
case MATCH_TYPE_SIZE:
value = s;
sprintf(s, "%u-%ux%u-%u", wm->width.min, wm->width.max,
wm->height.min, wm->height.max);
sprintf(s, "%u-%ux%u-%u", wm->width_min, wm->width_max,
wm->height_min, wm->height_max);
break;
case MATCH_TYPE_SIZE_H:
value = s;
sprintf(s, "%u-%u", wm->width.min, wm->width.max);
sprintf(s, "%u-%u", wm->width_min, wm->width_max);
break;
case MATCH_TYPE_SIZE_V:
value = s;
sprintf(s, "%u-%u", wm->height.min, wm->height.max);
sprintf(s, "%u-%u", wm->height_min, wm->height_max);
break;
case MATCH_TYPE_PROP:
@ -504,18 +504,18 @@ WindowMatchEwinTest(const WindowMatch * wm, const EWin * ewin)
return matchregexp(wm->value, EwinGetIcccmClass(ewin));
case MATCH_TYPE_SIZE:
match = (ewin->client.w >= wm->width.min &&
ewin->client.w <= wm->width.max &&
ewin->client.h >= wm->height.min &&
ewin->client.h <= wm->height.max);
match = (ewin->client.w >= wm->width_min &&
ewin->client.w <= wm->width_max &&
ewin->client.h >= wm->height_min &&
ewin->client.h <= wm->height_max);
break;
case MATCH_TYPE_SIZE_H:
match = (ewin->client.w >= wm->width.min &&
ewin->client.w <= wm->width.max);
match = (ewin->client.w >= wm->width_min &&
ewin->client.w <= wm->width_max);
break;
case MATCH_TYPE_SIZE_V:
match = (ewin->client.h >= wm->height.min &&
ewin->client.h <= wm->height.max);
match = (ewin->client.h >= wm->height_min &&
ewin->client.h <= wm->height_max);
break;
case MATCH_TYPE_PROP: