This implements the missing graphics context, and fixes a few small
things here and there.
2006-05-30 Sven de Marothy <[EMAIL PROTECTED]>
* gnu/java/awt/peer/gtk/ComponentGraphicsCopy.java
* include/gnu_java_awt_peer_gtk_ComponentGraphicsCopy.h
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphicsCopy.c
New files.
* include/Makefile.am
* native/jni/gtk-peer/Makefile.am
Add new files.
* gnu/java/awt/peer/gtk/CairoSurface.java
(getSharedGtkImage): New method.
* gnu/java/awt/peer/gtk/CairoSurfaceGraphics.java
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoSurface.c
Fix copyArea.
* gnu/java/awt/peer/gtk/ComponentGraphics.java
Support a non-xrender context.
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c
Plug memory leak.
* gnu/java/awt/peer/gtk/GtkImage.java
* include/gnu_java_awt_peer_gtk_GtkImage.h
* native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c
(initFromBuffer): New method.
* native/jni/gtk-peer/gtkpeer.h: Remove declarations of
previouslyremoved methods.
------------------------------------------------------------------------
/* ComponentGraphicsCopy.java
Copyright (C) 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA
02110-1301 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
package gnu.java.awt.peer.gtk;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.Image;
import java.awt.Point;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.font.GlyphVector;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import java.awt.image.DataBuffer;
import java.awt.image.RenderedImage;
import java.awt.image.ImageObserver;
/**
* Implementation of Graphics2D for Components for servers which *
do not have xrender.
*
* A mirrored GtkImage of the component is stored in memory
* and copied back. Yay.
*/
public class ComponentGraphicsCopy extends CairoSurfaceGraphics
{
private GtkComponentPeer component;
/**
* GtkImage sharing its data buffer with this Cairo surface.
*/
private GtkImage gtkimage;
private int width, height;
native void getPixbuf( GtkComponentPeer component, GtkImage image );
native void copyPixbuf( GtkComponentPeer component, GtkImage image,
int x, int y, int w, int h );
public ComponentGraphicsCopy(int width, int height,
GtkComponentPeer component)
{ super( new CairoSurface( width, height ) );
this.component = component;
this.width = width;
this.height = height;
gtkimage = surface.getSharedGtkImage();
getPixbuf( component, gtkimage );
}
/**
* Overloaded methods that do actual drawing need to enter the gdk
threads * and also do certain things before and after.
*/
public void draw(Shape s)
{
super.draw(s);
Rectangle r = s.getBounds();
copyPixbuf(component, gtkimage, r.x, r.y, r.width, r.height);
}
public void fill(Shape s)
{
super.fill(s);
Rectangle r = s.getBounds();
copyPixbuf(component, gtkimage, r.x, r.y, r.width, r.height);
}
public void drawRenderedImage(RenderedImage image, AffineTransform
xform)
{
super.drawRenderedImage(image, xform);
copyPixbuf(component, gtkimage, 0, 0, width, height);
}
protected boolean drawImage(Image img, AffineTransform xform,
Color bgcolor, ImageObserver obs)
{
boolean rv = super.drawImage(img, xform, bgcolor, obs);
copyPixbuf(component, gtkimage, 0, 0, width, height);
return rv;
}
public void drawGlyphVector(GlyphVector gv, float x, float y)
{
super.drawGlyphVector(gv, x, y);
Rectangle r = gv.getPixelBounds(getFontRenderContext(), x , y);
copyPixbuf(component, gtkimage, r.x, r.y, r.width, r.height);
}
}
------------------------------------------------------------------------
/* gnu_java_awt_peer_gtk_ComponentGraphicsCopy.c
Copyright (C) 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA
02110-1301 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version. */
#include "jcl.h"
#include "gtkpeer.h"
#include <cairo-xlib.h>
#include <gdk/gdktypes.h>
#include <gdk/gdkprivate.h>
#include <gdk/gdkx.h>
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <gdk-pixbuf/gdk-pixdata.h>
#include <cairo-ft.h>
#include <cairo-xlib.h>
#include <stdio.h>
#include <stdlib.h>
#include "gnu_java_awt_peer_gtk_ComponentGraphicsCopy.h"
void
cp_java_awt_peer_gtk_ComponentGraphics_grab_current_drawable(GtkWidget
*widget, GdkDrawable **draw, GdkWindow **win);
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_ComponentGraphicsCopy_getPixbuf
(JNIEnv *env, jobject obj, jobject peer, jobject image)
{
gint width, height;
GdkPixbuf *pixbuf;
GdkDrawable *drawable;
GdkWindow *win;
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_java_awt_peer_gtk_ComponentGraphics_grab_current_drawable
(widget, &drawable, &win);
g_assert (drawable != NULL);
pixbuf = cp_gtk_image_get_pixbuf( env, image );
g_assert( pixbuf != NULL);
width = gdk_pixbuf_get_width( pixbuf );
height = gdk_pixbuf_get_height( pixbuf );
gdk_pixbuf_get_from_drawable( pixbuf, /* destination pixbuf */
drawable, NULL, /* colormap */
0, 0, 0, 0,
width, height );
gdk_threads_leave();
}
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_ComponentGraphicsCopy_copyPixbuf
(JNIEnv *env, jobject obj, jobject peer, jobject image,
int x, int y, int width, int height)
{
gint pwidth, pheight;
GdkPixbuf *pixbuf;
GdkDrawable *drawable;
GdkWindow *win;
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_java_awt_peer_gtk_ComponentGraphics_grab_current_drawable
(widget, &drawable, &win);
g_assert (drawable != NULL);
pixbuf = cp_gtk_image_get_pixbuf( env, image );
g_assert( pixbuf != NULL);
pwidth = gdk_pixbuf_get_width( pixbuf );
pheight = gdk_pixbuf_get_height( pixbuf );
gdk_draw_pixbuf (drawable, NULL, pixbuf,
0, 0, 0, 0, pwidth, pheight,
GDK_RGB_DITHER_NORMAL, 0, 0);
gdk_threads_leave();
}
------------------------------------------------------------------------
/* DO NOT EDIT THIS FILE - it is machine generated */
#ifndef __gnu_java_awt_peer_gtk_ComponentGraphicsCopy__
#define __gnu_java_awt_peer_gtk_ComponentGraphicsCopy__
#include <jni.h>
#ifdef __cplusplus
extern "C"
{
#endif
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_ComponentGraphicsCopy_getPixbuf (JNIEnv
*env, jobject, jobject, jobject);
JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_ComponentGraphicsCopy_copyPixbuf (JNIEnv
*env, jobject, jobject, jobject, jint, jint, jint, jint);
#ifdef __cplusplus
}
#endif
#endif /* __gnu_java_awt_peer_gtk_ComponentGraphicsCopy__ */
------------------------------------------------------------------------
? gnu/java/awt/peer/gtk/ComponentGraphicsCopy.java
? include/gnu_java_awt_peer_gtk_ComponentGraphicsCopy.h
? native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphicsCopy.c
Index: gnu/java/awt/peer/gtk/CairoSurface.java
===================================================================
RCS file:
/sources/classpath/classpath/gnu/java/awt/peer/gtk/CairoSurface.java,v
retrieving revision 1.1
diff -U3 -r1.1 CairoSurface.java
--- gnu/java/awt/peer/gtk/CairoSurface.java 29 May 2006 16:14:59
-0000 1.1
+++ gnu/java/awt/peer/gtk/CairoSurface.java 30 May 2006 03:58:47
-0000
@@ -154,6 +154,14 @@
}
/**
+ * Return a GtkImage which shares its data with this Cairo surface.
+ */
+ public GtkImage getSharedGtkImage()
+ {
+ return new GtkImage( width, height, bufferPointer );
+ }
+
+ /**
* Returns a BufferedImage backed by a Cairo surface.
*/ public static BufferedImage getBufferedImage(int width,
int height)
Index: gnu/java/awt/peer/gtk/CairoSurfaceGraphics.java
===================================================================
RCS file:
/sources/classpath/classpath/gnu/java/awt/peer/gtk/CairoSurfaceGraphics.java,v
retrieving revision 1.1
diff -U3 -r1.1 CairoSurfaceGraphics.java
--- gnu/java/awt/peer/gtk/CairoSurfaceGraphics.java 29 May 2006
16:14:59 -0000 1.1
+++ gnu/java/awt/peer/gtk/CairoSurfaceGraphics.java 30 May 2006
03:58:47 -0000
@@ -51,7 +51,7 @@
*/
public class CairoSurfaceGraphics extends CairoGraphics2D
{
- private CairoSurface surface;
+ protected CairoSurface surface;
private long cairo_t;
/**
@@ -89,13 +89,32 @@
public void copyArea(int x, int y, int width, int height, int
dx, int dy)
{
- // FIXME: Adjust parameters so that clipping on the edges occurs.
- - if( x + dx + width >= surface.width || y + dy + height >=
surface.height)
+ // Return if outside the surface
+ if( x + dx > surface.width || y + dy > surface.height )
return;
- if( x + dx <= 0 || y + dy <= 0)
+
+ if( x + dx + width < 0 || y + dy + height < 0 )
return;
- - surface.copyAreaNative(x, y, width, height, dx, dy,
surface.width*4);
+
+ // Clip edges if necessary + if( x + dx < 0 ) // left
+ {
+ width = x + dx + width;
+ x = -dx;
+ }
+
+ if( y + dy < 0 ) // top
+ {
+ height = y + dy + height;
+ y = -dy;
+ }
+
+ if( x + dx + width >= surface.width ) // right
+ width = surface.width - dx - x;
+
+ if( y + dy + height >= surface.height ) // bottom
+ height = surface.height - dy - y;
+
+ surface.copyAreaNative(x, y, width, height, dx, dy,
surface.width * 4);
}
}
Index: gnu/java/awt/peer/gtk/ComponentGraphics.java
===================================================================
RCS file:
/sources/classpath/classpath/gnu/java/awt/peer/gtk/ComponentGraphics.java,v
retrieving revision 1.1
diff -U3 -r1.1 ComponentGraphics.java
--- gnu/java/awt/peer/gtk/ComponentGraphics.java 29 May 2006
16:14:59 -0000 1.1
+++ gnu/java/awt/peer/gtk/ComponentGraphics.java 30 May 2006
03:58:47 -0000
@@ -44,6 +44,7 @@
import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.Image;
+import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.font.FontRenderContext;
import java.awt.font.GlyphVector;
@@ -109,7 +110,9 @@
{
if( hasXRender() )
return new ComponentGraphics(component);
- throw new UnsupportedOperationException("No non-xrender yet.");
+
+ Rectangle r = component.awtComponent.getBounds();
+ return new ComponentGraphicsCopy(r.width, r.height, component);
}
public GraphicsConfiguration getDeviceConfiguration()
Index: gnu/java/awt/peer/gtk/GtkImage.java
===================================================================
RCS file:
/sources/classpath/classpath/gnu/java/awt/peer/gtk/GtkImage.java,v
retrieving revision 1.30
diff -U3 -r1.30 GtkImage.java
--- gnu/java/awt/peer/gtk/GtkImage.java 29 May 2006 16:14:59
-0000 1.30
+++ gnu/java/awt/peer/gtk/GtkImage.java 30 May 2006 03:58:47 -0000
@@ -111,6 +111,16 @@
0xFF000000);
/**
+ * The singleton GtkImage that is returned on errors by GtkToolkit.
+ */
+ private static GtkImage errorImage;
+
+ /**
+ * Allocate a PixBuf from a given ARGB32 buffer pointer
+ */
+ private native void initFromBuffer( long bufferPointer );
+
+ /**
* Returns a copy of the pixel data as a java array.
* Should be called with the GdkPixbufDecoder.pixbufLock held.
*/
@@ -306,8 +316,18 @@
props = new Hashtable();
}
- // The singleton GtkImage that is returned on errors by GtkToolkit.
- private static GtkImage errorImage;
+ /**
+ * Wraps a buffer with a GtkImage. Buffer must be + */
+ GtkImage(int width, int height, long bufferPointer)
+ {
+ this.width = width;
+ this.height = height;
+ props = new Hashtable();
+ isLoaded = true;
+ observers = null;
+ initFromBuffer( bufferPointer );
+ }
/**
* Returns an empty GtkImage with the errorLoading flag set.
Index: include/Makefile.am
===================================================================
RCS file: /sources/classpath/classpath/include/Makefile.am,v
retrieving revision 1.59
diff -U3 -r1.59 Makefile.am
--- include/Makefile.am 29 May 2006 16:14:59 -0000 1.59
+++ include/Makefile.am 30 May 2006 03:58:48 -0000
@@ -40,6 +40,7 @@
$(top_srcdir)/include/gnu_java_awt_peer_gtk_CairoSurface.h \
$(top_srcdir)/include/gnu_java_awt_peer_gtk_CairoGraphics2D.h \
$(top_srcdir)/include/gnu_java_awt_peer_gtk_ComponentGraphics.h \
+$(top_srcdir)/include/gnu_java_awt_peer_gtk_ComponentGraphicsCopy.h \
$(top_srcdir)/include/gnu_java_awt_peer_gtk_GdkFontPeer.h \
$(top_srcdir)/include/gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.h \
$(top_srcdir)/include/gnu_java_awt_peer_gtk_GdkPixbufDecoder.h \
Index: include/gnu_java_awt_peer_gtk_GtkImage.h
===================================================================
RCS file:
/sources/classpath/classpath/include/gnu_java_awt_peer_gtk_GtkImage.h,v
retrieving revision 1.7
diff -U3 -r1.7 gnu_java_awt_peer_gtk_GtkImage.h
--- include/gnu_java_awt_peer_gtk_GtkImage.h 29 May 2006 16:14:59
-0000 1.7
+++ include/gnu_java_awt_peer_gtk_GtkImage.h 30 May 2006 03:58:48
-0000
@@ -10,6 +10,7 @@
{
#endif
+JNIEXPORT void JNICALL
Java_gnu_java_awt_peer_gtk_GtkImage_initFromBuffer (JNIEnv *env,
jobject, jlong);
JNIEXPORT jintArray JNICALL
Java_gnu_java_awt_peer_gtk_GtkImage_getPixels (JNIEnv *env, jobject);
JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkImage_setPixels
(JNIEnv *env, jobject, jintArray);
JNIEXPORT jboolean JNICALL
Java_gnu_java_awt_peer_gtk_GtkImage_loadPixbuf (JNIEnv *env, jobject,
jstring);
Index: native/jni/gtk-peer/Makefile.am
===================================================================
RCS file: /sources/classpath/classpath/native/jni/gtk-peer/Makefile.am,v
retrieving revision 1.39
diff -U3 -r1.39 Makefile.am
--- native/jni/gtk-peer/Makefile.am 29 May 2006 16:14:59 -0000
1.39
+++ native/jni/gtk-peer/Makefile.am 30 May 2006 03:58:48 -0000
@@ -4,6 +4,7 @@
libgtkpeer_la_SOURCES = gnu_java_awt_peer_gtk_CairoSurface.c \
gnu_java_awt_peer_gtk_CairoGraphics2D.c \
gnu_java_awt_peer_gtk_ComponentGraphics.c \
+ gnu_java_awt_peer_gtk_ComponentGraphicsCopy.c \
gnu_java_awt_peer_gtk_GThreadNativeMethodRunner.c \
gnu_java_awt_peer_gtk_GdkFontPeer.c \
gnu_java_awt_peer_gtk_GdkGraphicsEnvironment.c \
Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoSurface.c
===================================================================
RCS file:
/sources/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoSurface.c,v
retrieving revision 1.3
diff -U3 -r1.3 gnu_java_awt_peer_gtk_CairoSurface.c
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoSurface.c 29
May 2006 17:49:24 -0000 1.3
+++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_CairoSurface.c 30
May 2006 03:58:48 -0000
@@ -226,25 +226,33 @@
* copyArea.
*/
JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_CairoSurface_copyAreaNative (JNIEnv *env,
jobject obj, - jint x, jint y, jint w,
jint h, - jint dx, jint dy, jint stride)
+Java_gnu_java_awt_peer_gtk_CairoSurface_copyAreaNative (JNIEnv *env,
+ jobject obj,
+ jint x, jint y,
+ jint w, jint h,
+ jint dx, jint dy,
+ jint stride)
{
int row;
- long srcOffset, dstOffset;
+ int srcOffset, dstOffset;
+ jint *temp;
jint *pixeldata = (jint *)getNativeObject(env, obj, BUFFER);
+ g_assert( pixeldata != NULL );
- if( pixeldata == NULL )
- return;
+ temp = g_malloc( w * 4 );
+ g_assert( temp != NULL );
- srcOffset = x + y * stride;
- dstOffset = (x + dx) + (y + dy) * stride;
+ srcOffset = x + y * (stride >> 2);
+ dstOffset = (x + dx) + (y + dy) * (stride >> 2);
for( row = 0; row < h; row++)
{
- memcpy(pixeldata + dstOffset, pixeldata + srcOffset, w * 4);
- srcOffset += stride;
- dstOffset += stride;
+ memcpy( temp, pixeldata + srcOffset, w * 4 );
+ memcpy( pixeldata + dstOffset, temp, w * 4 );
+ srcOffset += (stride >> 2);
+ dstOffset += (stride >> 2);
}
+
+ g_free( temp );
}
/*
Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c
===================================================================
RCS file:
/sources/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c,v
retrieving revision 1.2
diff -U3 -r1.2 gnu_java_awt_peer_gtk_ComponentGraphics.c
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c
29 May 2006 17:49:24 -0000 1.2
+++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_ComponentGraphics.c
30 May 2006 03:58:48 -0000
@@ -55,8 +55,9 @@
#include "gnu_java_awt_peer_gtk_ComponentGraphics.h"
-static void -grab_current_drawable (GtkWidget *widget, GdkDrawable
**draw, GdkWindow **win)
+void
+cp_java_awt_peer_gtk_ComponentGraphics_grab_current_drawable(GtkWidget
*widget,
+ GdkDrawable **draw, GdkWindow **win)
{ g_assert (widget != NULL);
g_assert (draw != NULL);
@@ -66,7 +67,7 @@
*draw = *win;
gdk_window_get_internal_paint_info (*win, draw, 0, 0); -
g_object_ref (*draw);
+ /* g_object_ref (*draw); */
/* FIXME: Unref this. */
}
@@ -107,7 +108,7 @@
widget = GTK_WIDGET (ptr);
g_assert (widget != NULL);
- grab_current_drawable (widget, &drawable, &win);
+ cp_java_awt_peer_gtk_ComponentGraphics_grab_current_drawable
(widget, &drawable, &win);
g_assert (drawable != NULL);
width = widget->allocation.width;
Index: native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c
===================================================================
RCS file:
/sources/classpath/classpath/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c,v
retrieving revision 1.21
diff -U3 -r1.21 gnu_java_awt_peer_gtk_GtkImage.c
--- native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c 29 May
2006 16:14:59 -0000 1.21
+++ native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImage.c 30 May
2006 03:58:48 -0000
@@ -257,6 +257,35 @@
}
/**
+ * Allocates a Gtk Pixbuf + */
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_GtkImage_initFromBuffer(JNIEnv *env,
jobject obj,
+ jlong bufferPointer)
+{
+ int width, height;
+ jclass cls;
+ jfieldID field;
+ GdkPixbuf *pixbuf;
+
+ g_assert( bufferPointer != NULL );
+ cls = (*env)->GetObjectClass( env, obj );
+ field = (*env)->GetFieldID( env, cls, "width", "I" );
+ g_assert( field != 0 );
+ width = (*env)->GetIntField( env, obj, field );
+
+ field = (*env)->GetFieldID( env, cls, "height", "I" );
+ g_assert( field != 0 );
+ height = (*env)->GetIntField( env, obj, field );
+
+ pixbuf = gdk_pixbuf_new_from_data( (const guchar *)bufferPointer,
+ GDK_COLORSPACE_RGB, TRUE, 8,
+ width, height, width * 4, NULL, NULL );
+ g_assert( pixbuf != NULL );
+ createRawData( env, obj, pixbuf );
+}
+
+/**
* Frees the Gtk Pixbuf.
*/
JNIEXPORT void JNICALL
Index: native/jni/gtk-peer/gtkpeer.h
===================================================================
RCS file: /sources/classpath/classpath/native/jni/gtk-peer/gtkpeer.h,v
retrieving revision 1.44
diff -U3 -r1.44 gtkpeer.h
--- native/jni/gtk-peer/gtkpeer.h 29 May 2006 16:14:59 -0000 1.44
+++ native/jni/gtk-peer/gtkpeer.h 30 May 2006 03:58:48 -0000
@@ -182,8 +182,6 @@
/* Image helpers */
GdkPixbuf *cp_gtk_image_get_pixbuf (JNIEnv *env, jobject obj);
-GdkPixmap *cp_gtk_image_get_pixmap (JNIEnv *env, jobject obj);
-jboolean cp_gtk_image_is_offscreen (JNIEnv *env, jobject obj);
/* JNI initialization functions */
void cp_gtk_button_init_jni (void);