Update of /cvsroot/java-game-lib/LWJGL/src/native/linux
In directory usw-pr-cvs1:/tmp/cvs-serv23498
Modified Files:
org_lwjgl_Display.c org_lwjgl_input_Mouse.c
Log Message:
Cursor blanking added
Index: org_lwjgl_Display.c
CVS Browser:
http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/src/native/linux/org_lwjgl_Display.c
===================================================================
RCS file: /cvsroot/java-game-lib/LWJGL/src/native/linux/org_lwjgl_Display.c,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- org_lwjgl_Display.c 16 Nov 2002 20:10:42 -0000 1.5
+++ org_lwjgl_Display.c 17 Nov 2002 16:14:53 -0000 1.6
@@ -102,10 +102,18 @@
return JNI_FALSE;
}
screen = DefaultScreen(disp);
+ if (!getDisplayModes(disp, screen, &num_modes, &avail_modes)) {
+ XCloseDisplay(disp);
+#ifdef _DEBUG
+ printf("Could not get display modes\n");
+#endif
+ return JNI_FALSE;
+ }
root_win = RootWindow(disp, screen);
vis_info = glXChooseVisual(disp, screen, attriblist);
if (vis_info == NULL) {
+ XCloseDisplay(disp);
#ifdef _DEBUG
printf("Could not choose glx visual\n");
#endif
@@ -129,18 +137,16 @@
if (fullscreen) {
XMapRaised(disp, win);
waitMapped(disp, win);
- if (!getDisplayModes(disp, screen, &num_modes, &avail_modes)) {
-#ifdef _DEBUG
- printf("Could not get display modes\n");
-#endif
- return JNI_FALSE;
- }
for ( i = 0; i < num_modes; ++i ) {
#ifdef _DEBUG
printf("Mode %d: %dx%d\n", i, avail_modes[i]->hdisplay, avail_modes[i]->vdisplay);
#endif
if (avail_modes[i]->hdisplay == width && avail_modes[i]->vdisplay == height) {
if (!XF86VidModeSwitchToMode(disp, screen, avail_modes[i])) {
+ XFree(vis_info);
+ XFree(avail_modes);
+ XDestroyWindow(disp, win);
+ XCloseDisplay(disp);
#ifdef _DEBUG
printf("Could not switch mode\n");
#endif
@@ -167,8 +173,8 @@
printf("Could not switch mode\n");
#endif
}
- XFree(avail_modes);
}
+ XFree(avail_modes);
XFree(vis_info);
XCloseDisplay(disp);
#ifdef _DEBUG
Index: org_lwjgl_input_Mouse.c
CVS Browser:
http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/java-game-lib/LWJGL/src/native/linux/org_lwjgl_input_Mouse.c
===================================================================
RCS file: /cvsroot/java-game-lib/LWJGL/src/native/linux/org_lwjgl_input_Mouse.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- org_lwjgl_input_Mouse.c 15 Nov 2002 11:10:32 -0000 1.2
+++ org_lwjgl_input_Mouse.c 17 Nov 2002 16:14:53 -0000 1.3
@@ -62,6 +62,8 @@
int current_y;
unsigned char buttons[NUM_BUTTONS];
+Cursor blank_cursor;
+
/*
* Class: org_lwjgl_input_Mouse
* Method: initIDs
@@ -92,6 +94,27 @@
}
}
+int blankCursor(void) {
+ int best_width, best_height;
+ if (XQueryBestCursor(disp, win, 1, 1, &best_width, &best_height) == 0) {
+#ifdef _DEBUG
+ printf("Could not query best cursor size\n");
+#endif
+ return 0;
+ }
+ Pixmap mask = XCreatePixmap(disp, win, best_width, best_height, 1);
+ XGCValues gc_values;
+ gc_values.foreground = 0;
+ GC gc = XCreateGC(disp, mask, GCForeground, &gc_values);
+ XFillRectangle(disp, mask, gc, 0, 0, best_width, best_height);
+ XColor dummy_color;
+ blank_cursor = XCreatePixmapCursor(disp, mask, mask, &dummy_color, &dummy_color, 0, 0);
+ XFreePixmap(disp, mask);
+ XFreeGC(disp, gc);
+ XDefineCursor(disp, win, blank_cursor);
+ return 1;
+}
+
/*
* Class: org_lwjgl_input_Mouse
* Method: nCreate
@@ -104,6 +127,12 @@
current_x = current_y = last_x = last_y = 0;
for (i = 0; i < NUM_BUTTONS; i++)
buttons[i] = 0;
+ if (!blankCursor()) {
+#ifdef _DEBUG
+ printf("Could not blank cursor\n");
+#endif
+ return JNI_FALSE;
+ }
int result = XGrabPointer(disp, win, False, PointerMotionMask | ButtonPressMask | ButtonReleaseMask, GrabModeAsync, GrabModeAsync, win, None, CurrentTime);
if (result != GrabSuccess) {
#ifdef _DEBUG
@@ -122,6 +151,8 @@
JNIEXPORT void JNICALL Java_org_lwjgl_input_Mouse_nDestroy
(JNIEnv * env, jclass clazz)
{
+ XUndefineCursor(disp, win);
+ XFreeCursor(disp, blank_cursor);
XUngrabPointer(disp, CurrentTime);
}
|