From fc0c582fa1349b0291363e88278a53e9550db88f Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Mon, 7 Aug 2006 22:07:13 +0000 Subject: 2006-08-07 Sven de Marothy * gnu/java/awt/peer/gtk/CairoGraphics2D.java (drawGlyphVector): Synchronize against font object when drawing. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c (nativeDrawGlyphVector): Use pango locking when drawing. (install_font_peer): Use pango locking when creating the cairo face. --- ChangeLog | 8 ++++++++ gnu/java/awt/peer/gtk/CairoGraphics2D.java | 7 +++++-- native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c | 7 +++++-- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3e4d6e0b0..5d24d1ce4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2006-08-07 Sven de Marothy + + * gnu/java/awt/peer/gtk/CairoGraphics2D.java + (drawGlyphVector): Synchronize against font object when drawing. + * native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c + (nativeDrawGlyphVector): Use pango locking when drawing. + (install_font_peer): Use pango locking when creating the cairo face. + 2006-08-06 Roman Kennke PR 28571 diff --git a/gnu/java/awt/peer/gtk/CairoGraphics2D.java b/gnu/java/awt/peer/gtk/CairoGraphics2D.java index e264300c5..b665f562e 100644 --- a/gnu/java/awt/peer/gtk/CairoGraphics2D.java +++ b/gnu/java/awt/peer/gtk/CairoGraphics2D.java @@ -1458,8 +1458,11 @@ public abstract class CairoGraphics2D extends Graphics2D float[] positions = gv.getGlyphPositions (0, n, null); setFont (gv.getFont ()); - cairoDrawGlyphVector(nativePointer, (GdkFontPeer)getFont().getPeer(), - x, y, n, codes, positions); + synchronized( this.font ) + { + cairoDrawGlyphVector(nativePointer, (GdkFontPeer)getFont().getPeer(), + x, y, n, codes, positions); + } } else { diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c index 0670403dd..45cf4fbda 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c @@ -315,7 +315,9 @@ Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoDrawGlyphVector (*env)->ReleaseFloatArrayElements (env, java_positions, native_positions, 0); (*env)->ReleaseIntArrayElements (env, java_codes, native_codes, 0); + pango_fc_font_lock_face( (PangoFcFont *)pfont->font ); cairo_show_glyphs (gr->cr, glyphs, n); + pango_fc_font_unlock_face( (PangoFcFont *)pfont->font ); g_free(glyphs); } @@ -761,18 +763,19 @@ install_font_peer(cairo_t *cr, if (pfont->graphics_resource == NULL) { - face = pango_ft2_font_get_face (pfont->font); + face = pango_fc_font_lock_face( (PangoFcFont *)pfont->font ); g_assert (face != NULL); ft = cairo_ft_font_face_create_for_ft_face (face, 0); g_assert (ft != NULL); cairo_set_font_face (cr, ft); - cairo_font_face_destroy (ft); + /* cairo_font_face_destroy (ft);*/ cairo_set_font_size (cr, (pango_font_description_get_size (pfont->desc) / (double)PANGO_SCALE)); ft = cairo_get_font_face (cr); + pango_fc_font_unlock_face( (PangoFcFont *)pfont->font ); pfont->graphics_resource = ft; } else -- cgit v1.2.1