diff options
Diffstat (limited to 'gnu/java/awt/peer')
-rw-r--r-- | gnu/java/awt/peer/gtk/GdkPixbufDecoder.java | 4 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkComponentPeer.java | 21 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkContainerPeer.java | 1 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkFileDialogPeer.java | 72 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkImage.java | 4 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkImagePainter.java | 1 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkPanelPeer.java | 15 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkScrollPanePeer.java | 9 | ||||
-rw-r--r-- | gnu/java/awt/peer/gtk/GtkToolkit.java | 106 |
9 files changed, 174 insertions, 59 deletions
diff --git a/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java b/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java index 32c698717..5c7fd9600 100644 --- a/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java +++ b/gnu/java/awt/peer/gtk/GdkPixbufDecoder.java @@ -77,19 +77,16 @@ public class GdkPixbufDecoder extends gnu.java.awt.image.ImageDecoder public GdkPixbufDecoder (String filename) { super (filename); - initState (); } public GdkPixbufDecoder (URL url) { super (url); - initState (); } public GdkPixbufDecoder (byte[] imagedata, int imageoffset, int imagelength) { super (imagedata, imageoffset, imagelength); - initState (); } // called back by native side @@ -135,6 +132,7 @@ public class GdkPixbufDecoder extends gnu.java.awt.image.ImageDecoder byte bytes[] = new byte[4096]; int len = 0; + initState(); while ((len = is.read (bytes)) != -1) pumpBytes (bytes, len); diff --git a/gnu/java/awt/peer/gtk/GtkComponentPeer.java b/gnu/java/awt/peer/gtk/GtkComponentPeer.java index 48e63f3d1..15e73d9c3 100644 --- a/gnu/java/awt/peer/gtk/GtkComponentPeer.java +++ b/gnu/java/awt/peer/gtk/GtkComponentPeer.java @@ -115,8 +115,6 @@ public class GtkComponentPeer extends GtkGenericPeer this.awtComponent = awtComponent; insets = new Insets (0, 0, 0, 0); - /* temporary try/catch block until all peers use this creation method */ - try { create (); GtkArgList args = new GtkArgList (); @@ -147,7 +145,7 @@ public class GtkComponentPeer extends GtkGenericPeer Rectangle bounds = awtComponent.getBounds (); setBounds (bounds.x, bounds.y, bounds.width, bounds.height); - } catch (RuntimeException ex) { ; } + setVisible (awtComponent.isVisible ()); } public int checkImage (Image image, int width, int height, @@ -449,18 +447,14 @@ public class GtkComponentPeer extends GtkGenericPeer public void setVisible (boolean b) { - set ("visible", b); - } - - public void hide () - { - setVisible (false); + if (b) + show (); + else + hide (); } - public void show () - { - setVisible (true); - } + public native void hide (); + public native void show (); protected void postMouseEvent(int id, long when, int mods, int x, int y, int clickCount, boolean popupTrigger) @@ -514,7 +508,6 @@ public class GtkComponentPeer extends GtkGenericPeer public void getArgs (Component component, GtkArgList args) { - args.add ("visible", component.isVisible ()); args.add ("sensitive", component.isEnabled ()); ComponentPeer p; diff --git a/gnu/java/awt/peer/gtk/GtkContainerPeer.java b/gnu/java/awt/peer/gtk/GtkContainerPeer.java index 8ac927cba..040499724 100644 --- a/gnu/java/awt/peer/gtk/GtkContainerPeer.java +++ b/gnu/java/awt/peer/gtk/GtkContainerPeer.java @@ -90,7 +90,6 @@ public class GtkContainerPeer extends GtkComponentPeer public void setBounds (int x, int y, int width, int height) { super.setBounds (x, y, width, height); - awtComponent.validate (); } public void setFont(Font f) diff --git a/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java b/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java index 0e36439d1..712247c4a 100644 --- a/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java +++ b/gnu/java/awt/peer/gtk/GtkFileDialogPeer.java @@ -45,6 +45,7 @@ import java.awt.Graphics; import java.awt.event.WindowEvent; import java.awt.peer.FileDialogPeer; import java.io.FilenameFilter; +import java.io.File; public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer { @@ -52,18 +53,34 @@ public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer private String currentFile = null; private String currentDirectory = null; + private FilenameFilter filter; - native void create (); + native void create (GtkContainerPeer parent); + native void connectJObject (); + native void connectSignals (); + native void nativeSetFile (String file); + native public String nativeGetDirectory(); + native public void nativeSetDirectory(String directory); + native void nativeSetFilenameFilter (FilenameFilter filter); + + public void create() { + create((GtkContainerPeer) awtComponent.getParent().getPeer()); + + FileDialog fd = (FileDialog) awtComponent; + + setDirectory(fd.getDirectory()); + setFile(fd.getFile()); + + FilenameFilter filter = fd.getFilenameFilter(); + if (filter != null) + setFilenameFilter(filter); + } public GtkFileDialogPeer (FileDialog fd) { super (fd); } - native void connectJObject (); - native void connectSignals (); - native void nativeSetFile (String file); - public void setFile (String fileName) { /* If nothing changed do nothing. This usually happens because @@ -80,26 +97,16 @@ public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer return; } - // Remove any directory path from the filename - int sepIndex = fileName.lastIndexOf (FS); - if (sepIndex < 0) - { + // GtkFileChooser requires absolute filenames. If the given filename + // is not absolute, let's construct it based on current directory. currentFile = fileName; + if (fileName.indexOf(FS) == 0) + { nativeSetFile (fileName); } else { - if (fileName.length() > (sepIndex + 1)) - { - String fn = fileName.substring (sepIndex + 1); - currentFile = fn; - nativeSetFile (fn); - } - else - { - currentFile = ""; - nativeSetFile (""); - } + nativeSetFile (nativeGetDirectory() + FS + fileName); } } @@ -120,20 +127,25 @@ public class GtkFileDialogPeer extends GtkDialogPeer implements FileDialogPeer } currentDirectory = directory; - - // Gtk expects the directory to end with a file separator - if (directory.substring (directory.length () - 1).equals (FS)) - nativeSetFile (directory); - else - nativeSetFile (directory + FS); + nativeSetDirectory (directory); } public void setFilenameFilter (FilenameFilter filter) { - /* GTK has no filter callbacks yet. It works by setting a pattern - * (see gtk_file_selection_complete), which we can't convert - * to the callback paradigm. With GTK-2.4 there will be a - * gtk_file_filter_add_custom function that we can use. */ + this.filter = filter; + nativeSetFilenameFilter(filter); + } + + /* This method interacts with the native callback function of the + same name. The native function will extract the filename from the + GtkFileFilterInfo object and send it to this method, which will + in turn call the filter's accept() method and give back the return + value. */ + boolean filenameFilterCallback (String fullname) { + String filename = fullname.substring(fullname.lastIndexOf(FS) + 1); + String dirname = fullname.substring(0, fullname.lastIndexOf(FS)); + File dir = new File(dirname); + return filter.accept(dir, filename); } public Graphics getGraphics () diff --git a/gnu/java/awt/peer/gtk/GtkImage.java b/gnu/java/awt/peer/gtk/GtkImage.java index 57c3d45c6..27d3d6a06 100644 --- a/gnu/java/awt/peer/gtk/GtkImage.java +++ b/gnu/java/awt/peer/gtk/GtkImage.java @@ -202,7 +202,7 @@ public class GtkImage extends Image implements ImageConsumer public synchronized void setColorModel (ColorModel model) { - if (this.model == null || this.model == model) + if (this.model == null || this.model.equals(model)) this.model = model; else isCacheable = false; @@ -235,7 +235,7 @@ public class GtkImage extends Image implements ImageConsumer if (!isCacheable) return; - if (cm != model || pixelCache == null) + if (!cm.equals(model) || pixelCache == null) { isCacheable = false; return; diff --git a/gnu/java/awt/peer/gtk/GtkImagePainter.java b/gnu/java/awt/peer/gtk/GtkImagePainter.java index 16f36d303..d15cb4a4a 100644 --- a/gnu/java/awt/peer/gtk/GtkImagePainter.java +++ b/gnu/java/awt/peer/gtk/GtkImagePainter.java @@ -246,5 +246,6 @@ public class GtkImagePainter implements Runnable, ImageConsumer public void imageComplete (int status) { + image.imageComplete(status); } } diff --git a/gnu/java/awt/peer/gtk/GtkPanelPeer.java b/gnu/java/awt/peer/gtk/GtkPanelPeer.java index 70aab2ca5..0b5d0af43 100644 --- a/gnu/java/awt/peer/gtk/GtkPanelPeer.java +++ b/gnu/java/awt/peer/gtk/GtkPanelPeer.java @@ -38,7 +38,9 @@ exception statement from your version. */ package gnu.java.awt.peer.gtk; +import java.awt.AWTEvent; import java.awt.Panel; +import java.awt.event.MouseEvent; import java.awt.peer.PanelPeer; public class GtkPanelPeer extends GtkContainerPeer @@ -51,4 +53,17 @@ public class GtkPanelPeer extends GtkContainerPeer { super (p); } + + public void handleEvent (AWTEvent event) + { + int id = event.getID(); + + switch (id) + { + case MouseEvent.MOUSE_PRESSED: + awtComponent.requestFocusInWindow (); + break; + } + super.handleEvent (event); + } } diff --git a/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java b/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java index e4f5e8f31..d0cbde034 100644 --- a/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java +++ b/gnu/java/awt/peer/gtk/GtkScrollPanePeer.java @@ -39,6 +39,7 @@ exception statement from your version. */ package gnu.java.awt.peer.gtk; import java.awt.Adjustable; +import java.awt.Dimension; import java.awt.ScrollPane; import java.awt.peer.ComponentPeer; import java.awt.peer.ScrollPanePeer; @@ -87,10 +88,10 @@ public class GtkScrollPanePeer extends GtkContainerPeer native public int getVScrollbarWidth (); native public void setScrollPosition (int x, int y); -// public Dimension getPreferredSize () -// { -// return new Dimension (60, 60); -// } + public Dimension getPreferredSize () + { + return awtComponent.getSize(); + } public void setUnitIncrement (Adjustable adj, int u) { diff --git a/gnu/java/awt/peer/gtk/GtkToolkit.java b/gnu/java/awt/peer/gtk/GtkToolkit.java index c55001591..9cc29b4b3 100644 --- a/gnu/java/awt/peer/gtk/GtkToolkit.java +++ b/gnu/java/awt/peer/gtk/GtkToolkit.java @@ -44,13 +44,17 @@ import java.awt.dnd.DragGestureEvent; import java.awt.dnd.peer.DragSourceContextPeer; import java.awt.font.TextAttribute; import java.awt.im.InputMethodHighlight; +import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.ImageObserver; +import java.awt.image.ImageConsumer; import java.awt.image.ImageProducer; import java.awt.GraphicsEnvironment; import java.awt.peer.*; import java.net.URL; +import java.util.HashSet; import java.util.Hashtable; +import java.util.Iterator; import java.util.Map; import java.util.MissingResourceException; import java.util.Properties; @@ -127,10 +131,102 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit return status; } + /** + * A helper class to return to clients in cases where a BufferedImage is + * desired but its construction fails. + */ + private class GtkErrorImage extends Image + { + public GtkErrorImage() + { + } + + public int getWidth(ImageObserver observer) + { + return -1; + } + + public int getHeight(ImageObserver observer) + { + return -1; + } + + public ImageProducer getSource() + { + + return new ImageProducer() + { + HashSet consumers = new HashSet(); + public void addConsumer(ImageConsumer ic) + { + consumers.add(ic); + } + + public boolean isConsumer(ImageConsumer ic) + { + return consumers.contains(ic); + } + + public void removeConsumer(ImageConsumer ic) + { + consumers.remove(ic); + } + + public void startProduction(ImageConsumer ic) + { + consumers.add(ic); + Iterator i = consumers.iterator(); + while(i.hasNext()) + { + ImageConsumer c = (ImageConsumer) i.next(); + c.imageComplete(ImageConsumer.IMAGEERROR); + } + } + public void requestTopDownLeftRightResend(ImageConsumer ic) + { + startProduction(ic); + } + }; + } + + public Graphics getGraphics() + { + return null; + } + + public Object getProperty(String name, ImageObserver observer) + { + return null; + } + public Image getScaledInstance(int width, int height, int flags) + { + return new GtkErrorImage(); + } + + public void flush() + { + } + } + + + /** + * Helper to return either a BufferedImage -- the argument -- or a + * GtkErrorImage if the argument is null. + */ + + private Image bufferedImageOrError(BufferedImage b) + { + if (b == null) + return new GtkErrorImage(); + else + return b; + } + + public Image createImage (String filename) { if (useGraphics2D()) - return GdkPixbufDecoder.createBufferedImage (filename); + return bufferedImageOrError(GdkPixbufDecoder.createBufferedImage (filename)); else { GdkPixbufDecoder d = new GdkPixbufDecoder (filename); @@ -143,7 +239,7 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit public Image createImage (URL url) { if (useGraphics2D()) - return GdkPixbufDecoder.createBufferedImage (url); + return bufferedImageOrError(GdkPixbufDecoder.createBufferedImage (url)); else { GdkPixbufDecoder d = new GdkPixbufDecoder (url); @@ -156,7 +252,7 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit public Image createImage (ImageProducer producer) { if (useGraphics2D()) - return GdkPixbufDecoder.createBufferedImage (producer); + return bufferedImageOrError(GdkPixbufDecoder.createBufferedImage (producer)); else { GtkImage image = new GtkImage (producer, null); @@ -169,9 +265,9 @@ public class GtkToolkit extends gnu.java.awt.ClasspathToolkit int imagelength) { if (useGraphics2D()) - return GdkPixbufDecoder.createBufferedImage (imagedata, + return bufferedImageOrError(GdkPixbufDecoder.createBufferedImage (imagedata, imageoffset, - imagelength); + imagelength)); else { GdkPixbufDecoder d = new GdkPixbufDecoder (imagedata, |