Mercurial > repos > rliterman > csp2
comparison CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/include/jawt.h @ 69:33d812a61356
planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author | jpayne |
---|---|
date | Tue, 18 Mar 2025 17:55:14 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
67:0e9998148a16 | 69:33d812a61356 |
---|---|
1 /* | |
2 * Copyright (c) 1999, 2017, 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 | |
23 * questions. | |
24 */ | |
25 | |
26 #ifndef _JAVASOFT_JAWT_H_ | |
27 #define _JAVASOFT_JAWT_H_ | |
28 | |
29 #include "jni.h" | |
30 | |
31 #ifdef __cplusplus | |
32 extern "C" { | |
33 #endif | |
34 | |
35 /* | |
36 * AWT native interface. | |
37 * | |
38 * The AWT native interface allows a native C or C++ application a means | |
39 * by which to access native structures in AWT. This is to facilitate moving | |
40 * legacy C and C++ applications to Java and to target the needs of the | |
41 * developers who need to do their own native rendering to canvases | |
42 * for performance or other reasons. | |
43 * | |
44 * Conversely it also provides mechanisms for an application which already | |
45 * has a native window to provide that to AWT for AWT rendering. | |
46 * | |
47 * Since every platform may be different in its native data structures | |
48 * and APIs for windowing systems the application must necessarily | |
49 * provided per-platform source and compile and deliver per-platform | |
50 * native code to use this API. | |
51 * | |
52 * These interfaces are not part of the Java SE specification and | |
53 * a VM is not required to implement this API. However it is strongly | |
54 * recommended that all implementations which support headful AWT | |
55 * also support these interfaces. | |
56 * | |
57 */ | |
58 | |
59 /* | |
60 * AWT Native Drawing Surface (JAWT_DrawingSurface). | |
61 * | |
62 * For each platform, there is a native drawing surface structure. This | |
63 * platform-specific structure can be found in jawt_md.h. It is recommended | |
64 * that additional platforms follow the same model. It is also recommended | |
65 * that VMs on all platforms support the existing structures in jawt_md.h. | |
66 * | |
67 ******************* | |
68 * EXAMPLE OF USAGE: | |
69 ******************* | |
70 * | |
71 * In Win32, a programmer wishes to access the HWND of a canvas to perform | |
72 * native rendering into it. The programmer has declared the paint() method | |
73 * for their canvas subclass to be native: | |
74 * | |
75 * | |
76 * MyCanvas.java: | |
77 * | |
78 * import java.awt.*; | |
79 * | |
80 * public class MyCanvas extends Canvas { | |
81 * | |
82 * static { | |
83 * System.loadLibrary("mylib"); | |
84 * } | |
85 * | |
86 * public native void paint(Graphics g); | |
87 * } | |
88 * | |
89 * | |
90 * myfile.c: | |
91 * | |
92 * #include "jawt_md.h" | |
93 * #include <assert.h> | |
94 * | |
95 * JNIEXPORT void JNICALL | |
96 * Java_MyCanvas_paint(JNIEnv* env, jobject canvas, jobject graphics) | |
97 * { | |
98 * JAWT awt; | |
99 * JAWT_DrawingSurface* ds; | |
100 * JAWT_DrawingSurfaceInfo* dsi; | |
101 * JAWT_Win32DrawingSurfaceInfo* dsi_win; | |
102 * jboolean result; | |
103 * jint lock; | |
104 * | |
105 * // Get the AWT. Request version 9 to access features in that release. | |
106 * awt.version = JAWT_VERSION_9; | |
107 * result = JAWT_GetAWT(env, &awt); | |
108 * assert(result != JNI_FALSE); | |
109 * | |
110 * // Get the drawing surface | |
111 * ds = awt.GetDrawingSurface(env, canvas); | |
112 * assert(ds != NULL); | |
113 * | |
114 * // Lock the drawing surface | |
115 * lock = ds->Lock(ds); | |
116 * assert((lock & JAWT_LOCK_ERROR) == 0); | |
117 * | |
118 * // Get the drawing surface info | |
119 * dsi = ds->GetDrawingSurfaceInfo(ds); | |
120 * | |
121 * // Get the platform-specific drawing info | |
122 * dsi_win = (JAWT_Win32DrawingSurfaceInfo*)dsi->platformInfo; | |
123 * | |
124 * ////////////////////////////// | |
125 * // !!! DO PAINTING HERE !!! // | |
126 * ////////////////////////////// | |
127 * | |
128 * // Free the drawing surface info | |
129 * ds->FreeDrawingSurfaceInfo(dsi); | |
130 * | |
131 * // Unlock the drawing surface | |
132 * ds->Unlock(ds); | |
133 * | |
134 * // Free the drawing surface | |
135 * awt.FreeDrawingSurface(ds); | |
136 * } | |
137 * | |
138 */ | |
139 | |
140 /* | |
141 * JAWT_Rectangle | |
142 * Structure for a native rectangle. | |
143 */ | |
144 typedef struct jawt_Rectangle { | |
145 jint x; | |
146 jint y; | |
147 jint width; | |
148 jint height; | |
149 } JAWT_Rectangle; | |
150 | |
151 struct jawt_DrawingSurface; | |
152 | |
153 /* | |
154 * JAWT_DrawingSurfaceInfo | |
155 * Structure for containing the underlying drawing information of a component. | |
156 */ | |
157 typedef struct jawt_DrawingSurfaceInfo { | |
158 /* | |
159 * Pointer to the platform-specific information. This can be safely | |
160 * cast to a JAWT_Win32DrawingSurfaceInfo on Windows or a | |
161 * JAWT_X11DrawingSurfaceInfo on Linux and Solaris. On Mac OS X this is a | |
162 * pointer to a NSObject that conforms to the JAWT_SurfaceLayers | |
163 * protocol. See jawt_md.h for details. | |
164 */ | |
165 void* platformInfo; | |
166 /* Cached pointer to the underlying drawing surface */ | |
167 struct jawt_DrawingSurface* ds; | |
168 /* Bounding rectangle of the drawing surface */ | |
169 JAWT_Rectangle bounds; | |
170 /* Number of rectangles in the clip */ | |
171 jint clipSize; | |
172 /* Clip rectangle array */ | |
173 JAWT_Rectangle* clip; | |
174 } JAWT_DrawingSurfaceInfo; | |
175 | |
176 #define JAWT_LOCK_ERROR 0x00000001 | |
177 #define JAWT_LOCK_CLIP_CHANGED 0x00000002 | |
178 #define JAWT_LOCK_BOUNDS_CHANGED 0x00000004 | |
179 #define JAWT_LOCK_SURFACE_CHANGED 0x00000008 | |
180 | |
181 /* | |
182 * JAWT_DrawingSurface | |
183 * Structure for containing the underlying drawing information of a component. | |
184 * All operations on a JAWT_DrawingSurface MUST be performed from the same | |
185 * thread as the call to GetDrawingSurface. | |
186 */ | |
187 typedef struct jawt_DrawingSurface { | |
188 /* | |
189 * Cached reference to the Java environment of the calling thread. | |
190 * If Lock(), Unlock(), GetDrawingSurfaceInfo() or | |
191 * FreeDrawingSurfaceInfo() are called from a different thread, | |
192 * this data member should be set before calling those functions. | |
193 */ | |
194 JNIEnv* env; | |
195 /* Cached reference to the target object */ | |
196 jobject target; | |
197 /* | |
198 * Lock the surface of the target component for native rendering. | |
199 * When finished drawing, the surface must be unlocked with | |
200 * Unlock(). This function returns a bitmask with one or more of the | |
201 * following values: | |
202 * | |
203 * JAWT_LOCK_ERROR - When an error has occurred and the surface could not | |
204 * be locked. | |
205 * | |
206 * JAWT_LOCK_CLIP_CHANGED - When the clip region has changed. | |
207 * | |
208 * JAWT_LOCK_BOUNDS_CHANGED - When the bounds of the surface have changed. | |
209 * | |
210 * JAWT_LOCK_SURFACE_CHANGED - When the surface itself has changed | |
211 */ | |
212 jint (JNICALL *Lock) | |
213 (struct jawt_DrawingSurface* ds); | |
214 /* | |
215 * Get the drawing surface info. | |
216 * The value returned may be cached, but the values may change if | |
217 * additional calls to Lock() or Unlock() are made. | |
218 * Lock() must be called before this can return a valid value. | |
219 * Returns NULL if an error has occurred. | |
220 * When finished with the returned value, FreeDrawingSurfaceInfo must be | |
221 * called. | |
222 */ | |
223 JAWT_DrawingSurfaceInfo* (JNICALL *GetDrawingSurfaceInfo) | |
224 (struct jawt_DrawingSurface* ds); | |
225 /* | |
226 * Free the drawing surface info. | |
227 */ | |
228 void (JNICALL *FreeDrawingSurfaceInfo) | |
229 (JAWT_DrawingSurfaceInfo* dsi); | |
230 /* | |
231 * Unlock the drawing surface of the target component for native rendering. | |
232 */ | |
233 void (JNICALL *Unlock) | |
234 (struct jawt_DrawingSurface* ds); | |
235 } JAWT_DrawingSurface; | |
236 | |
237 /* | |
238 * JAWT | |
239 * Structure for containing native AWT functions. | |
240 */ | |
241 typedef struct jawt { | |
242 /* | |
243 * Version of this structure. This must always be set before | |
244 * calling JAWT_GetAWT(). It affects the functions returned. | |
245 * Must be one of the known pre-defined versions. | |
246 */ | |
247 jint version; | |
248 /* | |
249 * Return a drawing surface from a target jobject. This value | |
250 * may be cached. | |
251 * Returns NULL if an error has occurred. | |
252 * Target must be a java.awt.Component (should be a Canvas | |
253 * or Window for native rendering). | |
254 * FreeDrawingSurface() must be called when finished with the | |
255 * returned JAWT_DrawingSurface. | |
256 */ | |
257 JAWT_DrawingSurface* (JNICALL *GetDrawingSurface) | |
258 (JNIEnv* env, jobject target); | |
259 /* | |
260 * Free the drawing surface allocated in GetDrawingSurface. | |
261 */ | |
262 void (JNICALL *FreeDrawingSurface) | |
263 (JAWT_DrawingSurface* ds); | |
264 /* | |
265 * Since 1.4 | |
266 * Locks the entire AWT for synchronization purposes | |
267 */ | |
268 void (JNICALL *Lock)(JNIEnv* env); | |
269 /* | |
270 * Since 1.4 | |
271 * Unlocks the entire AWT for synchronization purposes | |
272 */ | |
273 void (JNICALL *Unlock)(JNIEnv* env); | |
274 /* | |
275 * Since 1.4 | |
276 * Returns a reference to a java.awt.Component from a native | |
277 * platform handle. On Windows, this corresponds to an HWND; | |
278 * on Solaris and Linux, this is a Drawable. For other platforms, | |
279 * see the appropriate machine-dependent header file for a description. | |
280 * The reference returned by this function is a local | |
281 * reference that is only valid in this environment. | |
282 * This function returns a NULL reference if no component could be | |
283 * found with matching platform information. | |
284 */ | |
285 jobject (JNICALL *GetComponent)(JNIEnv* env, void* platformInfo); | |
286 | |
287 /** | |
288 * Since 9 | |
289 * Creates a java.awt.Frame placed in a native container. Container is | |
290 * referenced by the native platform handle. For example on Windows this | |
291 * corresponds to an HWND. For other platforms, see the appropriate | |
292 * machine-dependent header file for a description. The reference returned | |
293 * by this function is a local reference that is only valid in this | |
294 * environment. This function returns a NULL reference if no frame could be | |
295 * created with matching platform information. | |
296 */ | |
297 jobject (JNICALL *CreateEmbeddedFrame) (JNIEnv *env, void* platformInfo); | |
298 | |
299 /** | |
300 * Since 9 | |
301 * Moves and resizes the embedded frame. The new location of the top-left | |
302 * corner is specified by x and y parameters relative to the native parent | |
303 * component. The new size is specified by width and height. | |
304 * | |
305 * The embedded frame should be created by CreateEmbeddedFrame() method, or | |
306 * this function will not have any effect. | |
307 * | |
308 * java.awt.Component.setLocation() and java.awt.Component.setBounds() for | |
309 * EmbeddedFrame really don't move it within the native parent. These | |
310 * methods always locate the embedded frame at (0, 0) for backward | |
311 * compatibility. To allow moving embedded frames this method was | |
312 * introduced, and it works just the same way as setLocation() and | |
313 * setBounds() for usual, non-embedded components. | |
314 * | |
315 * Using usual get/setLocation() and get/setBounds() together with this new | |
316 * method is not recommended. | |
317 */ | |
318 void (JNICALL *SetBounds) (JNIEnv *env, jobject embeddedFrame, | |
319 jint x, jint y, jint w, jint h); | |
320 /** | |
321 * Since 9 | |
322 * Synthesize a native message to activate or deactivate an EmbeddedFrame | |
323 * window depending on the value of parameter doActivate, if "true" | |
324 * activates the window; otherwise, deactivates the window. | |
325 * | |
326 * The embedded frame should be created by CreateEmbeddedFrame() method, or | |
327 * this function will not have any effect. | |
328 */ | |
329 void (JNICALL *SynthesizeWindowActivation) (JNIEnv *env, | |
330 jobject embeddedFrame, jboolean doActivate); | |
331 } JAWT; | |
332 | |
333 /* | |
334 * Get the AWT native structure. This function returns JNI_FALSE if | |
335 * an error occurs. | |
336 */ | |
337 _JNI_IMPORT_OR_EXPORT_ | |
338 jboolean JNICALL JAWT_GetAWT(JNIEnv* env, JAWT* awt); | |
339 | |
340 /* | |
341 * Specify one of these constants as the JAWT.version | |
342 * Specifying an earlier version will limit the available functions to | |
343 * those provided in that earlier version of JAWT. | |
344 * See the "Since" note on each API. Methods with no "Since" | |
345 * may be presumed to be present in JAWT_VERSION_1_3. | |
346 */ | |
347 #define JAWT_VERSION_1_3 0x00010003 | |
348 #define JAWT_VERSION_1_4 0x00010004 | |
349 #define JAWT_VERSION_1_7 0x00010007 | |
350 #define JAWT_VERSION_9 0x00090000 | |
351 | |
352 #ifdef __cplusplus | |
353 } /* extern "C" */ | |
354 #endif | |
355 | |
356 #endif /* !_JAVASOFT_JAWT_H_ */ |