now have function to get window style based on FreeGLUT's stateflag
authorDiederick Niehorster <dcnieho@gmail.com>
Sat, 17 Nov 2012 00:03:10 +0000 (00:03 +0000)
committerDiederick Niehorster <dcnieho@gmail.com>
Sat, 17 Nov 2012 00:03:10 +0000 (00:03 +0000)
(fgState.DisplayMode) so that window decoration specification is only in
one place in the code. Also, glutGet(GLUT_WINDOW_BORDER_WIDTH); and
glutGet(GLUT_WINDOW_HEADER_HEIGHT); now return the right sizes, i.e.,
taking the display mode into account, for the border and caption when no
window is created yet

git-svn-id: svn+ssh://svn.code.sf.net/p/freeglut/code/trunk/freeglut/freeglut@1396 7f0cb862-5218-0410-a997-914c9d46530a

progs/demos/Resizer/Resizer.cpp
src/mswin/fg_window_mswin.c

index bd19ffe..60d76fe 100644 (file)
@@ -185,7 +185,10 @@ void Redisplay(void)
          * when the window is on a monitor to the left of the primary monitor\r
          * or simply when maximized--try pressing the maximize button).\r
          * the returned size is the size of the client area\r
+         * Note that the top-left of a child window is relative to the\r
+         * top-left of the client area of the parent.\r
          */\r
+        /* printf("window border: %dpx, caption: %dpx\n",border,caption); */\r
         if (win==nWindow)\r
             printf("main  window %dx%d, top-left of client at: (%d,%d), of window at: (%d,%d)\n",\r
                 nWidth, nHeight,\r
index 7720929..9c69d2e 100644 (file)
@@ -371,6 +371,20 @@ void fgPlatformSetWindow ( SFG_Window *window )
 }
 
 
+void fghGetDefaultWindowStyle(DWORD *flags)
+{
+    if ( fgState.DisplayMode & GLUT_BORDERLESS )
+    {
+        /* no window decorations needed, no-op */
+    }
+    else if ( fgState.DisplayMode & GLUT_CAPTIONLESS )
+        /* only window decoration is a border, no title bar or buttons */
+        (*flags) |= WS_DLGFRAME;
+    else
+        /* window decoration are a border, title bar and buttons. */
+        (*flags) |= WS_OVERLAPPEDWINDOW;
+}
+
 /* Get window style and extended window style of a FreeGLUT window
  * If the window pointer or the window handle is NULL, a fully
  * decorated window (caption and border) is assumed.
@@ -384,8 +398,9 @@ void fghGetStyleFromWindow( const SFG_Window *window, DWORD *windowStyle, DWORD
     }
     else
     {
+        *windowStyle   = 0;
+        fghGetDefaultWindowStyle(windowStyle);
         /* WindowExStyle==0 is fine/default, exStyle is currently only used for menu windows */
-        *windowStyle   = WS_OVERLAPPEDWINDOW;
         *windowExStyle = 0;
     }
 }
@@ -601,23 +616,9 @@ void fgPlatformOpenWindow( SFG_Window* window, const char* title,
 #if defined(_WIN32_WCE)
         /* no decorations for windows CE */
 #else
-        /* if this is not a subwindow (child), set its style based on the requested display mode */
+        /* if this is not a subwindow (child), set its style based on the requested window decorations */
         else if( window->Parent == NULL )
-            if ( fgState.DisplayMode & GLUT_BORDERLESS )
-            {
-                /* no window decorations needed */
-            }
-            else if ( fgState.DisplayMode & GLUT_CAPTIONLESS )
-                /* only window decoration is a border, no title bar or buttons */
-                flags |= WS_DLGFRAME;
-            else
-                /* window decoration are a border, title bar and buttons.
-                 * NB: we later query whether the window has a title bar or
-                 * not by testing for the maximize button, as the test for
-                 * WS_CAPTION can be true without the window having a title
-                 * bar. This style WS_OVERLAPPEDWINDOW gives you a maximize
-                 * button. */
-                flags |= WS_OVERLAPPEDWINDOW;
+            fghGetDefaultWindowStyle(&flags);
 #endif
         else
             /* subwindows always have no decoration, but are marked as a child window to the OS */