diff options
Diffstat (limited to 'recipes/classpath/classpath-0.97.2/gtk-fix.patch')
-rw-r--r-- | recipes/classpath/classpath-0.97.2/gtk-fix.patch | 147 |
1 files changed, 147 insertions, 0 deletions
diff --git a/recipes/classpath/classpath-0.97.2/gtk-fix.patch b/recipes/classpath/classpath-0.97.2/gtk-fix.patch new file mode 100644 index 0000000000..0addec87ac --- /dev/null +++ b/recipes/classpath/classpath-0.97.2/gtk-fix.patch @@ -0,0 +1,147 @@ +Index: gnu/java/awt/peer/gtk/FreetypeGlyphVector.java +=================================================================== +--- gnu/java/awt/peer/gtk/FreetypeGlyphVector.java.orig 2007-04-12 22:18:09.000000000 +0200 ++++ gnu/java/awt/peer/gtk/FreetypeGlyphVector.java 2008-11-28 18:29:50.000000000 +0100 +@@ -247,7 +247,8 @@ + /** + * Returns the kerning of a glyph pair + */ +- private native Point2D getKerning(int leftGlyph, int rightGlyph, long font); ++ private native void getKerning(int leftGlyph, int rightGlyph, long font, ++ float[] p); + + private native double[] getMetricsNative(int glyphCode, long font); + +@@ -301,6 +302,7 @@ + GlyphMetrics gm = null; + float x = 0; + float y = 0; ++ float[] p = {0.0f, 0.0f}; + for(int i = 0; i < nGlyphs; i++) + { + gm = getGlyphMetrics( i ); +@@ -314,9 +316,9 @@ + // using the same font + if (i != nGlyphs-1 && fontSet[i] == fontSet[i+1]) + { +- Point2D p = getKerning(glyphCodes[i], glyphCodes[i + 1], fontSet[i]); +- x += p.getX(); +- y += p.getY(); ++ getKerning(glyphCodes[i], glyphCodes[i + 1], fontSet[i], p); ++ x += p[0]; ++ y += p[1]; + } + } + glyphPositions[nGlyphs * 2] = x; +Index: include/gnu_java_awt_peer_gtk_FreetypeGlyphVector.h +=================================================================== +--- include/gnu_java_awt_peer_gtk_FreetypeGlyphVector.h.orig 2008-06-06 04:10:00.000000000 +0200 ++++ include/gnu_java_awt_peer_gtk_FreetypeGlyphVector.h 2008-11-28 18:29:50.000000000 +0100 +@@ -13,7 +13,7 @@ + JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_dispose (JNIEnv *env, jobject, jlongArray); + JNIEXPORT jlong JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getNativeFontPointer (JNIEnv *env, jobject, jint); + JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getGlyphs (JNIEnv *env, jobject, jintArray, jintArray, jlongArray); +-JNIEXPORT jobject JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getKerning (JNIEnv *env, jobject, jint, jint, jlong); ++JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getKerning (JNIEnv *env, jobject, jint, jint, jlong, jfloatArray); + JNIEXPORT jdoubleArray JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getMetricsNative (JNIEnv *env, jobject, jint, jlong); + JNIEXPORT jobject JNICALL Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getGlyphOutlineNative (JNIEnv *env, jobject, jint, jlong); + +Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c +=================================================================== +--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c.orig 2007-04-25 16:53:03.000000000 +0200 ++++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_FreetypeGlyphVector.c 2008-11-28 18:29:50.000000000 +0100 +@@ -169,15 +169,13 @@ + (*env)->ReleaseLongArrayElements (env, fonts, fontArray, 0); + } + +-JNIEXPORT jobject JNICALL ++JNIEXPORT void JNICALL + Java_gnu_java_awt_peer_gtk_FreetypeGlyphVector_getKerning +-(JNIEnv *env, jobject obj __attribute__((unused)), jint rightGlyph, jint leftGlyph, jlong fnt) ++ (JNIEnv *env, jobject obj __attribute__((unused)), jint rightGlyph, ++ jint leftGlyph, jlong fnt, jfloatArray p) + { + FT_Face ft_face; + FT_Vector kern; +- jclass cls; +- jmethodID method; +- jvalue values[2]; + PangoFcFont *font; + + font = JLONG_TO_PTR(PangoFcFont, fnt); +@@ -187,12 +185,10 @@ + + pango_fc_font_unlock_face( font ); + +- values[0].d = (jdouble)kern.x/64.0; +- values[1].d = (jdouble)kern.y/64.0; +- +- cls = (*env)->FindClass (env, "java/awt/geom/Point2D$Double"); +- method = (*env)->GetMethodID (env, cls, "<init>", "(DD)V"); +- return (*env)->NewObjectA(env, cls, method, values); ++ jfloat *pelements = (*env)->GetPrimitiveArrayCritical(env, p, NULL); ++ pelements[0] = (jfloat)kern.x/64.0; ++ pelements[1] = (jfloat)kern.y/64.0; ++ (*env)->ReleasePrimitiveArrayCritical (env, p, pelements, 0); + } + + JNIEXPORT jdoubleArray JNICALL +Index: gnu/java/awt/peer/gtk/GtkFileDialogPeer.java +=================================================================== +--- gnu/java/awt/peer/gtk/GtkFileDialogPeer.java.orig 2008-12-01 07:51:00.000000000 +0100 ++++ gnu/java/awt/peer/gtk/GtkFileDialogPeer.java 2008-12-01 07:52:04.000000000 +0100 +@@ -67,7 +67,7 @@ + + FileDialog fd = (FileDialog) awtComponent; + +- nativeSetDirectory(System.getProperty("user.dir")); ++ nativeSetDirectory(System.getProperty("user.dir", ".")); + setDirectory(fd.getDirectory()); + setFile(fd.getFile()); + +@@ -108,18 +108,26 @@ + if (fileName == null || fileName.equals ("")) + { + currentFile = ""; +- nativeSetFile (""); ++ nativeSetFile (new File("").getAbsolutePath()); + return; + } + + // GtkFileChooser requires absolute filenames. If the given filename + // is not absolute, let's construct it based on current directory. + currentFile = fileName; +- if (fileName.indexOf(FS) == 0) ++ File f = new File(fileName); ++ if (f.isAbsolute()) + nativeSetFile(fileName); + else +- nativeSetFile(nativeGetDirectory() + FS + fileName); +- } ++ { ++ // Try with gtk API. ++ String temp = nativeGetDirectory(); ++ if (temp != null) ++ f = new File(temp, fileName); ++ ++ nativeSetFile(f.getAbsolutePath()); ++ } ++} + + public void setDirectory (String directory) + { +Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c +=================================================================== +--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c.orig 2008-12-01 07:53:00.000000000 +0100 ++++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c 2008-12-01 07:53:17.000000000 +0100 +@@ -58,6 +58,10 @@ + gtkpeer_set_global_ref (env, obj); + + sw = gtk_scrolled_window_new (NULL, NULL); ++ ++ /* Sanitize width and height. gtk+ does not accept anything below -1. */ ++ width = (width < -1 ? 0 : width); ++ height = (height < -1 ? 0 : height); + gtk_widget_set_size_request (sw, width, height); + eventbox = gtk_event_box_new (); + gtk_container_add (GTK_CONTAINER (eventbox), sw); |