summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErik Faye-Lund <erik.faye-lund@collabora.com>2020-04-08 18:40:09 +0200
committerErik Faye-Lund <erik.faye-lund@collabora.com>2020-04-16 11:08:37 +0200
commit16c9a13065686fa68c0b384076faea5544b3f6a6 (patch)
tree483b73ddb29e2e1760ba5407a2ba9c6fec858c83
parent781306374bee621238a0f570c5685d40793c1480 (diff)
wglgears: add geometry option
The parser isn't exactly identical with XParseGeometry, but should be close enough for general use. Reviewed-by: Brian Paul <brianp@vmware.com>
-rw-r--r--src/wgl/wglgears.c64
1 files changed, 61 insertions, 3 deletions
diff --git a/src/wgl/wglgears.c b/src/wgl/wglgears.c
index 738a77b2..2ae9e073 100644
--- a/src/wgl/wglgears.c
+++ b/src/wgl/wglgears.c
@@ -79,7 +79,8 @@ static
void usage(void)
{
fprintf (stderr, "usage:\n");
- fprintf (stderr, "-info display OpenGL renderer info\n");
+ fprintf (stderr, "-info display OpenGL renderer info\n");
+ fprintf (stderr, "-geometry WxH+X+Y window geometry\n");
}
@@ -528,9 +529,62 @@ event_loop(void)
}
+static void
+parse_geometry(const char *str, int *x, int *y, unsigned int *w, unsigned int *h)
+{
+ char *end;
+ if (*str == '=')
+ str++;
+
+ long tw = LONG_MAX;
+ if (isdigit(*str)) {
+ tw = strtol(str, &end, 10);
+ if (str == end)
+ return;
+ str = end;
+ }
+
+ long th = LONG_MAX;
+ if (tolower(*str) == 'x') {
+ str++;
+ th = strtol(str, &end, 10);
+ if (str== end)
+ return;
+ str = end;
+ }
+
+ long tx = LONG_MAX;
+ if (*str == '+' || *str == '-') {
+ tx = strtol(str, &end, 10);
+ if (str == end)
+ return;
+ str = end;
+ }
+
+ long ty = LONG_MAX;
+ if (*str == '+' || *str == '-') {
+ ty = strtol(str, &end, 10);
+ if (str == end)
+ return;
+ str = end;
+ }
+
+ if (tw < LONG_MAX)
+ *w = tw;
+ if (th < LONG_MAX)
+ *h = th;
+ if (tx < INT_MAX)
+ *x = tx;
+ if (ty < INT_MAX)
+ *y = ty;
+}
+
+
int
main(int argc, char *argv[])
{
+ unsigned int winWidth = 300, winHeight = 300;
+ int x = 0, y = 0;
int i;
GLboolean printInfo = GL_FALSE;
@@ -543,14 +597,18 @@ main(int argc, char *argv[])
else if (strcmp(argv[i], "-srgb") == 0) {
use_srgb = GL_TRUE;
}
+ else if (strcmp(argv[i], "-geometry") == 0) {
+ parse_geometry(argv[i+1], &x, &y, &winWidth, &winHeight);
+ i++;
+ }
else {
usage();
return -1;
}
}
- make_window("wglgears", 0, 0, 300, 300);
- reshape(300, 300);
+ make_window("wglgears", x, y, winWidth, winHeight);
+ reshape(winWidth, winHeight);
if (printInfo) {
printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER));