91 if (src == NULL) return 0L;
92
93 CImage_CopyArrayIntoNSImageRep(src, imgData, width, height);
94
95 (*env)->ReleasePrimitiveArrayCritical(env, buffer, src, JNI_ABORT);
96
97 return imageRep;
98 }
99
100 /*
101 * Class: sun_lwawt_macosx_CImage
102 * Method: nativeCreateNSImageFromArray
103 * Signature: ([III)J
104 */
105 JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CImage_nativeCreateNSImageFromArray
106 (JNIEnv *env, jclass klass, jintArray buffer, jint width, jint height)
107 {
108 jlong result = 0L;
109
110 JNF_COCOA_ENTER(env);
111 AWT_ASSERT_ANY_THREAD;
112
113 NSBitmapImageRep* imageRep = CImage_CreateImageRep(env, buffer, width, height);
114 if (imageRep) {
115 NSImage *nsImage = [[NSImage alloc] initWithSize:NSMakeSize(width, height)];
116 [nsImage addRepresentation:imageRep];
117 [imageRep release];
118
119 if (nsImage != nil) {
120 CFRetain(nsImage); // GC
121 }
122
123 result = ptr_to_jlong(nsImage);
124 }
125
126 JNF_COCOA_EXIT(env);
127
128 return result;
129 }
130
131 /*
132 * Class: sun_lwawt_macosx_CImage
133 * Method: nativeCreateNSImageFromArrays
134 * Signature: ([[I[I[I)J
135 */
136 JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CImage_nativeCreateNSImageFromArrays
137 (JNIEnv *env, jclass klass, jobjectArray buffers, jintArray widths, jintArray heights)
138 {
139 jlong result = 0L;
140
141 JNF_COCOA_ENTER(env);
142 AWT_ASSERT_ANY_THREAD;
143
144 jsize num = (*env)->GetArrayLength(env, buffers);
145 NSMutableArray * reps = [NSMutableArray arrayWithCapacity: num];
146
147 jint * ws = (*env)->GetIntArrayElements(env, widths, NULL);
148 jint * hs = (*env)->GetIntArrayElements(env, heights, NULL);
149
150 jsize i;
151 for (i = 0; i < num; i++) {
152 jintArray buffer = (*env)->GetObjectArrayElement(env, buffers, i);
153
154 NSBitmapImageRep* imageRep = CImage_CreateImageRep(env, buffer, ws[i], hs[i]);
155 if (imageRep) {
156 [reps addObject: imageRep];
157 }
158 }
159
160 (*env)->ReleaseIntArrayElements(env, heights, hs, JNI_ABORT);
161 (*env)->ReleaseIntArrayElements(env, widths, ws, JNI_ABORT);
162
170
171 result = ptr_to_jlong(nsImage);
172 }
173
174 JNF_COCOA_EXIT(env);
175
176 return result;
177 }
178
179 /*
180 * Class: sun_lwawt_macosx_CImage
181 * Method: nativeCreateNSImageFromIconSelector
182 * Signature: (I)J
183 */
184 JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CImage_nativeCreateNSImageFromIconSelector
185 (JNIEnv *env, jclass klass, jint selector)
186 {
187 NSImage *image = nil;
188
189 JNF_COCOA_ENTER(env);
190 AWT_ASSERT_ANY_THREAD;
191
192 IconRef iconRef;
193 if (noErr == GetIconRef(kOnSystemDisk, kSystemIconsCreator, selector, &iconRef)) {
194 image = [[NSImage alloc] initWithIconRef:iconRef];
195 if (image) CFRetain(image); // GC
196 ReleaseIconRef(iconRef);
197 }
198
199 JNF_COCOA_EXIT(env);
200
201 return ptr_to_jlong(image);
202 }
203
204 /*
205 * Class: sun_lwawt_macosx_CImage
206 * Method: nativeCreateNSImageFromFileContents
207 * Signature: (Ljava/lang/String;)J
208 */
209 JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CImage_nativeCreateNSImageFromFileContents
210 (JNIEnv *env, jclass klass, jstring file)
211 {
212 NSImage *image = nil;
213
214 JNF_COCOA_ENTER(env);
215 AWT_ASSERT_ANY_THREAD;
216
217 NSString *path = JNFNormalizedNSStringForPath(env, file);
218 image = [[NSImage alloc] initByReferencingFile:path];
219 if (image) CFRetain(image); // GC
220
221 JNF_COCOA_EXIT(env);
222
223 return ptr_to_jlong(image);
224 }
225
226 /*
227 * Class: sun_lwawt_macosx_CImage
228 * Method: nativeCreateNSImageOfFileFromLaunchServices
229 * Signature: (Ljava/lang/String;)J
230 */
231 JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CImage_nativeCreateNSImageOfFileFromLaunchServices
232 (JNIEnv *env, jclass klass, jstring file)
233 {
234 __block NSImage *image = nil;
235
236 JNF_COCOA_ENTER(env);
237 AWT_ASSERT_ANY_THREAD;
238
239 NSString *path = JNFNormalizedNSStringForPath(env, file);
240 [JNFRunLoop performOnMainThreadWaiting:YES withBlock:^(){
241 image = [[NSWorkspace sharedWorkspace] iconForFile:path];
242 [image setScalesWhenResized:TRUE];
243 if (image) CFRetain(image); // GC
244 }];
245
246 JNF_COCOA_EXIT(env);
247
248 return ptr_to_jlong(image);
249 }
250
251 /*
252 * Class: sun_lwawt_macosx_CImage
253 * Method: nativeCreateNSImageFromImageName
254 * Signature: (Ljava/lang/String;)J
255 */
256 JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CImage_nativeCreateNSImageFromImageName
257 (JNIEnv *env, jclass klass, jstring name)
258 {
259 NSImage *image = nil;
260
261 JNF_COCOA_ENTER(env);
262 AWT_ASSERT_ANY_THREAD;
263
264 image = [NSImage imageNamed:JNFJavaToNSString(env, name)];
265 if (image) CFRetain(image); // GC
266
267 JNF_COCOA_EXIT(env);
268
269 return ptr_to_jlong(image);
270 }
271
272 /*
273 * Class: sun_lwawt_macosx_CImage
274 * Method: nativeCopyNSImageIntoArray
275 * Signature: (J[III)V
276 */
277 JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CImage_nativeCopyNSImageIntoArray
278 (JNIEnv *env, jclass klass, jlong nsImgPtr, jintArray buffer, jint w, jint h)
279 {
280 JNF_COCOA_ENTER(env);
281 AWT_ASSERT_ANY_THREAD;
282
283 NSImage *img = (NSImage *)jlong_to_ptr(nsImgPtr);
284 jint *dst = (*env)->GetPrimitiveArrayCritical(env, buffer, NULL);
285 if (dst) {
286 CImage_CopyNSImageIntoArray(img, dst, w, h);
287 (*env)->ReleasePrimitiveArrayCritical(env, buffer, dst, JNI_ABORT);
288 }
289
290 JNF_COCOA_EXIT(env);
291 }
292
293 /*
294 * Class: sun_lwawt_macosx_CImage
295 * Method: nativeGetNSImageSize
296 * Signature: (J)Ljava/awt/geom/Dimension2D;
297 */
298 JNIEXPORT jobject JNICALL Java_sun_lwawt_macosx_CImage_nativeGetNSImageSize
299 (JNIEnv *env, jclass klass, jlong nsImgPtr)
300 {
301 jobject size = NULL;
302
303 JNF_COCOA_ENTER(env);
304 AWT_ASSERT_ANY_THREAD;
305
306 size = NSToJavaSize(env, [(NSImage *)jlong_to_ptr(nsImgPtr) size]);
307
308 JNF_COCOA_EXIT(env);
309
310 return size;
311 }
312
313 /*
314 * Class: sun_lwawt_macosx_CImage
315 * Method: nativeSetNSImageSize
316 * Signature: (JDD)V
317 */
318 JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CImage_nativeSetNSImageSize
319 (JNIEnv *env, jclass clazz, jlong image, jdouble w, jdouble h)
320 {
321 if (!image) return;
322 NSImage *i = (NSImage *)jlong_to_ptr(image);
323
324 JNF_COCOA_ENTER(env);
|
91 if (src == NULL) return 0L;
92
93 CImage_CopyArrayIntoNSImageRep(src, imgData, width, height);
94
95 (*env)->ReleasePrimitiveArrayCritical(env, buffer, src, JNI_ABORT);
96
97 return imageRep;
98 }
99
100 /*
101 * Class: sun_lwawt_macosx_CImage
102 * Method: nativeCreateNSImageFromArray
103 * Signature: ([III)J
104 */
105 JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CImage_nativeCreateNSImageFromArray
106 (JNIEnv *env, jclass klass, jintArray buffer, jint width, jint height)
107 {
108 jlong result = 0L;
109
110 JNF_COCOA_ENTER(env);
111
112 NSBitmapImageRep* imageRep = CImage_CreateImageRep(env, buffer, width, height);
113 if (imageRep) {
114 NSImage *nsImage = [[NSImage alloc] initWithSize:NSMakeSize(width, height)];
115 [nsImage addRepresentation:imageRep];
116 [imageRep release];
117
118 if (nsImage != nil) {
119 CFRetain(nsImage); // GC
120 }
121
122 result = ptr_to_jlong(nsImage);
123 }
124
125 JNF_COCOA_EXIT(env);
126
127 return result;
128 }
129
130 /*
131 * Class: sun_lwawt_macosx_CImage
132 * Method: nativeCreateNSImageFromArrays
133 * Signature: ([[I[I[I)J
134 */
135 JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CImage_nativeCreateNSImageFromArrays
136 (JNIEnv *env, jclass klass, jobjectArray buffers, jintArray widths, jintArray heights)
137 {
138 jlong result = 0L;
139
140 JNF_COCOA_ENTER(env);
141
142 jsize num = (*env)->GetArrayLength(env, buffers);
143 NSMutableArray * reps = [NSMutableArray arrayWithCapacity: num];
144
145 jint * ws = (*env)->GetIntArrayElements(env, widths, NULL);
146 jint * hs = (*env)->GetIntArrayElements(env, heights, NULL);
147
148 jsize i;
149 for (i = 0; i < num; i++) {
150 jintArray buffer = (*env)->GetObjectArrayElement(env, buffers, i);
151
152 NSBitmapImageRep* imageRep = CImage_CreateImageRep(env, buffer, ws[i], hs[i]);
153 if (imageRep) {
154 [reps addObject: imageRep];
155 }
156 }
157
158 (*env)->ReleaseIntArrayElements(env, heights, hs, JNI_ABORT);
159 (*env)->ReleaseIntArrayElements(env, widths, ws, JNI_ABORT);
160
168
169 result = ptr_to_jlong(nsImage);
170 }
171
172 JNF_COCOA_EXIT(env);
173
174 return result;
175 }
176
177 /*
178 * Class: sun_lwawt_macosx_CImage
179 * Method: nativeCreateNSImageFromIconSelector
180 * Signature: (I)J
181 */
182 JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CImage_nativeCreateNSImageFromIconSelector
183 (JNIEnv *env, jclass klass, jint selector)
184 {
185 NSImage *image = nil;
186
187 JNF_COCOA_ENTER(env);
188
189 IconRef iconRef;
190 if (noErr == GetIconRef(kOnSystemDisk, kSystemIconsCreator, selector, &iconRef)) {
191 image = [[NSImage alloc] initWithIconRef:iconRef];
192 if (image) CFRetain(image); // GC
193 ReleaseIconRef(iconRef);
194 }
195
196 JNF_COCOA_EXIT(env);
197
198 return ptr_to_jlong(image);
199 }
200
201 /*
202 * Class: sun_lwawt_macosx_CImage
203 * Method: nativeCreateNSImageFromFileContents
204 * Signature: (Ljava/lang/String;)J
205 */
206 JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CImage_nativeCreateNSImageFromFileContents
207 (JNIEnv *env, jclass klass, jstring file)
208 {
209 NSImage *image = nil;
210
211 JNF_COCOA_ENTER(env);
212
213 NSString *path = JNFNormalizedNSStringForPath(env, file);
214 image = [[NSImage alloc] initByReferencingFile:path];
215 if (image) CFRetain(image); // GC
216
217 JNF_COCOA_EXIT(env);
218
219 return ptr_to_jlong(image);
220 }
221
222 /*
223 * Class: sun_lwawt_macosx_CImage
224 * Method: nativeCreateNSImageOfFileFromLaunchServices
225 * Signature: (Ljava/lang/String;)J
226 */
227 JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CImage_nativeCreateNSImageOfFileFromLaunchServices
228 (JNIEnv *env, jclass klass, jstring file)
229 {
230 __block NSImage *image = nil;
231
232 JNF_COCOA_ENTER(env);
233
234 NSString *path = JNFNormalizedNSStringForPath(env, file);
235 [ThreadUtilities performOnMainThreadWaiting:YES block:^(){
236 image = [[NSWorkspace sharedWorkspace] iconForFile:path];
237 [image setScalesWhenResized:TRUE];
238 if (image) CFRetain(image); // GC
239 }];
240
241 JNF_COCOA_EXIT(env);
242
243 return ptr_to_jlong(image);
244 }
245
246 /*
247 * Class: sun_lwawt_macosx_CImage
248 * Method: nativeCreateNSImageFromImageName
249 * Signature: (Ljava/lang/String;)J
250 */
251 JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CImage_nativeCreateNSImageFromImageName
252 (JNIEnv *env, jclass klass, jstring name)
253 {
254 NSImage *image = nil;
255
256 JNF_COCOA_ENTER(env);
257
258 image = [NSImage imageNamed:JNFJavaToNSString(env, name)];
259 if (image) CFRetain(image); // GC
260
261 JNF_COCOA_EXIT(env);
262
263 return ptr_to_jlong(image);
264 }
265
266 /*
267 * Class: sun_lwawt_macosx_CImage
268 * Method: nativeCopyNSImageIntoArray
269 * Signature: (J[III)V
270 */
271 JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CImage_nativeCopyNSImageIntoArray
272 (JNIEnv *env, jclass klass, jlong nsImgPtr, jintArray buffer, jint w, jint h)
273 {
274 JNF_COCOA_ENTER(env);
275
276 NSImage *img = (NSImage *)jlong_to_ptr(nsImgPtr);
277 jint *dst = (*env)->GetPrimitiveArrayCritical(env, buffer, NULL);
278 if (dst) {
279 CImage_CopyNSImageIntoArray(img, dst, w, h);
280 (*env)->ReleasePrimitiveArrayCritical(env, buffer, dst, JNI_ABORT);
281 }
282
283 JNF_COCOA_EXIT(env);
284 }
285
286 /*
287 * Class: sun_lwawt_macosx_CImage
288 * Method: nativeGetNSImageSize
289 * Signature: (J)Ljava/awt/geom/Dimension2D;
290 */
291 JNIEXPORT jobject JNICALL Java_sun_lwawt_macosx_CImage_nativeGetNSImageSize
292 (JNIEnv *env, jclass klass, jlong nsImgPtr)
293 {
294 jobject size = NULL;
295
296 JNF_COCOA_ENTER(env);
297
298 size = NSToJavaSize(env, [(NSImage *)jlong_to_ptr(nsImgPtr) size]);
299
300 JNF_COCOA_EXIT(env);
301
302 return size;
303 }
304
305 /*
306 * Class: sun_lwawt_macosx_CImage
307 * Method: nativeSetNSImageSize
308 * Signature: (JDD)V
309 */
310 JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CImage_nativeSetNSImageSize
311 (JNIEnv *env, jclass clazz, jlong image, jdouble w, jdouble h)
312 {
313 if (!image) return;
314 NSImage *i = (NSImage *)jlong_to_ptr(image);
315
316 JNF_COCOA_ENTER(env);
|