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

Print this page




  37 // in CDataTransferer.java.
  38 NSMutableDictionary *sStandardMappings = nil;
  39 
  40 NSMutableDictionary *getMappingTable() {
  41     if (sStandardMappings == nil) {
  42         sStandardMappings = [[NSMutableDictionary alloc] init];
  43         [sStandardMappings setObject:NSStringPboardType
  44                               forKey:[NSNumber numberWithLong:sun_lwawt_macosx_CDataTransferer_CF_STRING]];
  45         [sStandardMappings setObject:NSFilenamesPboardType
  46                               forKey:[NSNumber numberWithLong:sun_lwawt_macosx_CDataTransferer_CF_FILE]];
  47         [sStandardMappings setObject:NSTIFFPboardType
  48                               forKey:[NSNumber numberWithLong:sun_lwawt_macosx_CDataTransferer_CF_TIFF]];
  49         [sStandardMappings setObject:NSRTFPboardType
  50                               forKey:[NSNumber numberWithLong:sun_lwawt_macosx_CDataTransferer_CF_RICH_TEXT]];
  51         [sStandardMappings setObject:NSHTMLPboardType
  52                               forKey:[NSNumber numberWithLong:sun_lwawt_macosx_CDataTransferer_CF_HTML]];
  53         [sStandardMappings setObject:NSPDFPboardType
  54                               forKey:[NSNumber numberWithLong:sun_lwawt_macosx_CDataTransferer_CF_PDF]];
  55         [sStandardMappings setObject:NSURLPboardType
  56                               forKey:[NSNumber numberWithLong:sun_lwawt_macosx_CDataTransferer_CF_URL]];




  57     }
  58     return sStandardMappings;
  59 }
  60 
  61 /*
  62  * Convert from a standard NSPasteboard data type to an index in our mapping table.
  63  */
  64 jlong indexForFormat(NSString *format) {
  65     jlong returnValue = -1;
  66 
  67     NSMutableDictionary *mappingTable = getMappingTable();
  68     NSArray *matchingKeys = [mappingTable allKeysForObject:format];
  69 
  70     // There should only be one matching key here...
  71     if ([matchingKeys count] > 0) {
  72         NSNumber *formatID = (NSNumber *)[matchingKeys objectAtIndex:0];
  73         returnValue = [formatID longValue];
  74     }
  75 
  76     // If we don't recognize the format, but it's a Java "custom" format register it


 131  * Method:    imageDataToPlatformImageBytes
 132  * Signature: ([III)[B
 133      */
 134 JNIEXPORT jbyteArray JNICALL Java_sun_lwawt_macosx_CDataTransferer_imageDataToPlatformImageBytes
 135 (JNIEnv *env, jobject obj, jintArray inPixelData, jint inWidth, jint inHeight)
 136 {
 137     jbyteArray returnValue = nil;
 138 JNF_COCOA_ENTER(env);
 139     UInt32 *rawImageData = (UInt32 *)(*env)->GetPrimitiveArrayCritical(env, inPixelData, 0);
 140 
 141     // The pixel data is in premultiplied ARGB format. That's exactly what
 142     // we need for the bitmap image rep.
 143     if (rawImageData != NULL) {
 144         NSBitmapImageRep *imageRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL
 145                                                                              pixelsWide:inWidth
 146                                                                              pixelsHigh:inHeight
 147                                                                           bitsPerSample:8
 148                                                                         samplesPerPixel:4
 149                                                                                hasAlpha:YES
 150                                                                                isPlanar:NO
 151                                                                          colorSpaceName:NSCalibratedRGBColorSpace
 152                                                                             bytesPerRow:(inWidth*4)
 153                                                                            bitsPerPixel:32];
 154 
 155         // Conver the ARGB data into RGBA data that the bitmap can draw.
 156         unsigned char *destData = [imageRep bitmapData];
 157         unsigned char *currentRowBase;
 158         jint x, y;
 159 
 160         for (y = 0; y < inHeight; y++) {
 161             currentRowBase = destData + y * (inWidth * 4);
 162             unsigned char *currElement = currentRowBase;
 163             for (x = 0; x < inWidth; x++) {
 164                 UInt32 currPixel = rawImageData[y * inWidth + x];
 165                 *currElement++ = ((currPixel & 0xFF0000) >> 16);
 166                 *currElement++ = ((currPixel & 0xFF00) >> 8);
 167                 *currElement++ = (currPixel & 0xFF);
 168                 *currElement++ = ((currPixel & 0xFF000000) >> 24);
 169             }
 170         }
 171 




  37 // in CDataTransferer.java.
  38 NSMutableDictionary *sStandardMappings = nil;
  39 
  40 NSMutableDictionary *getMappingTable() {
  41     if (sStandardMappings == nil) {
  42         sStandardMappings = [[NSMutableDictionary alloc] init];
  43         [sStandardMappings setObject:NSStringPboardType
  44                               forKey:[NSNumber numberWithLong:sun_lwawt_macosx_CDataTransferer_CF_STRING]];
  45         [sStandardMappings setObject:NSFilenamesPboardType
  46                               forKey:[NSNumber numberWithLong:sun_lwawt_macosx_CDataTransferer_CF_FILE]];
  47         [sStandardMappings setObject:NSTIFFPboardType
  48                               forKey:[NSNumber numberWithLong:sun_lwawt_macosx_CDataTransferer_CF_TIFF]];
  49         [sStandardMappings setObject:NSRTFPboardType
  50                               forKey:[NSNumber numberWithLong:sun_lwawt_macosx_CDataTransferer_CF_RICH_TEXT]];
  51         [sStandardMappings setObject:NSHTMLPboardType
  52                               forKey:[NSNumber numberWithLong:sun_lwawt_macosx_CDataTransferer_CF_HTML]];
  53         [sStandardMappings setObject:NSPDFPboardType
  54                               forKey:[NSNumber numberWithLong:sun_lwawt_macosx_CDataTransferer_CF_PDF]];
  55         [sStandardMappings setObject:NSURLPboardType
  56                               forKey:[NSNumber numberWithLong:sun_lwawt_macosx_CDataTransferer_CF_URL]];
  57         [sStandardMappings setObject:NSPasteboardTypePNG
  58                               forKey:[NSNumber numberWithLong:sun_lwawt_macosx_CDataTransferer_CF_PNG]];
  59         [sStandardMappings setObject:@"public.jpeg"
  60                               forKey:[NSNumber numberWithLong:sun_lwawt_macosx_CDataTransferer_CF_JPEG]];
  61     }
  62     return sStandardMappings;
  63 }
  64 
  65 /*
  66  * Convert from a standard NSPasteboard data type to an index in our mapping table.
  67  */
  68 jlong indexForFormat(NSString *format) {
  69     jlong returnValue = -1;
  70 
  71     NSMutableDictionary *mappingTable = getMappingTable();
  72     NSArray *matchingKeys = [mappingTable allKeysForObject:format];
  73 
  74     // There should only be one matching key here...
  75     if ([matchingKeys count] > 0) {
  76         NSNumber *formatID = (NSNumber *)[matchingKeys objectAtIndex:0];
  77         returnValue = [formatID longValue];
  78     }
  79 
  80     // If we don't recognize the format, but it's a Java "custom" format register it


 135  * Method:    imageDataToPlatformImageBytes
 136  * Signature: ([III)[B
 137      */
 138 JNIEXPORT jbyteArray JNICALL Java_sun_lwawt_macosx_CDataTransferer_imageDataToPlatformImageBytes
 139 (JNIEnv *env, jobject obj, jintArray inPixelData, jint inWidth, jint inHeight)
 140 {
 141     jbyteArray returnValue = nil;
 142 JNF_COCOA_ENTER(env);
 143     UInt32 *rawImageData = (UInt32 *)(*env)->GetPrimitiveArrayCritical(env, inPixelData, 0);
 144 
 145     // The pixel data is in premultiplied ARGB format. That's exactly what
 146     // we need for the bitmap image rep.
 147     if (rawImageData != NULL) {
 148         NSBitmapImageRep *imageRep = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL
 149                                                                              pixelsWide:inWidth
 150                                                                              pixelsHigh:inHeight
 151                                                                           bitsPerSample:8
 152                                                                         samplesPerPixel:4
 153                                                                                hasAlpha:YES
 154                                                                                isPlanar:NO
 155                                                                          colorSpaceName:NSDeviceRGBColorSpace
 156                                                                             bytesPerRow:(inWidth*4)
 157                                                                            bitsPerPixel:32];
 158 
 159         // Conver the ARGB data into RGBA data that the bitmap can draw.
 160         unsigned char *destData = [imageRep bitmapData];
 161         unsigned char *currentRowBase;
 162         jint x, y;
 163 
 164         for (y = 0; y < inHeight; y++) {
 165             currentRowBase = destData + y * (inWidth * 4);
 166             unsigned char *currElement = currentRowBase;
 167             for (x = 0; x < inWidth; x++) {
 168                 UInt32 currPixel = rawImageData[y * inWidth + x];
 169                 *currElement++ = ((currPixel & 0xFF0000) >> 16);
 170                 *currElement++ = ((currPixel & 0xFF00) >> 8);
 171                 *currElement++ = (currPixel & 0xFF);
 172                 *currElement++ = ((currPixel & 0xFF000000) >> 24);
 173             }
 174         }
 175