diff options
author | Ziga Mahkovec <ziga.mahkovec@klika.si> | 2005-06-27 22:35:54 +0000 |
---|---|---|
committer | Ziga Mahkovec <ziga.mahkovec@klika.si> | 2005-06-27 22:35:54 +0000 |
commit | a42f00e876d983bbb51ac9097ae1944dcd433a12 (patch) | |
tree | b9d503dd3367d664105e2555e634654e23c75ed8 | |
parent | db3f99dbf85c73d471fa5ff9fad3b64836abba63 (diff) | |
download | classpath-a42f00e876d983bbb51ac9097ae1944dcd433a12.tar.gz |
2005-06-27 Ziga Mahkovec <ziga.mahkovec@klika.si>
* gnu/java/awt/peer/gtk/GdkGraphics2D.java (constructors): Default to
a transparent background instead of black.
(drawImage): When drawing a raster, pass live data to avoid copying.
* gnu/java/awt/peer/gtk/GtkComponentPeer.java (createImage): Return
a BufferedImage when using Graphics2D.
* javax/swing/JComponent.java (getComponentGraphics): Avoid copying
Graphics2D instances.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c
(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_copyState): Copy the pixel
buffer and initialize a new cairo context in MODE_JAVA_ARRAY.
(Java_gnu_java_awt_peer_gtk_GdkGraphics2D_drawPixels): Revert
previous transformation patch.
-rw-r--r-- | ChangeLog | 15 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GdkGraphics2D.java | 6 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkComponentPeer.java | 8 | ||||
-rw-r--r-- | javax/swing/JComponent.java | 18 | ||||
-rw-r--r-- | native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c | 22 |
5 files changed, 59 insertions, 10 deletions
@@ -1,5 +1,20 @@ 2005-06-27 Ziga Mahkovec <ziga.mahkovec@klika.si> + * gnu/java/awt/peer/gtk/GdkGraphics2D.java (constructors): Default to + a transparent background instead of black. + (drawImage): When drawing a raster, pass live data to avoid copying. + * gnu/java/awt/peer/gtk/GtkComponentPeer.java (createImage): Return + a BufferedImage when using Graphics2D. + * javax/swing/JComponent.java (getComponentGraphics): Avoid copying + Graphics2D instances. + * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c + (Java_gnu_java_awt_peer_gtk_GdkGraphics2D_copyState): Copy the pixel + buffer and initialize a new cairo context in MODE_JAVA_ARRAY. + (Java_gnu_java_awt_peer_gtk_GdkGraphics2D_drawPixels): Revert + previous transformation patch. + +2005-06-27 Ziga Mahkovec <ziga.mahkovec@klika.si> + * native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c (Java_gnu_java_awt_peer_gtk_GdkGraphics2D_copyState): (Java_gnu_java_awt_peer_gtk_GdkGraphics2D_initState___3III): diff --git a/gnu/java/awt/peer/gtk/GdkGraphics2D.java b/gnu/java/awt/peer/gtk/GdkGraphics2D.java index c8483e174..87e2eb519 100644 --- a/gnu/java/awt/peer/gtk/GdkGraphics2D.java +++ b/gnu/java/awt/peer/gtk/GdkGraphics2D.java @@ -201,7 +201,7 @@ public class GdkGraphics2D extends Graphics2D initState(width, height); setColor(Color.black); - setBackground(Color.black); + setBackground(new Color(0, 0, 0, 0)); setPaint(getColor()); setFont(new Font("SansSerif", Font.PLAIN, 12)); setTransform(new AffineTransform()); @@ -255,7 +255,7 @@ public class GdkGraphics2D extends Graphics2D initState(this.pixelBuffer, bimage.getWidth(), bimage.getHeight()); setColor(Color.black); - setBackground(Color.black); + setBackground(new Color(0, 0, 0, 0)); setPaint(getColor()); setFont(new Font("SansSerif", Font.PLAIN, 12)); setTransform(new AffineTransform()); @@ -545,7 +545,7 @@ public class GdkGraphics2D extends Graphics2D // draw an image which has actually been loaded // into memory fully BufferedImage b = (BufferedImage) img; - return drawRaster(b.getColorModel(), b.getData(), + return drawRaster(b.getColorModel(), b.getTile(0, 0), invertedXform, bgcolor); } else diff --git a/gnu/java/awt/peer/gtk/GtkComponentPeer.java b/gnu/java/awt/peer/gtk/GtkComponentPeer.java index 3a1bf8b66..743ec917c 100644 --- a/gnu/java/awt/peer/gtk/GtkComponentPeer.java +++ b/gnu/java/awt/peer/gtk/GtkComponentPeer.java @@ -63,6 +63,7 @@ import java.awt.event.ItemEvent; import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import java.awt.event.PaintEvent; +import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.ImageObserver; import java.awt.image.ImageProducer; @@ -208,7 +209,12 @@ public class GtkComponentPeer extends GtkGenericPeer public Image createImage (int width, int height) { - GtkImage image = new GtkImage (width, height); + Image image; + if (GtkToolkit.useGraphics2D ()) + image = new BufferedImage (width, height, BufferedImage.TYPE_INT_RGB); + else + image = new GtkImage (width, height); + Graphics g = image.getGraphics(); g.setColor(getBackground()); g.fillRect(0, 0, width, height); diff --git a/javax/swing/JComponent.java b/javax/swing/JComponent.java index 2ed4f1741..2120640e4 100644 --- a/javax/swing/JComponent.java +++ b/javax/swing/JComponent.java @@ -46,6 +46,7 @@ import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Font; import java.awt.Graphics; +import java.awt.Graphics2D; import java.awt.Image; import java.awt.Insets; import java.awt.Point; @@ -871,10 +872,19 @@ public abstract class JComponent extends Container implements Serializable */ protected Graphics getComponentGraphics(Graphics g) { - Graphics g2 = g.create(); - g2.setFont(this.getFont()); - g2.setColor(this.getForeground()); - return g2; + if (g instanceof Graphics2D) + { + g.setFont (this.getFont()); + g.setColor (this.getForeground()); + return g; + } + else + { + Graphics g2 = g.create (); + g2.setFont (this.getFont()); + g2.setColor (this.getForeground()); + return g2; + } } /** diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c index bf2d75f9a..11af697e4 100644 --- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c +++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c @@ -382,7 +382,24 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_copyState g->height = g_old->height; if (g_old->mode == MODE_JAVA_ARRAY) - g->jarray = (*env)->NewGlobalRef (env, g_old->jarray); + { + jint size = g->width * g->height * 4; + + g->jarray = (*env)->NewGlobalRef (env, g_old->jarray); + g->javabuf = (*env)->GetIntArrayElements (env, g->jarray, &g->isCopy); + g->isCopy = JNI_TRUE; + g->javabuf_copy = (jint *) malloc (size); + memcpy (g->javabuf_copy, g->javabuf, size); + g->surface = cairo_image_surface_create_for_data ((unsigned char *) g->javabuf, + CAIRO_FORMAT_ARGB32, + g->width, + g->height, + g->width * 4); + g_assert (g->surface != NULL); + g->cr = cairo_create (g->surface); + g_assert (g->cr != NULL); + (*env)->ReleaseIntArrayElements (env, g->jarray, g->javabuf, JNI_ABORT); + } else { g->drawable = g_old->drawable; @@ -843,7 +860,8 @@ Java_gnu_java_awt_peer_gtk_GdkGraphics2D_drawPixels cairo_matrix_init (&mat, native_matrix[0], native_matrix[1], native_matrix[2], native_matrix[3], - -native_matrix[4], -native_matrix[5]); + native_matrix[4], native_matrix[5]); + p = cairo_pattern_create_for_surface (surf); cairo_pattern_set_matrix (p, &mat); if (gr->pattern) |