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" #include "etypes.h"
typedef struct {
int min, max;
} Constraints;
typedef struct { typedef struct {
Window xwin; Window xwin;
Win win; Win win;

View File

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

View File

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

View File

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

View File

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

View File

@ -1,6 +1,6 @@
/* /*
* Copyright (C) 2000-2007 Carsten Haitzler, Geoff Harrison and various contributors * 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 * Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to * 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; w = wi;
h = hi; h = hi;
if (w < ewin->icccm.width.min) if (w < ewin->icccm.width_min)
w = ewin->icccm.width.min; w = ewin->icccm.width_min;
if (w > ewin->icccm.width.max) if (w > ewin->icccm.width_max)
w = ewin->icccm.width.max; w = ewin->icccm.width_max;
if (h < ewin->icccm.height.min) if (h < ewin->icccm.height_min)
h = ewin->icccm.height.min; h = ewin->icccm.height_min;
if (h > ewin->icccm.height.max) if (h > ewin->icccm.height_max)
h = ewin->icccm.height.max; h = ewin->icccm.height_max;
if ((w > 0) && (h > 0)) if ((w > 0) && (h > 0))
{ {
w -= ewin->icccm.base_w; 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, unsigned int winc, unsigned int hinc,
double amin, double amax) double amin, double amax)
{ {
ewin->icccm.width.min = wmin; ewin->icccm.width_min = wmin;
ewin->icccm.height.min = hmin; ewin->icccm.height_min = hmin;
ewin->icccm.width.max = wmax; ewin->icccm.width_max = wmax;
ewin->icccm.height.max = hmax; ewin->icccm.height_max = hmax;
ewin->icccm.base_w = wbase; ewin->icccm.base_w = wbase;
ewin->icccm.base_h = hbase; ewin->icccm.base_h = hbase;
@ -443,24 +443,24 @@ ICCCM_GetGeoms(EWin * ewin)
if (hint.flags & PMinSize) if (hint.flags & PMinSize)
{ {
ewin->icccm.width.min = MAX(0, hint.min_width); ewin->icccm.width_min = MAX(0, hint.min_width);
ewin->icccm.height.min = MAX(0, hint.min_height); ewin->icccm.height_min = MAX(0, hint.min_height);
} }
else else
{ {
ewin->icccm.width.min = 0; ewin->icccm.width_min = 0;
ewin->icccm.height.min = 0; ewin->icccm.height_min = 0;
} }
if (hint.flags & PMaxSize) if (hint.flags & PMaxSize)
{ {
ewin->icccm.width.max = MIN(hint.max_width, 65535); ewin->icccm.width_max = MIN(hint.max_width, 65535);
ewin->icccm.height.max = MIN(hint.max_height, 65535); ewin->icccm.height_max = MIN(hint.max_height, 65535);
} }
else else
{ {
ewin->icccm.width.max = 65535; ewin->icccm.width_max = 65535;
ewin->icccm.height.max = 65535; ewin->icccm.height_max = 65535;
} }
if (hint.flags & PResizeInc) if (hint.flags & PResizeInc)
@ -508,23 +508,23 @@ ICCCM_GetGeoms(EWin * ewin)
} }
else else
{ {
ewin->icccm.base_w = ewin->icccm.width.min; ewin->icccm.base_w = ewin->icccm.width_min;
ewin->icccm.base_h = ewin->icccm.height.min; ewin->icccm.base_h = ewin->icccm.height_min;
} }
if (ewin->icccm.width.min < ewin->icccm.base_w) if (ewin->icccm.width_min < ewin->icccm.base_w)
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) if (ewin->icccm.height_min < ewin->icccm.base_h)
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) if (ewin->icccm.width_max < ewin->icccm.base_w)
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) if (ewin->icccm.height_max < ewin->icccm.base_h)
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_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_v = (ewin->icccm.height_min == ewin->icccm.height_max);
if (EDebug(EDBUG_TYPE_SNAPS)) if (EDebug(EDBUG_TYPE_SNAPS))
Eprintf("Snap get icccm %#lx: %4d+%4d %4dx%4d: %s\n", 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), EwinIsTransient(ewin), EwinGetTransientFor(ewin),
ewin->props.no_resize_h, ewin->props.no_resize_v, ewin->props.no_resize_h, ewin->props.no_resize_v,
ewin->state.shaped, ewin->icccm.base_w, ewin->icccm.base_h, ewin->state.shaped, ewin->icccm.base_w, ewin->icccm.base_h,
ewin->icccm.width.min, ewin->icccm.height.min, ewin->icccm.width_min, ewin->icccm.height_min,
ewin->icccm.width.max, ewin->icccm.height.max, ewin->icccm.width_max, ewin->icccm.height_max,
ewin->icccm.w_inc, ewin->icccm.h_inc, ewin->icccm.w_inc, ewin->icccm.h_inc,
ewin->icccm.aspect_min, ewin->icccm.aspect_max, ewin->icccm.aspect_min, ewin->icccm.aspect_max,
ewin->strut.left, ewin->strut.right, ewin->strut.left, ewin->strut.right,

View File

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