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);