#define IMPLEMENT_CALLBACK_FUNC_2NAME(a,b) \
void FGAPIENTRY glut##a##Func( FGCB##b callback ) \
{ \
- FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glut"###a##"Func" ); \
+ FREEGLUT_EXIT_IF_NOT_INITIALISED ( "glut"#a"Func" ); \
SET_CALLBACK( b ); \
}
#define IMPLEMENT_CALLBACK_FUNC(a) IMPLEMENT_CALLBACK_FUNC_2NAME(a,a)
/*
* 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.
+ * window status is kind of anemic on win32 as there are no window messages
+ * to notify us that the window is covered by other windows or not.
+ * Should one want to query this, see
+ * http://stackoverflow.com/questions/5445889/get-which-process-window-is-actually-visible-in-c-sharp
+ * for an implementation outline (but it would be polling based, not push based).
*/
static void fghVisibility( int status )
{
- int glut_status = GLUT_VISIBLE;
+ int vis_status;
FREEGLUT_INTERNAL_ERROR_EXIT_IF_NOT_INITIALISED ( "Visibility Callback" );
freeglut_return_if_fail( fgStructure.CurrentWindow );
+ /* Translate window status func states to visibility states */
if( ( GLUT_HIDDEN == status ) || ( GLUT_FULLY_COVERED == status ) )
- glut_status = GLUT_NOT_VISIBLE;
- INVOKE_WCB( *( fgStructure.CurrentWindow ), Visibility, ( glut_status ) );
+ vis_status = GLUT_NOT_VISIBLE;
+ else /* GLUT_FULLY_RETAINED, GLUT_PARTIALLY_RETAINED */
+ vis_status = GLUT_VISIBLE;
+
+ INVOKE_WCB( *( fgStructure.CurrentWindow ), Visibility, ( vis_status ) );
}
void FGAPIENTRY glutVisibilityFunc( FGCBVisibility callback )