1
1
Fork 0
mirror of https://github.com/QB64-Phoenix-Edition/QB64pe.git synced 2024-09-19 19:04:56 +00:00
QB64-PE/internal/c/parts/core/download/freeglut-2.8.0/progs/demos/Resizer/Resizer.cpp

140 lines
No EOL
3.7 KiB
C++

#include <stdio.h>
#include <GL/freeglut.h>
int nWindow;
int nLoopMain = 0;
int nPosX, nPosY;
int nWidth, nHeight;
void SampleKeyboard( unsigned char cChar, int nMouseX, int nMouseY );
void Redisplay();
void DrawQuad()
{
glBegin(GL_QUADS);
glVertex2d(nWidth*.25, nHeight*.75);
glVertex2d(nWidth*.75, nHeight*.75);
glVertex2d(nWidth*.75, nHeight*.25);
glVertex2d(nWidth*.25, nHeight*.25);
glEnd();
}
void SampleKeyboard( unsigned char cChar, int nMouseX, int nMouseY )
{
if (cChar == 27)
glutLeaveMainLoop();
else if (cChar=='f')
{
printf("main window toggle fullscreen\n");
glutFullScreenToggle();
}
else if (cChar=='r')
{
printf("main window resize\n");
if (nWidth<400)
glutReshapeWindow(600,300);
else
glutReshapeWindow(300,300);
}
else if (cChar=='m')
{
printf("main window position\n");
/* The window position you request is the outer top-left of the window,
* the client area is at a different position if the window has borders
* and/or a title bar.
*/
if (nPosX<400)
glutPositionWindow(600,300);
else
glutPositionWindow(300,300);
}
}
void Idle(void)
{
glutPostRedisplay();
}
void Reshape(int x, int y)
{
nWidth = glutGet(GLUT_WINDOW_WIDTH);
nHeight = glutGet(GLUT_WINDOW_HEIGHT);
glViewport(0,0,nWidth,nHeight);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0,nWidth,0,nHeight);
}
void Redisplay(void)
{
if (nLoopMain++%6==0)
{
int border, caption;
nPosX = glutGet(GLUT_WINDOW_X);
nPosY = glutGet(GLUT_WINDOW_Y);
nWidth = glutGet(GLUT_WINDOW_WIDTH);
nHeight = glutGet(GLUT_WINDOW_HEIGHT);
border = glutGet(GLUT_WINDOW_BORDER_WIDTH);
caption = glutGet(GLUT_WINDOW_HEADER_HEIGHT);
/* returned position is top-left of client area, to get top-left of
* of window you'll need to add the size of the border and caption
* of the current window (can be 0).
* Note that the window position is not necessarily positive (e.g.
* 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
*/
printf("window now %dx%d, top-left of client at: (%d,%d), of window at: (%d,%d)\n",
nWidth, nHeight,
nPosX ,nPosY,
nPosX-border,
nPosY-border-caption);
}
glClearColor(.2f,0.f,0.f,0.f);
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1,1,1);
DrawQuad();
glutSwapBuffers();
glutPostRedisplay();
}
int main(int argc, char* argv[])
{
glutInit( &argc, argv );
glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE /*| GLUT_BORDERLESS*/); // do try as well with GLUT_BORDERLESS and GLUT_CAPTIONLESS
glutSetOption(GLUT_ACTION_ON_WINDOW_CLOSE,GLUT_ACTION_GLUTMAINLOOP_RETURNS);
/* The window position you request is the outer top-left of the window,
* the client area is at a different position if the window has borders
* and/or a title bar.
*/
glutInitWindowPosition(150,250);
glutInitWindowSize(200,200);
nWindow = glutCreateWindow("test");
printf("main window id: %d\n", nWindow);
glutKeyboardFunc( SampleKeyboard );
glutDisplayFunc( Redisplay );
glutReshapeFunc( Reshape );
glutMainLoop();
printf("glutMainLoop returned\n");
return 1;
}