Merge branch 'master' into gallium-0.2
[mesa.git] / src / glut / os2 / glut_get.cpp
index c846f48658229d1040d2bcf05f919fd76f50c747..8921e9ab033b85b6f436e5716b5ce79f2fce949b 100644 (file)
-\r
-/* Copyright (c) Mark J. Kilgard, 1994, 1997, 1998. */\r
-\r
-/* This program is freely distributable without licensing fees\r
-   and is provided without guarantee or warrantee expressed or\r
-   implied. This program is -not- in the public domain. */\r
-\r
-#include <assert.h>\r
-#include <stdlib.h>  /* SunOS 4 needs NULL defined for GETTIMEOFDAY macro. */\r
-#include "glutint.h"\r
-\r
-/* CENTRY */\r
-int GLUTAPIENTRY\r
-glutGet(GLenum param)\r
-{\r
-  Window win, root;\r
-  int x, y, value;\r
-  unsigned int width, height, border, depth;\r
-\r
-  switch (param) {\r
-  case GLUT_INIT_WINDOW_X:\r
-    return __glutInitX;\r
-  case GLUT_INIT_WINDOW_Y:\r
-    return __glutInitY;\r
-  case GLUT_INIT_WINDOW_WIDTH:\r
-    return __glutInitWidth;\r
-  case GLUT_INIT_WINDOW_HEIGHT:\r
-    return __glutInitHeight;\r
-  case GLUT_INIT_DISPLAY_MODE:\r
-    return __glutDisplayMode;\r
-  case GLUT_WINDOW_X:\r
-    XTranslateCoordinates(__glutDisplay, __glutCurrentWindow->win,\r
-      __glutRoot, 0, 0, &x, &y, &win);\r
-    return x;\r
-  case GLUT_WINDOW_Y:\r
-    XTranslateCoordinates(__glutDisplay, __glutCurrentWindow->win,\r
-      __glutRoot, 0, 0, &x, &y, &win);\r
-    return y;\r
-  case GLUT_WINDOW_WIDTH:\r
-    if (!__glutCurrentWindow->reshape) {\r
-      XGetGeometry(__glutDisplay, __glutCurrentWindow->win,\r
-        &root, &x, &y,\r
-        &width, &height, &border, &depth);\r
-      return width;\r
-    }\r
-    return __glutCurrentWindow->width;\r
-  case GLUT_WINDOW_HEIGHT:\r
-    if (!__glutCurrentWindow->reshape) {\r
-      XGetGeometry(__glutDisplay, __glutCurrentWindow->win,\r
-        &root, &x, &y,\r
-        &width, &height, &border, &depth);\r
-      return height;\r
-    }\r
-    return __glutCurrentWindow->height;\r
-#ifdef __OS2__\r
- #define GET_CONFIG(attrib) \\r
-  { if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win)  \\r
-       glXGetConfig( __glutCurrentWindow->vis, attrib, &value); \\r
-    else  \\r
-    glXGetConfig(__glutCurrentWindow->overlay->vis, attrib, &value); \\r
-  } \\r
-\r
-#else\r
-\r
-#define GET_CONFIG(attrib) { \\r
-  if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) { \\r
-    glXGetConfig(__glutDisplay, __glutCurrentWindow->vis, \\r
-      attrib, &value); \\r
-  } else { \\r
-    glXGetConfig(__glutDisplay, __glutCurrentWindow->overlay->vis, \\r
-      attrib, &value); \\r
-  } \\r
-}\r
-#endif\r
-\r
-  case GLUT_WINDOW_BUFFER_SIZE:\r
-    GET_CONFIG(GLX_BUFFER_SIZE);\r
-    return value;\r
-  case GLUT_WINDOW_STENCIL_SIZE:\r
-    GET_CONFIG(GLX_STENCIL_SIZE);\r
-    return value;\r
-  case GLUT_WINDOW_DEPTH_SIZE:\r
-    GET_CONFIG(GLX_DEPTH_SIZE);\r
-    return value;\r
-  case GLUT_WINDOW_RED_SIZE:\r
-    GET_CONFIG(GLX_RED_SIZE);\r
-    return value;\r
-  case GLUT_WINDOW_GREEN_SIZE:\r
-    GET_CONFIG(GLX_GREEN_SIZE);\r
-    return value;\r
-  case GLUT_WINDOW_BLUE_SIZE:\r
-    GET_CONFIG(GLX_BLUE_SIZE);\r
-    return value;\r
-  case GLUT_WINDOW_ALPHA_SIZE:\r
-    GET_CONFIG(GLX_ALPHA_SIZE);\r
-    return value;\r
-  case GLUT_WINDOW_ACCUM_RED_SIZE:\r
-    GET_CONFIG(GLX_ACCUM_RED_SIZE);\r
-    return value;\r
-  case GLUT_WINDOW_ACCUM_GREEN_SIZE:\r
-    GET_CONFIG(GLX_ACCUM_GREEN_SIZE);\r
-    return value;\r
-  case GLUT_WINDOW_ACCUM_BLUE_SIZE:\r
-    GET_CONFIG(GLX_ACCUM_BLUE_SIZE);\r
-    return value;\r
-  case GLUT_WINDOW_ACCUM_ALPHA_SIZE:\r
-    GET_CONFIG(GLX_ACCUM_ALPHA_SIZE);\r
-    return value;\r
-  case GLUT_WINDOW_DOUBLEBUFFER:\r
-    GET_CONFIG(GLX_DOUBLEBUFFER);\r
-    return value;\r
-  case GLUT_WINDOW_RGBA:\r
-    GET_CONFIG(GLX_RGBA);\r
-    return value;\r
-  case GLUT_WINDOW_COLORMAP_SIZE:\r
-    GET_CONFIG(GLX_RGBA);\r
-    if (value) {\r
-      return 0;\r
-    } else {\r
-#if defined(_WIN32) || defined(__OS2__)\r
-      /* KLUDGE: we always assume 256 colors in CI mode on\r
-         Win32 */\r
-      return 256;\r
-#else\r
-      if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) {\r
-        return __glutCurrentWindow->vis->visual->map_entries;\r
-      } else {\r
-        return __glutCurrentWindow->overlay->vis->visual->map_entries;\r
-      }\r
-#endif /* _WIN32 */\r
-    }\r
-  case GLUT_WINDOW_PARENT:\r
-    return __glutCurrentWindow->parent ?\r
-      __glutCurrentWindow->parent->num + 1 : 0;\r
-  case GLUT_WINDOW_NUM_CHILDREN:\r
-    {\r
-      int num = 0;\r
-      GLUTwindow *children = __glutCurrentWindow->children;\r
-\r
-      while (children) {\r
-        num++;\r
-        children = children->siblings;\r
-      }\r
-      return num;\r
-    }\r
-  case GLUT_WINDOW_NUM_SAMPLES:\r
-#if defined(GLX_VERSION_1_1) && defined(GLX_SGIS_multisample)\r
-    if (__glutIsSupportedByGLX("GLX_SGIS_multisample")) {\r
-      GET_CONFIG(GLX_SAMPLES_SGIS);\r
-      return value;\r
-    } else {\r
-      return 0;\r
-    }\r
-#else\r
-    /* Independent of GLX server support, multisampling not\r
-       supported by GLX client-side. */\r
-    return 0;\r
-#endif\r
-  case GLUT_WINDOW_STEREO:\r
-    GET_CONFIG(GLX_STEREO);\r
-    return value;\r
-  case GLUT_WINDOW_CURSOR:\r
-    return __glutCurrentWindow->cursor;\r
-  case GLUT_SCREEN_WIDTH:\r
-    return DisplayWidth(__glutDisplay, __glutScreen);\r
-  case GLUT_SCREEN_HEIGHT:\r
-    return DisplayHeight(__glutDisplay, __glutScreen);\r
-  case GLUT_SCREEN_WIDTH_MM:\r
-    return DisplayWidthMM(__glutDisplay, __glutScreen);\r
-  case GLUT_SCREEN_HEIGHT_MM:\r
-    return DisplayHeightMM(__glutDisplay, __glutScreen);\r
-  case GLUT_MENU_NUM_ITEMS:\r
-    return __glutCurrentMenu->num;\r
-  case GLUT_DISPLAY_MODE_POSSIBLE:\r
-    {\r
-      XVisualInfo *vi;\r
-      Bool dummy, visAlloced;\r
-      void *fbc;\r
-\r
-#if defined(_WIN32)\r
-      /* Our fake glXChooseVisual (which is called by\r
-         __glutDetermineVisual) needs an HDC to work with, so grab one\r
-         from the "root" window. */\r
-      XHDC = GetDC(GetDesktopWindow());\r
-#endif\r
-      vi = __glutDetermineWindowVisual(&dummy, &visAlloced, &fbc);\r
-#if defined(_WIN32)\r
-      ReleaseDC(GetDesktopWindow(), XHDC);\r
-#endif\r
-      if (vi) {\r
-        if (visAlloced)\r
-          XFree(vi);\r
-        return 1;\r
-      }\r
-      return 0;\r
-    }\r
-  case GLUT_ELAPSED_TIME:\r
-    {\r
-#ifdef OLD_VMS\r
-       struct timeval6 elapsed, beginning, now;\r
-#else\r
-       struct timeval elapsed, beginning, now;\r
-#endif\r
-\r
-       __glutInitTime(&beginning);\r
-      GETTIMEOFDAY(&now);\r
-      TIMEDELTA(elapsed, now, beginning);\r
-      /* Return elapsed milliseconds. */\r
-#if defined(__vms) && ( __VMS_VER < 70000000 )\r
-      return (int) (elapsed.val / TICKS_PER_MILLISECOND);\r
-#else\r
-      return (int) ((elapsed.tv_sec * 1000) + (elapsed.tv_usec / 1000));\r
-#endif\r
-    }\r
-  case GLUT_WINDOW_FORMAT_ID:\r
-#if defined(__OS2__)\r
-    return wglGetPixelFormat(__glutCurrentWindow->hdc);\r
-#elif defined(_WIN32)\r
-    return GetPixelFormat(__glutCurrentWindow->hdc);\r
-#else\r
-    if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) {\r
-      return (int) __glutCurrentWindow->vis->visualid;\r
-    } else {\r
-      return (int) __glutCurrentWindow->overlay->vis->visualid;\r
-    }\r
-#endif\r
-  default:\r
-    __glutWarning("invalid glutGet parameter: %d", param);\r
-    return -1;\r
-  }\r
-}\r
-/* ENDCENTRY */\r
+
+/* Copyright (c) Mark J. Kilgard, 1994, 1997, 1998. */
+
+/* This program is freely distributable without licensing fees
+   and is provided without guarantee or warrantee expressed or
+   implied. This program is -not- in the public domain. */
+
+#include <assert.h>
+#include <stdlib.h>  /* SunOS 4 needs NULL defined for GETTIMEOFDAY macro. */
+#include "glutint.h"
+
+/* CENTRY */
+int GLUTAPIENTRY
+glutGet(GLenum param)
+{
+  Window win, root;
+  int x, y, value;
+  unsigned int width, height, border, depth;
+
+  switch (param) {
+  case GLUT_INIT_WINDOW_X:
+    return __glutInitX;
+  case GLUT_INIT_WINDOW_Y:
+    return __glutInitY;
+  case GLUT_INIT_WINDOW_WIDTH:
+    return __glutInitWidth;
+  case GLUT_INIT_WINDOW_HEIGHT:
+    return __glutInitHeight;
+  case GLUT_INIT_DISPLAY_MODE:
+    return __glutDisplayMode;
+  case GLUT_WINDOW_X:
+    XTranslateCoordinates(__glutDisplay, __glutCurrentWindow->win,
+      __glutRoot, 0, 0, &x, &y, &win);
+    return x;
+  case GLUT_WINDOW_Y:
+    XTranslateCoordinates(__glutDisplay, __glutCurrentWindow->win,
+      __glutRoot, 0, 0, &x, &y, &win);
+    return y;
+  case GLUT_WINDOW_WIDTH:
+    if (!__glutCurrentWindow->reshape) {
+      XGetGeometry(__glutDisplay, __glutCurrentWindow->win,
+        &root, &x, &y,
+        &width, &height, &border, &depth);
+      return width;
+    }
+    return __glutCurrentWindow->width;
+  case GLUT_WINDOW_HEIGHT:
+    if (!__glutCurrentWindow->reshape) {
+      XGetGeometry(__glutDisplay, __glutCurrentWindow->win,
+        &root, &x, &y,
+        &width, &height, &border, &depth);
+      return height;
+    }
+    return __glutCurrentWindow->height;
+#ifdef __OS2__
+ #define GET_CONFIG(attrib) \
+  { if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win)  \
+       glXGetConfig( __glutCurrentWindow->vis, attrib, &value); \
+    else  \
+    glXGetConfig(__glutCurrentWindow->overlay->vis, attrib, &value); \
+  } \
+
+#else
+
+#define GET_CONFIG(attrib) { \
+  if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) { \
+    glXGetConfig(__glutDisplay, __glutCurrentWindow->vis, \
+      attrib, &value); \
+  } else { \
+    glXGetConfig(__glutDisplay, __glutCurrentWindow->overlay->vis, \
+      attrib, &value); \
+  } \
+}
+#endif
+
+  case GLUT_WINDOW_BUFFER_SIZE:
+    GET_CONFIG(GLX_BUFFER_SIZE);
+    return value;
+  case GLUT_WINDOW_STENCIL_SIZE:
+    GET_CONFIG(GLX_STENCIL_SIZE);
+    return value;
+  case GLUT_WINDOW_DEPTH_SIZE:
+    GET_CONFIG(GLX_DEPTH_SIZE);
+    return value;
+  case GLUT_WINDOW_RED_SIZE:
+    GET_CONFIG(GLX_RED_SIZE);
+    return value;
+  case GLUT_WINDOW_GREEN_SIZE:
+    GET_CONFIG(GLX_GREEN_SIZE);
+    return value;
+  case GLUT_WINDOW_BLUE_SIZE:
+    GET_CONFIG(GLX_BLUE_SIZE);
+    return value;
+  case GLUT_WINDOW_ALPHA_SIZE:
+    GET_CONFIG(GLX_ALPHA_SIZE);
+    return value;
+  case GLUT_WINDOW_ACCUM_RED_SIZE:
+    GET_CONFIG(GLX_ACCUM_RED_SIZE);
+    return value;
+  case GLUT_WINDOW_ACCUM_GREEN_SIZE:
+    GET_CONFIG(GLX_ACCUM_GREEN_SIZE);
+    return value;
+  case GLUT_WINDOW_ACCUM_BLUE_SIZE:
+    GET_CONFIG(GLX_ACCUM_BLUE_SIZE);
+    return value;
+  case GLUT_WINDOW_ACCUM_ALPHA_SIZE:
+    GET_CONFIG(GLX_ACCUM_ALPHA_SIZE);
+    return value;
+  case GLUT_WINDOW_DOUBLEBUFFER:
+    GET_CONFIG(GLX_DOUBLEBUFFER);
+    return value;
+  case GLUT_WINDOW_RGBA:
+    GET_CONFIG(GLX_RGBA);
+    return value;
+  case GLUT_WINDOW_COLORMAP_SIZE:
+    GET_CONFIG(GLX_RGBA);
+    if (value) {
+      return 0;
+    } else {
+#if defined(_WIN32) || defined(__OS2__)
+      /* KLUDGE: we always assume 256 colors in CI mode on
+         Win32 */
+      return 256;
+#else
+      if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) {
+        return __glutCurrentWindow->vis->visual->map_entries;
+      } else {
+        return __glutCurrentWindow->overlay->vis->visual->map_entries;
+      }
+#endif /* _WIN32 */
+    }
+  case GLUT_WINDOW_PARENT:
+    return __glutCurrentWindow->parent ?
+      __glutCurrentWindow->parent->num + 1 : 0;
+  case GLUT_WINDOW_NUM_CHILDREN:
+    {
+      int num = 0;
+      GLUTwindow *children = __glutCurrentWindow->children;
+
+      while (children) {
+        num++;
+        children = children->siblings;
+      }
+      return num;
+    }
+  case GLUT_WINDOW_NUM_SAMPLES:
+#if defined(GLX_VERSION_1_1) && defined(GLX_SGIS_multisample)
+    if (__glutIsSupportedByGLX("GLX_SGIS_multisample")) {
+      GET_CONFIG(GLX_SAMPLES_SGIS);
+      return value;
+    } else {
+      return 0;
+    }
+#else
+    /* Independent of GLX server support, multisampling not
+       supported by GLX client-side. */
+    return 0;
+#endif
+  case GLUT_WINDOW_STEREO:
+    GET_CONFIG(GLX_STEREO);
+    return value;
+  case GLUT_WINDOW_CURSOR:
+    return __glutCurrentWindow->cursor;
+  case GLUT_SCREEN_WIDTH:
+    return DisplayWidth(__glutDisplay, __glutScreen);
+  case GLUT_SCREEN_HEIGHT:
+    return DisplayHeight(__glutDisplay, __glutScreen);
+  case GLUT_SCREEN_WIDTH_MM:
+    return DisplayWidthMM(__glutDisplay, __glutScreen);
+  case GLUT_SCREEN_HEIGHT_MM:
+    return DisplayHeightMM(__glutDisplay, __glutScreen);
+  case GLUT_MENU_NUM_ITEMS:
+    return __glutCurrentMenu->num;
+  case GLUT_DISPLAY_MODE_POSSIBLE:
+    {
+      XVisualInfo *vi;
+      Bool dummy, visAlloced;
+      void *fbc;
+
+#if defined(_WIN32)
+      /* Our fake glXChooseVisual (which is called by
+         __glutDetermineVisual) needs an HDC to work with, so grab one
+         from the "root" window. */
+      XHDC = GetDC(GetDesktopWindow());
+#endif
+      vi = __glutDetermineWindowVisual(&dummy, &visAlloced, &fbc);
+#if defined(_WIN32)
+      ReleaseDC(GetDesktopWindow(), XHDC);
+#endif
+      if (vi) {
+        if (visAlloced)
+          XFree(vi);
+        return 1;
+      }
+      return 0;
+    }
+  case GLUT_ELAPSED_TIME:
+    {
+#ifdef OLD_VMS
+       struct timeval6 elapsed, beginning, now;
+#else
+       struct timeval elapsed, beginning, now;
+#endif
+
+       __glutInitTime(&beginning);
+      GETTIMEOFDAY(&now);
+      TIMEDELTA(elapsed, now, beginning);
+      /* Return elapsed milliseconds. */
+#if defined(__vms) && ( __VMS_VER < 70000000 )
+      return (int) (elapsed.val / TICKS_PER_MILLISECOND);
+#else
+      return (int) ((elapsed.tv_sec * 1000) + (elapsed.tv_usec / 1000));
+#endif
+    }
+  case GLUT_WINDOW_FORMAT_ID:
+#if defined(__OS2__)
+    return wglGetPixelFormat(__glutCurrentWindow->hdc);
+#elif defined(_WIN32)
+    return GetPixelFormat(__glutCurrentWindow->hdc);
+#else
+    if (__glutCurrentWindow->renderWin == __glutCurrentWindow->win) {
+      return (int) __glutCurrentWindow->vis->visualid;
+    } else {
+      return (int) __glutCurrentWindow->overlay->vis->visualid;
+    }
+#endif
+  default:
+    __glutWarning("invalid glutGet parameter: %d", param);
+    return -1;
+  }
+}
+/* ENDCENTRY */