Cursor blanking added
This commit is contained in:
parent
43698ade7c
commit
1e828e6fc5
|
@ -102,10 +102,18 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_Display_nCreate(JNIEnv * env, jclass c
|
||||||
return JNI_FALSE;
|
return JNI_FALSE;
|
||||||
}
|
}
|
||||||
screen = DefaultScreen(disp);
|
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);
|
root_win = RootWindow(disp, screen);
|
||||||
|
|
||||||
vis_info = glXChooseVisual(disp, screen, attriblist);
|
vis_info = glXChooseVisual(disp, screen, attriblist);
|
||||||
if (vis_info == NULL) {
|
if (vis_info == NULL) {
|
||||||
|
XCloseDisplay(disp);
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
printf("Could not choose glx visual\n");
|
printf("Could not choose glx visual\n");
|
||||||
#endif
|
#endif
|
||||||
|
@ -129,18 +137,16 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_Display_nCreate(JNIEnv * env, jclass c
|
||||||
if (fullscreen) {
|
if (fullscreen) {
|
||||||
XMapRaised(disp, win);
|
XMapRaised(disp, win);
|
||||||
waitMapped(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 ) {
|
for ( i = 0; i < num_modes; ++i ) {
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
printf("Mode %d: %dx%d\n", i, avail_modes[i]->hdisplay, avail_modes[i]->vdisplay);
|
printf("Mode %d: %dx%d\n", i, avail_modes[i]->hdisplay, avail_modes[i]->vdisplay);
|
||||||
#endif
|
#endif
|
||||||
if (avail_modes[i]->hdisplay == width && avail_modes[i]->vdisplay == height) {
|
if (avail_modes[i]->hdisplay == width && avail_modes[i]->vdisplay == height) {
|
||||||
if (!XF86VidModeSwitchToMode(disp, screen, avail_modes[i])) {
|
if (!XF86VidModeSwitchToMode(disp, screen, avail_modes[i])) {
|
||||||
|
XFree(vis_info);
|
||||||
|
XFree(avail_modes);
|
||||||
|
XDestroyWindow(disp, win);
|
||||||
|
XCloseDisplay(disp);
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
printf("Could not switch mode\n");
|
printf("Could not switch mode\n");
|
||||||
#endif
|
#endif
|
||||||
|
@ -167,8 +173,8 @@ JNIEXPORT void JNICALL Java_org_lwjgl_Display_nDestroy(JNIEnv * env, jclass claz
|
||||||
printf("Could not switch mode\n");
|
printf("Could not switch mode\n");
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
XFree(avail_modes);
|
|
||||||
}
|
}
|
||||||
|
XFree(avail_modes);
|
||||||
XFree(vis_info);
|
XFree(vis_info);
|
||||||
XCloseDisplay(disp);
|
XCloseDisplay(disp);
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
|
|
|
@ -62,6 +62,8 @@ int current_x;
|
||||||
int current_y;
|
int current_y;
|
||||||
unsigned char buttons[NUM_BUTTONS];
|
unsigned char buttons[NUM_BUTTONS];
|
||||||
|
|
||||||
|
Cursor blank_cursor;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Class: org_lwjgl_input_Mouse
|
* Class: org_lwjgl_input_Mouse
|
||||||
* Method: initIDs
|
* 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
|
* Class: org_lwjgl_input_Mouse
|
||||||
* Method: nCreate
|
* Method: nCreate
|
||||||
|
@ -104,6 +127,12 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_input_Mouse_nCreate
|
||||||
current_x = current_y = last_x = last_y = 0;
|
current_x = current_y = last_x = last_y = 0;
|
||||||
for (i = 0; i < NUM_BUTTONS; i++)
|
for (i = 0; i < NUM_BUTTONS; i++)
|
||||||
buttons[i] = 0;
|
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);
|
int result = XGrabPointer(disp, win, False, PointerMotionMask | ButtonPressMask | ButtonReleaseMask, GrabModeAsync, GrabModeAsync, win, None, CurrentTime);
|
||||||
if (result != GrabSuccess) {
|
if (result != GrabSuccess) {
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
|
@ -122,6 +151,8 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_input_Mouse_nCreate
|
||||||
JNIEXPORT void JNICALL Java_org_lwjgl_input_Mouse_nDestroy
|
JNIEXPORT void JNICALL Java_org_lwjgl_input_Mouse_nDestroy
|
||||||
(JNIEnv * env, jclass clazz)
|
(JNIEnv * env, jclass clazz)
|
||||||
{
|
{
|
||||||
|
XUndefineCursor(disp, win);
|
||||||
|
XFreeCursor(disp, blank_cursor);
|
||||||
XUngrabPointer(disp, CurrentTime);
|
XUngrabPointer(disp, CurrentTime);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue