GdkGraphics.java (drawString): Pass font name, not XLFD, to native drawString.
authorThomas Fitzsimmons <fitzsim@redhat.com>
Fri, 22 Aug 2003 20:33:50 +0000 (20:33 +0000)
committerThomas Fitzsimmons <fitzsim@gcc.gnu.org>
Fri, 22 Aug 2003 20:33:50 +0000 (20:33 +0000)
2003-08-22  Thomas Fitzsimmons  <fitzsim@redhat.com>

* gnu/java/awt/peer/gtk/GdkGraphics.java (drawString): Pass font
name, not XLFD, to native drawString.
* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (drawString):
Replace XLFD-based implementation with Pango-based
implementation.

From-SVN: r70698

libjava/ChangeLog
libjava/gnu/java/awt/peer/gtk/GdkGraphics.java
libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c
libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c

index 161c2d38df943b3444bd1f3b7c16c7e04ba66a81..bc0066d3f0e56064ae3daa573053319aa22f14e6 100644 (file)
@@ -1,3 +1,11 @@
+2003-08-22  Thomas Fitzsimmons  <fitzsim@redhat.com>
+
+       * gnu/java/awt/peer/gtk/GdkGraphics.java (drawString): Pass font
+       name, not XLFD, to native drawString.
+       * jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c (drawString):
+       Replace XLFD-based implementation with Pango-based
+       implementation.
+
 2003-08-22  Thomas Fitzsimmons  <fitzsim@redhat.com>
 
        * gnu/java/awt/peer/gtk/GtkWindowPeer.java: Remove
index 8e8ee57c1541969250e5f501c3d23f4cc1f96d9c..9012da23cce4a43d63620d0343bef3e762e89ed4 100644 (file)
@@ -215,8 +215,7 @@ public class GdkGraphics extends Graphics
   native void drawString (String str, int x, int y, String fname, int size);
   public void drawString (String str, int x, int y)
   {
-    drawString (str, x, y,
-               ((GtkFontPeer)font.getPeer ()).getXLFD (), font.getSize ());
+    drawString (str, x, y, font.getName(), font.getSize());
   }
 
   public void drawString (AttributedCharacterIterator ci, int x, int y)
index 2c574942b2111c459a839e0afa7b156e2535a724..24b8f4e8c07d47aab8f53601d35e10b762841316 100644 (file)
@@ -191,27 +191,40 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_drawString
    jstring fname, jint size)
 {
   struct graphics *g;
-  const char *cfname, *cstr;
-  gchar *xlfd;
+  const char *cstr;
+  const char *font_name;
+  PangoFontDescription *font_desc;
+  PangoContext *context;
+  PangoLayout *layout;
 
   g = (struct graphics *) NSA_GET_PTR (env, obj);
-  
-  cfname = (*env)->GetStringUTFChars (env, fname, NULL);
-  xlfd = g_strdup_printf (cfname, (size * 10));
-  (*env)->ReleaseStringUTFChars (env, fname, cfname);
 
   cstr = (*env)->GetStringUTFChars (env, str, NULL);
+  font_name = (*env)->GetStringUTFChars (env, fname, NULL);
 
   gdk_threads_enter ();
-  gdk_draw_string (g->drawable, gdk_font_load (xlfd), g->gc, 
-                  x + g->x_offset, y + g->y_offset, cstr);
+
+  font_desc = pango_font_description_from_string (font_name);
+  pango_font_description_set_size (font_desc, size * PANGO_SCALE);
+
+  context = gdk_pango_context_get();
+  pango_context_set_font_description (context, font_desc);
+
+  layout = pango_layout_new (context);
+
+  pango_layout_set_text (layout, cstr, -1);
+
+  gdk_draw_layout (g->drawable, g->gc, 
+                  x + g->x_offset, y + g->y_offset, layout);
+
+  pango_font_description_free (font_desc);
+
   gdk_threads_leave ();
 
+  (*env)->ReleaseStringUTFChars (env, fname, font_name);
   (*env)->ReleaseStringUTFChars (env, str, cstr);
-  g_free (xlfd);
 }
 
-
 JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GdkGraphics_drawLine
   (JNIEnv *env, jobject obj, jint x, jint y, jint x2, jint y2)
 {
index cc7cfb8fd300b7203d5424db1686da866565e4cd..6559c5baf70afb472e108f8227673bd0526b035a 100644 (file)
@@ -43,7 +43,7 @@ JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkCanvasPeer_create
   (JNIEnv *env, jobject obj)
 {
   gpointer widget;
-    
+
   gdk_threads_enter ();
   widget = gtk_type_new (gtk_drawing_area_get_type ());
   gdk_threads_leave ();