summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZiga Mahkovec <ziga.mahkovec@klika.si>2005-06-27 22:35:54 +0000
committerZiga Mahkovec <ziga.mahkovec@klika.si>2005-06-27 22:35:54 +0000
commita42f00e876d983bbb51ac9097ae1944dcd433a12 (patch)
treeb9d503dd3367d664105e2555e634654e23c75ed8
parentdb3f99dbf85c73d471fa5ff9fad3b64836abba63 (diff)
downloadclasspath-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--ChangeLog15
-rw-r--r--gnu/java/awt/peer/gtk/GdkGraphics2D.java6
-rw-r--r--gnu/java/awt/peer/gtk/GtkComponentPeer.java8
-rw-r--r--javax/swing/JComponent.java18
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics2D.c22
5 files changed, 59 insertions, 10 deletions
diff --git a/ChangeLog b/ChangeLog
index a81c43d29..6b8b83d89 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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)