library should call window status func at all times, translation to
visibility callback happens if needed. Documented this, and added notes on visibility/windowstatus func in callbackmaker demo git-svn-id: https://svn.code.sf.net/p/freeglut/code/trunk@1535 7f0cb862-5218-0410-a997-914c9d46530a
This commit is contained in:
parent
41dd280289
commit
f46574e263
@ -576,7 +576,6 @@ static void SetWindowCallbacks( int first )
|
||||
glutPositionFunc( Position );
|
||||
glutKeyboardFunc( Key );
|
||||
glutSpecialFunc( Special );
|
||||
glutVisibilityFunc( Visibility );
|
||||
glutKeyboardUpFunc( KeyUp );
|
||||
glutSpecialUpFunc( SpecialUp );
|
||||
if (first)
|
||||
@ -588,7 +587,6 @@ static void SetWindowCallbacks( int first )
|
||||
glutEntryFunc ( Entry ) ;
|
||||
glutCloseFunc ( Close ) ;
|
||||
glutOverlayDisplayFunc ( OverlayDisplay ) ;
|
||||
glutWindowStatusFunc ( WindowStatus ) ;
|
||||
glutSpaceballMotionFunc ( SpaceMotion ) ;
|
||||
glutSpaceballRotateFunc ( SpaceRotation ) ;
|
||||
glutSpaceballButtonFunc ( SpaceButton ) ;
|
||||
@ -596,6 +594,11 @@ static void SetWindowCallbacks( int first )
|
||||
glutDialsFunc ( Dials ) ;
|
||||
glutTabletMotionFunc ( TabletMotion ) ;
|
||||
glutTabletButtonFunc ( TabletButton ) ;
|
||||
/* glutVisibilityFunc is deprecated in favor of glutWindowStatusFunc, which provides more detail.
|
||||
* Setting one of these overwrites the other (see docs).
|
||||
*/
|
||||
glutVisibilityFunc ( Visibility ); /* This will thus never be called, as glutWindowStatusFunc is set afterwards */
|
||||
glutWindowStatusFunc ( WindowStatus ) ;
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -165,6 +165,13 @@ void FGAPIENTRY glutDisplayFunc( FGCBDisplay callback )
|
||||
|
||||
/*
|
||||
* Sets the Visibility callback for the current window.
|
||||
* NB: the Visibility func is deprecated in favor of the WindowStatus func,
|
||||
* which provides more detail. The visibility func callback is implemented
|
||||
* as a translation step from the windowStatus func. When the user sets the
|
||||
* windowStatus func, any visibility func is overwritten.
|
||||
* DEVELOPER NOTE: in the library, only invoke the window status func, this
|
||||
* gets automatically translated to the visibility func if thats what the
|
||||
* user has set.
|
||||
*/
|
||||
static void fghVisibility( int status )
|
||||
{
|
||||
|
@ -143,11 +143,11 @@ void fgPlatformMainLoopPreliminaryWork ( void )
|
||||
*/
|
||||
while( window )
|
||||
{
|
||||
if ( FETCH_WCB( *window, Visibility ) )
|
||||
if ( FETCH_WCB( *window, WindowStatus ) )
|
||||
{
|
||||
SFG_Window *current_window = fgStructure.CurrentWindow ;
|
||||
|
||||
INVOKE_WCB( *window, Visibility, ( window->State.Visible ) );
|
||||
INVOKE_WCB( *window, WindowStatus, ( window->State.Visible?GLUT_FULLY_RETAINED:GLUT_HIDDEN ) );
|
||||
fgSetWindow( current_window );
|
||||
}
|
||||
|
||||
@ -872,8 +872,9 @@ LRESULT CALLBACK fgPlatformWindowProc( HWND hWnd, UINT uMsg, WPARAM wParam, LPAR
|
||||
if (!lParam || !fgWindowByHandle((HWND)lParam))
|
||||
/* Capture released or capture taken by non-FreeGLUT window */
|
||||
setCaptureActive = 0;
|
||||
/* User has finished resizing the window, force a redraw */
|
||||
INVOKE_WCB( *window, Display, ( ) );
|
||||
/* Docs advise a redraw */
|
||||
InvalidateRect( hWnd, NULL, GL_FALSE );
|
||||
UpdateWindow(hWnd);
|
||||
lRet = 0; /* Per docs, should return zero */
|
||||
break;
|
||||
|
||||
|
Reference in New Issue
Block a user