95 if (src == NULL) return 0L;
96
97 CImage_CopyArrayIntoNSImageRep(src, imgData, width, height);
98
99 (*env)->ReleasePrimitiveArrayCritical(env, buffer, src, JNI_ABORT);
100
101 return imageRep;
102 }
103
104 /*
105 * Class: sun_lwawt_macosx_CImage
106 * Method: nativeCreateNSImageFromArray
107 * Signature: ([III)J
108 */
109 JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CImage_nativeCreateNSImageFromArray
110 (JNIEnv *env, jclass klass, jintArray buffer, jint width, jint height)
111 {
112 jlong result = 0L;
113
114 JNF_COCOA_ENTER(env);
115
116 NSBitmapImageRep* imageRep = CImage_CreateImageRep(env, buffer, width, height);
117 if (imageRep) {
118 NSImage *nsImage = [[NSImage alloc] initWithSize:NSMakeSize(width, height)];
119 [nsImage addRepresentation:imageRep];
120 result = ptr_to_jlong(nsImage);
121 }
122
123 JNF_COCOA_EXIT(env);
124
125 return result;
126 }
127
128 /*
129 * Class: sun_lwawt_macosx_CImage
130 * Method: nativeCreateNSImageFromArrays
131 * Signature: ([[I[I[I)J
132 */
133 JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CImage_nativeCreateNSImageFromArrays
134 (JNIEnv *env, jclass klass, jobjectArray buffers, jintArray widths, jintArray heights)
135 {
308 NSImage *i = (NSImage *)jlong_to_ptr(image);
309
310 JNF_COCOA_ENTER(env);
311
312 [i setScalesWhenResized:TRUE];
313 [i setSize:NSMakeSize(w, h)];
314
315 JNF_COCOA_EXIT(env);
316 }
317
318 /*
319 * Class: sun_lwawt_macosx_CImage
320 * Method: nativeResizeNSImageRepresentations
321 * Signature: (JDD)V
322 */
323 JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CImage_nativeResizeNSImageRepresentations
324 (JNIEnv *env, jclass clazz, jlong image, jdouble w, jdouble h)
325 {
326 if (!image) return;
327 NSImage *i = (NSImage *)jlong_to_ptr(image);
328
329 JNF_COCOA_ENTER(env);
330
331 NSImageRep *imageRep = nil;
332 NSArray *imageRepresentations = [i representations];
333 NSEnumerator *imageEnumerator = [imageRepresentations objectEnumerator];
334 while ((imageRep = [imageEnumerator nextObject]) != nil) {
335 [imageRep setSize:NSMakeSize(w, h)];
336 }
337
338 JNF_COCOA_EXIT(env);
339 }
340
341 NSComparisonResult getOrder(BOOL order){
342 return (NSComparisonResult) (order ? NSOrderedAscending : NSOrderedDescending);
343 }
344
345 /*
346 * Class: sun_lwawt_macosx_CImage
347 * Method: nativeGetNSImageRepresentationsCount
348 * Signature: (JDD)[Ljava/awt/geom/Dimension2D;
349 */
350 JNIEXPORT jobjectArray JNICALL
351 Java_sun_lwawt_macosx_CImage_nativeGetNSImageRepresentationSizes
352 (JNIEnv *env, jclass clazz, jlong image, jdouble w, jdouble h)
353 {
354 if (!image) return NULL;
355 jobjectArray jreturnArray = NULL;
356 NSImage *img = (NSImage *)jlong_to_ptr(image);
357
358 JNF_COCOA_ENTER(env);
359
360 NSArray *imageRepresentations = [img representations];
361 if([imageRepresentations count] == 0){
362 return NULL;
363 }
364
365 NSArray *sortedImageRepresentations = [imageRepresentations
366 sortedArrayUsingComparator: ^(id obj1, id obj2) {
367
368 NSImageRep *imageRep1 = (NSImageRep *) obj1;
369 NSImageRep *imageRep2 = (NSImageRep *) obj2;
370 NSSize size1 = [imageRep1 size];
371 NSSize size2 = [imageRep2 size];
372
373 if (NSEqualSizes(size1, size2)) {
374 return getOrder([imageRep1 pixelsWide] <= [imageRep2 pixelsWide] &&
375 [imageRep1 pixelsHigh] <= [imageRep2 pixelsHigh]);
376 }
377
378 return getOrder(size1.width <= size2.width && size1.height <= size2.height);
379 }];
380
381 NSMutableArray *sortedPixelSizes = [[[NSMutableArray alloc] init] autorelease];
382 NSSize lastSize = [[sortedImageRepresentations lastObject] size];
383
384 NSUInteger i = [sortedImageRepresentations indexOfObjectPassingTest:
385 ^BOOL(id obj, NSUInteger idx, BOOL *stop) {
386 NSSize imageRepSize = [obj size];
387 return (w <= imageRepSize.width && h <= imageRepSize.height)
388 || NSEqualSizes(imageRepSize, lastSize);
389 }];
390
391 NSUInteger count = [sortedImageRepresentations count];
392 i = (i == NSNotFound) ? count - 1 : i;
393 NSSize bestFitSize = [[sortedImageRepresentations objectAtIndex: i] size];
394
395 for(; i < count; i++){
396 NSImageRep *imageRep = [sortedImageRepresentations objectAtIndex: i];
397
398 if (!NSEqualSizes([imageRep size], bestFitSize)) {
399 break;
400 }
401
402 NSSize pixelSize = NSMakeSize(
403 [imageRep pixelsWide], [imageRep pixelsHigh]);
|
95 if (src == NULL) return 0L;
96
97 CImage_CopyArrayIntoNSImageRep(src, imgData, width, height);
98
99 (*env)->ReleasePrimitiveArrayCritical(env, buffer, src, JNI_ABORT);
100
101 return imageRep;
102 }
103
104 /*
105 * Class: sun_lwawt_macosx_CImage
106 * Method: nativeCreateNSImageFromArray
107 * Signature: ([III)J
108 */
109 JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CImage_nativeCreateNSImageFromArray
110 (JNIEnv *env, jclass klass, jintArray buffer, jint width, jint height)
111 {
112 jlong result = 0L;
113
114 JNF_COCOA_ENTER(env);
115
116 NSBitmapImageRep* imageRep = CImage_CreateImageRep(env, buffer, width, height);
117 if (imageRep) {
118 NSImage *nsImage = [[NSImage alloc] initWithSize:NSMakeSize(width, height)];
119 [nsImage addRepresentation:imageRep];
120 result = ptr_to_jlong(nsImage);
121 }
122
123 JNF_COCOA_EXIT(env);
124
125 return result;
126 }
127
128 /*
129 * Class: sun_lwawt_macosx_CImage
130 * Method: nativeCreateNSImageFromArrays
131 * Signature: ([[I[I[I)J
132 */
133 JNIEXPORT jlong JNICALL Java_sun_lwawt_macosx_CImage_nativeCreateNSImageFromArrays
134 (JNIEnv *env, jclass klass, jobjectArray buffers, jintArray widths, jintArray heights)
135 {
308 NSImage *i = (NSImage *)jlong_to_ptr(image);
309
310 JNF_COCOA_ENTER(env);
311
312 [i setScalesWhenResized:TRUE];
313 [i setSize:NSMakeSize(w, h)];
314
315 JNF_COCOA_EXIT(env);
316 }
317
318 /*
319 * Class: sun_lwawt_macosx_CImage
320 * Method: nativeResizeNSImageRepresentations
321 * Signature: (JDD)V
322 */
323 JNIEXPORT void JNICALL Java_sun_lwawt_macosx_CImage_nativeResizeNSImageRepresentations
324 (JNIEnv *env, jclass clazz, jlong image, jdouble w, jdouble h)
325 {
326 if (!image) return;
327 NSImage *i = (NSImage *)jlong_to_ptr(image);
328
329 JNF_COCOA_ENTER(env);
330
331 NSImageRep *imageRep = nil;
332 NSArray *imageRepresentations = [i representations];
333 NSEnumerator *imageEnumerator = [imageRepresentations objectEnumerator];
334 while ((imageRep = [imageEnumerator nextObject]) != nil) {
335 [imageRep setSize:NSMakeSize(w, h)];
336 }
337
338 JNF_COCOA_EXIT(env);
339 }
340
341 NSComparisonResult getOrder(BOOL order){
342 return (NSComparisonResult) (order ? NSOrderedAscending : NSOrderedDescending);
343 }
344
345 /*
346 * Class: sun_lwawt_macosx_CImage
347 * Method: nativeGetNSImageRepresentationsCount
348 * Signature: (JDD)[Ljava/awt/geom/Dimension2D;
349 */
350 JNIEXPORT jobjectArray JNICALL
351 Java_sun_lwawt_macosx_CImage_nativeGetNSImageRepresentationSizes
352 (JNIEnv *env, jclass clazz, jlong image, jdouble w, jdouble h)
353 {
354 if (!image) return NULL;
355 jobjectArray jreturnArray = NULL;
356 NSImage *img = (NSImage *)jlong_to_ptr(image);
357
358 JNF_COCOA_ENTER(env);
359
360 NSArray *imageRepresentations = [img representations];
361 if([imageRepresentations count] == 0){
362 return NULL;
363 }
364
365 NSArray *sortedImageRepresentations = [imageRepresentations
366 sortedArrayUsingComparator: ^(id obj1, id obj2) {
367
368 NSImageRep *imageRep1 = (NSImageRep *) obj1;
369 NSImageRep *imageRep2 = (NSImageRep *) obj2;
370 NSSize size1 = [imageRep1 size];
371 NSSize size2 = [imageRep2 size];
372
373 if (NSEqualSizes(size1, size2)) {
374 return getOrder([imageRep1 pixelsWide] <= [imageRep2 pixelsWide] &&
375 [imageRep1 pixelsHigh] <= [imageRep2 pixelsHigh]);
376 }
377
378 return getOrder(size1.width <= size2.width && size1.height <= size2.height);
379 }];
380
381 NSMutableArray *sortedPixelSizes = [[[NSMutableArray alloc] init] autorelease];
382 NSSize lastSize = [[sortedImageRepresentations lastObject] size];
383
384 NSUInteger i = [sortedImageRepresentations indexOfObjectPassingTest:
385 ^BOOL(id obj, NSUInteger idx, BOOL *stop) {
386 NSSize imageRepSize = [obj size];
387 return (w <= imageRepSize.width && h <= imageRepSize.height)
388 || NSEqualSizes(imageRepSize, lastSize);
389 }];
390
391 NSUInteger count = [sortedImageRepresentations count];
392 i = (i == NSNotFound) ? count - 1 : i;
393 NSSize bestFitSize = [[sortedImageRepresentations objectAtIndex: i] size];
394
395 for(; i < count; i++){
396 NSImageRep *imageRep = [sortedImageRepresentations objectAtIndex: i];
397
398 if (!NSEqualSizes([imageRep size], bestFitSize)) {
399 break;
400 }
401
402 NSSize pixelSize = NSMakeSize(
403 [imageRep pixelsWide], [imageRep pixelsHigh]);
|