aboutsummaryrefslogtreecommitdiffstats
path: root/plugins/windows/src/native/net_java_games_input_DummyWindow.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/windows/src/native/net_java_games_input_DummyWindow.c')
-rw-r--r--plugins/windows/src/native/net_java_games_input_DummyWindow.c71
1 files changed, 71 insertions, 0 deletions
diff --git a/plugins/windows/src/native/net_java_games_input_DummyWindow.c b/plugins/windows/src/native/net_java_games_input_DummyWindow.c
new file mode 100644
index 0000000..539e45c
--- /dev/null
+++ b/plugins/windows/src/native/net_java_games_input_DummyWindow.c
@@ -0,0 +1,71 @@
+/*
+ * %W% %E%
+ *
+ * Copyright 2002 Sun Microsystems, Inc. All rights reserved.
+ * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms.
+ */
+
+#include <windows.h>
+#include <jni.h>
+#include "net_java_games_input_DummyWindow.h"
+#include "util.h"
+
+static const TCHAR* DUMMY_WINDOW_NAME = "JInputControllerWindow";
+
+static LRESULT CALLBACK DummyWndProc(
+ HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
+ return DefWindowProc(hWnd, message, wParam, lParam);
+}
+
+static BOOL RegisterDummyWindow(HINSTANCE hInstance)
+{
+ WNDCLASSEX wcex;
+ wcex.cbSize = sizeof(WNDCLASSEX);
+ wcex.style = CS_HREDRAW | CS_VREDRAW;
+ wcex.lpfnWndProc = (WNDPROC)DummyWndProc;
+ wcex.cbClsExtra = 0;
+ wcex.cbWndExtra = 0;
+ wcex.hInstance = hInstance;
+ wcex.hIcon = NULL;
+ wcex.hCursor = NULL;
+ wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
+ wcex.lpszMenuName = (LPCSTR)NULL;
+ wcex.lpszClassName = DUMMY_WINDOW_NAME;
+ wcex.hIconSm = NULL;
+ return RegisterClassEx(&wcex);
+}
+
+JNIEXPORT jlong JNICALL Java_net_java_games_input_DummyWindow_createWindow(JNIEnv *env, jclass unused) {
+ HINSTANCE hInst = GetModuleHandle(NULL);
+ HWND hwndDummy;
+ WNDCLASSEX class_info;
+ class_info.cbSize = sizeof(WNDCLASSEX);
+ class_info.cbClsExtra = 0;
+ class_info.cbWndExtra = 0;
+
+ if (!GetClassInfoEx(hInst, DUMMY_WINDOW_NAME, &class_info)) {
+ // Register the dummy input window
+ if (!RegisterDummyWindow(hInst)) {
+ throwIOException(env, "Failed to register window class (%d)\n", GetLastError());
+ return 0;
+ }
+ }
+
+ // Create the dummy input window
+ hwndDummy = CreateWindow(DUMMY_WINDOW_NAME, NULL,
+ WS_POPUP | WS_ICONIC,
+ 0, 0, 0, 0, NULL, NULL, hInst, NULL);
+ if (hwndDummy == NULL) {
+ throwIOException(env, "Failed to create window (%d)\n", GetLastError());
+ return 0;
+ }
+ return (jlong)hwndDummy;
+}
+
+JNIEXPORT void JNICALL Java_net_java_games_input_DummyWindow_nDestroy(JNIEnv *env, jclass unused, jlong hwnd_address) {
+ HWND hwndDummy = (HWND)(INT_PTR)hwnd_address;
+ BOOL result = DestroyWindow(hwndDummy);
+ if (!result) {
+ throwIOException(env, "Failed to destroy window (%d)\n", GetLastError());
+ }
+}