@Override protected final void resetGammaRamp(Buffer originalGammaRamp) { if (originalGammaRamp == null) { return; // getGammaRamp failed originally } long display = getOrCreateSharedDpy(defaultDevice); if (0 == display) { return; } ShortBuffer rampData = (ShortBuffer) originalGammaRamp; int capacity = rampData.capacity(); if ((capacity % 3) != 0) { throw new IllegalArgumentException("Must not be the original gamma ramp"); } int size = capacity / 3; rampData.position(0); rampData.limit(size); ShortBuffer redRampData = rampData.slice(); rampData.position(size); rampData.limit(2 * size); ShortBuffer greenRampData = rampData.slice(); rampData.position(2 * size); rampData.limit(3 * size); ShortBuffer blueRampData = rampData.slice(); X11Lib.XF86VidModeSetGammaRamp( display, X11Lib.DefaultScreen(display), size, redRampData, greenRampData, blueRampData); }
@Override protected final boolean setGammaRamp(float[] ramp) { long display = getOrCreateSharedDpy(defaultDevice); if (0 == display) { return false; } int len = ramp.length; short[] rampData = new short[len]; for (int i = 0; i < len; i++) { rampData[i] = (short) (ramp[i] * 65535); } boolean res = X11Lib.XF86VidModeSetGammaRamp( display, X11Lib.DefaultScreen(display), rampData.length, rampData, 0, rampData, 0, rampData, 0); return res; }
@Override protected final Buffer getGammaRamp() { long display = getOrCreateSharedDpy(defaultDevice); if (0 == display) { return null; } int size = getGammaRampLength(); ShortBuffer rampData = ShortBuffer.wrap(new short[3 * size]); rampData.position(0); rampData.limit(size); ShortBuffer redRampData = rampData.slice(); rampData.position(size); rampData.limit(2 * size); ShortBuffer greenRampData = rampData.slice(); rampData.position(2 * size); rampData.limit(3 * size); ShortBuffer blueRampData = rampData.slice(); boolean res = X11Lib.XF86VidModeGetGammaRamp( display, X11Lib.DefaultScreen(display), size, redRampData, greenRampData, blueRampData); if (!res) { return null; } return rampData; }
@Override protected final synchronized int getGammaRampLength() { if (gotGammaRampLength) { return gammaRampLength; } long display = getOrCreateSharedDpy(defaultDevice); if (0 == display) { return 0; } int[] size = new int[1]; boolean res = X11Lib.XF86VidModeGetGammaRampSize(display, X11Lib.DefaultScreen(display), size, 0); if (!res) { return 0; } gotGammaRampLength = true; gammaRampLength = size[0]; return gammaRampLength; }