From 610b006221b7d41df8dcc2e228c1f196f94f91b0 Mon Sep 17 00:00:00 2001 From: dcnieho Date: Sat, 17 Nov 2012 00:03:10 +0000 Subject: [PATCH] now have function to get window style based on FreeGLUT's stateflag (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: https://svn.code.sf.net/p/freeglut/code/trunk@1396 7f0cb862-5218-0410-a997-914c9d46530a --- .../freeglut/progs/demos/Resizer/Resizer.cpp | 3 ++ freeglut/freeglut/src/mswin/fg_window_mswin.c | 35 ++++++++++--------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/freeglut/freeglut/progs/demos/Resizer/Resizer.cpp b/freeglut/freeglut/progs/demos/Resizer/Resizer.cpp index bd19ffe..60d76fe 100644 --- a/freeglut/freeglut/progs/demos/Resizer/Resizer.cpp +++ b/freeglut/freeglut/progs/demos/Resizer/Resizer.cpp @@ -185,7 +185,10 @@ void Redisplay(void) * when the window is on a monitor to the left of the primary monitor * or simply when maximized--try pressing the maximize button). * the returned size is the size of the client area + * Note that the top-left of a child window is relative to the + * top-left of the client area of the parent. */ + /* printf("window border: %dpx, caption: %dpx\n",border,caption); */ if (win==nWindow) printf("main window %dx%d, top-left of client at: (%d,%d), of window at: (%d,%d)\n", nWidth, nHeight, diff --git a/freeglut/freeglut/src/mswin/fg_window_mswin.c b/freeglut/freeglut/src/mswin/fg_window_mswin.c index 7720929..9c69d2e 100644 --- a/freeglut/freeglut/src/mswin/fg_window_mswin.c +++ b/freeglut/freeglut/src/mswin/fg_window_mswin.c @@ -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 */