Window.java (Window(Window,GraphicsConfiguration)): Don't try to find graphics configuration.

* java/awt/Window.java (Window(Window,GraphicsConfiguration)):
	Don't try to find graphics configuration.
	* java/awt/Toolkit.java (default_toolkit_name): Use new
	Configuration entry.
	* gnu/classpath/Configuration.java.in (default_awt_peer_toolkit):
	New global.
	* configure: Rebuilt.
	* configure.in (TOOLKIT): New subst.
	(--enable-java-awt) [xlib, gtk]: Set TOOLKIT if required.
	Do AWT tests much earlier.  Run Gtk tests.  Make jniinclude
	directory.  Make output directories for .c files.
	* Makefile.in: Rebuilt.
	* Makefile.am (lib_gnu_java_awt_peer_gtk_la_SOURCES): New macro.
	(toolexeclib_LTLIBRARIES): Added cond_gtk_ltlibrary.
	(all_java_source_files): Added new sources.
	($(lib_gnu_java_awt_peer_gtk_la_OBJECTS)): New target.
	(gtk_c_files): New macro.
	(gtk_c_source_files): New macro.
	(cond_gtk_ltlibrary): New macro.
	($(gtk_c_files)): New target.
	(lib_gnu_java_awt_peer_gtk_la_LIBADD): New macro.
	(gtk_awt_peer_sources): New macro.
	(gtk_c_headers): New macro.
	($(gtk_c_headers)): New target.
	(ACLOCAL_AMFLAGS): New macro.
	* gtk.m4, glib.m4, libart.m4: New files.
	* gnu/java/awt/peer/gtk/GdkFontMetrics.java,
	gnu/java/awt/peer/gtk/GdkGraphics.java,
	gnu/java/awt/peer/gtk/GtkArg.java,
	gnu/java/awt/peer/gtk/GtkArgList.java,
	gnu/java/awt/peer/gtk/GtkButtonPeer.java,
	gnu/java/awt/peer/gtk/GtkCanvasPeer.java,
	gnu/java/awt/peer/gtk/GtkCheckboxGroupPeer.java,
	gnu/java/awt/peer/gtk/GtkCheckboxMenuItemPeer.java,
	gnu/java/awt/peer/gtk/GtkCheckboxPeer.java,
	gnu/java/awt/peer/gtk/GtkChoicePeer.java,
	gnu/java/awt/peer/gtk/GtkClipboard.java,
	gnu/java/awt/peer/gtk/GtkComponentPeer.java,
	gnu/java/awt/peer/gtk/GtkContainerPeer.java,
	gnu/java/awt/peer/gtk/GtkDialogPeer.java,
	gnu/java/awt/peer/gtk/GtkFileDialogPeer.java,
	gnu/java/awt/peer/gtk/GtkFontPeer.java,
	gnu/java/awt/peer/gtk/GtkFramePeer.java,
	gnu/java/awt/peer/gtk/GtkGenericPeer.java,
	gnu/java/awt/peer/gtk/GtkImage.java,
	gnu/java/awt/peer/gtk/GtkImagePainter.java,
	gnu/java/awt/peer/gtk/GtkLabelPeer.java,
	gnu/java/awt/peer/gtk/GtkListPeer.java,
	gnu/java/awt/peer/gtk/GtkMainThread.java,
	gnu/java/awt/peer/gtk/GtkMenuBarPeer.java,
	gnu/java/awt/peer/gtk/GtkMenuComponentPeer.java,
	gnu/java/awt/peer/gtk/GtkMenuItemPeer.java,
	gnu/java/awt/peer/gtk/GtkMenuPeer.java,
	gnu/java/awt/peer/gtk/GtkOffScreenImage.java,
	gnu/java/awt/peer/gtk/GtkPanelPeer.java,
	gnu/java/awt/peer/gtk/GtkPopupMenuPeer.java,
	gnu/java/awt/peer/gtk/GtkScrollbarPeer.java,
	gnu/java/awt/peer/gtk/GtkScrollPanePeer.java,
	gnu/java/awt/peer/gtk/GtkTextAreaPeer.java,
	gnu/java/awt/peer/gtk/GtkTextComponentPeer.java,
	gnu/java/awt/peer/gtk/GtkTextFieldPeer.java,
	gnu/java/awt/peer/gtk/GtkToolkit.java,
	gnu/java/awt/peer/gtk/GtkWindowPeer.java,
	gnu/java/awt/peer/gtk/TestAWT.java,
	gnu/java/awt/peer/gtk/Test.java: New files from Classpath.
	* jni/gtk-peer/gnu_java_awt_peer_gtk_GdkFontMetrics.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GdkGraphics.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkButtonPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCanvasPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxMenuItemPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkClipboard.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkComponentPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkEvents.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkFileDialogPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkImagePainter.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkLabelPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMainThread.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuBarPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuItemPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkMenuPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPanelPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkPopupMenuPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollBarPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkScrollPanePeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextAreaPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextComponentPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkTextFieldPeer.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkToolkit.c,
	jni/gtk-peer/gnu_java_awt_peer_gtk_GtkWindowPeer.c,
	jni/gtk-peer/gthread-jni.c, jni/gtk-peer/gthread-jni.h,
	jni/gtk-peer/gtkpeer.h, jni/classpath/jcl.c, jni/classpath/jcl.h,
	jni/classpath/jnilink.c, jni/classpath/jnilink.h,
	jni/classpath/native_state.c, jni/classpath/native_state.h,
	jni/classpath/primlib.c, jni/classpath/primlib.h: Likewise.

From-SVN: r62187
This commit is contained in:
Tom Tromey
2003-01-31 17:54:14 +00:00
committed by Tom Tromey
parent 371ac72558
commit 5aac1dac62
93 changed files with 16186 additions and 1309 deletions
@@ -0,0 +1,108 @@
/* GdkFontMetrics.java
Copyright (C) 1999, 2002 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.*;
public class GdkFontMetrics extends FontMetrics
{
private final int native_state = GtkGenericPeer.getUniqueInteger();
private static final int ASCENT = 0, MAX_ASCENT = 1,
DESCENT = 2, MAX_DESCENT = 3,
MAX_ADVANCE = 4;
private int[] metrics;
private native int[] initState (String xlfd, int pts);
public GdkFontMetrics (Font font)
{
super (font);
metrics = initState (((GtkFontPeer)font.getPeer ()).getXLFD (),
font.getSize ());
}
native public int stringWidth (String str);
public int charWidth (char ch)
{
return stringWidth (new String (new char[] { ch }));
}
public int charsWidth (char data[], int off, int len)
{
return stringWidth (new String (data, off, len));
}
/*
Sun's Motif implementation always returns 0 or 1 here (???), but
going by the X11 man pages, it seems as though we should return
font.ascent + font.descent.
*/
public int getLeading ()
{
return 1;
// return metrics[ASCENT] + metrics[DESCENT];
}
public int getAscent ()
{
return metrics[ASCENT];
}
public int getMaxAscent ()
{
return metrics[MAX_ASCENT];
}
public int getDescent ()
{
return metrics[DESCENT];
}
public int getMaxDescent ()
{
return metrics[MAX_DESCENT];
}
public int getMaxAdvance ()
{
return metrics[MAX_ADVANCE];
}
}
@@ -0,0 +1,322 @@
/* GdkGraphics.java
Copyright (C) 1998, 1999, 2002 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.*;
import java.awt.image.*;
public class GdkGraphics extends Graphics
{
private final int native_state = GtkGenericPeer.getUniqueInteger();
Color color, xorColor;
GtkComponentPeer component;
Font font;
Rectangle clip;
int xOffset = 0;
int yOffset = 0;
static final int GDK_COPY = 0, GDK_XOR = 2;
native int[] initState (GtkComponentPeer component);
native void initState (int width, int height);
native void copyState (GdkGraphics g);
GdkGraphics (GdkGraphics g)
{
color = g.color;
xorColor = g.xorColor;
font = g.font;
clip = new Rectangle (g.clip);
component = g.component;
copyState (g);
}
GdkGraphics (int width, int height)
{
initState (width, height);
color = Color.black;
clip = new Rectangle (0, 0, width, height);
font = new Font ("Dialog", Font.PLAIN, 10);
}
GdkGraphics (GtkComponentPeer component)
{
this.component = component;
int rgb[] = initState (component);
color = new Color (rgb[0], rgb[1], rgb[2]);
font = new Font ("Dialog", Font.PLAIN, 10);
Dimension d = component.awtComponent.getSize ();
clip = new Rectangle (0, 0, d.width, d.height);
}
public native void clearRect (int x, int y, int width, int height);
public void clipRect (int x, int y, int width, int height)
{
clip = clip.intersection (new Rectangle (x, y, width, height));
setClipRectangle (clip.x, clip.y, clip.width, clip.height);
}
native public void copyArea (int x, int y, int width, int height,
int dx, int dy);
public Graphics create ()
{
return new GdkGraphics (this);
}
// public Graphics create (int x, int y, int width, int height)
// {
// GdkGraphics g = new GdkGraphics (this);
// System.out.println ("translating by: " + x +" " + y);
// g.translate (x, y);
// g.clipRect (0, 0, width, height);
// return g;
// }
native public void dispose ();
native void copyPixmap (Graphics g, int x, int y, int width, int height);
public boolean drawImage (Image img, int x, int y,
Color bgcolor, ImageObserver observer)
{
if (img instanceof GtkOffScreenImage)
{
copyPixmap (img.getGraphics (),
x, y, img.getWidth (null), img.getHeight (null));
return true;
}
GtkImage image = (GtkImage) img;
new GtkImagePainter (image, this, x, y, -1, -1, bgcolor);
return image.isLoaded ();
}
public boolean drawImage (Image img, int x, int y, ImageObserver observer)
{
if (img instanceof GtkOffScreenImage)
{
copyPixmap (img.getGraphics (),
x, y, img.getWidth (null), img.getHeight (null));
return true;
}
return drawImage (img, x, y, component.getBackground (), observer);
}
public boolean drawImage (Image img, int x, int y, int width, int height,
Color bgcolor, ImageObserver observer)
{
if (img instanceof GtkOffScreenImage)
{
throw new RuntimeException ();
}
GtkImage image = (GtkImage) img;
new GtkImagePainter (image, this, x, y, width, height, bgcolor);
return image.isLoaded ();
}
public boolean drawImage (Image img, int x, int y, int width, int height,
ImageObserver observer)
{
return drawImage (img, x, y, width, height, component.getBackground (),
observer);
}
public boolean drawImage (Image img, int dx1, int dy1, int dx2, int dy2,
int sx1, int sy1, int sx2, int sy2,
Color bgcolor, ImageObserver observer)
{
if (img instanceof GtkOffScreenImage)
{
throw new RuntimeException ();
}
GtkImage image = (GtkImage) img;
new GtkImagePainter (image, this, dx1, dy1, dx2, dy2,
sx1, sy1, sx2, sy2, bgcolor);
return image.isLoaded ();
}
public boolean drawImage (Image img, int dx1, int dy1, int dx2, int dy2,
int sx1, int sy1, int sx2, int sy2,
ImageObserver observer)
{
return drawImage (img, dx1, dy1, dx2, dy2, sx1, sy1, sx2, sy2,
component.getBackground (), observer);
}
native public void drawLine (int x1, int y1, int x2, int y2);
native public void drawArc (int x, int y, int width, int height,
int startAngle, int arcAngle);
native public void fillArc (int x, int y, int width, int height,
int startAngle, int arcAngle);
native public void drawOval(int x, int y, int width, int height);
native public void fillOval(int x, int y, int width, int height);
native public void drawPolygon(int[] xPoints, int[] yPoints, int nPoints);
native public void fillPolygon(int[] xPoints, int[] yPoints, int nPoints);
native public void drawPolyline(int[] xPoints, int[] yPoints, int nPoints);
native public void drawRect(int x, int y, int width, int height);
native public void fillRect (int x, int y, int width, int height);
native void drawString (String str, int x, int y, String fname, int size);
public void drawString (String str, int x, int y)
{
drawString (str, x, y,
((GtkFontPeer)font.getPeer ()).getXLFD (), font.getSize ());
}
public void drawRoundRect(int x, int y, int width, int height,
int arcWidth, int arcHeight)
{
// System.out.println ("drawRoundRect called [UNIMPLEMENTED]");
}
public void fillRoundRect (int x, int y, int width, int height,
int arcWidth, int arcHeight)
{
// System.out.println ("fillRoundRect called [UNIMPLEMENTED]");
}
public Shape getClip ()
{
return getClipBounds ();
}
public Rectangle getClipBounds ()
{
// System.out.println ("returning CLIP: " + clip);
return new Rectangle (clip.x, clip.y, clip.width, clip.height);
}
public Color getColor ()
{
return color;
}
public Font getFont ()
{
return font;
}
public FontMetrics getFontMetrics (Font font)
{
return new GdkFontMetrics (font);
}
native void setClipRectangle (int x, int y, int width, int height);
public void setClip (int x, int y, int width, int height)
{
clip.x = x;
clip.y = y;
clip.width = width;
clip.height = height;
setClipRectangle (x, y, width, height);
}
public void setClip (Rectangle clip)
{
setClip (clip.x, clip.y, clip.width, clip.height);
}
public void setClip (Shape clip)
{
setClip (clip.getBounds ());
}
native private void setFGColor (int red, int green, int blue);
public void setColor (Color c)
{
color = c;
if (xorColor == null) /* paint mode */
setFGColor (color.getRed (), color.getGreen (), color.getBlue ());
else /* xor mode */
setFGColor (color.getRed () ^ xorColor.getRed (),
color.getGreen () ^ xorColor.getGreen (),
color.getBlue () ^ xorColor.getBlue ());
}
public void setFont (Font font)
{
this.font = font;
}
native void setFunction (int gdk_func);
public void setPaintMode ()
{
xorColor = null;
setFunction (GDK_COPY);
setFGColor (color.getRed (), color.getGreen (), color.getBlue ());
}
public void setXORMode (Color c)
{
xorColor = c;
setFunction (GDK_XOR);
setFGColor (color.getRed () ^ xorColor.getRed (),
color.getGreen () ^ xorColor.getGreen (),
color.getBlue () ^ xorColor.getBlue ());
}
native public void translateNative (int x, int y);
public void translate (int x, int y)
{
clip.x -= x;
clip.y -= y;
translateNative (x, y);
}
}
+61
View File
@@ -0,0 +1,61 @@
/* GtkArg.java
Copyright (C) 1999 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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;
public class GtkArg
{
String name;
Object value;
public GtkArg (String name, Object value)
{
this.name = name;
this.value = value;
}
public String getName ()
{
return name;
}
public Object getValue ()
{
return value;
}
}
@@ -0,0 +1,75 @@
/* GtkArgList.java
Copyright (C) 1999 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.util.Vector;
public class GtkArgList extends Vector
{
void add (GtkArg arg)
{
addElement (arg);
}
void add (String name, boolean value)
{
addElement (new GtkArg (name, new Boolean (value)));
}
void add (String name, int value)
{
addElement (new GtkArg (name, new Integer (value)));
}
void add (String name, float value)
{
addElement (new GtkArg (name, new Float (value)));
}
void add (String name, Object value)
{
addElement (new GtkArg (name, value));
}
synchronized void setArgs (GtkComponentPeer cp)
{
for (int i = 0; i < elementCount; i++)
cp.set ((GtkArg)elementData[i]);
}
}
@@ -0,0 +1,89 @@
/* GtkButtonPeer.java -- Implements ButtonPeer with GTK
Copyright (C) 1998, 1999 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.*;
import java.awt.event.MouseEvent;
import java.awt.event.KeyEvent;
import java.awt.peer.*;
public class GtkButtonPeer extends GtkComponentPeer
implements ButtonPeer
{
native void create ();
public GtkButtonPeer (Button b)
{
super (b);
}
public void setLabel (String label)
{
set ("label", label);
}
public void handleEvent (AWTEvent e)
{
if (e.getID () == MouseEvent.MOUSE_CLICKED && isEnabled ()
&& !modalHasGrab ())
{
MouseEvent me = (MouseEvent) e;
if (!me.isConsumed ()
&& (me.getModifiers () & MouseEvent.BUTTON1_MASK) != 0)
postActionEvent (((Button)awtComponent).getActionCommand (),
me.getModifiers ());
}
if (e.getID () == KeyEvent.KEY_PRESSED)
{
KeyEvent ke = (KeyEvent) e;
if (!ke.isConsumed () && ke.getKeyCode () == KeyEvent.VK_SPACE)
postActionEvent (((Button)awtComponent).getActionCommand (),
ke.getModifiers ());
}
super.handleEvent (e);
}
public void getArgs (Component component, GtkArgList args)
{
super.getArgs (component, args);
args.add ("label", ((Button)component).getLabel ());
}
}
@@ -0,0 +1,92 @@
/* GtkCanvasPeer.java
Copyright (C) 1998, 1999 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.*;
import java.awt.event.PaintEvent;
import java.awt.peer.*;
public class GtkCanvasPeer extends GtkComponentPeer implements CanvasPeer
{
native void create ();
public GtkCanvasPeer (Canvas c)
{
super (c);
}
public Graphics getGraphics ()
{
return new GdkGraphics (this);
}
public void handleEvent (AWTEvent event)
{
int id = event.getID();
switch (id)
{
case PaintEvent.PAINT:
case PaintEvent.UPDATE:
{
try
{
Graphics g = getGraphics ();
g.setClip (((PaintEvent)event).getUpdateRect());
if (id == PaintEvent.PAINT)
awtComponent.paint (g);
else
awtComponent.update (g);
g.dispose ();
}
catch (InternalError e)
{
System.err.println (e);
}
}
break;
}
}
/* Preferred size for a drawing widget is always what the user requested */
public Dimension getPreferredSize ()
{
return awtComponent.getSize ();
}
}
@@ -0,0 +1,86 @@
/* GtkCheckboxGroupPeer.java - Wrap a CheckboxGroup
Copyright (C) 2002 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.*;
import java.awt.event.*;
import java.util.*;
// Note that there is no peer interface for a CheckboxGroup. We
// introduce our own in order to make it easier to keep a piece of
// native state for each one.
public class GtkCheckboxGroupPeer extends GtkGenericPeer
{
// This maps from a CheckboxGroup to the native peer.
private static WeakHashMap map = new WeakHashMap ();
// Find the native peer corresponding to a CheckboxGroup.
public static synchronized GtkCheckboxGroupPeer
getCheckboxGroupPeer (CheckboxGroup group)
{
if (group == null)
return null;
GtkCheckboxGroupPeer nat = (GtkCheckboxGroupPeer) map.get (group);
if (nat == null)
{
nat = new GtkCheckboxGroupPeer ();
map.put (group, nat);
}
return nat;
}
private GtkCheckboxGroupPeer ()
{
// We don't need any special state here. Note that we can't store
// a reference to the java-side CheckboxGroup. That would mean
// they could never be collected.
super (null);
}
// Dispose of our native resources.
public native void dispose ();
// Remove a given checkbox from this group.
public native void remove (GtkCheckboxPeer box);
// When collected, clean up the native state.
protected void finalize ()
{
dispose ();
}
}
@@ -0,0 +1,56 @@
/* GtkCheckboxMenuItemPeer.java -- Implements CheckboxMenuItemPeer with GTK+
Copyright (C) 1999 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.*;
import java.awt.peer.CheckboxMenuItemPeer;
import java.awt.peer.MenuItemPeer;
public class GtkCheckboxMenuItemPeer extends GtkMenuItemPeer
implements CheckboxMenuItemPeer
{
native void create (String label);
public GtkCheckboxMenuItemPeer (CheckboxMenuItem menu)
{
super (menu);
setState (menu.getState ());
}
native public void setState (boolean t);
}
@@ -0,0 +1,114 @@
/* GtkCheckboxPeer.java -- Implements CheckboxPeer with GTK
Copyright (C) 1998, 1999, 2002 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.peer.*;
import java.awt.*;
public class GtkCheckboxPeer extends GtkComponentPeer
implements CheckboxPeer
{
// Group from last time it was set.
public GtkCheckboxGroupPeer old_group;
public native void nativeCreate (GtkCheckboxGroupPeer group);
public native void nativeSetCheckboxGroup (GtkCheckboxGroupPeer group);
public native void connectHooks ();
public GtkCheckboxPeer (Checkbox c)
{
super (c);
}
// We can't fully use the ordinary getArgs code here, due to
// oddities of this particular widget. In particular we must be
// able to switch between a checkbutton and a radiobutton
// dynamically.
public void create ()
{
CheckboxGroup g = ((Checkbox) awtComponent).getCheckboxGroup ();
old_group = GtkCheckboxGroupPeer.getCheckboxGroupPeer (g);
nativeCreate (old_group);
}
public void setState (boolean state)
{
set ("active", state);
}
public void setLabel (String label)
{
set ("label", label);
}
public void setCheckboxGroup (CheckboxGroup group)
{
GtkCheckboxGroupPeer gp
= GtkCheckboxGroupPeer.getCheckboxGroupPeer (group);
if (gp != old_group)
{
if (old_group != null)
old_group.remove (this);
nativeSetCheckboxGroup (gp);
old_group = gp;
}
}
public void getArgs (Component component, GtkArgList args)
{
super.getArgs (component, args);
args.add ("active", ((Checkbox) component).getState ());
args.add ("label", ((Checkbox) component).getLabel ());
}
// Override the superclass postItemEvent so that the peer doesn't
// need information that we have.
public void postItemEvent (Object item, int stateChange)
{
super.postItemEvent (awtComponent, stateChange);
}
public void dispose ()
{
// Notify the group so that the native state can be cleaned up
// appropriately.
if (old_group != null)
old_group.remove (this);
super.dispose ();
}
}
@@ -0,0 +1,90 @@
/* GtkChoicePeer.java -- Implements ChoicePeer with GTK
Copyright (C) 1998, 1999 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.peer.*;
import java.awt.*;
import java.awt.event.*;
public class GtkChoicePeer extends GtkComponentPeer
implements ChoicePeer
{
native void create ();
public GtkChoicePeer (Choice c)
{
super (c);
int count = c.getItemCount ();
if (count > 0)
{
String items[] = new String[count];
for (int i = 0; i < count; i++)
items[i] = c.getItem (i);
append (items);
}
}
native void append (String items[]);
native public void add (String item, int index);
native public void remove (int index);
native public void select (int position);
public void addItem (String item, int position)
{
add (item, position);
}
/*
public void handleEvent (AWTEvent event)
{
if (event instanceof ItemEvent)
((Choice) awtComponent).select ((String) ((ItemEvent)event).getItem ());
super.handleEvent (event);
}
*/
protected void postItemEvent (Object item, int stateChange)
{
if (stateChange == ItemEvent.SELECTED)
((Choice) awtComponent).select ((String) item);
super.postItemEvent (item, stateChange);
}
}
@@ -0,0 +1,167 @@
/* GtkClipboard.java
Copyright (C) 1999 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.*;
import java.io.*;
import java.net.*;
import java.util.*;
import java.awt.datatransfer.*;
import java.awt.image.*;
import java.awt.peer.*;
public class GtkClipboard extends Clipboard
{
/* the number of milliseconds that we'll wait around for the
owner of the GDK_SELECTION_PRIMARY selection to convert
the requested data */
final static int SELECTION_RECEIVED_TIMEOUT = 5000;
/* We currently only support transferring of text between applications */
static String selection;
static Object selectionLock = new Object ();
static boolean hasSelection = false;
protected
GtkClipboard ()
{
super ("System Clipboard");
initNativeState ();
}
public Transferable
getContents (Object requestor)
{
synchronized (this)
{
if (hasSelection)
return contents;
}
/* Java doesn't own the selection, so we need to ask X11 */
synchronized (selectionLock)
{
requestStringConversion ();
try
{
selectionLock.wait (SELECTION_RECEIVED_TIMEOUT);
}
catch (InterruptedException e)
{
return null;
}
return (selection == null) ? null : new StringSelection (selection);
}
}
void
stringSelectionReceived (String newSelection)
{
synchronized (selectionLock)
{
selection = newSelection;
selectionLock.notify ();
}
}
/* convert Java clipboard data into a String suitable for sending
to another application */
synchronized String
stringSelectionHandler () throws IOException
{
String selection = null;
try {
if (contents.isDataFlavorSupported (DataFlavor.stringFlavor))
selection = (String)contents.getTransferData (DataFlavor.stringFlavor);
else if (contents.isDataFlavorSupported (DataFlavor.plainTextFlavor))
{
StringBuffer sbuf = new StringBuffer ();
InputStreamReader reader;
char readBuf[] = new char[512];
int numChars;
reader = new InputStreamReader
((InputStream)
contents.getTransferData (DataFlavor.plainTextFlavor), "UNICODE");
while (true)
{
numChars = reader.read (readBuf);
if (numChars == -1)
break;
sbuf.append (readBuf, 0, numChars);
}
selection = new String (sbuf);
}
} catch (Exception e) { }
return selection;
}
public synchronized void
setContents (Transferable contents, ClipboardOwner owner)
{
selectionGet ();
this.contents = contents;
this.owner = owner;
hasSelection = true;
}
synchronized
void selectionClear ()
{
hasSelection = false;
if (owner != null)
{
owner.lostOwnership (this, contents);
owner = null;
contents = null;
}
}
native void initNativeState ();
native static void requestStringConversion ();
native static void selectionGet ();
}
@@ -0,0 +1,391 @@
/* GtkComponentPeer.java -- Implements ComponentPeer with GTK
Copyright (C) 1998, 1999, 2002 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.*;
import java.awt.event.*;
import java.awt.image.*;
import java.awt.peer.ComponentPeer;
public class GtkComponentPeer extends GtkGenericPeer
implements ComponentPeer
{
Component awtComponent;
/* this isEnabled differs from Component.isEnabled, in that it
knows if a parent is disabled. In that case Component.isEnabled
may return true, but our isEnabled will always return false */
native boolean isEnabled ();
native static boolean modalHasGrab ();
native int[] gtkWidgetGetForeground ();
native int[] gtkWidgetGetBackground ();
native void gtkWidgetSetVisible (boolean b);
native void gtkWidgetGetDimensions(int[] dim);
native void gtkWidgetGetLocationOnScreen(int[] point);
native void gtkWidgetSetCursor (int type);
void create ()
{
throw new RuntimeException ();
}
native void connectHooks ();
protected GtkComponentPeer (Component awtComponent)
{
super (awtComponent);
this.awtComponent = awtComponent;
/* temporary try/catch block until all peers use this creation method */
try {
create ();
GtkArgList args = new GtkArgList ();
getArgs (awtComponent, args);
args.setArgs (this);
connectHooks ();
if (awtComponent.getForeground () == null)
awtComponent.setForeground (getForeground ());
if (awtComponent.getBackground () == null)
awtComponent.setBackground (getBackground ());
// if (c.getFont () == null)
// c.setFont (cp.getFont ());
if (! (awtComponent instanceof Window))
{
setCursor (awtComponent.getCursor ());
Rectangle bounds = awtComponent.getBounds ();
setBounds (bounds.x, bounds.y, bounds.width, bounds.height);
}
} catch (RuntimeException ex) { ; }
}
public int checkImage (Image image, int width, int height,
ImageObserver observer)
{
GtkImage i = (GtkImage) image;
return i.checkImage ();
}
public Image createImage (ImageProducer producer)
{
return new GtkImage (producer, null);
}
public Image createImage (int width, int height)
{
GdkGraphics g = new GdkGraphics (width, height);
return new GtkOffScreenImage (null, g, width, height);
}
public void disable ()
{
setEnabled (false);
}
public void enable ()
{
setEnabled (true);
}
public ColorModel getColorModel ()
{
return ColorModel.getRGBdefault ();
}
public FontMetrics getFontMetrics (Font font)
{
return new GdkFontMetrics (font);
}
public Graphics getGraphics ()
{
return null;
}
public Point getLocationOnScreen ()
{
int point[] = new int[2];
gtkWidgetGetLocationOnScreen (point);
return new Point (point[0], point[1]);
}
public Dimension getMinimumSize ()
{
int dim[]=new int[2];
gtkWidgetGetDimensions (dim);
Dimension d = new Dimension (dim[0],dim[1]);
return (d);
}
public Dimension getPreferredSize ()
{
int dim[]=new int[2];
gtkWidgetGetDimensions (dim);
Dimension d = new Dimension (dim[0],dim[1]);
return (d);
}
public Toolkit getToolkit ()
{
return Toolkit.getDefaultToolkit();
}
public void handleEvent (AWTEvent event)
{
}
public boolean isFocusTraversable ()
{
return true;
}
public Dimension minimumSize ()
{
return getMinimumSize();
}
public void paint (Graphics g)
{
awtComponent.paint (g);
}
public Dimension preferredSize()
{
return getPreferredSize();
}
public boolean prepareImage (Image image, int width, int height,
ImageObserver observer)
{
GtkImage i = (GtkImage) image;
if (i.isLoaded ()) return true;
class PrepareImage extends Thread
{
GtkImage image;
ImageObserver observer;
PrepareImage (GtkImage image, ImageObserver observer)
{
this.image = image;
this.observer = observer;
}
public void run ()
{
// XXX: need to return data to image observer
image.source.startProduction (null);
}
}
new PrepareImage (i, observer).start ();
return false;
}
public void print (Graphics g)
{
throw new RuntimeException ();
}
public void repaint (long tm, int x, int y, int width, int height)
{
q.postEvent (new PaintEvent (awtComponent, PaintEvent.UPDATE,
new Rectangle (x, y, width, height)));
}
native public void requestFocus ();
public void reshape (int x, int y, int width, int height)
{
setBounds (x, y, width, height);
}
public void setBackground (Color c)
{
// System.out.println ("setBackground [UNIMPLEMENTED");
}
native public void setNativeBounds (int x, int y, int width, int height);
public void setBounds (int x, int y, int width, int height)
{
Component parent = awtComponent.getParent ();
if (parent instanceof Frame)
{
Insets insets = ((Frame)parent).getInsets ();
/* convert Java's coordinate space into GTK+'s coordinate space */
setNativeBounds (x-insets.left, y-insets.top, width, height);
}
else
setNativeBounds (x, y, width, height);
}
public void setCursor (Cursor cursor)
{
gtkWidgetSetCursor (cursor.getType ());
}
public void setEnabled (boolean b)
{
set ("sensitive", b);
}
public void setFont (Font f)
{
}
public void setForeground (Color c)
{
// System.out.println ("setForeground [UNIMPLEMENTED");
}
public Color getForeground ()
{
int rgb[] = gtkWidgetGetForeground ();
return new Color (rgb[0], rgb[1], rgb[2]);
}
public Color getBackground ()
{
int rgb[] = gtkWidgetGetBackground ();
return new Color (rgb[0], rgb[1], rgb[2]);
}
public void setVisible (boolean b)
{
set ("visible", b);
}
public void hide ()
{
setVisible (false);
}
public void show ()
{
setVisible (true);
}
protected void postMouseEvent(int id, long when, int mods, int x, int y,
int clickCount, boolean popupTrigger)
{
q.postEvent(new MouseEvent(awtComponent, id, when, mods, x, y,
clickCount, popupTrigger));
}
protected void postExposeEvent (int x, int y, int width, int height)
{
q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
new Rectangle (x, y, width, height)));
}
protected void postKeyEvent (int id, long when, int mods,
int keyCode, char keyChar)
{
q.postEvent (new KeyEvent (awtComponent, id, when, mods,
keyCode, keyChar));
}
protected void postFocusEvent (int id, boolean temporary)
{
q.postEvent (new FocusEvent (awtComponent, id, temporary));
}
protected void postItemEvent (Object item, int stateChange)
{
q.postEvent (new ItemEvent ((ItemSelectable)awtComponent,
ItemEvent.ITEM_STATE_CHANGED,
item, stateChange));
}
public void getArgs (Component component, GtkArgList args)
{
args.add ("visible", component.isVisible ());
args.add ("sensitive", component.isEnabled ());
ComponentPeer p;
do
{
component = component.getParent ();
p = component.getPeer ();
} while (p instanceof java.awt.peer.LightweightPeer);
args.add ("parent", p);
}
native void set (String name, String value);
native void set (String name, boolean value);
native void set (String name, int value);
native void set (String name, float value);
native void set (String name, Object value);
void set (GtkArg arg)
{
String name = arg.getName ();
Object value = arg.getValue ();
if (value instanceof Boolean)
set (name, ((Boolean)value).booleanValue ());
else if (value instanceof Integer)
set (name, ((Integer)value).intValue ());
else if (value instanceof Float)
set (name, ((Float)value).floatValue ());
else if (value instanceof String)
set (name, ((String) value));
else
set (name, value);
}
public GraphicsConfiguration getGraphicsConfiguration ()
{
// FIXME: just a stub for now.
return null;
}
public void setEventMask (long mask)
{
// FIXME: just a stub for now.
}
}
@@ -0,0 +1,125 @@
/* GtkContainerPeer.java -- Implements ContainerPeer with GTK
Copyright (C) 1998, 1999 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.*;
import java.awt.event.*;
import java.awt.peer.ContainerPeer;
public class GtkContainerPeer extends GtkComponentPeer
implements ContainerPeer
{
Insets insets;
Container c;
public GtkContainerPeer(Container c)
{
super (c);
this.c = c;
insets = new Insets (0, 0, 0, 0);
}
public void beginValidate()
{
}
public void endValidate()
{
// q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
// new Rectangle (x, y, width, height)));
// Graphics gc = getGraphics ();
// if (gc != null)
// {
// awtComponent.update (gc);
// gc.dispose ();
// }
// System.out.println ("got here");
// awtComponent.repaint ();
}
public Insets getInsets()
{
return insets;
}
public Insets insets()
{
return getInsets ();
}
public void setBounds (int x, int y, int width, int height)
{
super.setBounds (x, y, width, height);
awtComponent.validate ();
}
public Graphics getGraphics ()
{
return new GdkGraphics (this);
}
public void handleEvent (AWTEvent event)
{
int id = event.getID();
switch (id)
{
case PaintEvent.PAINT:
case PaintEvent.UPDATE:
{
try
{
Graphics g = getGraphics ();
g.setClip (((PaintEvent)event).getUpdateRect());
if (id == PaintEvent.PAINT)
awtComponent.paint (g);
else
awtComponent.update (g);
g.dispose ();
}
catch (InternalError e)
{
System.err.println (e);
}
}
break;
}
}
}
@@ -0,0 +1,76 @@
/* GtkDialogPeer.java -- Implements DialogPeer with GTK
Copyright (C) 1998, 1999, 2002 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.*;
import java.awt.peer.*;
import java.awt.event.*;
public class GtkDialogPeer extends GtkWindowPeer
implements DialogPeer
{
public GtkDialogPeer (Dialog dialog)
{
super (dialog);
}
void create ()
{
create (GTK_WINDOW_DIALOG);
}
public void getArgs (Component component, GtkArgList args)
{
super.getArgs (component, args);
Dialog dialog = (Dialog) component;
args.add ("modal", dialog.isModal ());
args.add ("allow_shrink", dialog.isResizable ());
args.add ("allow_grow", dialog.isResizable ());
}
public void handleEvent (AWTEvent event)
{
// int id = event.getID();
// if (id == WindowEvent.WINDOW_CLOSING)
// System.out.println ("got a closing event");
}
}
@@ -0,0 +1,70 @@
/* GtkFileDialogPeer.java -- Implements FileDialogPeer with GTK
Copyright (C) 1998, 1999, 2002 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.io.FilenameFilter;
import java.awt.peer.*;
import java.awt.*;
public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer
{
native void create ();
public GtkFileDialogPeer (FileDialog fd)
{
super (fd);
}
public void setDirectory (String directory)
{
setFile (directory);
}
public native void setFile (String file);
public native void connectHooks ();
public void setFilenameFilter (FilenameFilter filter)
{
/* GTK has no filters. */
}
public Graphics getGraphics ()
{
return null;
}
}
@@ -0,0 +1,74 @@
/* GtkFontPeer.java -- Implements FontPeer with GTK+
Copyright (C) 1999 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.peer.FontPeer;
import java.awt.Font;
import java.util.ResourceBundle;
public class GtkFontPeer implements FontPeer
{
private static ResourceBundle bundle;
static
{
try
{
bundle = ResourceBundle.getBundle ("gnu.java.awt.peer.gtk.font");
}
catch (Throwable ignored)
{
bundle = null;
}
}
final private String Xname;
public GtkFontPeer (String name, int style)
{
if (bundle != null)
Xname = bundle.getString (name.toLowerCase () + "." + style);
else
Xname = "-*-*-medium-r-normal-*-12-*-*-*-c-*-*-*";
}
public String getXLFD ()
{
return Xname;
}
}
@@ -0,0 +1,132 @@
/* GtkFramePeer.java -- Implements FramePeer with GTK
Copyright (C) 1999, 2002 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.*;
import java.awt.peer.*;
import java.awt.event.*;
public class GtkFramePeer extends GtkWindowPeer
implements FramePeer
{
int menuBarHeight = 0;
native int getMenuBarHeight ();
native public void setMenuBarPeer (MenuBarPeer bar);
public void setMenuBar (MenuBar bar)
{
if (bar == null)
setMenuBarPeer (null);
else
setMenuBarPeer ((MenuBarPeer) bar.getPeer ());
}
public GtkFramePeer (Frame frame)
{
super (frame);
}
void create ()
{
create (GTK_WINDOW_TOPLEVEL);
}
public void getArgs (Component component, GtkArgList args)
{
super.getArgs (component, args);
Frame frame = (Frame) component;
args.add ("title", frame.getTitle ());
args.add ("allow_shrink", frame.isResizable ());
args.add ("allow_grow", frame.isResizable ());
}
public void setIconImage (Image image)
{
/* TODO: Waiting on Toolkit Image routines */
}
public Graphics getGraphics ()
{
GdkGraphics g = new GdkGraphics (this);
g.translateNative (-insets.left, -insets.top);
return g;
}
public void setBounds (int x, int y, int width, int height)
{
super.setBounds (0, 0, width - insets.left - insets.right,
height - insets.top - insets.bottom + menuBarHeight);
}
protected void postConfigureEvent (int x, int y, int width, int height,
int top, int left, int bottom, int right)
{
if (((Frame)awtComponent).getMenuBar () != null)
{
menuBarHeight = getMenuBarHeight ();
top += menuBarHeight;
}
super.postConfigureEvent (0, 0,
width + left + right,
height + top + bottom - menuBarHeight,
top, left, bottom, right);
}
protected void postMouseEvent(int id, long when, int mods, int x, int y,
int clickCount, boolean popupTrigger)
{
super.postMouseEvent (id, when, mods,
x + insets.left, y + insets.top,
clickCount, popupTrigger);
}
protected void postExposeEvent (int x, int y, int width, int height)
{
// System.out.println ("x + insets.left:" + (x + insets.left));
// System.out.println ("y + insets.top :" + (y + insets.top));
q.postEvent (new PaintEvent (awtComponent, PaintEvent.PAINT,
new Rectangle (x + insets.left,
y + insets.top,
width, height)));
}
}
@@ -0,0 +1,84 @@
/* GtkGenericPeer.java - Has a hashcode. Yuck.
Copyright (C) 1998, 1999, 2002 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.*;
import java.awt.event.*;
public class GtkGenericPeer
{
final int native_state = getUniqueInteger ();
// Next native state value we will assign.
private static int next_native_state = 0;
// The widget or other java-side object we wrap.
protected Object awtWidget;
// Global event queue.
protected static EventQueue q = null;
// Dispose of our native state.
public native void dispose ();
protected GtkGenericPeer (Object awtWidget)
{
this.awtWidget = awtWidget;
}
public static void enableQueue (EventQueue sq)
{
if (q == null)
q = sq;
}
protected void postActionEvent (String command, int mods)
{
q.postEvent (new ActionEvent (awtWidget, ActionEvent.ACTION_PERFORMED,
command, mods));
}
// Return a unique integer for use in the native state mapping
// code. We can't use a hash code since that is not guaranteed to
// be unique.
static synchronized int getUniqueInteger ()
{
// Let's assume this will never wrap.
return next_native_state++;
}
}
+286
View File
@@ -0,0 +1,286 @@
/* GtkImage.java
Copyright (C) 1999, 2002 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.*;
import java.util.*;
import java.awt.image.*;
public class GtkImage extends Image implements ImageConsumer
{
int width = -1, height = -1;
Hashtable props = null;
boolean isLoaded = false;
boolean isCacheable = true;
boolean loading = false;
Vector widthObservers = new Vector ();
Vector heightObservers = new Vector ();
Vector propertyObservers = new Vector ();
ImageProducer source;
Graphics g;
/* Variables in which we stored cached data, if possible.
An image is cached if the following properties are true:
1. The ColorModel passed into setColorModel is the same ColorModel
passed to all invocations of setPixels.
2. The image contains a single frame.
*/
int[] pixelCache;
ColorModel model;
public
GtkImage (ImageProducer producer, Graphics g)
{
source = producer;
this.g = g;
source.addConsumer (this);
}
public synchronized int
getWidth (ImageObserver observer)
{
if (width == -1)
widthObservers.addElement (observer);
return width;
}
public synchronized int
getHeight (ImageObserver observer)
{
if (height == -1)
heightObservers.addElement (observer);
return height;
}
public ImageProducer
getSource ()
{
return source;
}
public Graphics
getGraphics ()
{
return g;
}
public synchronized Object
getProperty (String name, ImageObserver observer)
{
if (props == null)
{
propertyObservers.addElement (observer);
return null;
}
Object value = props.get (name);
return (value == null) ? UndefinedProperty : value;
}
public synchronized void
flush ()
{
isLoaded = false;
isCacheable = true;
width = height = -1;
props = null;
pixelCache = null;
model = null;
source.removeConsumer (this);
source.addConsumer (this);
}
public boolean
isLoaded ()
{
return isLoaded;
}
/* ImageConsumer methods */
public synchronized void
setDimensions (int width, int height)
{
pixelCache = new int[width*height];
this.width = width;
this.height = height;
for (int i = 0; i < widthObservers.size (); i++)
{
ImageObserver io = (ImageObserver) widthObservers.elementAt (i);
io.imageUpdate (this, ImageObserver.WIDTH, -1, -1, width, height);
}
for (int i = 0; i < heightObservers.size (); i++)
{
ImageObserver io = (ImageObserver) heightObservers.elementAt (i);
io.imageUpdate (this, ImageObserver.HEIGHT, -1, -1, width, height);
}
}
public synchronized void
setProperties (Hashtable props)
{
this.props = props;
for (int i = 0; i < propertyObservers.size (); i++)
{
ImageObserver io = (ImageObserver) propertyObservers.elementAt (i);
io.imageUpdate (this, ImageObserver.PROPERTIES, -1, -1, width, height);
}
}
public synchronized void
setColorModel (ColorModel model)
{
if (this.model == null || this.model == model)
this.model = model;
else
isCacheable = false;
}
public synchronized void
setHints (int flags)
{
}
public synchronized void
setPixels (int x, int y, int width, int height, ColorModel cm, byte[] pixels,
int offset, int scansize)
{
setPixels (x, y, width, height, cm, convertPixels (pixels), offset,
scansize);
}
public synchronized void
setPixels (int x, int y, int width, int height, ColorModel cm, int[] pixels,
int offset, int scansize)
{
loading = true;
if (!isCacheable)
return;
if (cm != model || pixelCache == null)
{
isCacheable = false;
return;
}
if (scansize == width)
{
System.arraycopy (pixels, offset,
pixelCache, y * this.width + x,
pixels.length - offset);
}
else // skip over scansize-width for each row
{
for (int i = 0; i < height; i++)
System.arraycopy (pixels, offset + (i * scansize),
pixelCache, (y + i) * this.width + x,
width);
}
}
public synchronized void
imageComplete (int status)
{
if (status == ImageConsumer.STATICIMAGEDONE && isCacheable)
isLoaded = true;
if (status == ImageConsumer.SINGLEFRAMEDONE)
isCacheable = false;
source.removeConsumer (this);
}
public synchronized void
startProduction (GtkImagePainter painter)
{
if (isLoaded)
{
painter.setDimensions (width, height);
painter.setPixels (0, 0, width, height, model, pixelCache, 0, width);
}
else
{
source.startProduction (painter);
source.removeConsumer (painter);
}
}
private int[]
convertPixels (byte[] pixels)
{
int ret[] = new int[pixels.length];
for (int i = 0; i < pixels.length; i++)
ret[i] = pixels[i];
return ret;
}
synchronized int
checkImage ()
{
int bits = 0;
if (width != -1)
bits |= ImageObserver.WIDTH;
if (height != -1)
bits |= ImageObserver.HEIGHT;
if (props != null)
bits |= ImageObserver.PROPERTIES;
if (loading)
bits |= ImageObserver.SOMEBITS;
if (isLoaded)
bits |= ImageObserver.ALLBITS;
return bits;
}
}
@@ -0,0 +1,239 @@
/* GtkImagePainter.java
Copyright (C) 1999, 2000 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.*;
import java.awt.image.*;
import java.util.*;
public class GtkImagePainter implements Runnable, ImageConsumer
{
GtkImage image;
GdkGraphics gc;
int startX, startY;
int redBG;
int greenBG;
int blueBG;
double affine[];
int width, height;
boolean flipX, flipY;
Rectangle clip;
int s_width, s_height;
public
GtkImagePainter (GtkImage image, GdkGraphics gc, int x, int y,
int width, int height, Color bgcolor)
{
this.image = image;
this.gc = (GdkGraphics) gc.create ();
startX = x;
startY = y;
redBG = bgcolor.getRed ();
greenBG = bgcolor.getGreen ();
blueBG = bgcolor.getBlue ();
this.width = width;
this.height = height;
flipX = flipY = false;
s_width = s_height = 0;
clip = null;
new Thread (this).start ();
}
public
GtkImagePainter (GtkImage image, GdkGraphics gc,
int dx1, int dy1, int dx2, int dy2,
int sx1, int sy1, int sx2, int sy2,
Color bgcolor)
{
this.image = image;
this.gc = (GdkGraphics) gc.create ();
startX = (dx1 < dx2) ? dx1 : dx2;
startY = dy1;
redBG = bgcolor.getRed ();
greenBG = bgcolor.getGreen ();
blueBG = bgcolor.getBlue ();
this.width = Math.abs (dx2 - dx1);
this.height = Math.abs (dy2 - dy1);
flipX = ((dx1 > dx2 && sx2 > sx1)
|| (dx1 < dx2 && sx2 < sx1));
flipY = ((dy1 > dy2 && sy2 > sy1)
|| (dy1 < dy2 && sy2 < sy1));
s_width = Math.abs (sx2 - sx1);
s_height = Math.abs (sy2 - sy1);
clip = new Rectangle (sx1, sy1, s_width, s_height);
new Thread (this).start ();
}
public void
run ()
{
image.startProduction (this);
gc.dispose ();
}
/* Convert pixel data into a format that gdkrgb can understand */
static int[]
convertPixels (int[] pixels, ColorModel model)
{
if (model.equals (ColorModel.getRGBdefault ()))
return pixels;
int ret[] = new int[pixels.length];
for (int i = 0; i < pixels.length; i++)
ret[i] = model.getRGB (pixels[i]);
return ret;
}
static int[]
convertPixels (byte[] pixels, ColorModel model)
{
int ret[] = new int[pixels.length];
for (int i = 0; i < pixels.length; i++)
ret[i] = model.getRGB (pixels[i]);
return ret;
}
native void
drawPixels (GdkGraphics gc, int bg_red, int bg_green, int bg_blue,
int x, int y, int width, int height, int[] pixels, int offset,
int scansize, double affine[]);
public void
setPixels (int x, int y, int width, int height, ColorModel model,
int[] pixels, int offset, int scansize)
{
if (clip != null)
{
Rectangle r;
r = clip.intersection (new Rectangle (x, y, width, height));
if (r.width == 0 && r.height == 0)
return;
offset += r.y * scansize + r.x;
r.translate (-Math.abs (clip.x - startX), -Math.abs (clip.y - startY));
width = r.width;
height = r.height;
x = r.x;
y = r.y;
}
drawPixels (gc, redBG, greenBG, blueBG,
startX + x, startY + y,
width, height, convertPixels (pixels, model), offset,
scansize, affine);
}
public void
setPixels (int x, int y, int width, int height, ColorModel model,
byte[] pixels, int offset, int scansize)
{
setPixels (x, y, width, height, model, convertPixels (pixels, model),
offset, scansize);
}
public void
setDimensions (int width, int height)
{
if (!flipX && !flipY &&
((this.width == -1 && this.height == -1)
|| (this.width == width && this.height == height)))
return;
affine = new double[6];
affine[1] = affine[2] = affine[4] = affine[5] = 0;
if (clip != null)
{
affine[0] = this.width / (double) s_width;
affine[3] = this.height / (double) s_height;
}
else
{
affine[0] = this.width / (double) width;
affine[3] = this.height / (double) height;
}
if (flipX)
{
affine[0] = -affine[0];
affine[4] = this.width;
}
if (flipY)
{
affine[3] = -affine[3];
affine[5] = this.height;
}
if (affine[0] == 1 && affine[3] == 1)
affine = null;
}
public void
setProperties (Hashtable props)
{
}
public void
setColorModel (ColorModel model)
{
}
public void
setHints (int flags)
{
}
public void
imageComplete (int status)
{
}
}
@@ -0,0 +1,88 @@
/* GtkLabelPeer.java -- Implements LabelPeer with GTK
Copyright (C) 1998, 1999 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.*;
import java.awt.peer.*;
public class GtkLabelPeer extends GtkComponentPeer
implements LabelPeer
{
native void create ();
public GtkLabelPeer (Label l)
{
super (l);
}
public void setText (String text)
{
set ("label", text);
}
public void setAlignment (int alignment)
{
set ("xalign", getGtkAlignment (alignment));
}
float getGtkAlignment (int alignment)
{
switch (alignment)
{
case Label.LEFT:
return 0.0f;
case Label.CENTER:
return 0.5f;
case Label.RIGHT:
return 1.0f;
}
return 0.0f;
}
public void getArgs (Component component, GtkArgList args)
{
super.getArgs (component, args);
Label label = (Label) component;
args.add ("label", label.getText ());
args.add ("xalign", getGtkAlignment (label.getAlignment ()));
args.add ("yalign", 0.5f);
}
}
@@ -0,0 +1,126 @@
/* GtkListPeer.java -- Implements ListPeer with GTK
Copyright (C) 1998, 1999 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.*;
import java.awt.peer.*;
public class GtkListPeer extends GtkComponentPeer
implements ListPeer
{
// native void create (ComponentPeer parent, String [] items, boolean mode);
native void create ();
native void connectHooks ();
native void getSize (int rows, int dims[]);
public GtkListPeer (List list)
{
super (list);
setMultipleMode (list.isMultipleMode ());
if (list.getItemCount () > 0)
append (list.getItems ());
}
native void append (String items[]);
public native void add (String item, int index);
public void addItem (String item, int index)
{
add (item, index);
}
public void clear ()
{
removeAll ();
}
public native void delItems (int start, int end);
public native void deselect (int index);
public Dimension getMinimumSize (int rows)
{
int dims[] = new int[2];
getSize (rows, dims);
return (new Dimension (dims[0], dims[1]));
}
public Dimension getPreferredSize (int rows)
{
int dims[] = new int[2];
getSize (rows, dims);
return (new Dimension (dims[0], dims[1]));
}
public native int[] getSelectedIndexes ();
public native void makeVisible (int index);
public Dimension minimumSize (int rows)
{
return (getMinimumSize (rows));
}
public Dimension preferredSize (int rows)
{
return (getPreferredSize (rows));
}
public void removeAll ()
{
delItems (0, -1);
}
public native void select (int index);
public native void setMultipleMode (boolean b);
public void setMultipleSelections (boolean b)
{
setMultipleMode (b);
}
protected void postItemEvent (int item, int stateChange)
{
postItemEvent (new Integer (item), stateChange);
}
}
@@ -0,0 +1,80 @@
/* GtkMainThread.java -- Runs gtk_main()
Copyright (C) 1998, 1999 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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;
public class GtkMainThread extends GtkGenericPeer implements Runnable
{
private static Thread mainThread = null;
private static Object mainThreadLock = new Object();
static native void gtkInit();
native void gtkMain();
public GtkMainThread()
{
super (null);
synchronized (mainThreadLock)
{
if (mainThread != null)
throw new IllegalStateException();
mainThread = new Thread(this, "GtkMain");
}
synchronized (this)
{
mainThread.start();
try {
wait();
} catch (InterruptedException e) { }
}
}
public void run()
{
synchronized (this)
{
gtkInit();
notify();
}
gtkMain();
}
}
@@ -0,0 +1,69 @@
/* GtkMenuBarPeer.java -- Implements MenuBarPeer with GTK+
Copyright (C) 1999 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.*;
import java.awt.peer.MenuBarPeer;
import java.awt.peer.MenuPeer;
public class GtkMenuBarPeer extends GtkMenuComponentPeer
implements MenuBarPeer
{
native void create ();
native void addMenu (MenuPeer menu);
public GtkMenuBarPeer (MenuBar target)
{
super (target);
create ();
}
/* In Gnome, help menus are no longer right flushed. */
public void addHelpMenu (Menu menu)
{
addMenu (menu);
}
public void addMenu (Menu menu)
{
addMenu ((MenuPeer) menu.getPeer ());
}
native public void delMenu (int index);
}
@@ -0,0 +1,54 @@
/* GtkMenuComponentPeer.java -- Implements MenuComponentPeer with GTK+
Copyright (C) 1999 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.*;
import java.awt.peer.MenuComponentPeer;
public class GtkMenuComponentPeer extends GtkGenericPeer
implements MenuComponentPeer
{
public GtkMenuComponentPeer (Object awtWidget)
{
super (awtWidget);
}
public void dispose ()
{
}
}
@@ -0,0 +1,92 @@
/* GtkMenuItemPeer.java -- Implements MenuItemPeer with GTK+
Copyright (C) 1999 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.*;
import java.awt.peer.MenuItemPeer;
import java.awt.peer.MenuComponentPeer;
import java.awt.peer.MenuBarPeer;
import java.awt.peer.MenuPeer;
public class GtkMenuItemPeer extends GtkMenuComponentPeer
implements MenuItemPeer
{
native void create (String label);
public GtkMenuItemPeer (MenuItem item)
{
super (item);
create (item.getLabel ());
setEnabled (item.isEnabled ());
setParent (item);
}
void setParent (MenuItem item)
{
// add ourself differently, based on what type of parent we have
// yes, the typecasting here is nasty.
Object parent = item.getParent ();
if (parent instanceof MenuBar)
{
((GtkMenuBarPeer)((MenuBar)parent).getPeer ()).addMenu ((MenuPeer) this);
}
else // parent instanceof Menu
{
((GtkMenuPeer)((Menu)parent).getPeer ()).addItem (this,
item.getShortcut ());
}
}
public void disable ()
{
setEnabled (false);
}
public void enable ()
{
setEnabled (true);
}
native public void setEnabled (boolean b);
native public void setLabel (String label);
protected void postMenuActionEvent ()
{
postActionEvent (((MenuItem)awtWidget).getActionCommand (), 0);
}
}
@@ -0,0 +1,99 @@
/* GtkMenuPeer.java -- Implements MenuPeer with GTK+
Copyright (C) 1999 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.*;
import java.awt.peer.MenuPeer;
import java.awt.peer.MenuItemPeer;
public class GtkMenuPeer extends GtkMenuItemPeer
implements MenuPeer
{
native void create (String label);
native void addItem (MenuItemPeer item, int key, boolean shiftModifier);
native void setupAccelGroup (GtkGenericPeer container);
public GtkMenuPeer (Menu menu)
{
super (menu);
MenuContainer parent = menu.getParent ();
if (parent instanceof Menu)
setupAccelGroup ((GtkGenericPeer)((Menu)parent).getPeer ());
else if (parent instanceof Component)
setupAccelGroup ((GtkGenericPeer)((Component)parent).getPeer ());
else
setupAccelGroup (null);
}
public void addItem (MenuItem item)
{
int key = 0;
boolean shiftModifier = false;
MenuShortcut ms = item.getShortcut ();
if (ms != null)
{
key = ms.getKey ();
shiftModifier = ms.usesShiftModifier ();
}
addItem ((MenuItemPeer) item.getPeer (), key, shiftModifier);
}
public void addItem (MenuItemPeer item, MenuShortcut ms)
{
int key = 0;
boolean shiftModifier = false;
if (ms != null)
{
key = ms.getKey ();
shiftModifier = ms.usesShiftModifier ();
}
addItem (item, key, shiftModifier);
}
public void addSeparator ()
{
addItem (new MenuItem ("-"));
}
native public void delItem (int index);
}
@@ -0,0 +1,87 @@
/* GtkOffScreenImage.java
Copyright (C) 1999 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.*;
import java.awt.image.*;
public class GtkOffScreenImage extends Image
{
int width, height;
ImageProducer source;
Graphics g;
public GtkOffScreenImage (ImageProducer source, Graphics g,
int width, int height)
{
this.width = width;
this.height = height;
this.source = source;
this.g = g;
}
public int getWidth (ImageObserver observer)
{
return width;
}
public int getHeight (ImageObserver observer)
{
return height;
}
public ImageProducer getSource ()
{
return source;
}
public Graphics getGraphics ()
{
return g;
}
public Object getProperty (String name, ImageObserver observer)
{
return Image.UndefinedProperty;
}
public void flush ()
{
}
}
@@ -0,0 +1,53 @@
/* GtkPanelPeer.java -- Implements PanelPeer with GTK
Copyright (C) 1998, 1999 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.peer.*;
import java.awt.*;
public class GtkPanelPeer extends GtkContainerPeer
implements PanelPeer
{
native void create ();
native void connectHooks ();
public GtkPanelPeer (Panel p)
{
super (p);
}
}
@@ -0,0 +1,65 @@
/* GtkPopupMenuPeer.java -- Implements PopupMenuPeer with GTK+
Copyright (C) 1999 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.*;
import java.awt.peer.ComponentPeer;
import java.awt.peer.PopupMenuPeer;
public class GtkPopupMenuPeer extends GtkMenuPeer
implements PopupMenuPeer
{
public GtkPopupMenuPeer (PopupMenu menu)
{
super (menu);
}
native void setupAccelGroup (GtkGenericPeer container);
void setParent (MenuItem item)
{
// we don't need to "add" ourselves to our parent
}
native void show (int x, int y, long time);
public void show (Component origin, int x, int y)
{
Point abs = origin.getLocationOnScreen ();
show (abs.x + x, abs.y + y, 0);
}
}
@@ -0,0 +1,91 @@
/* GtkScrollPanePeer.java -- Implements ScrollPanePeer with GTK
Copyright (C) 1998, 1999 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.peer.*;
import java.awt.*;
public class GtkScrollPanePeer extends GtkContainerPeer
implements ScrollPanePeer
{
native void create ();
native void gtkScrolledWindowNew(ComponentPeer parent,
int policy, int w, int h, int[] dims);
native void gtkScrolledWindowSetScrollPosition(int x, int y);
native void gtkScrolledWindowSetHScrollIncrement (int u);
native void gtkScrolledWindowSetVScrollIncrement (int u);
native void gtkScrolledWindowSetSize(int w, int h);
public GtkScrollPanePeer (ScrollPane sp)
{
super (sp);
setPolicy (sp.getScrollbarDisplayPolicy ());
}
native void setPolicy (int policy);
native public void childResized (int width, int height);
native public int getHScrollbarHeight ();
native public int getVScrollbarWidth ();
native public void setScrollPosition (int x, int y);
// public Dimension getPreferredSize ()
// {
// return new Dimension (60, 60);
// }
public void setUnitIncrement (Adjustable adj, int u)
{
if (adj.getOrientation()==Adjustable.HORIZONTAL)
gtkScrolledWindowSetHScrollIncrement (u);
else
gtkScrolledWindowSetVScrollIncrement (u);
}
public void setValue (Adjustable adj, int v)
{
// System.out.println("SPP: setVal: "+adj+":"+v);
// Point p=myScrollPane.getScrollPosition ();
// if (adj.getOrientation()==Adjustable.HORIZONTAL)
// gtkScrolledWindowSetScrollPosition (v,p.y);
// else
// gtkScrolledWindowSetScrollPosition (p.x,v);
// adj.setValue(v);
}
}
@@ -0,0 +1,78 @@
/* GtkScrollbarPeer.java -- Implements ScrollbarPeer with GTK+
Copyright (C) 1998, 1999 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.*;
import java.awt.peer.*;
import java.awt.event.AdjustmentEvent;
public class GtkScrollbarPeer extends GtkComponentPeer
implements ScrollbarPeer
{
void create ()
{
Scrollbar sb = (Scrollbar) awtComponent;
create (sb.getOrientation (), sb.getValue (),
sb.getMinimum (), sb.getMaximum (),
sb.getUnitIncrement (), sb.getBlockIncrement (),
sb.getVisibleAmount ());
}
native void create (int orientation, int value,
int min, int max, int stepIncr, int pageIncr,
int visibleAmount);
native void connectHooks ();
public GtkScrollbarPeer (Scrollbar s)
{
super (s);
}
native public void setLineIncrement (int amount);
native public void setPageIncrement (int amount);
native public void setValues (int value, int visible, int min, int max);
protected void postAdjustmentEvent (int type, int value)
{
q.postEvent (new AdjustmentEvent ((Adjustable)awtComponent,
AdjustmentEvent.ADJUSTMENT_VALUE_CHANGED,
type, value));
}
}
@@ -0,0 +1,102 @@
/* GtkTextAreaPeer.java -- Implements TextAreaPeer with GTK
Copyright (C) 1998, 1999, 2002 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.peer.*;
import java.awt.*;
public class GtkTextAreaPeer extends GtkTextComponentPeer
implements TextAreaPeer
{
native void create (int scrollbarVisibility);
void create ()
{
create (((TextArea)awtComponent).getScrollbarVisibility ());
}
// native void create (Object parent, String text, int scroll);
native void gtkTextGetSize (int rows, int cols, int dims[]);
public GtkTextAreaPeer (TextArea ta)
{
super (ta);
}
public native void insert (String str, int pos);
public native void replaceRange (String str, int start, int end);
public Dimension getMinimumSize (int rows, int cols)
{
int dims[] = new int[2];
gtkTextGetSize (rows, cols, dims);
return (new Dimension (dims[0], dims[1]));
}
public Dimension getPreferredSize (int rows, int cols)
{
int dims[] = new int[2];
gtkTextGetSize (rows, cols, dims);
return (new Dimension (dims[0], dims[1]));
}
/* Deprecated */
public Dimension minimumSize (int rows, int cols)
{
return getMinimumSize (rows, cols);
}
public Dimension preferredSize (int rows, int cols)
{
return getPreferredSize (rows, cols);
}
public void replaceText (String str, int start, int end)
{
replaceRange (str, start, end);
}
public void insertText (String str, int pos)
{
insert (str, pos);
}
}
@@ -0,0 +1,79 @@
/* GtkTextComponentPeer.java -- Implements TextComponentPeer with GTK
Copyright (C) 1998, 1999 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.peer.*;
import java.awt.*;
public class GtkTextComponentPeer extends GtkComponentPeer
implements TextComponentPeer
{
GtkTextComponentPeer (TextComponent tc)
{
super (tc);
setText (tc.getText ());
}
public native int getCaretPosition ();
public void setCaretPosition (int pos)
{
set ("text_position", pos);
}
public native int getSelectionStart ();
public native int getSelectionEnd ();
public native String getText ();
public native void select (int start, int end);
public void setEditable (boolean state)
{
set ("editable", state);
}
public native void setText (String text);
public void getArgs (Component component, GtkArgList args)
{
super.getArgs (component, args);
TextComponent tc = (TextComponent) component;
args.add ("text_position", tc.getCaretPosition ());
args.add ("editable", tc.isEditable ());
}
}
@@ -0,0 +1,98 @@
/* GtkTextFieldPeer.java -- Implements TextFieldPeer with GTK
Copyright (C) 1998, 1999, 2002 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.peer.*;
import java.awt.*;
public class GtkTextFieldPeer extends GtkTextComponentPeer
implements TextFieldPeer
{
// native void create (ComponentPeer parent, String text);
native void create ();
native void createHooks ();
native void gtkEntryGetSize (int cols, int dims[]);
public GtkTextFieldPeer (TextField tf)
{
super (tf);
if (tf.echoCharIsSet ())
setEchoChar (tf.getEchoChar ());
}
public Dimension getMinimumSize (int cols)
{
int dims[] = new int[2];
gtkEntryGetSize (cols, dims);
return (new Dimension (dims[0], dims[1]));
}
public Dimension getPreferredSize (int cols)
{
int dims[] = new int[2];
gtkEntryGetSize (cols, dims);
return (new Dimension (dims[0], dims[1]));
}
public native void setEchoChar (char c);
/* Deprecated */
public Dimension minimumSize (int cols)
{
return getMinimumSize (cols);
}
public Dimension preferredSize (int cols)
{
return getPreferredSize (cols);
}
public void setEchoCharacter (char c)
{
setEchoChar (c);
}
}
@@ -0,0 +1,329 @@
/* GtkToolkit.java -- Implements an AWT Toolkit using GTK for peers
Copyright (C) 1998, 1999, 2002, 2003 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.*;
import java.awt.datatransfer.*;
import java.awt.dnd.DragGestureEvent;
import java.awt.dnd.peer.DragSourceContextPeer;
import java.awt.im.InputMethodHighlight;
import java.awt.image.*;
import java.awt.peer.*;
import java.net.*;
import java.util.Hashtable;
import java.util.Map;
import java.util.MissingResourceException;
import java.util.Properties;
import gnu.java.awt.image.*;
import gnu.classpath.Configuration;
/* This class uses a deprecated method java.awt.peer.ComponentPeer.getPeer().
This merits comment. We are basically calling Sun's bluff on this one.
We think Sun has deprecated it simply to discourage its use as it is
bad programming style. However, we need to get at a component's peer in
this class. If getPeer() ever goes away, we can implement a hash table
that will keep up with every window's peer, but for now this is faster. */
public class GtkToolkit extends java.awt.Toolkit
{
GtkMainThread main;
Hashtable containers = new Hashtable();
static EventQueue q = new EventQueue();
static Clipboard systemClipboard;
static
{
if (Configuration.INIT_LOAD_LIBRARY)
System.loadLibrary("gtkpeer");
}
public GtkToolkit ()
{
main = new GtkMainThread ();
systemClipboard = new GtkClipboard ();
GtkGenericPeer.enableQueue (q);
}
native public void beep ();
native private void getScreenSizeDimensions (int[] xy);
public int checkImage (Image image, int width, int height,
ImageObserver observer)
{
return ImageObserver.ALLBITS;
// GtkImage i = (GtkImage) image;
// return i.checkImage ();
}
public Image createImage (String filename)
{
// FIXME - gcj local: GdkPixbufDecoder doesn't work.
// return new GtkImage (new GdkPixbufDecoder (filename), null);
return null;
}
public Image createImage (URL url)
{
// FIXME - gcj local: GdkPixbufDecoder doesn't work.
// return new GtkImage (new GdkPixbufDecoder (url), null);
return null;
}
public Image createImage (ImageProducer producer)
{
return new GtkImage (producer, null);
}
public Image createImage (byte[] imagedata, int imageoffset,
int imagelength)
{
// System.out.println ("createImage byte[] NOT SUPPORTED");
return null;
}
public ColorModel getColorModel ()
{
return ColorModel.getRGBdefault ();
}
public String[] getFontList ()
{
return (new String[] { "Dialog",
"DialogInput",
"Monospaced",
"Serif",
"SansSerif" });
}
public FontMetrics getFontMetrics (Font font)
{
return new GdkFontMetrics (font);
}
public Image getImage (String filename)
{
// FIXME - gcj local: GdkPixbufDecoder doesn't work.
// return new GtkImage (new GdkPixbufDecoder (filename), null);
return null;
}
public Image getImage (URL url)
{
// FIXME - gcj local: GdkPixbufDecoder doesn't work.
// return new GtkImage (new GdkPixbufDecoder (url), null);
return null;
}
public PrintJob getPrintJob (Frame frame, String jobtitle, Properties props)
{
return null;
}
native public int getScreenResolution();
public Dimension getScreenSize () {
int dim[] = new int[2];
getScreenSizeDimensions(dim);
return new Dimension(dim[0], dim[1]);
}
public Clipboard getSystemClipboard()
{
return systemClipboard;
}
public boolean prepareImage (Image image, int width, int height,
ImageObserver observer)
{
return false;
}
native public void sync ();
protected void setComponentState (Component c, GtkComponentPeer cp)
{
/* Make the Component reflect Peer defaults */
if (c.getForeground () == null)
c.setForeground (cp.getForeground ());
if (c.getBackground () == null)
c.setBackground (cp.getBackground ());
// if (c.getFont () == null)
// c.setFont (cp.getFont ());
/* Make the Peer reflect the state of the Component */
if (! (c instanceof Window))
{
cp.setCursor (c.getCursor ());
Rectangle bounds = c.getBounds ();
cp.setBounds (bounds.x, bounds.y, bounds.width, bounds.height);
cp.setVisible (c.isVisible ());
}
}
protected ButtonPeer createButton (Button b)
{
return new GtkButtonPeer (b);
}
protected CanvasPeer createCanvas (Canvas c)
{
return new GtkCanvasPeer (c);
}
protected CheckboxPeer createCheckbox (Checkbox cb)
{
return new GtkCheckboxPeer (cb);
}
protected CheckboxMenuItemPeer createCheckboxMenuItem (CheckboxMenuItem cmi)
{
return new GtkCheckboxMenuItemPeer (cmi);
}
protected ChoicePeer createChoice (Choice c)
{
return new GtkChoicePeer (c);
}
protected DialogPeer createDialog (Dialog d)
{
return new GtkDialogPeer (d);
}
protected FileDialogPeer createFileDialog (FileDialog fd)
{
return new GtkFileDialogPeer (fd);
}
protected FramePeer createFrame (Frame f)
{
return new GtkFramePeer (f);
}
protected LabelPeer createLabel (Label label)
{
return new GtkLabelPeer (label);
}
protected ListPeer createList (List list)
{
return new GtkListPeer (list);
}
protected MenuPeer createMenu (Menu m)
{
return new GtkMenuPeer (m);
}
protected MenuBarPeer createMenuBar (MenuBar mb)
{
return new GtkMenuBarPeer (mb);
}
protected MenuItemPeer createMenuItem (MenuItem mi)
{
return new GtkMenuItemPeer (mi);
}
protected PanelPeer createPanel (Panel p)
{
return new GtkPanelPeer (p);
}
protected PopupMenuPeer createPopupMenu (PopupMenu target)
{
return new GtkPopupMenuPeer (target);
}
protected ScrollPanePeer createScrollPane (ScrollPane sp)
{
return new GtkScrollPanePeer (sp);
}
protected ScrollbarPeer createScrollbar (Scrollbar sb)
{
return new GtkScrollbarPeer (sb);
}
protected TextAreaPeer createTextArea (TextArea ta)
{
return new GtkTextAreaPeer (ta);
}
protected TextFieldPeer createTextField (TextField tf)
{
return new GtkTextFieldPeer (tf);
}
protected WindowPeer createWindow (Window w)
{
return new GtkWindowPeer (w);
}
protected FontPeer getFontPeer (String name, int style)
{
try {
GtkFontPeer fp = new GtkFontPeer (name, style);
return fp;
} catch (MissingResourceException ex) {
return null;
}
}
protected EventQueue getSystemEventQueueImpl()
{
return q;
}
protected void loadSystemColors (int[] systemColors)
{
}
public DragSourceContextPeer createDragSourceContextPeer(DragGestureEvent e)
{
throw new Error("not implemented");
}
public Map mapInputMethodHighlight(InputMethodHighlight highlight)
{
throw new Error("not implemented");
}
} // class GtkToolkit
@@ -0,0 +1,111 @@
/* GtkWindowPeer.java -- Implements WindowPeer with GTK
Copyright (C) 1998, 1999, 2002 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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.peer.*;
import java.awt.*;
public class GtkWindowPeer extends GtkContainerPeer
implements WindowPeer
{
static protected final int GTK_WINDOW_TOPLEVEL = 0;
static protected final int GTK_WINDOW_DIALOG = 1;
static protected final int GTK_WINDOW_POPUP = 2;
native void create (int type);
void create ()
{
create (GTK_WINDOW_POPUP);
}
native void connectHooks ();
public GtkWindowPeer (Window window)
{
super (window);
Dimension d = window.getSize ();
setBounds (0, 0, d.width, d.height);
}
public void getArgs (Component component, GtkArgList args)
{
args.add ("visible", component.isVisible ());
args.add ("sensitive", component.isEnabled ());
}
native public void toBack ();
native public void toFront ();
native public void setBounds (int x, int y, int width, int height);
public void setTitle (String title)
{
set ("title", title);
}
native public void setResizable (boolean r);
protected void postConfigureEvent (int x, int y, int width, int height,
int top, int left, int bottom, int right)
{
/*
If our borders change (which often happens when we opaque resize),
we need to make sure that a new layout will happen, since Sun
forgets to handle this case.
*/
if (insets.top != top
|| insets.left != left
|| insets.bottom != bottom
|| insets.right != right)
{
awtComponent.invalidate ();
}
insets.top = top;
insets.left = left;
insets.bottom = bottom;
insets.right = right;
awtComponent.setBounds (x, y, width, height);
awtComponent.validate ();
}
native public void setVisible (boolean b);
}
+299
View File
@@ -0,0 +1,299 @@
/* Test.java -- Tests the GTK Toolkit
Copyright (C) 1998, 1999 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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. */
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.peer.*;
import java.awt.datatransfer.*;
import gnu.java.awt.image.*;
import java.io.*;
class Test
{
static int xs = 5, ys = 5;
public static void main(String args[])
{
if (args.length == 0)
{
Properties prop=System.getProperties ();
prop.put ("awt.toolkit","gnu.java.awt.peer.gtk.GtkToolkit");
}
final Frame f=new Frame();
f.setTitle ("Red Hat Classpath");
// f.addComponentListener (new ComponentAdapter() {
// public void componentMoved (ComponentEvent e) {
// System.out.println("component moved");
// }
// public void componentResized (ComponentEvent e) {
// System.out.println("component resized");
// }
// });
f.setSize(200,200);
Panel pan=new Panel();
final Label l = new Label ("Pithy Message:");
l.setCursor (Cursor.getPredefinedCursor (Cursor.WAIT_CURSOR));
pan.add (l);
TextField tf = new TextField("Hello world!");
pan.add(tf);
final Image img;
img = Toolkit.getDefaultToolkit ().createImage (new XBMDecoder ("fvwm.xbm"));
final Canvas ch = new Canvas () {
public void update (Graphics g)
{
System.out.println ("update called");
super.update (g);
}
public void paint (Graphics g) {
g.drawString("Hello world!", xs+5, ys+10);
g.setColor (Color.blue);
g.drawLine (xs,ys,xs+20,ys+20);
// System.out.println (TextArea.SCROLLBARS_BOTH);
// System.out.println (TextArea.SCROLLBARS_HORIZONTAL_ONLY);
// System.out.println (TextArea.SCROLLBARS_VERTICAL_ONLY);
// Font f1 = new Font ("TimesRoman", Font.PLAIN, 10);
// System.out.println (f1.getName ());
// System.out.println (f1.getFamily ());
// Font font = new Font ("Serif", Font.PLAIN, 18);
// g.setFont (font);
// g.setXORMode (Color.red);
// System.out.println (g.getFontMetrics (font).stringWidth ("foobar"));
// System.out.println (g.drawImage (img, 0, 0, this));
}
};
ch.setSize(60, 60);
// List ch=new List();
// ch.add("Ding");
// ch.add("September");
// ch.add("Red");
// ch.add("Quassia");
// ch.add("Pterodactyl");
// ch.addMouseListener(new MouseAdapter() {
// public void mousePressed(MouseEvent e) {
// System.out.println("mouse pressed ch");
// System.out.println("shift = " + e.isShiftDown());
// System.out.println("meta = " + e.isMetaDown());
// System.out.println("alt = " + e.isAltDown());
// System.out.println("ctrl = " + e.isControlDown());
// System.out.println("x = " + e.getX());
// System.out.println("y = " + e.getY());
// System.out.println("clickcount = " + e.getClickCount());
// System.out.println("when = " + e.getWhen());
// System.out.println();
// }
// public void mouseReleased(MouseEvent e) {
// System.out.println("mouse released ch");
// }
// public void mouseClicked(MouseEvent e) {
// System.out.println("mouse clicked ch");
// }
// });
pan.add(ch);
f.add(pan,"North");
final ScrollPane sp=new ScrollPane(ScrollPane.SCROLLBARS_ALWAYS);
System.out.println ("ALWAYS HERE: " + ScrollPane.SCROLLBARS_ALWAYS);
System.out.println ("ALWAYS" + ScrollPane.SCROLLBARS_ALWAYS);
System.out.println ("NEEDED" + ScrollPane.SCROLLBARS_AS_NEEDED);
System.out.println ("NEVER " + ScrollPane.SCROLLBARS_NEVER);
final Panel p=new Panel();
System.out.println ("PREFERED: " + p.getPreferredSize ());
p.add(new Button("Stop"));
System.out.println ("PREFERED: " + p.getPreferredSize ());
p.add(new Button("evil"));
System.out.println ("PREFERED: " + p.getPreferredSize ());
p.add(new Button("hoarders"));
p.add(new Button("use"));
p.add(new Button("GNU"));
p.add(new Scrollbar(Scrollbar.HORIZONTAL));
System.out.println ("PREFERED: " + p.getPreferredSize ());
sp.add(p);
f.add(sp,"South");
Panel east_panel = new Panel();
east_panel.setLayout(new GridLayout (0,1));
// CheckboxGroup group = new CheckboxGroup();
// Checkbox cb=new Checkbox("one", group, true);
// east_panel.add(cb);
// cb=new Checkbox("two", group, false);
// east_panel.add(cb);
// cb.addMouseListener(new MouseAdapter() {
// public void mousePressed(MouseEvent e) {
// System.out.println("mouse pressed cb");
// System.out.println("shift = " + e.isShiftDown());
// System.out.println("meta = " + e.isMetaDown());
// System.out.println("alt = " + e.isAltDown());
// System.out.println("ctrl = " + e.isControlDown());
// System.out.println("x = " + e.getX());
// System.out.println("y = " + e.getY());
// System.out.println("clickcount = " + e.getClickCount());
// System.out.println("when = " + e.getWhen());
// System.out.println();
// }
// public void mouseReleased(MouseEvent e) {
// System.out.println("mouse released cb");
// }
// public void mouseClicked(MouseEvent e) {
// System.out.println("mouse clicked cb");
// }
// public void mouseEntered(MouseEvent e) {
// System.out.println("mouse entered cb");
// }
// public void mouseExited(MouseEvent e) {
// System.out.println("mouse exited cb");
// }
// });
f.add(east_panel,"East");
final Button wb=new Button();
wb.setLabel("Destroy Frame on Click");
wb.addActionListener (new ActionListener () {
public void actionPerformed (ActionEvent e) {
ScrollPanePeer peer = (ScrollPanePeer)sp.getPeer ();
if (peer != null)
{
System.out.println (peer.getHScrollbarHeight ());
System.out.println (peer.getVScrollbarWidth ());
}
l.setText ("Hello World!");
System.out.println ("PREFERED: " + p.getPreferredSize ());
final Dialog d = new Dialog (f);
d.setModal (true);
Button b = new Button ("foobar");
b.addMouseListener (new MouseAdapter () {
public void mousePressed (MouseEvent me) {
System.out.println ("I got called");
d.hide ();
// System.out.println (ScrollPane.SCROLLBARS_ALWAYS);
// System.out.println (ScrollPane.SCROLLBARS_AS_NEEDED);
// System.out.println (ScrollPane.SCROLLBARS_NEVER);
}
});
d.add (b);
d.pack ();
d.show ();
System.out.println ("hello world");
// System.out.println ("action listener on wb called");
// Clipboard clip = Toolkit.getDefaultToolkit ().getSystemClipboard ();
// StringSelection ss = new StringSelection("123456789");
// clip.setContents (ss, ss);
// Transferable t = clip.getContents (this);
// try {
// System.out.println (t.getTransferData (DataFlavor.stringFlavor));
// } catch (Exception ex) {
// ex.printStackTrace ();
// }
// System.exit (0);
}
});
wb.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
System.out.println("mouse pressed wb");
xs++;
ys++;
ch.repaint ();
}
public void mouseReleased(MouseEvent e) {
System.out.println("mouse released wb");
}
public void mouseClicked(MouseEvent e) {
System.out.println("mouse clicked wb");
}
public void mouseEntered(MouseEvent e) {
System.out.println("mouse entered wb");
}
public void mouseExited(MouseEvent e) {
System.out.println("mouse exited wb");
}
});
f.add(wb,"West");
f.pack();
f.show();
sp.setScrollPosition (10,0);
Toolkit t = Toolkit.getDefaultToolkit();
/* t.beep(); */
System.out.println("screen size: " + t.getScreenSize());
System.out.println("resolution : " + t.getScreenResolution());
// try {
// Thread.sleep (5000);
// } catch (InterruptedException e) {}
// f.setSize(500,500);
System.out.println ("background of canvas: " + ch.getBackground ());
System.out.println ("foreground of canvas: " + ch.getForeground ());
System.out.println("done");
}
}
+571
View File
@@ -0,0 +1,571 @@
/* TestAWT.java -- Tests the AWT like testgtk
Copyright (C) 1998, 1999, 2002 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., 59 Temple Place, Suite 330, Boston, MA
02111-1307 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. */
import java.awt.List;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.peer.*;
class TestAWT
{
public static void main(String args[])
{
if (args.length==0)
{
Properties prop = System.getProperties ();
prop.put ("awt.toolkit", "gnu.java.awt.peer.gtk.GtkToolkit");
}
MainWindow f = new MainWindow();
System.out.println(f.isDisplayable());
f.show();
System.out.println(f.isDisplayable());
}
}
interface SubWindow
{
public void init ();
}
class PrettyPanel extends Panel
{
Insets myInsets;
public PrettyPanel ()
{
myInsets = new Insets (10, 10, 10, 10);
}
public Insets getInsets ()
{
return myInsets;
}
}
abstract class PrettyFrame extends Frame
{
public PrettyFrame ()
{
((BorderLayout) getLayout ()).setHgap (5);
((BorderLayout) getLayout ()).setVgap (5);
}
// public Insets getInsets()
// {
// Insets oldInsets = super.getInsets ();
// return new Insets (oldInsets.top+10,
// oldInsets.left+10,
// oldInsets.bottom+10,
// oldInsets.right+10);
// }
}
abstract class SubFrame extends PrettyFrame implements SubWindow
{
boolean initted = false;
public void setVisible (boolean visible)
{
if (!initted && visible)
init();
super.setVisible (visible);
}
}
class MainWindow extends PrettyFrame implements ActionListener
{
Button closeButton;
Hashtable windows;
Vector buttons;
void addSubWindow (String name, SubWindow w)
{
Button b = new Button (name);
b.addActionListener (this);
buttons.addElement (b);
windows.put (b, w);
}
MainWindow ()
{
MenuBar mb = new MenuBar ();
Menu menu = new Menu ("File");
Menu submenu = new Menu ("Testing");
submenu.add (new CheckboxMenuItem ("Foobar"));
menu.add (submenu);
mb.add (menu);
setMenuBar (mb);
add (new Label ("Classpath v0.0.0"), "North");
closeButton = new Button ("Close");
closeButton.addActionListener (this);
closeButton.setFont (new Font ("Serif", Font.BOLD | Font.ITALIC, 18));
add (closeButton, "South");
windows = new Hashtable ();
buttons = new Vector ();
addSubWindow ("Buttons", new ButtonsWindow ());
addSubWindow ("Cursors", new CursorsWindow ());
addSubWindow ("Dialog", new DialogWindow (this));
addSubWindow ("File", new FileWindow (this));
addSubWindow ("Labels", new LabelWindow ());
addSubWindow ("List", new ListWindow ());
addSubWindow ("Radio Buttons", new RadioWindow ());
addSubWindow ("TextField", new TextFieldWindow ());
Panel sp = new Panel();
PrettyPanel p = new PrettyPanel();
p.setLayout (new GridLayout (windows.size(), 1));
for (Enumeration e = buttons.elements (); e.hasMoreElements (); )
{
p.add ((Button) e.nextElement ());
}
sp.add (p);
add (sp, "Center");
setSize (200, 86 + (windows.size ()*22));
setTitle ("TestAWT");
}
public void actionPerformed (ActionEvent evt)
{
Button source = (Button) evt.getSource ();
if (source==closeButton)
{
System.getProperties ().list (System.out);
dispose();
System.exit (0);
}
Window w = (Window) windows.get (source);
if (w.isVisible ())
w.dispose ();
else
{
w.setVisible (true);
w.show();
}
}
}
class ButtonsWindow extends SubFrame implements ActionListener
{
Button b[] = new Button [9];
public void init ()
{
initted = true;
Panel p = new Panel ();
p.setLayout (new GridLayout (0, 3, 5, 5));
for (int i=0; i<9; i++)
{
b[i]=new Button ("button" + (i+1));
b[i].addActionListener (this);
}
p.add (b[0]);
p.add (b[6]);
p.add (b[4]);
p.add (b[8]);
p.add (b[1]);
p.add (b[7]);
p.add (b[3]);
p.add (b[5]);
p.add (b[2]);
add (p, "North");
Button cb = new Button ("close");
cb.addActionListener(new ActionListener () {
public void actionPerformed (ActionEvent e) {
dispose();
}
});
add (cb, "South");
setTitle ("Buttons");
}
public void actionPerformed (ActionEvent evt)
{
Button source = (Button) evt.getSource ();
for (int i=0; i<9; i++)
{
if (source == b[i])
{
int i2=((i+1)==9)?0:(i+1);
if (b[i2].isVisible())
b[i2].setVisible(false);
else
b[i2].setVisible(true);
}
}
}
}
class DialogWindow extends Dialog implements SubWindow
{
Label text;
boolean initted = false;
public DialogWindow (Frame f)
{
super (f, true);
}
public void setVisible (boolean visible)
{
if (!initted && visible)
init();
super.setVisible (visible);
}
public void init ()
{
text = new Label ("Dialog Test");
text.setAlignment (Label.CENTER);
add (text, "North");
text.setVisible (false);
Panel p = new PrettyPanel();
Button cb = new Button ("OK");
cb.addActionListener(new ActionListener () {
public void actionPerformed (ActionEvent e)
{
dispose();
}
});
p.setLayout (new GridLayout (1, 2));
((GridLayout) p.getLayout ()).setHgap (5);
((GridLayout) p.getLayout ()).setVgap (5);
p.add (cb);
Button toggle = new Button ("Toggle");
p.add (toggle);
toggle.addActionListener(new ActionListener () {
public void actionPerformed (ActionEvent e)
{
if (text.isVisible ())
text.setVisible (false);
else
text.setVisible (true);
doLayout();
}
});
add (p, "South");
setTitle ("Dialog");
setSize (130, 70);
}
}
class CursorsWindow extends SubFrame implements ItemListener
{
Choice cursorChoice;
Canvas cursorCanvas;
public void init ()
{
cursorChoice = new Choice();
cursorChoice.add ("Default");
cursorChoice.add ("Crosshair");
cursorChoice.add ("Text");
cursorChoice.add ("Wait");
cursorChoice.add ("Southwest Resize");
cursorChoice.add ("Southeast Resize");
cursorChoice.add ("Northwest Resize");
cursorChoice.add ("Northeast Resize");
cursorChoice.add ("North Resize");
cursorChoice.add ("South Resize");
cursorChoice.add ("West Resize");
cursorChoice.add ("East Resize");
cursorChoice.add ("Hand");
cursorChoice.add ("Move");
cursorChoice.addItemListener(this);
add (cursorChoice, "North");
cursorCanvas = new Canvas ()
{
public void paint (Graphics g)
{
Dimension d = this.getSize();
g.setColor (Color.white);
g.fillRect (0, 0, d.width, d.height/2);
g.setColor (Color.black);
g.fillRect (0, d.height/2, d.width, d.height/2);
g.setColor (this.getBackground());
g.fillRect (d.width/3, d.height/3, d.width/3,
d.height/3);
}
};
cursorCanvas.setSize (80,80);
add (cursorCanvas, "Center");
Button cb = new Button ("Close");
cb.addActionListener(new ActionListener () {
public void actionPerformed (ActionEvent e) {
dispose();
}
});
add (cb, "South");
setTitle ("Cursors");
setSize (160, 180);
}
public void itemStateChanged (ItemEvent e)
{
cursorCanvas.setCursor (Cursor.getPredefinedCursor (cursorChoice.getSelectedIndex()));
}
}
class TextFieldWindow extends SubFrame implements ItemListener
{
Checkbox editable, visible, sensitive;
TextField text;
public void init ()
{
initted = true;
text = new TextField ("hello world");
add (text, "North");
Panel p = new Panel();
p.setLayout (new GridLayout (3, 1));
((GridLayout) p.getLayout ()).setHgap (5);
((GridLayout) p.getLayout ()).setVgap (5);
editable = new Checkbox("Editable", true);
p.add (editable);
editable.addItemListener (this);
visible = new Checkbox("Visible", true);
p.add (visible);
visible.addItemListener (this);
sensitive = new Checkbox("Sensitive", true);
p.add (sensitive);
sensitive.addItemListener (this);
add (p, "Center");
Button cb = new Button ("Close");
cb.addActionListener(new ActionListener () {
public void actionPerformed (ActionEvent e) {
dispose();
}
});
add (cb, "South");
setTitle ("TextField");
setSize (160, 180);
}
public void itemStateChanged (ItemEvent e)
{
boolean on=true;
if (e.getStateChange () == ItemEvent.DESELECTED)
on=false;
if (e.getSource() == editable)
text.setEditable (on);
if (e.getSource() == visible)
if (on)
text.setEchoChar ((char) 0);
else
text.setEchoChar ('*');
if (e.getSource() == sensitive)
text.setEnabled (on);
}
}
class FileWindow extends FileDialog implements SubWindow
{
boolean initted = false;
public FileWindow (MainWindow mw)
{
super (mw);
}
public void setVisible (boolean visible)
{
if (!initted && visible)
init();
super.setVisible (visible);
}
public void init()
{
initted = true;
}
}
class LabelWindow extends SubFrame
{
public void init ()
{
initted = true;
Panel p = new Panel();
p.setLayout (new GridLayout (3, 1));
((GridLayout) p.getLayout ()).setHgap (5);
((GridLayout) p.getLayout ()).setVgap (5);
p.add (new Label ("left justified label", Label.LEFT));
p.add (new Label ("center justified label", Label.CENTER));
p.add (new Label ("right justified label", Label.RIGHT));
add (p, "Center");
Button cb = new Button ("Close");
cb.addActionListener(new ActionListener () {
public void actionPerformed (ActionEvent e) {
dispose();
}
});
add (cb, "South");
setTitle ("Labels");
setSize (160, 180);
}
}
class ListWindow extends SubFrame
{
public void init ()
{
initted = true;
Panel p = new Panel ();
p.setLayout (new GridLayout (3, 1));
List l = new List (5, true);
for (int i = 0; i < 10; i++)
l.add ("added item " + i);
p.add (l);
add (p, "Center");
Button cb = new Button ("Close");
cb.addActionListener(new ActionListener () {
public void actionPerformed (ActionEvent e) {
dispose();
}
});
add (cb, "South");
setTitle ("List");
setSize (85, 167);
}
}
class RadioWindow extends SubFrame
{
public void init ()
{
initted = true;
Panel p = new Panel();
p.setLayout (new GridLayout (3, 1));
((GridLayout) p.getLayout ()).setHgap (5);
((GridLayout) p.getLayout ()).setVgap (5);
final CheckboxGroup cg = new CheckboxGroup();
final Checkbox[] boxes = new Checkbox[3];
for (int i = 0; i < 3; ++i)
{
boxes[i] = new Checkbox("button" + i, cg, i == 0);
p.add(boxes[i]);
}
add (p, "North");
p = new Panel();
p.setLayout (new GridLayout (1, 3));
((GridLayout) p.getLayout ()).setHgap (5);
((GridLayout) p.getLayout ()).setVgap (5);
for (int i = 0; i < 3; ++i)
{
final int val = i;
Button tweak = new Button ("Set " + i);
tweak.addActionListener(new ActionListener ()
{
public void actionPerformed (ActionEvent e)
{
cg.setSelectedCheckbox(boxes[val]);
}
});
p.add(tweak);
}
add (p, "Center");
Button cb = new Button ("Close");
cb.addActionListener(new ActionListener () {
public void actionPerformed (ActionEvent e) {
dispose();
}
});
add (cb, "South");
setTitle ("Radio Buttons");
setSize (85, 167);
}
}