implemented position callback on windows and some other minor edits
git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1477 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
parent
a0b41213a5
commit
aa38dc56b4
@ -207,7 +207,7 @@ Position(int left, int top)
|
||||
{
|
||||
int winIdx;
|
||||
int window = getWindowAndIdx(&winIdx);
|
||||
printf ( "%6d Window %d Reshape Callback: %d %d\n",
|
||||
printf ( "%6d Window %d Position Callback: %d %d\n",
|
||||
++sequence_number, window, left, top ) ;
|
||||
position_called[winIdx] = 1 ;
|
||||
position_left[winIdx] = left ;
|
||||
|
@ -141,29 +141,35 @@ void Idle(void)
|
||||
glutPostRedisplay();
|
||||
}
|
||||
|
||||
void Reshape(int x, int y)
|
||||
void Reshape(int width, int height)
|
||||
{
|
||||
int win = glutGetWindow();
|
||||
|
||||
nWidth = glutGet(GLUT_WINDOW_WIDTH);
|
||||
nHeight = glutGet(GLUT_WINDOW_HEIGHT);
|
||||
printf("reshape %s, %dx%d\n",win==nWindow?"main":"child",
|
||||
nWidth, nHeight);
|
||||
width, height);
|
||||
|
||||
glViewport(0,0,nWidth,nHeight);
|
||||
glViewport(0,0,width,height);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glLoadIdentity();
|
||||
gluOrtho2D(0,nWidth,0,nHeight);
|
||||
gluOrtho2D(0,width,0,height);
|
||||
|
||||
if (win==nWindow && nChildWindow!=-1)
|
||||
{
|
||||
glutSetWindow(nChildWindow);
|
||||
glutPositionWindow((int)(nWidth*.35),(int)(nHeight*.35));
|
||||
glutReshapeWindow((int)(nWidth*.3),(int)(nHeight*.3));
|
||||
glutPositionWindow((int)(width*.35),(int)(height*.35));
|
||||
glutReshapeWindow((int)(width*.3),(int)(height*.3));
|
||||
glutSetWindow(nWindow);
|
||||
}
|
||||
}
|
||||
|
||||
void Position(int x, int y)
|
||||
{
|
||||
int win = glutGetWindow();
|
||||
|
||||
printf("position %s, %dx%d\n",win==nWindow?"main":"child",
|
||||
x, y);
|
||||
}
|
||||
|
||||
void Redisplay(void)
|
||||
{
|
||||
int win = glutGetWindow();
|
||||
@ -246,6 +252,7 @@ int main(int argc, char* argv[])
|
||||
glutKeyboardFunc( SampleKeyboard );
|
||||
glutDisplayFunc( Redisplay );
|
||||
glutReshapeFunc( Reshape );
|
||||
glutPositionFunc( Position );
|
||||
|
||||
glutMainLoop();
|
||||
printf("glutMainLoop returned\n");
|
||||
|
@ -86,6 +86,7 @@ static GLUTproc fghGetGLUTProcAddress( const char* procName )
|
||||
CHECK_NAME(glutDetachMenu);
|
||||
CHECK_NAME(glutDisplayFunc);
|
||||
CHECK_NAME(glutReshapeFunc);
|
||||
CHECK_NAME(glutPositionFunc);
|
||||
CHECK_NAME(glutKeyboardFunc);
|
||||
CHECK_NAME(glutMouseFunc);
|
||||
CHECK_NAME(glutMultiEntryFunc);
|
||||
|
@ -427,6 +427,17 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam,
|
||||
|
||||
break;
|
||||
|
||||
case WM_MOVE:
|
||||
{
|
||||
SFG_Window* saved_window = fgStructure.CurrentWindow;
|
||||
RECT windowRect;
|
||||
GetWindowRect( window->Window.Handle, &windowRect );
|
||||
|
||||
INVOKE_WCB( *window, Position, ( windowRect.left, windowRect.top ) );
|
||||
fgSetWindow(saved_window);
|
||||
}
|
||||
break;
|
||||
|
||||
case WM_SETFOCUS:
|
||||
/* printf("WM_SETFOCUS: %p\n", window ); */
|
||||
|
||||
|
@ -189,9 +189,7 @@ int fgPlatformGlutGet ( GLenum eWhat )
|
||||
/* For child window, we should return relative to upper-left
|
||||
* of parent's client area.
|
||||
*/
|
||||
POINT topleft;
|
||||
topleft.x = winRect.left;
|
||||
topleft.y = winRect.top;
|
||||
POINT topleft = {winRect.left,winRect.top};
|
||||
|
||||
ScreenToClient(fgStructure.CurrentWindow->Parent->Window.Handle,&topleft);
|
||||
winRect.left = topleft.x;
|
||||
|
Reference in New Issue
Block a user