summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wielaard <mark@klomp.org>2006-08-06 23:28:40 +0000
committerMark Wielaard <mark@klomp.org>2006-08-06 23:28:40 +0000
commit78b0343cc4167add1b175a6dcafd2ae07b323b14 (patch)
treeebca7a5c5b47398420492c2e698fb961a69b51e2
parentca06ba22418365ead39329dc36c99608d7841a2a (diff)
downloadclasspath-78b0343cc4167add1b175a6dcafd2ae07b323b14.tar.gz
2006-08-06 Sven de Marothy <sven@physto.se>
* gnu/java/awt/peer/gtk/ComponentGraphics.java (grab, nativeGrab): New methods. * include/gnu_java_awt_peer_gtk_ComponentGraphics.h * native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c (nativeGrab): New method. * gnu/java/awt/peer/gtk/GtkComponentPeer.java (print): Implement. * java/awt/Component.java (printAll): Should call peer print method.
-rw-r--r--ChangeLog12
-rw-r--r--gnu/java/awt/peer/gtk/ComponentGraphics.java14
-rw-r--r--gnu/java/awt/peer/gtk/GtkComponentPeer.java2
-rw-r--r--include/gnu_java_awt_peer_gtk_ComponentGraphics.h1
-rw-r--r--java/awt/Component.java9
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c36
6 files changed, 68 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index e25d831fa..029165d68 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2006-08-06 Sven de Marothy <sven@physto.se>
+
+ * gnu/java/awt/peer/gtk/ComponentGraphics.java
+ (grab, nativeGrab): New methods.
+ * include/gnu_java_awt_peer_gtk_ComponentGraphics.h
+ * native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c
+ (nativeGrab): New method.
+ * gnu/java/awt/peer/gtk/GtkComponentPeer.java
+ (print): Implement.
+ * java/awt/Component.java
+ (printAll): Should call peer print method.
+
2006-08-06 Thomas Minor <1nocentrabidlamb@sexMagnet.com>
* java/net/URL.java (getContent(Class[])): Implement.
diff --git a/gnu/java/awt/peer/gtk/ComponentGraphics.java b/gnu/java/awt/peer/gtk/ComponentGraphics.java
index 193dec4c7..ffa78e9c9 100644
--- a/gnu/java/awt/peer/gtk/ComponentGraphics.java
+++ b/gnu/java/awt/peer/gtk/ComponentGraphics.java
@@ -53,6 +53,7 @@ import java.awt.image.BufferedImage;
import java.awt.image.ImageObserver;
import java.awt.image.ImageProducer;
import java.awt.image.RenderedImage;
+import gnu.classpath.Pointer;
/**
* ComponentGraphics - context for drawing directly to a component,
@@ -162,6 +163,11 @@ public class ComponentGraphics extends CairoGraphics2D
*/
public static native boolean hasXRender();
+ /**
+ * This is a utility method (used by GtkComponentPeer) for grabbing the
+ * image of a component.
+ */
+ private static native Pointer nativeGrab(GtkComponentPeer component);
private native void copyAreaNative(GtkComponentPeer component, int x, int y,
int width, int height, int dx, int dy);
@@ -172,6 +178,14 @@ public class ComponentGraphics extends CairoGraphics2D
int cw, int ch);
/**
+ * Not really related (moveme?). Utility method used by GtkComponent.
+ */
+ public static GtkImage grab( GtkComponentPeer component )
+ {
+ return new GtkImage( nativeGrab( component ) );
+ }
+
+ /**
* Returns a Graphics2D object for a component, either an instance of this
* class (if xrender is supported), or a context which copies.
*/
diff --git a/gnu/java/awt/peer/gtk/GtkComponentPeer.java b/gnu/java/awt/peer/gtk/GtkComponentPeer.java
index 833585453..c11c45e20 100644
--- a/gnu/java/awt/peer/gtk/GtkComponentPeer.java
+++ b/gnu/java/awt/peer/gtk/GtkComponentPeer.java
@@ -371,7 +371,7 @@ public class GtkComponentPeer extends GtkGenericPeer
public void print (Graphics g)
{
- throw new RuntimeException ();
+ g.drawImage( ComponentGraphics.grab( this ), 0, 0, null );
}
public void repaint (long tm, int x, int y, int width, int height)
diff --git a/include/gnu_java_awt_peer_gtk_ComponentGraphics.h b/include/gnu_java_awt_peer_gtk_ComponentGraphics.h
index 2e1633452..fbd5f6a93 100644
--- a/include/gnu_java_awt_peer_gtk_ComponentGraphics.h
+++ b/include/gnu_java_awt_peer_gtk_ComponentGraphics.h
@@ -16,6 +16,7 @@ JNIEXPORT jlong JNICALL Java_gnu_java_awt_peer_gtk_ComponentGraphics_initFromVol
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_ComponentGraphics_start_1gdk_1drawing (JNIEnv *env, jobject);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_ComponentGraphics_end_1gdk_1drawing (JNIEnv *env, jobject);
JNIEXPORT jboolean JNICALL Java_gnu_java_awt_peer_gtk_ComponentGraphics_hasXRender (JNIEnv *env, jclass);
+JNIEXPORT jobject JNICALL Java_gnu_java_awt_peer_gtk_ComponentGraphics_nativeGrab (JNIEnv *env, jclass, jobject);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_ComponentGraphics_copyAreaNative (JNIEnv *env, jobject, jobject, jint, jint, jint, jint, jint, jint);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_ComponentGraphics_drawVolatile (JNIEnv *env, jobject, jobject, jlong, jint, jint, jint, jint, jint, jint, jint, jint);
diff --git a/java/awt/Component.java b/java/awt/Component.java
index 1460d50e6..aac94a0c9 100644
--- a/java/awt/Component.java
+++ b/java/awt/Component.java
@@ -2311,10 +2311,7 @@ public abstract class Component
}
/**
- * Prints this component, including all sub-components. This method is
- * provided so that printing can be done in a different manner from
- * painting. However, the implementation in this class simply calls the
- * <code>paintAll()</code> method.
+ * Prints this component, including all sub-components.
*
* @param g the graphics context of the print device
*
@@ -2322,7 +2319,9 @@ public abstract class Component
*/
public void printAll(Graphics g)
{
- paintAll(g);
+ if( peer != null )
+ peer.print( g );
+ paintAll( g );
}
/**
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c
index 5927b21fa..25163cd9f 100644
--- a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c
+++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c
@@ -276,6 +276,42 @@ Java_gnu_java_awt_peer_gtk_ComponentGraphics_copyAreaNative
gdk_threads_leave();
}
+JNIEXPORT jobject JNICALL
+Java_gnu_java_awt_peer_gtk_ComponentGraphics_nativeGrab
+(JNIEnv *env, jclass cls __attribute__((unused)), jobject peer )
+{
+ GdkPixbuf *pixbuf;
+ GdkDrawable *drawable;
+ GdkWindow *win;
+ gint w,h;
+ GtkWidget *widget = NULL;
+ void *ptr = NULL;
+
+ gdk_threads_enter();
+
+ ptr = NSA_GET_PTR (env, peer);
+ g_assert (ptr != NULL);
+
+ widget = GTK_WIDGET (ptr);
+ g_assert (widget != NULL);
+
+ cp_gtk_grab_current_drawable (widget, &drawable, &win);
+ g_assert (drawable != NULL);
+
+ gdk_drawable_get_size ( drawable, &w, &h );
+
+ pixbuf = gdk_pixbuf_new( GDK_COLORSPACE_RGB, TRUE, 8, w, h );
+ gdk_pixbuf_get_from_drawable( pixbuf, drawable, NULL, 0, 0, 0, 0, w, h );
+ g_object_ref( pixbuf );
+ gdk_draw_pixbuf (drawable, NULL, pixbuf,
+ 0, 0, 0, 0,
+ w, h,
+ GDK_RGB_DITHER_NORMAL, 0, 0);
+ gdk_threads_leave();
+
+ return JCL_NewRawDataObject (env, pixbuf);
+}
+
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_ComponentGraphics_drawVolatile
(JNIEnv *env, jobject obj __attribute__ ((unused)), jobject peer,