< prev index next >

src/java.desktop/macosx/native/libawt_lwawt/awt/CImage.m

Print this page




  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]);


< prev index next >