src/solaris/native/sun/java2d/x11/XRBackendNative.c

Print this page
rev 6829 : Fix Xrender backend on  64-bit Big-endian architectures


 725         GetPrimitiveArrayCritical(env, glyphInfoPtrsArray, NULL)) == NULL)
 726     {
 727         free(xginfo);
 728         free(gid);
 729         return;
 730     }
 731 
 732     if ((pixelData = (unsigned char *)
 733         (*env)->GetPrimitiveArrayCritical(env, pixelDataArray, NULL)) == NULL)
 734     {
 735         (*env)->ReleasePrimitiveArrayCritical(env,
 736                                 glyphInfoPtrsArray, glyphInfoPtrs, JNI_ABORT);
 737         free(xginfo);
 738         free(gid);
 739         return;
 740     }
 741 
 742     for (i=0; i < glyphCnt; i++) {
 743       GlyphInfo *jginfo = (GlyphInfo *) jlong_to_ptr(glyphInfoPtrs[i]);
 744 
 745       gid[i] = (Glyph) (0x0ffffffffL & ((unsigned long)(jginfo->cellInfo)));



 746       xginfo[i].x = (-jginfo->topLeftX);
 747       xginfo[i].y = (-jginfo->topLeftY);
 748       xginfo[i].width = jginfo->width;
 749       xginfo[i].height = jginfo->height;
 750       xginfo[i].xOff = round(jginfo->advanceX);
 751       xginfo[i].yOff = round(jginfo->advanceY);
 752     }
 753 
 754     XRenderAddGlyphs(awt_display, glyphSet, &gid[0], &xginfo[0], glyphCnt,
 755                      (const char*)pixelData, pixelDataLength);
 756 
 757     (*env)->ReleasePrimitiveArrayCritical(env, glyphInfoPtrsArray, glyphInfoPtrs, JNI_ABORT);
 758     (*env)->ReleasePrimitiveArrayCritical(env, pixelDataArray, pixelData, JNI_ABORT);
 759 
 760     free(xginfo);
 761     free(gid);
 762 }
 763 
 764 JNIEXPORT void JNICALL
 765 Java_sun_java2d_xr_XRBackendNative_XRFreeGlyphsNative




 725         GetPrimitiveArrayCritical(env, glyphInfoPtrsArray, NULL)) == NULL)
 726     {
 727         free(xginfo);
 728         free(gid);
 729         return;
 730     }
 731 
 732     if ((pixelData = (unsigned char *)
 733         (*env)->GetPrimitiveArrayCritical(env, pixelDataArray, NULL)) == NULL)
 734     {
 735         (*env)->ReleasePrimitiveArrayCritical(env,
 736                                 glyphInfoPtrsArray, glyphInfoPtrs, JNI_ABORT);
 737         free(xginfo);
 738         free(gid);
 739         return;
 740     }
 741 
 742     for (i=0; i < glyphCnt; i++) {
 743       GlyphInfo *jginfo = (GlyphInfo *) jlong_to_ptr(glyphInfoPtrs[i]);
 744 
 745       // 'jginfo->cellInfo' is of type 'void*' (see definition of 'GlyphInfo' in fontscalerdefs.h)
 746       // 'Glyph' is typedefed to 'unsigned long' (see http://www.x.org/releases/X11R7.7/doc/libXrender/libXrender.txt)
 747       // Maybe we should assert that (sizeof(void*) == sizeof(Glyph)) ?
 748       gid[i] = (Glyph) (jginfo->cellInfo);
 749       xginfo[i].x = (-jginfo->topLeftX);
 750       xginfo[i].y = (-jginfo->topLeftY);
 751       xginfo[i].width = jginfo->width;
 752       xginfo[i].height = jginfo->height;
 753       xginfo[i].xOff = round(jginfo->advanceX);
 754       xginfo[i].yOff = round(jginfo->advanceY);
 755     }
 756 
 757     XRenderAddGlyphs(awt_display, glyphSet, &gid[0], &xginfo[0], glyphCnt,
 758                      (const char*)pixelData, pixelDataLength);
 759 
 760     (*env)->ReleasePrimitiveArrayCritical(env, glyphInfoPtrsArray, glyphInfoPtrs, JNI_ABORT);
 761     (*env)->ReleasePrimitiveArrayCritical(env, pixelDataArray, pixelData, JNI_ABORT);
 762 
 763     free(xginfo);
 764     free(gid);
 765 }
 766 
 767 JNIEXPORT void JNICALL
 768 Java_sun_java2d_xr_XRBackendNative_XRFreeGlyphsNative