1 /*
2 * Copyright (c) 2010, 2011, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
55 XPointFixed p1;
56 XPointFixed p2;
57 } XLinearGradient;
58 #endif
59
60 #ifndef X_RenderCreateRadialGradient
61 typedef struct _XCircle {
62 XFixed x;
63 XFixed y;
64 XFixed radius;
65 } XCircle;
66
67 typedef struct _XRadialGradient {
68 XCircle inner;
69 XCircle outer;
70 } XRadialGradient;
71 #endif
72
73 #include <dlfcn.h>
74
75 #ifdef __solaris__
76 /* Solaris 10 will not have these symbols at runtime */
77
78 typedef Picture (*XRenderCreateLinearGradientFuncType)
79 (Display *dpy,
80 const XLinearGradient *gradient,
81 const XFixed *stops,
82 const XRenderColor *colors,
83 int nstops);
84
85 typedef Picture (*XRenderCreateRadialGradientFuncType)
86 (Display *dpy,
87 const XRadialGradient *gradient,
88 const XFixed *stops,
89 const XRenderColor *colors,
90 int nstops);
91
92 static
93 XRenderCreateLinearGradientFuncType XRenderCreateLinearGradientFunc = NULL;
94 static
95 XRenderCreateRadialGradientFuncType XRenderCreateRadialGradientFunc = NULL;
96 #endif
130 * just to be conservative. This is offset by the size of our maximum x*Req
131 * type in this compilation unit, which is xRenderCreateRadiaGradientReq.
132 *
133 * Note that sizeof(xRenderCreateRadiaGradientReq) = 36
134 */
135 #define MAX_PAYLOAD (262140u - 36u)
136 #define MAXUINT (0xffffffffu)
137
138 static jboolean IsXRenderAvailable(jboolean verbose, jboolean ignoreLinuxVersion) {
139
140 void *xrenderlib;
141
142 int major_opcode, first_event, first_error;
143 jboolean available = JNI_TRUE;
144
145 if (!XQueryExtension(awt_display, "RENDER",
146 &major_opcode, &first_event, &first_error)) {
147 return JNI_FALSE;
148 }
149
150 #ifdef __solaris__
151 xrenderlib = dlopen("libXrender.so",RTLD_GLOBAL|RTLD_LAZY);
152 if (xrenderlib != NULL) {
153
154 XRenderCreateLinearGradientFunc =
155 (XRenderCreateLinearGradientFuncType)
156 dlsym(xrenderlib, "XRenderCreateLinearGradient");
157
158 XRenderCreateRadialGradientFunc =
159 (XRenderCreateRadialGradientFuncType)
160 dlsym(xrenderlib, "XRenderCreateRadialGradient");
161
162 if (XRenderCreateLinearGradientFunc == NULL ||
163 XRenderCreateRadialGradientFunc == NULL)
164 {
165 available = JNI_FALSE;
166 }
167 dlclose(xrenderlib);
168 } else {
169 available = JNI_FALSE;
170 }
|
1 /*
2 * Copyright (c) 2010, 2013, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
55 XPointFixed p1;
56 XPointFixed p2;
57 } XLinearGradient;
58 #endif
59
60 #ifndef X_RenderCreateRadialGradient
61 typedef struct _XCircle {
62 XFixed x;
63 XFixed y;
64 XFixed radius;
65 } XCircle;
66
67 typedef struct _XRadialGradient {
68 XCircle inner;
69 XCircle outer;
70 } XRadialGradient;
71 #endif
72
73 #include <dlfcn.h>
74
75 #if defined(__solaris__) || defined(_AIX)
76 /* Solaris 10 and AIX will not have these symbols at runtime */
77
78 typedef Picture (*XRenderCreateLinearGradientFuncType)
79 (Display *dpy,
80 const XLinearGradient *gradient,
81 const XFixed *stops,
82 const XRenderColor *colors,
83 int nstops);
84
85 typedef Picture (*XRenderCreateRadialGradientFuncType)
86 (Display *dpy,
87 const XRadialGradient *gradient,
88 const XFixed *stops,
89 const XRenderColor *colors,
90 int nstops);
91
92 static
93 XRenderCreateLinearGradientFuncType XRenderCreateLinearGradientFunc = NULL;
94 static
95 XRenderCreateRadialGradientFuncType XRenderCreateRadialGradientFunc = NULL;
96 #endif
130 * just to be conservative. This is offset by the size of our maximum x*Req
131 * type in this compilation unit, which is xRenderCreateRadiaGradientReq.
132 *
133 * Note that sizeof(xRenderCreateRadiaGradientReq) = 36
134 */
135 #define MAX_PAYLOAD (262140u - 36u)
136 #define MAXUINT (0xffffffffu)
137
138 static jboolean IsXRenderAvailable(jboolean verbose, jboolean ignoreLinuxVersion) {
139
140 void *xrenderlib;
141
142 int major_opcode, first_event, first_error;
143 jboolean available = JNI_TRUE;
144
145 if (!XQueryExtension(awt_display, "RENDER",
146 &major_opcode, &first_event, &first_error)) {
147 return JNI_FALSE;
148 }
149
150 #if defined(__solaris__) || defined(_AIX)
151 xrenderlib = dlopen("libXrender.so",RTLD_GLOBAL|RTLD_LAZY);
152 if (xrenderlib != NULL) {
153
154 XRenderCreateLinearGradientFunc =
155 (XRenderCreateLinearGradientFuncType)
156 dlsym(xrenderlib, "XRenderCreateLinearGradient");
157
158 XRenderCreateRadialGradientFunc =
159 (XRenderCreateRadialGradientFuncType)
160 dlsym(xrenderlib, "XRenderCreateRadialGradient");
161
162 if (XRenderCreateLinearGradientFunc == NULL ||
163 XRenderCreateRadialGradientFunc == NULL)
164 {
165 available = JNI_FALSE;
166 }
167 dlclose(xrenderlib);
168 } else {
169 available = JNI_FALSE;
170 }
|