implemented position callback on windows and some other minor edits
[freeglut] / progs / demos / Resizer / Resizer.cpp
index 76d55f7..58c0552 100644 (file)
@@ -141,29 +141,35 @@ void Idle(void)
     glutPostRedisplay();\r
 }\r
 \r
-void Reshape(int x, int y)\r
+void Reshape(int width, int height)\r
 {\r
     int win = glutGetWindow();\r
 \r
-    nWidth  = glutGet(GLUT_WINDOW_WIDTH);\r
-    nHeight = glutGet(GLUT_WINDOW_HEIGHT);\r
     printf("reshape %s, %dx%d\n",win==nWindow?"main":"child",\r
-        nWidth, nHeight);\r
+        width, height);\r
 \r
-    glViewport(0,0,nWidth,nHeight);\r
+    glViewport(0,0,width,height);\r
     glMatrixMode(GL_PROJECTION);\r
     glLoadIdentity();\r
-    gluOrtho2D(0,nWidth,0,nHeight);\r
+    gluOrtho2D(0,width,0,height);\r
 \r
     if (win==nWindow && nChildWindow!=-1)\r
     {\r
         glutSetWindow(nChildWindow);\r
-        glutPositionWindow((int)(nWidth*.35),(int)(nHeight*.35));\r
-        glutReshapeWindow((int)(nWidth*.3),(int)(nHeight*.3));\r
+        glutPositionWindow((int)(width*.35),(int)(height*.35));\r
+        glutReshapeWindow((int)(width*.3),(int)(height*.3));\r
         glutSetWindow(nWindow);\r
     }\r
 }\r
 \r
+void Position(int x, int y)\r
+{\r
+    int win = glutGetWindow();\r
+\r
+    printf("position %s, %dx%d\n",win==nWindow?"main":"child",\r
+        x, y);\r
+}\r
+\r
 void Redisplay(void)\r
 {\r
     int win = glutGetWindow();\r
@@ -185,7 +191,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
@@ -220,13 +229,19 @@ void Redisplay(void)
 \r
 int main(int argc, char* argv[])\r
 {\r
+    int border, caption;\r
     glutInit( &argc, argv );\r
     glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE /*| GLUT_BORDERLESS*/); // do try as well with GLUT_BORDERLESS and GLUT_CAPTIONLESS\r
     glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE,GLUT_ACTION_GLUTMAINLOOP_RETURNS);\r
-\r
-    /* The window position you request is the outer top-left of the window,\r
-     * the client area is at a different position if the window has borders\r
-     * and/or a title bar.\r
+    \r
+    /* Get border and caption size of default window style */\r
+    border  = glutGet(GLUT_WINDOW_BORDER_WIDTH);\r
+    caption = glutGet(GLUT_WINDOW_HEADER_HEIGHT);\r
+    printf("default window style border: %dpx, caption: %dpx\n",border,caption);\r
+\r
+    /* NB: The window position you request is the outer top-left of the\r
+     * window, the client area is at a different position if the window has\r
+     * borders and/or a title bar.\r
      */\r
     glutInitWindowPosition(150,250);\r
     glutInitWindowSize(200,200);\r
@@ -237,6 +252,7 @@ int main(int argc, char* argv[])
     glutKeyboardFunc( SampleKeyboard );\r
     glutDisplayFunc( Redisplay );\r
     glutReshapeFunc( Reshape );\r
+    glutPositionFunc( Position );\r
 \r
     glutMainLoop();\r
     printf("glutMainLoop returned\n");\r