aboutsummaryrefslogtreecommitdiffstats
path: root/src/native/ogl/NativeWSInfo.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/native/ogl/NativeWSInfo.c')
-rw-r--r--src/native/ogl/NativeWSInfo.c78
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