Windows2000/private/windows/opengl/scrsave/common/ssinit.cxx
2020-09-30 17:12:32 +02:00

229 lines
3.7 KiB
C++

/**Module*Header**\
* Module Name: ssinit.cxx
* Main code for common screen saver functions.
* Created: 12-24-94 -by- Marc Fortier [marcfo]
* Copyright (c) 1994 Microsoft Corporation
\**/
#include <windows.h>
#include <commdlg.h>
#include <scrnsave.h>
#include <GL\gl.h>
#include "tk.h"
#include <math.h>
#include <memory.h>
#include <string.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <time.h>
#include "ssintrnl.hxx"
void *gDataPtr = NULL; // data ptr used with callbacks
// function protos
void (*gReshapeFunc)(int, int, void *) = NULL;
void (*gRepaintFunc)(LPRECT, void *) = NULL;
void (*gUpdateFunc)( void *) = NULL;
void (*gInitFunc)( void *) = NULL;
void (*gFinishFunc)( void *) = NULL;
void (*gFloaterBounceFunc)( void *) = NULL;
// Debug stuff
#if DBG
#ifdef SS_DEBUG
long ssDebugMsg = 1;
long ssDebugLevel = SS_LEVEL_INFO;
#else
long ssDebugMsg = 0;
long ssDebugLevel = SS_LEVEL_ERROR;
#endif
#endif
// Callback functions:
/**Public*Routine**\
* ss_InitFunc
\**/
void
ss_InitFunc(SSINITPROC Func)
{
gInitFunc = Func;
}
/**Public*Routine**\
* ss_ReshapeFunc
\**/
void
ss_ReshapeFunc(SSRESHAPEPROC Func)
{
gReshapeFunc = Func;
if( gpss->psswGL )
gpss->psswGL->ReshapeFunc = gReshapeFunc;
}
/**Public*Routine**\
* ss_RepaintFunc
\**/
void
ss_RepaintFunc(SSREPAINTPROC Func)
{
gRepaintFunc = Func;
if( gpss->psswGL )
gpss->psswGL->RepaintFunc = gRepaintFunc;
}
/**Public*Routine**\
* ss_UpdateFunc
\**/
void
ss_UpdateFunc(SSUPDATEPROC Func)
{
gUpdateFunc = Func;
if( gpss->psswGL )
gpss->psswGL->UpdateFunc = gUpdateFunc;
}
/**Public*Routine**\
* ss_FinishFunc
\**/
void
ss_FinishFunc(SSFINISHPROC Func)
{
gFinishFunc = Func;
if( gpss->psswGL )
gpss->psswGL->FinishFunc = gFinishFunc;
}
/**Public*Routine**\
* ss_FloaterBounceFunc
\**/
void
ss_FloaterBounceFunc(SSFLOATERBOUNCEPROC Func)
{
gFloaterBounceFunc = Func;
if( gpss->psswGL )
gpss->psswGL->FloaterBounceFunc = gFloaterBounceFunc;
}
/**Public*Routine**\
* ss_DataPtr
* Sets data ptr to be sent with callbacks
\**/
void
ss_DataPtr( void *data )
{
gDataPtr = data;
if( gpss->psswGL )
gpss->psswGL->DataPtr = gDataPtr;
}
/**Public*Routine**\
* RandomWindowPos
* Sets a new random window position and direction.
\**/
void
ss_RandomWindowPos()
{
if( gpss->psswGL )
gpss->psswGL->RandomWindowPos();
}
/**Public*Routine**\
* ss_SetWindowAspectRatio
* Resize the window to conform to the supplied aspect ratio. We do this by
* maintaining the existing width, and adjusting the height.
* Window resize seems to be executed synchronously, so gl should be able to
* immediately validate its buffer dimensions (we count on it).
* Returns TRUE if new height is different from last, else FALSE.
\**/
BOOL
ss_SetWindowAspectRatio( FLOAT aspect )
{
if( gpss->psswGL )
return gpss->psswGL->SetAspectRatio( aspect );
return FALSE;
}
/**Public*Routine**\
* ss_GetScreenSize
* Returns size of screen saver window
\**/
void
ss_GetScreenSize( ISIZE *size )
{
if( gpss->psswMain )
*size = gpss->psswMain->size;
}
/**Public*Routine**\
* ss_GetHWND
* Return HWND of the main window
\**/
HWND
ss_GetHWND()
{
if( gpss->psswMain )
return gpss->psswMain->hwnd;
return NULL;
}
/**Public*Routine**\
* ss_GetGLHWND
* Return HWND of the GL window
\**/
HWND
ss_GetGLHWND()
{
if( gpss->psswGL )
return gpss->psswGL->hwnd;
return NULL;
}
/**Public*Routine**\
* ss_GetMainPSSW
* Return PSSW of top level window
\**/
PSSW
ss_GetMainPSSW()
{
if( gpss->psswMain )
return gpss->psswMain;
return NULL;
}