From 1a83741b89048601fefe9b6e1ca74d3e063a1649 Mon Sep 17 00:00:00 2001 From: Elias Naur Date: Mon, 23 Oct 2006 14:16:40 +0000 Subject: [PATCH] Linux: Moved another Display instance to java --- src/java/org/lwjgl/opengl/LinuxDisplay.java | 17 +++++++++++++---- src/native/linux/display.c | 15 +++------------ src/native/linux/display.h | 1 - 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/src/java/org/lwjgl/opengl/LinuxDisplay.java b/src/java/org/lwjgl/opengl/LinuxDisplay.java index 4311e86d..d28d7e2b 100644 --- a/src/java/org/lwjgl/opengl/LinuxDisplay.java +++ b/src/java/org/lwjgl/opengl/LinuxDisplay.java @@ -485,13 +485,22 @@ final class LinuxDisplay implements DisplayImplementation { private void doSetGamma(ByteBuffer native_gamma) throws LWJGLException { lockAWT(); try { - nSetGammaRamp(getScreen(), native_gamma); + setGammaRampOnTmpDisplay(native_gamma); current_gamma = native_gamma; } finally { unlockAWT(); } } - private static native void nSetGammaRamp(int screen, ByteBuffer gammaRamp) throws LWJGLException; + + private void setGammaRampOnTmpDisplay(ByteBuffer native_gamma) throws LWJGLException { + long tmp_display = openDisplay(); + try { + nSetGammaRamp(tmp_display, getScreen(), native_gamma); + } finally { + closeDisplay(tmp_display); + } + } + private static native void nSetGammaRamp(long display, int screen, ByteBuffer gammaRamp) throws LWJGLException; private static ByteBuffer convertToNativeRamp(FloatBuffer ramp) throws LWJGLException { return nConvertToNativeRamp(ramp, ramp.position(), ramp.remaining()); @@ -696,7 +705,7 @@ final class LinuxDisplay implements DisplayImplementation { nIconifyWindow(getDisplay(), getWindow(), getScreen()); try { nSwitchDisplayMode(getScreen(), current_displaymode_extension, saved_mode); - nSetGammaRamp(getScreen(), saved_gamma); + setGammaRampOnTmpDisplay(saved_gamma); } catch (LWJGLException e) { LWJGLUtil.log("Failed to restore saved mode: " + e.getMessage()); } @@ -713,7 +722,7 @@ final class LinuxDisplay implements DisplayImplementation { if (current_window_mode == FULLSCREEN_NETWM) { try { nSwitchDisplayMode(getScreen(), current_displaymode_extension, current_mode); - nSetGammaRamp(getScreen(), current_gamma); + setGammaRampOnTmpDisplay(current_gamma); } catch (LWJGLException e) { LWJGLUtil.log("Failed to restore mode: " + e.getMessage()); } diff --git a/src/native/linux/display.c b/src/native/linux/display.c index 12826697..a5a66722 100644 --- a/src/native/linux/display.c +++ b/src/native/linux/display.c @@ -319,16 +319,6 @@ static void setGamma(JNIEnv *env, Display *disp, int screen, jobject ramp_buffer } } -void setGammaRamp(JNIEnv *env, int screen, jobject gamma_ramp_buffer) { - Display * disp = XOpenDisplay(NULL); - if (disp == NULL) { - throwException(env, "Could not open display"); - return; - } - setGamma(env, disp, screen, gamma_ramp_buffer); - XCloseDisplay(disp); -} - bool switchDisplayMode(JNIEnv * env, int screen, jint extension, jobject mode) { if (mode == NULL) { throwException(env, "mode must be non-null"); @@ -422,7 +412,8 @@ JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_LinuxDisplay_nGetGammaRampLength(JN return (jint)getGammaRampLengthOfDisplay(env, disp, screen); } -JNIEXPORT void JNICALL Java_org_lwjgl_opengl_LinuxDisplay_nSetGammaRamp(JNIEnv *env, jclass clazz, jint screen, jobject gamma_buffer) { - setGammaRamp(env, screen, gamma_buffer); +JNIEXPORT void JNICALL Java_org_lwjgl_opengl_LinuxDisplay_nSetGammaRamp(JNIEnv *env, jclass clazz, jlong display, jint screen, jobject gamma_buffer) { + Display *disp = (Display *)(intptr_t)display; + setGamma(env, disp, screen, gamma_buffer); } diff --git a/src/native/linux/display.h b/src/native/linux/display.h index 948a60fa..329b18f2 100644 --- a/src/native/linux/display.h +++ b/src/native/linux/display.h @@ -46,6 +46,5 @@ #include "common_tools.h" extern bool switchDisplayMode(JNIEnv * env, int screen, jint extension, jobject mode); -extern void setGammaRamp(JNIEnv *env, int screen, jobject gamma_ramp_buffer); #endif