From 92e47e958daba7783fc0db2ad9445919081139d6 Mon Sep 17 00:00:00 2001 From: Francis Kung Date: Wed, 4 Apr 2007 19:20:33 +0000 Subject: 2007-04-04 Francis Kung * gnu/java/awt/peer/gtk/CairoGraphics2D.java (drawCairoSurface): Made protected. * gnu/java/awt/peer/gtk/ComponentGraphics.java (cairoDrawGlyphVector): Removed method. (cairoSetFont): Removed method. (disposeNative): Removed method. (drawCairoSurface): New method. * native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c (Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoDrawGlyphVector): Added locking. (Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetFont): Added locking. (Java_gnu_java_awt_peer_gtk_CairoGraphics2D_disposeNative): Added locking. --- ChangeLog | 15 +++++ gnu/java/awt/peer/gtk/CairoGraphics2D.java | 4 +- gnu/java/awt/peer/gtk/ComponentGraphics.java | 74 ++++++++-------------- .../gnu_java_awt_peer_gtk_CairoGraphics2D.c | 10 ++- 4 files changed, 53 insertions(+), 50 deletions(-) diff --git a/ChangeLog b/ChangeLog index e9e799c98..f336996fd 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,18 @@ +2007-04-04 Francis Kung + + * gnu/java/awt/peer/gtk/CairoGraphics2D.java + (drawCairoSurface): Made protected. + * gnu/java/awt/peer/gtk/ComponentGraphics.java + (cairoDrawGlyphVector): Removed method. + (cairoSetFont): Removed method. + (disposeNative): Removed method. + (drawCairoSurface): New method. + * native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c + (Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoDrawGlyphVector): Added + locking. + (Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetFont): Added locking. + (Java_gnu_java_awt_peer_gtk_CairoGraphics2D_disposeNative): Added locking. + 2007-04-04 Gary Benson * java/util/GregorianCalendar.java diff --git a/gnu/java/awt/peer/gtk/CairoGraphics2D.java b/gnu/java/awt/peer/gtk/CairoGraphics2D.java index 7c2ad89be..4c83fa333 100644 --- a/gnu/java/awt/peer/gtk/CairoGraphics2D.java +++ b/gnu/java/awt/peer/gtk/CairoGraphics2D.java @@ -1623,8 +1623,8 @@ public abstract class CairoGraphics2D extends Graphics2D * @param alpha The alpha value to paint with ( 0 <= alpha <= 1). * @param interpolation The interpolation type. */ - private void drawCairoSurface(CairoSurface surface, AffineTransform tx, - double alpha, int interpolation) + protected void drawCairoSurface(CairoSurface surface, AffineTransform tx, + double alpha, int interpolation) { // Find offset required if this surface is a sub-raster, and append offset // to transformation. diff --git a/gnu/java/awt/peer/gtk/ComponentGraphics.java b/gnu/java/awt/peer/gtk/ComponentGraphics.java index 35b1ba2c2..7074e0320 100644 --- a/gnu/java/awt/peer/gtk/ComponentGraphics.java +++ b/gnu/java/awt/peer/gtk/ComponentGraphics.java @@ -560,6 +560,17 @@ public class ComponentGraphics extends CairoGraphics2D * methods ends up being called, we will deadlock. The lock is only reentrant * when called via our lock() method. */ + + /* These methods are already locked in the superclass CairoGraphics2D + * so they do not need to be overridden: + * + * public void disposeNative + * + * protected void cairoDrawGlyphVector + * + * protected void cairoSetFont + */ + @Override protected long init(long pointer) { @@ -578,20 +589,6 @@ public class ComponentGraphics extends CairoGraphics2D return ret; } - @Override - public void disposeNative(long pointer) - { - try - { - lock(); - super.disposeNative(pointer); - } - finally - { - unlock(); - } - } - @Override protected void drawPixels(long pointer, int[] pixels, int w, int h, int stride, double[] i2u, double alpha, @@ -742,39 +739,7 @@ public class ComponentGraphics extends CairoGraphics2D unlock(); } } - - @Override - protected void cairoDrawGlyphVector(long pointer, GdkFontPeer font, - float x, float y, int n, - int[] codes, float[] positions, - long[] fontset) - { - try - { - lock(); - super.cairoDrawGlyphVector(pointer, font, x, y, n, codes, positions, - fontset); - } - finally - { - unlock(); - } - } - - @Override - protected void cairoSetFont(long pointer, GdkFontPeer font) - { - try - { - lock(); - super.cairoSetFont(pointer, font); - } - finally - { - unlock(); - } - } - + @Override protected void cairoRectangle(long pointer, double x, double y, double width, double height) @@ -973,4 +938,19 @@ public class ComponentGraphics extends CairoGraphics2D unlock(); } } + + @Override + protected void drawCairoSurface(CairoSurface surface, AffineTransform tx, + double alpha, int interpolation) + { + try + { + lock(); + super.drawCairoSurface(surface, tx, alpha, interpolation); + } + finally + { + unlock(); + } + } } \ No newline at end of file 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 5620746ec..1087cf7d6 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 @@ -87,7 +87,11 @@ Java_gnu_java_awt_peer_gtk_CairoGraphics2D_disposeNative return; if (gr->cr) - cairo_destroy (gr->cr); + { + gdk_threads_enter(); + cairo_destroy (gr->cr); + gdk_threads_leave(); + } if (gr->pattern) cairo_pattern_destroy (gr->pattern); @@ -345,6 +349,7 @@ Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoDrawGlyphVector /* Iterate through glyphs and draw */ jlong* fonts = (*env)->GetLongArrayElements (env, java_fontset, NULL); + gdk_threads_enter(); for (i = 0; i < n; i++) { PangoFcFont *font = JLONG_TO_PTR(PangoFcFont, fonts[i]); @@ -367,6 +372,7 @@ Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoDrawGlyphVector cairo_font_face_destroy (ft); pango_fc_font_unlock_face(font); } + gdk_threads_leave(); g_free(glyphs); } @@ -388,6 +394,7 @@ Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetFont pfont = (struct peerfont *)NSA_GET_FONT_PTR (env, font); g_assert (pfont != NULL); + gdk_threads_enter(); face = pango_fc_font_lock_face( (PangoFcFont *)pfont->font ); g_assert (face != NULL); @@ -401,6 +408,7 @@ Java_gnu_java_awt_peer_gtk_CairoGraphics2D_cairoSetFont cairo_font_face_destroy (ft); pango_fc_font_unlock_face((PangoFcFont *)pfont->font); + gdk_threads_leave(); } JNIEXPORT void JNICALL -- cgit v1.2.1