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

Reply via email to