#include <aygshell.h>
#pragma comment( lib, "Aygshell.lib" )
-wchar_t* wstr_from_str(const char* str)
+static wchar_t* fghWstrFromStr(const char* str)
{
int i,len=strlen(str);
wchar_t* wstr = (wchar_t*)malloc(2*len+2);
int attributes[ 32 ];
int where = 0;
- /*
- * First we have to process the display mode settings...
- */
+ /* First we have to process the display mode settings... */
/*
- * Why is there a semi-colon in this #define? The code
- * that uses the macro seems to always add more semicolons...
+ * XXX Why is there a semi-colon in this #define? The code
+ * XXX that uses the macro seems to always add more semicolons...
*/
#define ATTRIB(a) attributes[where++]=a;
#define ATTRIB_VAL(a,v) {ATTRIB(a); ATTRIB(v);}
ATTRIB_VAL( GLX_ACCUM_ALPHA_SIZE, 1 );
}
- /*
- * Push a null at the end of the list
- */
+ /* Push a null at the end of the list */
ATTRIB( None );
if( ! wantIndexedMode )
#pragma message( "fgSetupPixelFormat(): there is still some work to do here!" )
#endif
- /*
- * Specify which pixel format do we opt for...
- */
+ /* Specify which pixel format do we opt for... */
pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR);
pfd.nVersion = 1;
pfd.dwFlags = flags;
*/
winAttr.event_mask =
StructureNotifyMask | SubstructureNotifyMask | ExposureMask |
- ButtonPressMask | ButtonReleaseMask | KeyPressMask | KeyRelease |
+ ButtonPressMask | ButtonReleaseMask | KeyPressMask | KeyReleaseMask |
VisibilityChangeMask | EnterWindowMask | LeaveWindowMask |
PointerMotionMask | ButtonMotionMask;
winAttr.background_pixmap = None;
NULL, ( fgState.DirectContext != GLUT_FORCE_INDIRECT_CONTEXT )
);
+#if !defined( __FreeBSD__ ) && !defined( __NetBSD__ )
if( !glXIsDirect( fgDisplay.Display, window->Window.Context ) )
{
if( fgState.DirectContext == GLUT_FORCE_DIRECT_CONTEXT )
fgWarning( "Unable to create direct context rendering for window '%s'\nThis may hurt performance.",
title );
}
+#endif
+
+ glXMakeCurrent(
+ fgDisplay.Display,
+ window->Window.Handle,
+ window->Window.Context
+ );
/*
* XXX Assume the new window is visible by default
/*
* Fill in the size hints values now (the x, y, width and height
- * settings are obsolote, are there any more WMs that support them?)
+ * settings are obsolete, are there any more WMs that support them?)
* Unless the X servers actually stop supporting these, we should
* continue to fill them in. It is *not* our place to tell the user
* that they should replace a window manager that they like, and which
* works, just because *we* think that it's not "modern" enough.
*/
-#if TARGET_HOST_WINCE
+#if TARGET_HOST_WINCE /* Since this is in the X11 branch, it's pretty dumb */
sizeHints.x = 0;
sizeHints.y = 0;
sizeHints.width = 320;
wmHints.flags = StateHint;
wmHints.initial_state = fgState.ForceIconic ? IconicState : NormalState;
- /*
- * Prepare the window and iconified window names...
- */
+ /* Prepare the window and iconified window names... */
XStringListToTextProperty( (char **) &title, 1, &textProperty );
XSetWMProperties(
XSetWMProtocols( fgDisplay.Display, window->Window.Handle,
&fgDisplay.DeleteWindow, 1 );
- glXMakeCurrent(
- fgDisplay.Display,
- window->Window.Handle,
- window->Window.Context
- );
-
XMapWindow( fgDisplay.Display, window->Window.Handle );
#elif TARGET_HOST_WIN32 || TARGET_HOST_WINCE
freeglut_assert_ready;
- /*
- * Grab the window class we have registered on glutInit():
- */
+ /* Grab the window class we have registered on glutInit(): */
atom = GetClassInfo( fgDisplay.Instance, _T("FREEGLUT"), &wc );
assert( atom != 0 );
#if TARGET_HOST_WINCE
{
- wchar_t* wstr = wstr_from_str(title);
+ wchar_t* wstr = fghWstrFromStr(title);
window->Window.Handle = CreateWindow(
_T("FREEGLUT"),
#elif TARGET_HOST_WIN32 || TARGET_HOST_WINCE
- /*
- * Make sure we don't close a window with current context active
- */
+ /* Make sure we don't close a window with current context active */
if( fgStructure.Window == window )
wglMakeCurrent( NULL, NULL );
int FGAPIENTRY glutCreateSubWindow( int parentID, int x, int y, int w, int h )
{
int ret = 0;
-
SFG_Window* window = NULL;
SFG_Window* parent = NULL;
window = fgWindowByID( ID );
if( window == NULL )
{
- fgWarning( "glutSetWindow(): window ID %i not found!", ID );
+ fgWarning( "glutSetWindow(): window ID %d not found!", ID );
return;
}
void FGAPIENTRY glutShowWindow( void )
{
freeglut_assert_ready;
- freeglut_assert_window;
+ FREEGLUT_EXIT_IF_NO_WINDOW ( "glutShowWindow" );
#if TARGET_HOST_UNIX_X11
void FGAPIENTRY glutHideWindow( void )
{
freeglut_assert_ready;
- freeglut_assert_window;
+ FREEGLUT_EXIT_IF_NO_WINDOW ( "glutHideWindow" );
#if TARGET_HOST_UNIX_X11
void FGAPIENTRY glutIconifyWindow( void )
{
freeglut_assert_ready;
- freeglut_assert_window;
+ FREEGLUT_EXIT_IF_NO_WINDOW ( "glutIconifyWindow" );
fgStructure.Window->State.Visible = GL_FALSE;
#if TARGET_HOST_UNIX_X11
void FGAPIENTRY glutSetWindowTitle( const char* title )
{
freeglut_assert_ready;
- freeglut_assert_window;
+ FREEGLUT_EXIT_IF_NO_WINDOW ( "glutSetWindowTitle" );
if( ! fgStructure.Window->Parent )
{
#if TARGET_HOST_UNIX_X11
#elif TARGET_HOST_WINCE
{
- wchar_t* wstr = wstr_from_str(title);
+ wchar_t* wstr = fghWstrFromStr(title);
SetWindowText( fgStructure.Window->Window.Handle, wstr );
void FGAPIENTRY glutSetIconTitle( const char* title )
{
freeglut_assert_ready;
- freeglut_assert_window;
+ FREEGLUT_EXIT_IF_NO_WINDOW ( "glutSetIconTitle" );
if( ! fgStructure.Window->Parent )
{
#elif TARGET_HOST_WINCE
{
- wchar_t* wstr = wstr_from_str(title);
+ wchar_t* wstr = fghWstrFromStr(title);
SetWindowText( fgStructure.Window->Window.Handle, wstr );
void FGAPIENTRY glutReshapeWindow( int width, int height )
{
freeglut_assert_ready;
- freeglut_assert_window;
+ FREEGLUT_EXIT_IF_NO_WINDOW ( "glutReshapeWindow" );
fgStructure.Window->State.NeedToResize = GL_TRUE;
fgStructure.Window->State.Width = width ;
void FGAPIENTRY glutPositionWindow( int x, int y )
{
freeglut_assert_ready;
- freeglut_assert_window;
+ FREEGLUT_EXIT_IF_NO_WINDOW ( "glutPositionWindow" );
#if TARGET_HOST_UNIX_X11
{
RECT winRect;
+ /* "GetWindowRect" returns the pixel coordinates of the outside of the window */
GetWindowRect( fgStructure.Window->Window.Handle, &winRect );
MoveWindow(
fgStructure.Window->Window.Handle,
void FGAPIENTRY glutPushWindow( void )
{
freeglut_assert_ready;
- freeglut_assert_window;
+ FREEGLUT_EXIT_IF_NO_WINDOW ( "glutPushWindow" );
#if TARGET_HOST_UNIX_X11
void FGAPIENTRY glutPopWindow( void )
{
freeglut_assert_ready;
- freeglut_assert_window;
+ FREEGLUT_EXIT_IF_NO_WINDOW ( "glutPopWindow" );
#if TARGET_HOST_UNIX_X11
void FGAPIENTRY glutFullScreen( void )
{
freeglut_assert_ready;
- freeglut_assert_window;
+ FREEGLUT_EXIT_IF_NO_WINDOW ( "glutFullScreen" );
{
#if TARGET_HOST_UNIX_X11