aboutsummaryrefslogtreecommitdiff
path: root/nx-X11/lib/src/Geom.c
diff options
context:
space:
mode:
authorMihai Moldovan <ionic@ionic.de>2017-08-25 12:44:49 +0200
committerMihai Moldovan <ionic@ionic.de>2017-08-25 12:44:49 +0200
commitae0a2bfdeb9ceacb80aa03375353039d425b14b9 (patch)
treedaec55145477bcec69273e03d5c9ff10c10a4137 /nx-X11/lib/src/Geom.c
parentcbe2c0e44f412d07024207f374c0f56684adb088 (diff)
parent3b7e5a42f5abecb903a9d730d163d704520efb07 (diff)
downloadnx-libs-ae0a2bfdeb9ceacb80aa03375353039d425b14b9.tar.gz
nx-libs-ae0a2bfdeb9ceacb80aa03375353039d425b14b9.tar.bz2
nx-libs-ae0a2bfdeb9ceacb80aa03375353039d425b14b9.zip
Merge branch 'sunweaver-pr/libnx-x11-autoreconf' into 3.6.x
Attributes GH PR #498: https://github.com/ArcticaProject/nx-libs/pull/498
Diffstat (limited to 'nx-X11/lib/src/Geom.c')
-rw-r--r--nx-X11/lib/src/Geom.c89
1 files changed, 89 insertions, 0 deletions
diff --git a/nx-X11/lib/src/Geom.c b/nx-X11/lib/src/Geom.c
new file mode 100644
index 000000000..1da74f1c3
--- /dev/null
+++ b/nx-X11/lib/src/Geom.c
@@ -0,0 +1,89 @@
+
+/*
+
+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);
+}