Splitting the X11-specific "freeglut_state.c" code into its own file
[freeglut] / src / mswin / freeglut_state_mswin.c
index d3ba24d..3928579 100644 (file)
@@ -1,7 +1,7 @@
 /*\r
  * freeglut_state_mswin.c\r
  *\r
- * The Windows-specific mouse cursor related stuff.\r
+ * The Windows-specific state query methods.\r
  *\r
  * Copyright (c) 2012 Stephen J. Baker. All Rights Reserved.\r
  * Written by John F. Fay, <fayjf@sourceforge.net>\r
  */\r
 \r
 #include <GL/freeglut.h>\r
-#include "freeglut_internal_mswin.h"\r
+#include "../Common/freeglut_internal.h"\r
 \r
 \r
+extern GLboolean fgSetupPixelFormat( SFG_Window* window, GLboolean checkOnly,\r
+                                     unsigned char layer_type );\r
+\r
+/* \r
+ * Helper functions for getting client area from the window rect\r
+ * and the window rect from the client area given the style of the window\r
+ * (or a valid window pointer from which the style can be queried).\r
+ */\r
+extern RECT fghGetClientArea( const SFG_Window *window, BOOL wantPosOutside );\r
+extern void fghGetBorderWidth(const DWORD windowStyle, int* xBorderWidth, int* yBorderWidth);\r
+\r
 \r
 /* The following include file is available from SGI but is not standard:\r
  *   #include <GL/wglext.h>\r
@@ -218,7 +229,7 @@ int fgPlatformGlutGet ( GLenum eWhat )
     case GLUT_WINDOW_FORMAT_ID:\r
 #if !defined(_WIN32_WCE)\r
         if( fgStructure.CurrentWindow != NULL )\r
-            return GetPixelFormat( fgStructure.CurrentWindow->Window.Device );\r
+            return GetPixelFormat( fgStructure.CurrentWindow->Window.pContext.Device );\r
 #endif /* defined(_WIN32_WCE) */\r
         return 0;\r
 \r
@@ -229,3 +240,104 @@ int fgPlatformGlutGet ( GLenum eWhat )
 \r
        return -1;\r
 }\r
+\r
+\r
+int fgPlatformGlutDeviceGet ( GLenum eWhat )\r
+{\r
+    switch( eWhat )\r
+    {\r
+    case GLUT_HAS_KEYBOARD:\r
+        /*\r
+         * Win32 is assumed a keyboard, and this cannot be queried,\r
+         * except for WindowsCE.\r
+         *\r
+         * X11 has a core keyboard by definition, although it can\r
+         * be present as a virtual/dummy keyboard. For now, there\r
+         * is no reliable way to tell if a real keyboard is present.\r
+         */\r
+#if defined(_WIN32_CE)\r
+        return ( GetKeyboardStatus() & KBDI_KEYBOARD_PRESENT ) ? 1 : 0;\r
+#   if FREEGLUT_LIB_PRAGMAS\r
+#       pragma comment (lib,"Kbdui.lib")\r
+#   endif\r
+\r
+#else\r
+        return 1;\r
+#endif\r
+\r
+    case GLUT_HAS_MOUSE:\r
+        /*\r
+         * MS Windows can be booted without a mouse.\r
+         */\r
+        return GetSystemMetrics( SM_MOUSEPRESENT );\r
+\r
+    case GLUT_NUM_MOUSE_BUTTONS:\r
+#  if defined(_WIN32_WCE)\r
+        return 1;\r
+#  else\r
+        return GetSystemMetrics( SM_CMOUSEBUTTONS );\r
+#  endif\r
+\r
+    default:\r
+        fgWarning( "glutDeviceGet(): missing enum handle %d", eWhat );\r
+        break;\r
+    }\r
+\r
+    /* And now -- the failure. */\r
+    return -1;\r
+}\r
+\r
+\r
+int fgPlatformGlutLayerGet( GLenum eWhat )\r
+{\r
+    /*\r
+     * This is easy as layers are not implemented ;-)\r
+     *\r
+     * XXX Can we merge the UNIX/X11 and WIN32 sections?  Or\r
+     * XXX is overlay support planned?\r
+     */\r
+    switch( eWhat )\r
+    {\r
+\r
+    case GLUT_OVERLAY_POSSIBLE:\r
+/*      return fgSetupPixelFormat( fgStructure.CurrentWindow, GL_TRUE,\r
+                                   PFD_OVERLAY_PLANE ); */\r
+      return 0 ;\r
+\r
+    case GLUT_LAYER_IN_USE:\r
+        return GLUT_NORMAL;\r
+\r
+    case GLUT_HAS_OVERLAY:\r
+        return 0;\r
+\r
+    case GLUT_TRANSPARENT_INDEX:\r
+        /*\r
+         * Return just anything, which is always defined as zero\r
+         *\r
+         * XXX HUH?\r
+         */\r
+        return 0;\r
+\r
+    case GLUT_NORMAL_DAMAGED:\r
+        /* XXX Actually I do not know. Maybe. */\r
+        return 0;\r
+\r
+    case GLUT_OVERLAY_DAMAGED:\r
+        return -1;\r
+\r
+    default:\r
+        fgWarning( "glutLayerGet(): missing enum handle %d", eWhat );\r
+        break;\r
+    }\r
+\r
+    /* And fail. That's good. Programs do love failing. */\r
+    return -1;\r
+}\r
+\r
+\r
+/* MSwin does not currently have any Mode values? */\r
+int *fgPlatformGlutGetModeValues(GLenum eWhat, int *size)\r
+{\r
+  *size = 0;\r
+  return NULL;\r
+}
\ No newline at end of file