Hi,

This patch caches the Freetype font map, rather than creating & destroying a new one for each font peer we create. This enables Pango's internal caching and mostly fixes the ProgressBar memory leak.

Cheers,
Francis


2007-04-12  Francis Kung  <[EMAIL PROTECTED]>

        PR 31539
        * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
        (ft2_map): New static variable.
        (Java_gnu_java_awt_peer_gtk_GdkFontPeer_initStaticState): Set up 
ft2_map.
        (Java_gnu_java_awt_peer_gtk_GdkFontPeer_setFont): Use cached ft2_map.
Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c
===================================================================
RCS file: /cvsroot/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c,v
retrieving revision 1.24
diff -u -r1.24 gnu_java_awt_peer_gtk_GdkFontPeer.c
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c	11 Apr 2007 21:10:22 -0000	1.24
+++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontPeer.c	12 Apr 2007 15:51:12 -0000
@@ -60,11 +60,14 @@
   java_awt_font_HANGING_BASELINE = 2
 };
 
+static PangoFT2FontMap *ft2_map = NULL;
+
 JNIEXPORT void JNICALL
 Java_gnu_java_awt_peer_gtk_GdkFontPeer_initStaticState 
   (JNIEnv *env, jclass clazz)
 {
   NSA_FONT_INIT (env, clazz);
+  ft2_map = PANGO_FT2_FONT_MAP(pango_ft2_font_map_new());
 }
 
 JNIEXPORT void JNICALL
@@ -248,7 +251,6 @@
   struct peerfont *pfont = NULL;
   char const *family_name = NULL;
   enum java_awt_font_style style;
-  PangoFT2FontMap *ft2_map = NULL;
 
   gdk_threads_enter ();
 
@@ -286,9 +288,7 @@
   pango_font_description_set_size (pfont->desc, size * PANGO_SCALE);
   
   /* Create new context */
-  ft2_map = PANGO_FT2_FONT_MAP(pango_ft2_font_map_new());
   pfont->ctx = pango_ft2_font_map_create_context (ft2_map);
-  g_object_unref(ft2_map);
   g_assert (pfont->ctx != NULL);
   
   pango_context_set_font_description (pfont->ctx, pfont->desc);

Reply via email to