diff options
Diffstat (limited to 'src/native/ogl/NativeWSInfo.c')
-rw-r--r-- | src/native/ogl/NativeWSInfo.c | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/src/native/ogl/NativeWSInfo.c b/src/native/ogl/NativeWSInfo.c new file mode 100644 index 0000000..be1a1fc --- /dev/null +++ b/src/native/ogl/NativeWSInfo.c @@ -0,0 +1,78 @@ +/* + * $RCSfile$ + * + * Copyright (c) 2004 Sun Microsystems, Inc. All rights reserved. + * + * Use is subject to license terms. + * + * $Revision$ + * $Date$ + * $State$ + */ + +/* + * Portions of this code were derived from work done by the Blackdown + * group (www.blackdown.org), who did the initial Linux implementation + * of the Java 3D API. + */ + +#include <jni.h> +#include <math.h> + +#include "gldefs.h" + +#if defined(SOLARIS) || defined(__linux__) +#include <X11/X.h> +#include <X11/Xlib.h> +#include <X11/Xutil.h> +#endif + +#ifdef WIN32 +#include <windows.h> +#endif + +#ifdef WIN32 + +/* + * Workaround for bug 4169320: Resizing a Java 3D canvas + * on Win95 crashes the application + */ + +#ifdef STRICT +static WNDPROC g_lpDefWindowProc; +#else +static FARPROC g_lpDefWindowProc; +#endif + +static +LRESULT CALLBACK canvas3dWndProc( + HWND hWnd, + UINT message, + WPARAM wParam, + LPARAM lParam) +{ + switch (message) { + case WM_WINDOWPOSCHANGED: + return 0; + default: + return CallWindowProc(g_lpDefWindowProc, hWnd, message, + wParam, lParam); + } +} + +JNIEXPORT +void JNICALL Java_javax_media_j3d_NativeWSInfo_subclass( + JNIEnv * env, + jobject obj, + jint hWnd) +{ +#ifdef STRICT + g_lpDefWindowProc = (WNDPROC) SetWindowLong((HWND) hWnd, GWL_WNDPROC, + (LONG) canvas3dWndProc); +#else + g_lpDefWindowProc = (FARPROC) SetWindowLong((HWND) hWnd, GWL_WNDPROC, + (LONG) canvas3dWndProc); +#endif +} + +#endif |