This is the mail archive of the java-patches@gcc.gnu.org mailing list for the Java project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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 

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]