Cursor blanking added

This commit is contained in:
Elias Naur 2002-11-17 16:14:53 +00:00
parent 43698ade7c
commit 1e828e6fc5
2 changed files with 44 additions and 7 deletions

View File

@ -102,10 +102,18 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_Display_nCreate(JNIEnv * env, jclass c
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 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_Display_nCreate(JNIEnv * env, jclass c
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 @@ JNIEXPORT void JNICALL Java_org_lwjgl_Display_nDestroy(JNIEnv * env, jclass claz
printf("Could not switch mode\n");
#endif
}
XFree(avail_modes);
}
XFree(avail_modes);
XFree(vis_info);
XCloseDisplay(disp);
#ifdef _DEBUG

View File

@ -62,6 +62,8 @@ int current_x;
int current_y;
unsigned char buttons[NUM_BUTTONS];
Cursor blank_cursor;
/*
* Class: org_lwjgl_input_Mouse
* Method: initIDs
@ -92,6 +94,27 @@ JNIEXPORT void JNICALL Java_org_lwjgl_input_Mouse_initIDs
}
}
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 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_input_Mouse_nCreate
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 jboolean JNICALL Java_org_lwjgl_input_Mouse_nCreate
JNIEXPORT void JNICALL Java_org_lwjgl_input_Mouse_nDestroy
(JNIEnv * env, jclass clazz)
{
XUndefineCursor(disp, win);
XFreeCursor(disp, blank_cursor);
XUngrabPointer(disp, CurrentTime);
}