2006-06-01 Sven de Marothy <[EMAIL PROTECTED]> * gnu/java/awt/peer/gtk/CairoGraphics2D.java (drawImage): Check for zero size. * gnu/java/awt/peer/gtk/GdkTextLayout.java: (setFont): Declare new native method. (GdkTextLayout): Read some attributes. * include/gnu_java_awt_peer_gtk_GdkTextLayout.h * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c (setFont): New native method.
Index: gnu/java/awt/peer/gtk/CairoGraphics2D.java =================================================================== RCS file: /sources/classpath/classpath/gnu/java/awt/peer/gtk/CairoGraphics2D.java,v retrieving revision 1.8 diff -U3 -r1.8 CairoGraphics2D.java --- gnu/java/awt/peer/gtk/CairoGraphics2D.java 1 Jun 2006 05:05:57 -0000 1.8 +++ gnu/java/awt/peer/gtk/CairoGraphics2D.java 1 Jun 2006 10:47:33 -0000 @@ -1122,6 +1122,8 @@ { double scaleX = width / (double) img.getWidth(observer); double scaleY = height / (double) img.getHeight(observer); + if( scaleX == 0 || scaleY == 0 ) + return true; return drawImage(img, new AffineTransform(scaleX, 0f, 0f, scaleY, x, y), bgcolor, observer); Index: gnu/java/awt/peer/gtk/GdkTextLayout.java =================================================================== RCS file: /sources/classpath/classpath/gnu/java/awt/peer/gtk/GdkTextLayout.java,v retrieving revision 1.8 diff -U3 -r1.8 GdkTextLayout.java --- gnu/java/awt/peer/gtk/GdkTextLayout.java 30 May 2006 22:36:32 -0000 1.8 +++ gnu/java/awt/peer/gtk/GdkTextLayout.java 1 Jun 2006 10:47:33 -0000 @@ -75,6 +75,7 @@ initStaticState (); } private native void setText(String str); + private native void setFont(GdkFontPeer font); private native void getExtents(double[] inkExtents, double[] logExtents); private native void indexToPos(int idx, double[] pos); @@ -104,6 +105,15 @@ initState(); attributedString = str; fontRenderContext = frc; + AttributedCharacterIterator aci = str.getIterator(); + char[] chars = new char[aci.getEndIndex() - aci.getBeginIndex()]; + for(int i = aci.getBeginIndex(); i < aci.getEndIndex(); i++) + chars[i] = aci.setIndex(i); + setText(new String(chars)); + + Object fnt = aci.getAttribute(TextAttribute.FONT); + if (fnt != null && fnt instanceof Font) + setFont( (GdkFontPeer) ((Font)fnt).getPeer() ); } protected class CharacterIteratorProxy Index: include/gnu_java_awt_peer_gtk_GdkTextLayout.h =================================================================== RCS file: /sources/classpath/classpath/include/gnu_java_awt_peer_gtk_GdkTextLayout.h,v retrieving revision 1.5 diff -U3 -r1.5 gnu_java_awt_peer_gtk_GdkTextLayout.h --- include/gnu_java_awt_peer_gtk_GdkTextLayout.h 29 May 2006 16:14:59 -0000 1.5 +++ include/gnu_java_awt_peer_gtk_GdkTextLayout.h 1 Jun 2006 10:47:34 -0000 @@ -11,6 +11,7 @@ #endif JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkTextLayout_setText (JNIEnv *env, jobject, jstring); +JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkTextLayout_setFont (JNIEnv *env, jobject, jobject); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkTextLayout_getExtents (JNIEnv *env, jobject, jdoubleArray, jdoubleArray); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkTextLayout_indexToPos (JNIEnv *env, jobject, jint, jdoubleArray); JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkTextLayout_initState (JNIEnv *env, jobject); Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c =================================================================== RCS file: /sources/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c,v retrieving revision 1.13 diff -U3 -r1.13 gnu_java_awt_peer_gtk_GdkTextLayout.c --- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c 31 May 2006 23:00:22 -0000 1.13 +++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkTextLayout.c 1 Jun 2006 10:47:34 -0000 @@ -97,8 +97,6 @@ gchar *str = NULL; gint len = 0; - gdk_threads_enter (); - g_assert(self != NULL); g_assert(text != NULL); @@ -110,13 +108,37 @@ str = (gchar *)(*env)->GetStringUTFChars (env, text, NULL); g_assert (str != NULL); - pango_layout_set_text (tl->pango_layout, text, len); + gdk_threads_enter (); + + pango_layout_set_text (tl->pango_layout, str, len); (*env)->ReleaseStringUTFChars (env, text, str); gdk_threads_leave (); } +JNIEXPORT void JNICALL +Java_gnu_java_awt_peer_gtk_GdkTextLayout_setFont (JNIEnv *env, jobject obj, jobject font) +{ + struct textlayout *tl; + struct peerfont *pf; + + g_assert(obj != NULL); + g_assert(font != NULL); + + tl = (struct textlayout *)NSA_GET_TEXT_LAYOUT_PTR (env, obj); + g_assert(tl != NULL); + g_assert(tl->pango_layout != NULL); + pf = (struct peerfont *)NSA_GET_FONT_PTR (env, font); + g_assert(pf != NULL); + + gdk_threads_enter (); + + pango_layout_set_font_description(tl->pango_layout, pf->desc); + + gdk_threads_leave (); +} + JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkTextLayout_indexToPos (JNIEnv *env, jobject self, jint idx, jdoubleArray javaPos) @@ -213,6 +235,7 @@ /** * Draw this textlayout on a cairo surface + * FIXME: Seems completely broken. */ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkTextLayout_cairoDrawGdkTextLayout