< prev index next >
src/java.desktop/unix/native/libawt_xawt/awt/awt_GraphicsEnv.c
Print this page
@@ -21,26 +21,29 @@
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
+#ifdef HEADLESS
+ #error This file should not be included in headless library
+#endif
+
#include "jni_util.h"
#include "awt_p.h"
#include "awt.h"
#include "color.h"
#include <java_awt_DisplayMode.h>
#include <sun_awt_X11GraphicsEnvironment.h>
#include <sun_awt_X11GraphicsDevice.h>
#include <sun_awt_X11GraphicsConfig.h>
-#ifndef HEADLESS
+
#include <X11/extensions/Xdbe.h>
#include <X11/XKBlib.h>
#ifndef NO_XRANDR
#include <X11/extensions/Xrandr.h>
#endif
#include "GLXGraphicsConfig.h"
-#endif /* !HEADLESS */
#include <jni.h>
#include <jni_util.h>
#include <jvm.h>
#include <jvm_md.h>
@@ -52,28 +55,20 @@
#include "awt_util.h"
#include "gdefs.h"
#include <dlfcn.h>
#include "Trace.h"
-#ifndef HEADLESS
-
int awt_numScreens; /* Xinerama-aware number of screens */
AwtScreenDataPtr x11Screens;
/*
* Set in initDisplay() to indicate whether we should attempt to initialize
* GLX for the default configuration.
*/
static jboolean glxRequested = JNI_FALSE;
-#endif /* !HEADLESS */
-
-#ifdef HEADLESS
-#define Display void
-#endif /* HEADLESS */
-
Display *awt_display;
jclass tkClass = NULL;
jmethodID awtLockMID = NULL;
jmethodID awtUnlockMID = NULL;
@@ -90,13 +85,11 @@
if (method_id == NULL) return NULL; \
} while (0)
struct X11GraphicsConfigIDs x11GraphicsConfigIDs;
-#ifndef HEADLESS
int awtCreateX11Colormap(AwtGraphicsConfigDataPtr adata);
-#endif /* HEADLESS */
static char *x11GraphicsConfigClassName = "sun/awt/X11GraphicsConfig";
/* AWT and Xinerama
*
@@ -132,12 +125,10 @@
CHECK_NULL(x11GraphicsConfigIDs.aData);
x11GraphicsConfigIDs.bitsPerPixel = (*env)->GetFieldID (env, cls, "bitsPerPixel", "I");
CHECK_NULL(x11GraphicsConfigIDs.bitsPerPixel);
}
-#ifndef HEADLESS
-
/*
* XIOErrorHandler
*/
static int xioerror_handler(Display *disp)
{
@@ -403,19 +394,12 @@
&major_opcode, &first_event, &first_error))
{
DTRACE_PRINTLN("RENDER extension available");
xrenderLibHandle = dlopen("libXrender.so.1", RTLD_LAZY | RTLD_GLOBAL);
-#ifdef MACOSX
-#define XRENDER_LIB "/usr/X11/lib/libXrender.dylib"
-#else
-#define XRENDER_LIB "libXrender.so"
-#endif
-
if (xrenderLibHandle == NULL) {
- xrenderLibHandle = dlopen(XRENDER_LIB,
- RTLD_LAZY | RTLD_GLOBAL);
+ xrenderLibHandle = dlopen("libXrender.so", RTLD_LAZY | RTLD_GLOBAL);
}
#if defined(__solaris__)
if (xrenderLibHandle == NULL) {
xrenderLibHandle = dlopen("/usr/lib/libXrender.so.1",
@@ -603,12 +587,10 @@
XFree (pVI1sg);
AWT_UNLOCK ();
}
-#ifndef HEADLESS
-
/*
* Checks if Xinerama is running and perform Xinerama-related initialization.
*/
static void xineramaInit(void) {
char* XinExtName = "XINERAMA";
@@ -666,11 +648,10 @@
}
} else {
DTRACE_PRINTLN1("\ncouldn't open shared library: %s\n", dlerror());
}
}
-#endif /* HEADLESS */
Display *
awt_init_Display(JNIEnv *env, jobject this)
{
jclass klass;
@@ -743,115 +724,88 @@
JNU_CHECK_EXCEPTION_RETURN(env, NULL);
}
return dpy;
}
-#endif /* !HEADLESS */
/*
* Class: sun_awt_X11GraphicsEnvironment
* Method: getDefaultScreenNum
* Signature: ()I
*/
JNIEXPORT jint JNICALL
Java_sun_awt_X11GraphicsEnvironment_getDefaultScreenNum(
JNIEnv *env, jobject this)
{
-#ifdef HEADLESS
- return (jint)0;
-#else
return DefaultScreen(awt_display);
-#endif /* !HEADLESS */
}
-#ifndef HEADLESS
static void ensureConfigsInited(JNIEnv* env, int screen) {
if (x11Screens[screen].numConfigs == 0) {
if (env == NULL) {
env = (JNIEnv *)JNU_GetEnv(jvm, JNI_VERSION_1_2);
}
getAllConfigs (env, screen, &(x11Screens[screen]));
}
}
-#endif
-#ifdef HEADLESS
-void* getDefaultConfig(int screen) {
- return NULL;
-}
-#else
AwtGraphicsConfigDataPtr
getDefaultConfig(int screen) {
ensureConfigsInited(NULL, screen);
return x11Screens[screen].defaultConfig;
}
-#endif /* !HEADLESS */
/*
* Class: sun_awt_X11GraphicsEnvironment
* Method: initDisplay
* Signature: (Z)V
*/
JNIEXPORT void JNICALL
Java_sun_awt_X11GraphicsEnvironment_initDisplay(JNIEnv *env, jobject this,
jboolean glxReq)
{
-#ifndef HEADLESS
glxRequested = glxReq;
(void) awt_init_Display(env, this);
-#endif /* !HEADLESS */
}
/*
* Class: sun_awt_X11GraphicsEnvironment
* Method: initGLX
* Signature: ()Z
*/
JNIEXPORT jboolean JNICALL
Java_sun_awt_X11GraphicsEnvironment_initGLX(JNIEnv *env, jclass x11ge)
{
-#ifndef HEADLESS
jboolean glxAvailable;
AWT_LOCK();
glxAvailable = GLXGC_IsGLXAvailable();
AWT_UNLOCK();
return glxAvailable;
-#else
- return JNI_FALSE;
-#endif /* !HEADLESS */
}
/*
* Class: sun_awt_X11GraphicsEnvironment
* Method: getNumScreens
* Signature: ()I
*/
JNIEXPORT jint JNICALL
Java_sun_awt_X11GraphicsEnvironment_getNumScreens(JNIEnv *env, jobject this)
{
-#ifdef HEADLESS
- return (jint)0;
-#else
return awt_numScreens;
-#endif /* !HEADLESS */
}
/*
* Class: sun_awt_X11GraphicsDevice
* Method: getDisplay
* Signature: ()J
*/
JNIEXPORT jlong JNICALL
Java_sun_awt_X11GraphicsDevice_getDisplay(JNIEnv *env, jobject this)
{
-#ifdef HEADLESS
- return NULL;
-#else
return ptr_to_jlong(awt_display);
-#endif /* !HEADLESS */
}
#ifdef MITSHM
static jint canUseShmExt = UNSET_MITSHM;
@@ -974,15 +928,11 @@
*/
JNIEXPORT jstring JNICALL
Java_sun_awt_X11GraphicsEnvironment_getDisplayString
(JNIEnv *env, jobject this)
{
-#ifdef HEADLESS
- return (jstring)NULL;
-#else
return (*env)->NewStringUTF(env, DisplayString(awt_display));
-#endif /* HEADLESS */
}
/*
* Class: sun_awt_X11GraphicsDevice
@@ -991,16 +941,12 @@
*/
JNIEXPORT jint JNICALL
Java_sun_awt_X11GraphicsDevice_getNumConfigs(
JNIEnv *env, jobject this, jint screen)
{
-#ifdef HEADLESS
- return (jint)0;
-#else
ensureConfigsInited(env, screen);
return x11Screens[screen].numConfigs;
-#endif /* !HEADLESS */
}
/*
* Class: sun_awt_X11GraphicsDevice
* Method: getConfigVisualId
@@ -1008,22 +954,18 @@
*/
JNIEXPORT jint JNICALL
Java_sun_awt_X11GraphicsDevice_getConfigVisualId(
JNIEnv *env, jobject this, jint index, jint screen)
{
-#ifdef HEADLESS
- return (jint)0;
-#else
int visNum;
ensureConfigsInited(env, screen);
if (index == 0) {
return ((jint)x11Screens[screen].defaultConfig->awt_visInfo.visualid);
} else {
return ((jint)x11Screens[screen].configs[index]->awt_visInfo.visualid);
}
-#endif /* !HEADLESS */
}
/*
* Class: sun_awt_X11GraphicsDevice
* Method: getConfigDepth
@@ -1031,22 +973,18 @@
*/
JNIEXPORT jint JNICALL
Java_sun_awt_X11GraphicsDevice_getConfigDepth(
JNIEnv *env, jobject this, jint index, jint screen)
{
-#ifdef HEADLESS
- return (jint)0;
-#else
int visNum;
ensureConfigsInited(env, screen);
if (index == 0) {
return ((jint)x11Screens[screen].defaultConfig->awt_visInfo.depth);
} else {
return ((jint)x11Screens[screen].configs[index]->awt_visInfo.depth);
}
-#endif /* !HEADLESS */
}
/*
* Class: sun_awt_X11GraphicsDevice
* Method: getConfigColormap
@@ -1054,22 +992,18 @@
*/
JNIEXPORT jint JNICALL
Java_sun_awt_X11GraphicsDevice_getConfigColormap(
JNIEnv *env, jobject this, jint index, jint screen)
{
-#ifdef HEADLESS
- return (jint)0;
-#else
int visNum;
ensureConfigsInited(env, screen);
if (index == 0) {
return ((jint)x11Screens[screen].defaultConfig->awt_cmap);
} else {
return ((jint)x11Screens[screen].configs[index]->awt_cmap);
}
-#endif /* !HEADLESS */
}
/*
* Class: sun_awt_X11GraphicsDevice
* Method: resetNativeData
@@ -1077,11 +1011,10 @@
*/
JNIEXPORT void JNICALL
Java_sun_awt_X11GraphicsDevice_resetNativeData
(JNIEnv *env, jclass x11gd, jint screen)
{
-#ifndef HEADLESS
/*
* Reset references to the various configs; the actual native config data
* will be free'd later by the Disposer mechanism when the Java-level
* X11GraphicsConfig objects go away. By setting these values to NULL,
* we ensure that they will be reinitialized as necessary (for example,
@@ -1091,11 +1024,10 @@
free(x11Screens[screen].configs);
x11Screens[screen].configs = NULL;
}
x11Screens[screen].defaultConfig = NULL;
x11Screens[screen].numConfigs = 0;
-#endif /* !HEADLESS */
}
/*
* Class: sun_awt_X11GraphicsConfig
* Method: dispose
@@ -1103,11 +1035,10 @@
*/
JNIEXPORT void JNICALL
Java_sun_awt_X11GraphicsConfig_dispose
(JNIEnv *env, jclass x11gc, jlong configData)
{
-#ifndef HEADLESS
AwtGraphicsConfigDataPtr aData = (AwtGraphicsConfigDataPtr)
jlong_to_ptr(configData);
if (aData == NULL) {
return;
@@ -1145,11 +1076,10 @@
"disposeGraphicsConfig", "(J)V",
ptr_to_jlong(aData->glxInfo));
}
free(aData);
-#endif /* !HEADLESS */
}
/*
* Class: sun_awt_X11GraphicsConfig
* Method: getXResolution
@@ -1157,16 +1087,12 @@
*/
JNIEXPORT jdouble JNICALL
Java_sun_awt_X11GraphicsConfig_getXResolution(
JNIEnv *env, jobject this, jint screen)
{
-#ifdef HEADLESS
- return (jdouble)0;
-#else
return ((DisplayWidth(awt_display, screen) * 25.4) /
DisplayWidthMM(awt_display, screen));
-#endif /* !HEADLESS */
}
/*
* Class: sun_awt_X11GraphicsConfig
* Method: getYResolution
@@ -1174,16 +1100,12 @@
*/
JNIEXPORT jdouble JNICALL
Java_sun_awt_X11GraphicsConfig_getYResolution(
JNIEnv *env, jobject this, jint screen)
{
-#ifdef HEADLESS
- return (jdouble)0;
-#else
return ((DisplayHeight(awt_display, screen) * 25.4) /
DisplayHeightMM(awt_display, screen));
-#endif /* !HEADLESS */
}
/*
* Class: sun_awt_X11GraphicsConfig
@@ -1192,20 +1114,16 @@
*/
JNIEXPORT jint JNICALL
Java_sun_awt_X11GraphicsConfig_getNumColors(
JNIEnv *env, jobject this)
{
-#ifdef HEADLESS
- return (jint)0;
-#else
AwtGraphicsConfigData *adata;
adata = (AwtGraphicsConfigData *) JNU_GetLongFieldAsPtr(env, this,
x11GraphicsConfigIDs.aData);
return adata->awt_num_colors;
-#endif /* !HEADLESS */
}
/*
* Class: sun_awt_X11GraphicsConfig
* Method: init
@@ -1213,11 +1131,10 @@
*/
JNIEXPORT void JNICALL
Java_sun_awt_X11GraphicsConfig_init(
JNIEnv *env, jobject this, jint visualNum, jint screen)
{
-#ifndef HEADLESS
AwtGraphicsConfigData *adata = NULL;
AwtScreenData asd = x11Screens[screen];
int i, n;
int depth;
XImage * tempImage;
@@ -1254,27 +1171,21 @@
depth, ZPixmap, 0, NULL, 1, 1, 32, 0);
adata->pixelStride = (tempImage->bits_per_pixel + 7) / 8;
(*env)->SetIntField(env, this, x11GraphicsConfigIDs.bitsPerPixel,
(jint)tempImage->bits_per_pixel);
XDestroyImage(tempImage);
-#endif /* !HEADLESS */
}
-
-
/*
* Class: sun_awt_X11GraphicsConfig
* Method: makeColorModel
* Signature: ()Ljava/awt/image/ColorModel
*/
JNIEXPORT jobject JNICALL
Java_sun_awt_X11GraphicsConfig_makeColorModel(
JNIEnv *env, jobject this)
{
-#ifdef HEADLESS
- return NULL;
-#else
AwtGraphicsConfigData *adata;
jobject colorModel;
/*
* If awt is not locked yet, return null since the toolkit is not
@@ -1299,25 +1210,20 @@
? NULL : awtJNI_GetColorModel (env, adata);
AWT_UNLOCK ();
return colorModel;
-#endif /* !HEADLESS */
}
-
/*
* Class: sun_awt_X11GraphicsConfig
* Method: getBounds
* Signature: ()Ljava/awt/Rectangle
*/
JNIEXPORT jobject JNICALL
Java_sun_awt_X11GraphicsConfig_pGetBounds(JNIEnv *env, jobject this, jint screen)
{
-#ifdef HEADLESS
- return NULL;
-#else
jclass clazz;
jmethodID mid;
jobject bounds = NULL;
AwtGraphicsConfigDataPtr adata;
int32_t locNumScr = 0;
@@ -1372,11 +1278,10 @@
if ((*env)->ExceptionOccurred(env)) {
return NULL;
}
}
return bounds;
-#endif /* !HEADLESS */
}
/*
* Class: sun_awt_X11GraphicsConfig
* Method: createBackBuffer
@@ -1448,41 +1353,33 @@
*/
JNIEXPORT jboolean JNICALL
Java_sun_awt_X11GraphicsConfig_isTranslucencyCapable
(JNIEnv *env, jobject this, jlong configData)
{
-#ifdef HEADLESS
- return JNI_FALSE;
-#else
AwtGraphicsConfigDataPtr aData = (AwtGraphicsConfigDataPtr)jlong_to_ptr(configData);
if (aData == NULL) {
return JNI_FALSE;
}
return aData->isTranslucencySupported ? JNI_TRUE : JNI_FALSE;
-#endif
}
/*
* Class: sun_awt_X11GraphicsDevice
* Method: isDBESupported
* Signature: ()Z
*/
JNIEXPORT jboolean JNICALL
Java_sun_awt_X11GraphicsDevice_isDBESupported(JNIEnv *env, jobject this)
{
-#ifdef HEADLESS
- return JNI_FALSE;
-#else
int opcode = 0, firstEvent = 0, firstError = 0;
jboolean ret;
AWT_LOCK();
ret = (jboolean)XQueryExtension(awt_display, "DOUBLE-BUFFER",
&opcode, &firstEvent, &firstError);
AWT_FLUSH_UNLOCK();
return ret;
-#endif /* !HEADLESS */
}
/*
* Class: sun_awt_X11GraphicsDevice
* Method: getDoubleBufferVisuals
@@ -1490,11 +1387,10 @@
*/
JNIEXPORT void JNICALL
Java_sun_awt_X11GraphicsDevice_getDoubleBufferVisuals(JNIEnv *env,
jobject this, jint screen)
{
-#ifndef HEADLESS
jclass clazz;
jmethodID midAddVisual;
Window rootWindow;
int i, n = 1;
XdbeScreenVisualInfo* visScreenInfo;
@@ -1525,11 +1421,10 @@
(*env)->CallVoidMethod(env, this, midAddVisual, (visInfo[i]).visual);
if ((*env)->ExceptionCheck(env)) {
break;
}
}
-#endif /* !HEADLESS */
}
/*
* Class: sun_awt_X11GraphicsEnvironment
* Method: pRunningXinerama
@@ -1537,23 +1432,17 @@
*/
JNIEXPORT jboolean JNICALL
Java_sun_awt_X11GraphicsEnvironment_pRunningXinerama(JNIEnv *env,
jobject this)
{
-#ifdef HEADLESS
- return JNI_FALSE;
-#else
return usingXinerama ? JNI_TRUE : JNI_FALSE;
-#endif /* HEADLESS */
}
/**
* Begin DisplayMode/FullScreen support
*/
-#ifndef HEADLESS
-
#ifndef NO_XRANDR
#define BIT_DEPTH_MULTI java_awt_DisplayMode_BIT_DEPTH_MULTI
#define REFRESH_RATE_UNKNOWN java_awt_DisplayMode_REFRESH_RATE_UNKNOWN
@@ -1787,22 +1676,21 @@
XSendEvent(awt_display, attr.root, False,
SubstructureRedirectMask | SubstructureNotifyMask,
&event);
XSync(awt_display, False);
}
-#endif /* !HEADLESS */
/*
* Class: sun_awt_X11GraphicsDevice
* Method: initXrandrExtension
* Signature: ()Z
*/
JNIEXPORT jboolean JNICALL
Java_sun_awt_X11GraphicsDevice_initXrandrExtension
(JNIEnv *env, jclass x11gd)
{
-#if defined(HEADLESS) || defined(NO_XRANDR)
+#if defined(NO_XRANDR)
return JNI_FALSE;
#else
int opcode = 0, firstEvent = 0, firstError = 0;
jboolean ret;
@@ -1813,11 +1701,11 @@
ret = X11GD_InitXrandrFuncs(env);
}
AWT_FLUSH_UNLOCK();
return ret;
-#endif /* HEADLESS */
+#endif /* NO_XRANDR */
}
/*
* Class: sun_awt_X11GraphicsDevice
* Method: getCurrentDisplayMode
@@ -1825,11 +1713,11 @@
*/
JNIEXPORT jobject JNICALL
Java_sun_awt_X11GraphicsDevice_getCurrentDisplayMode
(JNIEnv* env, jclass x11gd, jint screen)
{
-#if defined(HEADLESS) || defined(NO_XRANDR)
+#if defined(NO_XRANDR)
return NULL;
#else
XRRScreenConfiguration *config;
jobject displayMode = NULL;
@@ -1908,11 +1796,11 @@
}
AWT_FLUSH_UNLOCK();
return displayMode;
-#endif /* HEADLESS */
+#endif /* NO_XRANDR */
}
/*
* Class: sun_awt_X11GraphicsDevice
* Method: enumDisplayModes
@@ -1921,11 +1809,11 @@
JNIEXPORT void JNICALL
Java_sun_awt_X11GraphicsDevice_enumDisplayModes
(JNIEnv* env, jclass x11gd,
jint screen, jobject arrayList)
{
-#if !defined(HEADLESS) && !defined(NO_XRANDR)
+#if !defined(NO_XRANDR)
AWT_LOCK();
if (usingXinerama && XScreenCount(awt_display) > 0) {
XRRScreenResources *res = awt_XRRGetScreenResources(awt_display,
@@ -1996,11 +1884,11 @@
awt_XRRFreeScreenConfigInfo(config);
}
}
AWT_FLUSH_UNLOCK();
-#endif /* !HEADLESS */
+#endif /* !NO_XRANDR */
}
/*
* Class: sun_awt_X11GraphicsDevice
* Method: configDisplayMode
@@ -2009,11 +1897,11 @@
JNIEXPORT void JNICALL
Java_sun_awt_X11GraphicsDevice_configDisplayMode
(JNIEnv* env, jclass x11gd,
jint screen, jint width, jint height, jint refreshRate)
{
-#if !defined(HEADLESS) && !defined(NO_XRANDR)
+#if !defined(NO_XRANDR)
jboolean success = JNI_FALSE;
XRRScreenConfiguration *config;
Drawable root;
Rotation currentRotation = RR_Rotate_0;
@@ -2079,11 +1967,11 @@
AWT_FLUSH_UNLOCK();
if (!success && !(*env)->ExceptionCheck(env)) {
JNU_ThrowInternalError(env, "Could not set display mode");
}
-#endif /* !HEADLESS */
+#endif /* !NO_XRANDR */
}
/*
* Class: sun_awt_X11GraphicsDevice
* Method: enterFullScreenExclusive
@@ -2092,18 +1980,16 @@
JNIEXPORT void JNICALL
Java_sun_awt_X11GraphicsDevice_enterFullScreenExclusive
(JNIEnv* env, jclass x11gd,
jlong window)
{
-#ifndef HEADLESS
Window win = (Window)window;
AWT_LOCK();
XSync(awt_display, False); /* ensures window is visible first */
X11GD_SetFullscreenMode(win, JNI_TRUE);
AWT_UNLOCK();
-#endif /* !HEADLESS */
}
/*
* Class: sun_awt_X11GraphicsDevice
* Method: exitFullScreenExclusive
@@ -2112,17 +1998,15 @@
JNIEXPORT void JNICALL
Java_sun_awt_X11GraphicsDevice_exitFullScreenExclusive
(JNIEnv* env, jclass x11gd,
jlong window)
{
-#ifndef HEADLESS
Window win = (Window)window;
AWT_LOCK();
X11GD_SetFullscreenMode(win, JNI_FALSE);
AWT_UNLOCK();
-#endif /* !HEADLESS */
}
/**
* End DisplayMode/FullScreen support
*/
< prev index next >