summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrancis Kung <fkung@redhat.com>2007-04-04 19:20:33 +0000
committerFrancis Kung <fkung@redhat.com>2007-04-04 19:20:33 +0000
commit92e47e958daba7783fc0db2ad9445919081139d6 (patch)
tree13ca53815a917284b9ec2cb847ce752977a559ee
parent9f156012be54af9f4c30ad79b49c69b87cc0e164 (diff)
downloadclasspath-92e47e958daba7783fc0db2ad9445919081139d6.tar.gz
2007-04-04 Francis Kung <fkung@redhat.com>
* 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.
-rw-r--r--ChangeLog15
-rw-r--r--gnu/java/awt/peer/gtk/CairoGraphics2D.java4
-rw-r--r--gnu/java/awt/peer/gtk/ComponentGraphics.java74
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoGraphics2D.c10
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 <fkung@redhat.com>
+
+ * 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 <gbenson@redhat.com>
* 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)
{
@@ -579,20 +590,6 @@ public class ComponentGraphics extends CairoGraphics2D
}
@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,
int interpolation)
@@ -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