90 lines
3.2 KiB
C
90 lines
3.2 KiB
C
|
|
/*
|
|
|
|
Copyright 1985, 1998 The Open Group
|
|
|
|
Permission to use, copy, modify, distribute, and sell this software and its
|
|
documentation for any purpose is hereby granted without fee, provided that
|
|
the above copyright notice appear in all copies and that both that
|
|
copyright notice and this permission notice appear in supporting
|
|
documentation.
|
|
|
|
The above copyright notice and this permission notice shall be included
|
|
in all copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
|
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
|
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
OTHER DEALINGS IN THE SOFTWARE.
|
|
|
|
Except as contained in this notice, the name of The Open Group shall
|
|
not be used in advertising or otherwise to promote the sale, use or
|
|
other dealings in this Software without prior written authorization
|
|
from The Open Group.
|
|
|
|
*/
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include <config.h>
|
|
#endif
|
|
#include "Xlibint.h"
|
|
#include "Xutil.h"
|
|
|
|
/*
|
|
* This routine given a user supplied positional argument and a default
|
|
* argument (fully qualified) will return the position the window should take
|
|
* returns 0 if there was some problem, else the position bitmask.
|
|
*/
|
|
|
|
int
|
|
XGeometry (
|
|
Display *dpy, /* user's display connection */
|
|
int screen, /* screen on which to do computation */
|
|
_Xconst char *pos, /* user provided geometry spec */
|
|
_Xconst char *def, /* default geometry spec for window */
|
|
unsigned int bwidth, /* border width */
|
|
unsigned int fwidth, /* size of position units */
|
|
unsigned int fheight,
|
|
int xadd, /* any additional interior space */
|
|
int yadd,
|
|
register int *x, /* always set on successful RETURN */
|
|
register int *y, /* always set on successful RETURN */
|
|
register int *width, /* always set on successful RETURN */
|
|
register int *height) /* always set on successful RETURN */
|
|
{
|
|
int px, py; /* returned values from parse */
|
|
unsigned int pwidth, pheight; /* returned values from parse */
|
|
int dx, dy; /* default values from parse */
|
|
unsigned int dwidth, dheight; /* default values from parse */
|
|
int pmask, dmask; /* values back from parse */
|
|
|
|
pmask = XParseGeometry(pos, &px, &py, &pwidth, &pheight);
|
|
dmask = XParseGeometry(def, &dx, &dy, &dwidth, &dheight);
|
|
|
|
/* set default values */
|
|
*x = (dmask & XNegative) ?
|
|
DisplayWidth(dpy, screen) + dx - dwidth * fwidth -
|
|
2 * bwidth - xadd : dx;
|
|
*y = (dmask & YNegative) ?
|
|
DisplayHeight(dpy, screen) + dy - dheight * fheight -
|
|
2 * bwidth - yadd : dy;
|
|
*width = dwidth;
|
|
*height = dheight;
|
|
|
|
if (pmask & WidthValue) *width = pwidth;
|
|
if (pmask & HeightValue) *height = pheight;
|
|
|
|
if (pmask & XValue)
|
|
*x = (pmask & XNegative) ?
|
|
DisplayWidth(dpy, screen) + px - *width * fwidth -
|
|
2 * bwidth - xadd : px;
|
|
if (pmask & YValue)
|
|
*y = (pmask & YNegative) ?
|
|
DisplayHeight(dpy, screen) + py - *height * fheight -
|
|
2 * bwidth - yadd : py;
|
|
return (pmask);
|
|
}
|