This is the mail archive of the
java-patches@gcc.gnu.org
mailing list for the Java project.
[gui][patch] image, icon, and scrollpane layout fixes
- From: graydon hoare <graydon at redhat dot com>
- To: java-patches at gcc dot gnu dot org
- Date: Tue, 29 Jun 2004 01:24:10 -0400
- Subject: [gui][patch] image, icon, and scrollpane layout fixes
hi,
I've just committed this patch to java-gui-branch. various fixes for
bugs uncovered with recent swing-trail testing, nothing terribly upsetting.
-graydon
2004-06-29 Graydon Hoare <graydon@redhat.com>
* java/awt/image/BufferedImage.java
(getSource): Implement.
* javax/swing/ImageIcon.java
(ImageIcon): Implement ctor.
* javax/swing/ScrollPaneLayout.java
(preferredLayoutSize): Be more careful about nulls.
--- java/awt/image/BufferedImage.java 24 Feb 2004 22:52:54 -0000 1.9.14.2
+++ java/awt/image/BufferedImage.java 29 Jun 2004 05:21:52 -0000
@@ -47,6 +47,8 @@
import java.awt.color.ColorSpace;
import java.util.Hashtable;
import java.util.Vector;
+import java.util.HashSet;
+import java.util.Iterator;
import gnu.java.awt.ComponentDataBlitOp;
/**
@@ -442,7 +444,58 @@
public ImageProducer getSource()
{
- throw new UnsupportedOperationException("not implemented");
+ 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)
+ {
+ int x = 0;
+ int y = 0;
+ int width = getWidth();
+ int height = getHeight();
+ int stride = width;
+ int offset = 0;
+ int[] pixels = getRGB(x, y,
+ width, height,
+ (int[])null, offset, stride);
+ ColorModel model = getColorModel();
+
+ consumers.add(ic);
+
+ Iterator i = consumers.iterator();
+ while(i.hasNext())
+ {
+ System.err.println("delivering " + width + "x" + height + " (" + pixels.length + ") pixels");
+ ImageConsumer c = (ImageConsumer) i.next();
+ c.setHints(ImageConsumer.SINGLEPASS);
+ c.setDimensions(getWidth(), getHeight());
+ c.setPixels(x, y, width, height, model, pixels, offset, stride);
+ c.imageComplete(ImageConsumer.STATICIMAGEDONE);
+ }
+ }
+
+ public void requestTopDownLeftRightResend(ImageConsumer ic)
+ {
+ startProduction(ic);
+ }
+
+ };
}
public Vector getSources()
--- javax/swing/ImageIcon.java 24 Jun 2004 05:31:31 -0000 1.2.18.6
+++ javax/swing/ImageIcon.java 29 Jun 2004 05:21:52 -0000
@@ -61,8 +61,9 @@
this(s, s);
}
- public ImageIcon(Image image)
+ public ImageIcon(Image im)
{
+ image = Toolkit.getDefaultToolkit().createImage(im.getSource());
}
public ImageIcon(URL url)
--- javax/swing/ScrollPaneLayout.java 8 Jun 2004 09:15:47 -0000 1.3.18.4
+++ javax/swing/ScrollPaneLayout.java 29 Jun 2004 05:21:52 -0000
@@ -199,7 +199,7 @@
public Dimension preferredLayoutSize(Container parent)
{
- if (parent instanceof JScrollPane)
+ if (parent != null && parent instanceof JScrollPane)
{
JScrollPane sc = (JScrollPane) parent;
synchronized (sc.getTreeLock ())
@@ -217,25 +217,30 @@
Insets viewportInsets = null;
if (viewportBorder != null)
+ {
viewportInsets = viewportBorder.getBorderInsets(parent);
+ if (viewportInsets != null)
+ viewportInsetsSize.setSize(viewportInsets.left + viewportInsets.right,
+ viewportInsets.top + viewportInsets.bottom);
+ }
if (insets != null)
insetsSize.setSize(insets.left + insets.right,
insets.top + insets.bottom);
- if (viewport != null)
+ if (viewport != null && viewport.getPreferredSize() != null)
viewportSize.setSize(viewport.getPreferredSize());
- if (colHead != null)
+ if (colHead != null && colHead.getPreferredSize() != null)
columnHeaderSize.setSize(colHead.getPreferredSize());
- if (rowHead != null)
+ if (rowHead != null && rowHead.getPreferredSize() != null)
rowHeaderSize.setSize(rowHead.getPreferredSize());
- if (vsb != null)
+ if (vsb != null && vsb.getPreferredSize() != null)
verticalScrollBarSize.setSize(vsb.getPreferredSize());
- if (hsb != null)
+ if (hsb != null && hsb.getPreferredSize() != null)
horizontalScrollBarSize.setSize(hsb.getPreferredSize());
/*
@@ -286,27 +291,34 @@
Insets viewportInsets = null;
if (viewportBorder != null)
+ {
viewportInsets = viewportBorder.getBorderInsets(parent);
+ if (viewportInsets != null)
+ viewportInsetsSize.setSize(viewportInsets.left + viewportInsets.right,
+ viewportInsets.top + viewportInsets.bottom);
+ }
if (insets != null)
insetsSize.setSize(insets.left + insets.right,
insets.top + insets.bottom);
- if (viewport != null)
+ if (viewport != null && viewport.getMinimumSize() != null)
viewportSize.setSize(viewport.getMinimumSize());
- if (colHead != null)
+ if (colHead != null && colHead.getMinimumSize() != null)
columnHeaderSize.setSize(colHead.getMinimumSize());
- if (rowHead != null)
+ if (rowHead != null && rowHead.getMinimumSize() != null)
rowHeaderSize.setSize(rowHead.getMinimumSize());
if (vsb != null
- && vsbPolicy != VERTICAL_SCROLLBAR_NEVER)
+ && vsbPolicy != VERTICAL_SCROLLBAR_NEVER
+ && vsb.getMinimumSize() != null)
verticalScrollBarSize.setSize(vsb.getMinimumSize());
if (hsb != null
- && hsbPolicy != HORIZONTAL_SCROLLBAR_NEVER)
+ && hsbPolicy != HORIZONTAL_SCROLLBAR_NEVER
+ && hsb.getMinimumSize() != null)
horizontalScrollBarSize.setSize(hsb.getMinimumSize());
return new Dimension(insetsSize.width