src/macosx/native/sun/awt/CImage.m

Print this page




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