Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/java.desktop/share/native/include/jawt.h
41152 views
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_ */
357
358