Splitting out the Windows-specific cursor code into its own file
authorJohn F. Fay <johnffay@nettally.com>
Thu, 19 Jan 2012 23:33:47 +0000 (23:33 +0000)
committerJohn F. Fay <johnffay@nettally.com>
Thu, 19 Jan 2012 23:33:47 +0000 (23:33 +0000)
git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@982 7f0cb862-5218-0410-a997-914c9d46530a

src/Common/freeglut_cursor.c
src/mswin/freeglut_cursor_mswin.c
src/mswin/freeglut_internal_mswin.h

index e467353..1eddf87 100644 (file)
@@ -39,6 +39,9 @@
 \r
 /* -- PRIVATE FUNCTIONS --------------------------------------------------- */\r
 \r
+extern void fghSetCursor ( SFG_Window *window, int cursorID );\r
+extern void fghWarpPointer ( int x, int y );\r
+\r
 #if TARGET_HOST_POSIX_X11 || TARGET_HOST_MAC_OSX || TARGET_HOST_SOLARIS\r
   #include <X11/cursorfont.h>\r
 \r
@@ -162,91 +165,6 @@ static void fghWarpPointer ( int x, int y )
 #endif\r
 \r
 \r
-#if TARGET_HOST_MS_WINDOWS\r
-static void fghSetCursor ( SFG_Window *window, int cursorID )\r
-{\r
-    /*\r
-     * Joe Krahn is re-writing the following code.\r
-     */\r
-    /* Set the cursor AND change it for this window class. */\r
-#if !defined(__MINGW64__) && _MSC_VER <= 1200\r
-#       define MAP_CURSOR(a,b)                                   \\r
-        case a:                                                  \\r
-            SetCursor( LoadCursor( NULL, b ) );                  \\r
-            SetClassLong( window->Window.Handle,                 \\r
-                          GCL_HCURSOR,                           \\r
-                          ( LONG )LoadCursor( NULL, b ) );       \\r
-        break;\r
-    /* Nuke the cursor AND change it for this window class. */\r
-#       define ZAP_CURSOR(a,b)                                   \\r
-        case a:                                                  \\r
-            SetCursor( NULL );                                   \\r
-            SetClassLong( window->Window.Handle,                 \\r
-                          GCL_HCURSOR, ( LONG )NULL );           \\r
-        break;\r
-#else\r
-#       define MAP_CURSOR(a,b)                                   \\r
-        case a:                                                  \\r
-            SetCursor( LoadCursor( NULL, b ) );                  \\r
-            SetClassLongPtr( window->Window.Handle,              \\r
-                          GCLP_HCURSOR,                          \\r
-                          ( LONG )( LONG_PTR )LoadCursor( NULL, b ) );       \\r
-        break;\r
-    /* Nuke the cursor AND change it for this window class. */\r
-#       define ZAP_CURSOR(a,b)                                   \\r
-        case a:                                                  \\r
-            SetCursor( NULL );                                   \\r
-            SetClassLongPtr( window->Window.Handle,              \\r
-                          GCLP_HCURSOR, ( LONG )( LONG_PTR )NULL );          \\r
-        break;\r
-#endif\r
-\r
-    switch( cursorID )\r
-    {\r
-        MAP_CURSOR( GLUT_CURSOR_RIGHT_ARROW,         IDC_ARROW     );\r
-        MAP_CURSOR( GLUT_CURSOR_LEFT_ARROW,          IDC_ARROW     );\r
-        MAP_CURSOR( GLUT_CURSOR_INFO,                IDC_HELP      );\r
-        MAP_CURSOR( GLUT_CURSOR_DESTROY,             IDC_CROSS     );\r
-        MAP_CURSOR( GLUT_CURSOR_HELP,                IDC_HELP      );\r
-        MAP_CURSOR( GLUT_CURSOR_CYCLE,               IDC_SIZEALL   );\r
-        MAP_CURSOR( GLUT_CURSOR_SPRAY,               IDC_CROSS     );\r
-        MAP_CURSOR( GLUT_CURSOR_WAIT,                IDC_WAIT      );\r
-        MAP_CURSOR( GLUT_CURSOR_TEXT,                IDC_IBEAM     );\r
-        MAP_CURSOR( GLUT_CURSOR_CROSSHAIR,           IDC_CROSS     );\r
-        MAP_CURSOR( GLUT_CURSOR_UP_DOWN,             IDC_SIZENS    );\r
-        MAP_CURSOR( GLUT_CURSOR_LEFT_RIGHT,          IDC_SIZEWE    );\r
-        MAP_CURSOR( GLUT_CURSOR_TOP_SIDE,            IDC_ARROW     ); /* XXX ToDo */\r
-        MAP_CURSOR( GLUT_CURSOR_BOTTOM_SIDE,         IDC_ARROW     ); /* XXX ToDo */\r
-        MAP_CURSOR( GLUT_CURSOR_LEFT_SIDE,           IDC_ARROW     ); /* XXX ToDo */\r
-        MAP_CURSOR( GLUT_CURSOR_RIGHT_SIDE,          IDC_ARROW     ); /* XXX ToDo */\r
-        MAP_CURSOR( GLUT_CURSOR_TOP_LEFT_CORNER,     IDC_SIZENWSE  );\r
-        MAP_CURSOR( GLUT_CURSOR_TOP_RIGHT_CORNER,    IDC_SIZENESW  );\r
-        MAP_CURSOR( GLUT_CURSOR_BOTTOM_RIGHT_CORNER, IDC_SIZENWSE  );\r
-        MAP_CURSOR( GLUT_CURSOR_BOTTOM_LEFT_CORNER,  IDC_SIZENESW  );\r
-        MAP_CURSOR( GLUT_CURSOR_INHERIT,             IDC_ARROW     ); /* XXX ToDo */\r
-        ZAP_CURSOR( GLUT_CURSOR_NONE,                NULL          );\r
-        MAP_CURSOR( GLUT_CURSOR_FULL_CROSSHAIR,      IDC_CROSS     ); /* XXX ToDo */\r
-\r
-    default:\r
-        fgError( "Unknown cursor type: %d", cursorID );\r
-        break;\r
-    }\r
-}\r
-\r
-\r
-static void fghWarpPointer ( int x, int y )\r
-{\r
-    POINT coords;\r
-    coords.x = x;\r
-    coords.y = y;\r
-\r
-    /* ClientToScreen() translates {coords} for us. */\r
-    ClientToScreen( fgStructure.CurrentWindow->Window.Handle, &coords );\r
-    SetCursorPos( coords.x, coords.y );\r
-}\r
-#endif\r
-\r
-\r
 /* -- INTERNAL FUNCTIONS ---------------------------------------------------- */\r
 void fgSetCursor ( SFG_Window *window, int cursorID )\r
 {\r
index e69de29..49ff128 100644 (file)
@@ -0,0 +1,115 @@
+/*\r
+ * freeglut_cursor_mswin.c\r
+ *\r
+ * The Windows-specific mouse cursor related stuff.\r
+ *\r
+ * Copyright (c) 2012 Stephen J. Baker. All Rights Reserved.\r
+ * Written by John F. Fay, <fayjf@sourceforge.net>\r
+ * Creation date: Thu Jan 19, 2012\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
+\r
+#include <GL/freeglut.h>\r
+#include "freeglut_internal_mswin.h"\r
+\r
+\r
+\r
+void fghSetCursor ( SFG_Window *window, int cursorID )\r
+{\r
+    /*\r
+     * Joe Krahn is re-writing the following code.\r
+     */\r
+    /* Set the cursor AND change it for this window class. */\r
+#if !defined(__MINGW64__) && _MSC_VER <= 1200\r
+#       define MAP_CURSOR(a,b)                                   \\r
+        case a:                                                  \\r
+            SetCursor( LoadCursor( NULL, b ) );                  \\r
+            SetClassLong( window->Window.Handle,                 \\r
+                          GCL_HCURSOR,                           \\r
+                          ( LONG )LoadCursor( NULL, b ) );       \\r
+        break;\r
+    /* Nuke the cursor AND change it for this window class. */\r
+#       define ZAP_CURSOR(a,b)                                   \\r
+        case a:                                                  \\r
+            SetCursor( NULL );                                   \\r
+            SetClassLong( window->Window.Handle,                 \\r
+                          GCL_HCURSOR, ( LONG )NULL );           \\r
+        break;\r
+#else\r
+#       define MAP_CURSOR(a,b)                                   \\r
+        case a:                                                  \\r
+            SetCursor( LoadCursor( NULL, b ) );                  \\r
+            SetClassLongPtr( window->Window.Handle,              \\r
+                          GCLP_HCURSOR,                          \\r
+                          ( LONG )( LONG_PTR )LoadCursor( NULL, b ) );       \\r
+        break;\r
+    /* Nuke the cursor AND change it for this window class. */\r
+#       define ZAP_CURSOR(a,b)                                   \\r
+        case a:                                                  \\r
+            SetCursor( NULL );                                   \\r
+            SetClassLongPtr( window->Window.Handle,              \\r
+                          GCLP_HCURSOR, ( LONG )( LONG_PTR )NULL );          \\r
+        break;\r
+#endif\r
+\r
+    switch( cursorID )\r
+    {\r
+        MAP_CURSOR( GLUT_CURSOR_RIGHT_ARROW,         IDC_ARROW     );\r
+        MAP_CURSOR( GLUT_CURSOR_LEFT_ARROW,          IDC_ARROW     );\r
+        MAP_CURSOR( GLUT_CURSOR_INFO,                IDC_HELP      );\r
+        MAP_CURSOR( GLUT_CURSOR_DESTROY,             IDC_CROSS     );\r
+        MAP_CURSOR( GLUT_CURSOR_HELP,                IDC_HELP      );\r
+        MAP_CURSOR( GLUT_CURSOR_CYCLE,               IDC_SIZEALL   );\r
+        MAP_CURSOR( GLUT_CURSOR_SPRAY,               IDC_CROSS     );\r
+        MAP_CURSOR( GLUT_CURSOR_WAIT,                IDC_WAIT      );\r
+        MAP_CURSOR( GLUT_CURSOR_TEXT,                IDC_IBEAM     );\r
+        MAP_CURSOR( GLUT_CURSOR_CROSSHAIR,           IDC_CROSS     );\r
+        MAP_CURSOR( GLUT_CURSOR_UP_DOWN,             IDC_SIZENS    );\r
+        MAP_CURSOR( GLUT_CURSOR_LEFT_RIGHT,          IDC_SIZEWE    );\r
+        MAP_CURSOR( GLUT_CURSOR_TOP_SIDE,            IDC_ARROW     ); /* XXX ToDo */\r
+        MAP_CURSOR( GLUT_CURSOR_BOTTOM_SIDE,         IDC_ARROW     ); /* XXX ToDo */\r
+        MAP_CURSOR( GLUT_CURSOR_LEFT_SIDE,           IDC_ARROW     ); /* XXX ToDo */\r
+        MAP_CURSOR( GLUT_CURSOR_RIGHT_SIDE,          IDC_ARROW     ); /* XXX ToDo */\r
+        MAP_CURSOR( GLUT_CURSOR_TOP_LEFT_CORNER,     IDC_SIZENWSE  );\r
+        MAP_CURSOR( GLUT_CURSOR_TOP_RIGHT_CORNER,    IDC_SIZENESW  );\r
+        MAP_CURSOR( GLUT_CURSOR_BOTTOM_RIGHT_CORNER, IDC_SIZENWSE  );\r
+        MAP_CURSOR( GLUT_CURSOR_BOTTOM_LEFT_CORNER,  IDC_SIZENESW  );\r
+        MAP_CURSOR( GLUT_CURSOR_INHERIT,             IDC_ARROW     ); /* XXX ToDo */\r
+        ZAP_CURSOR( GLUT_CURSOR_NONE,                NULL          );\r
+        MAP_CURSOR( GLUT_CURSOR_FULL_CROSSHAIR,      IDC_CROSS     ); /* XXX ToDo */\r
+\r
+    default:\r
+        fgError( "Unknown cursor type: %d", cursorID );\r
+        break;\r
+    }\r
+}\r
+\r
+\r
+void fghWarpPointer ( int x, int y )\r
+{\r
+    POINT coords;\r
+    coords.x = x;\r
+    coords.y = y;\r
+\r
+    /* ClientToScreen() translates {coords} for us. */\r
+    ClientToScreen( fgStructure.CurrentWindow->Window.Handle, &coords );\r
+    SetCursorPos( coords.x, coords.y );\r
+}\r
+\r
+\r
index e69de29..1fadebc 100644 (file)
@@ -0,0 +1,36 @@
+/*\r
+ * freeglut_internal_mswin.h\r
+ *\r
+ * The freeglut library private include file.\r
+ *\r
+ * Copyright (c) 2012 Stephen J. Baker. All Rights Reserved.\r
+ * Written by John F. Fay, <fayjf@sourceforge.net>\r
+ * Creation date: Thu Jan 19, 2012\r
+ *\r
+ * Permission is hereby granted, free of charge, to any person obtaining a\r
+ * copy of this software and associated documentation files (the "Software"),\r
+ * to deal in the Software without restriction, including without limitation\r
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,\r
+ * and/or sell copies of the Software, and to permit persons to whom the\r
+ * Software is furnished to do so, subject to the following conditions:\r
+ *\r
+ * The above copyright notice and this permission notice shall be included\r
+ * in all copies or substantial portions of the Software.\r
+ *\r
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS\r
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL\r
+ * PAWEL W. OLSZTA BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER\r
+ * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
+ * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+ */\r
+\r
+#ifndef  FREEGLUT_INTERNAL_MSWIN_H\r
+#define  FREEGLUT_INTERNAL_MSWIN_H\r
+\r
+\r
+\r
+#include "..\Common\freeglut_internal.h"\r
+\r
+\r
+#endif  /* FREEGLUT_INTERNAL_MSWIN_H */
\ No newline at end of file