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
|