This paints the icons when using a look and feel other than 'basic'. I
still need to make the control icons work for MetalL&F. Also, clicking
still needs to be fixed so it works the same as Sun's.

2005-07-13 Lillian Angel <[EMAIL PROTECTED]>
        * javax/swing/plaf/basic/BasicLookAndFeel.java: Changed 
        rowHeight to the right height. This should be fixed later to 
        something more reasonable, as opposed to a 'magic' number.
        * javax/swing/plaf/basic/BasicTreeUI.java
        (paintLeaf): added in code to paint icons properly
        (paintNonLeaf): same as above
        * javax/swing/plaf/metal/MetalLookAndFeel.java: Changed default
        icons to MetalIconFactory icons
        * javax/swing/tree/DefaultTreeCellRenderer.java
        (getTreeCellRendererComponent): Changed to paint icons 
        separately from cell.

Index: javax/swing/plaf/basic/BasicLookAndFeel.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/basic/BasicLookAndFeel.java,v
retrieving revision 1.33
diff -u -r1.33 BasicLookAndFeel.java
--- javax/swing/plaf/basic/BasicLookAndFeel.java	12 Jul 2005 19:10:27 -0000	1.33
+++ javax/swing/plaf/basic/BasicLookAndFeel.java	13 Jul 2005 18:54:16 -0000
@@ -1041,7 +1041,7 @@
       "Tree.hash", new ColorUIResource(Color.gray),
       "Tree.leftChildIndent", new Integer(7),
       "Tree.rightChildIndent", new Integer(13),
-      "Tree.rowHeight", new Integer(19),
+      "Tree.rowHeight", new Integer(20), // FIXME
       "Tree.scrollsOnExpand", Boolean.TRUE,
       "Tree.selectionBackground", new ColorUIResource(Color.black),
       "Tree.nonSelectionBackground", new ColorUIResource(light),
Index: javax/swing/plaf/basic/BasicTreeUI.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/basic/BasicTreeUI.java,v
retrieving revision 1.30
diff -u -r1.30 BasicTreeUI.java
--- javax/swing/plaf/basic/BasicTreeUI.java	12 Jul 2005 20:21:53 -0000	1.30
+++ javax/swing/plaf/basic/BasicTreeUI.java	13 Jul 2005 18:54:16 -0000
@@ -72,6 +72,7 @@
 import javax.swing.JScrollBar;
 import javax.swing.JScrollPane;
 import javax.swing.JTree;
+import javax.swing.SwingUtilities;
 import javax.swing.Timer;
 import javax.swing.UIDefaults;
 import javax.swing.UIManager;
@@ -86,12 +87,12 @@
 import javax.swing.event.TreeSelectionListener;
 import javax.swing.plaf.ComponentUI;
 import javax.swing.plaf.TreeUI;
+import javax.swing.plaf.metal.MetalIconFactory;
 import javax.swing.tree.AbstractLayoutCache;
 import javax.swing.tree.FixedHeightLayoutCache;
 import javax.swing.tree.DefaultMutableTreeNode;
 import javax.swing.tree.DefaultTreeCellEditor;
 import javax.swing.tree.DefaultTreeCellRenderer;
-import javax.swing.SwingUtilities;
 import javax.swing.tree.TreeCellEditor;
 import javax.swing.tree.TreeCellRenderer;
 import javax.swing.tree.TreeSelectionModel;
@@ -2514,28 +2515,45 @@
       boolean selected = tree.isPathSelected(curr);
 
       if (tree.isVisible(curr))
+      {          
+         DefaultTreeCellRenderer dtcr = (DefaultTreeCellRenderer) 
+                                             tree.getCellRenderer();
+         boolean hasIcons = false;
+         Icon li = dtcr.getLeafIcon();
+         if (li != null)
+            hasIcons = true;
+         
          if (selected)
          {
-            DefaultTreeCellRenderer dtcr = (DefaultTreeCellRenderer) 
-                                                   tree.getCellRenderer();
-            Component comp = dtcr.getTreeCellRendererComponent(tree, leaf,
+            Component c = dtcr.getTreeCellRendererComponent(tree, leaf,
                   true, false, true, 0, false);
             
-            Rectangle cb = getCellBounds(x, y, leaf);
-            Icon li = dtcr.getLeafIcon(); 
-            if (li != null)
-               cb.width = ((int) cb.getWidth()) + li.getIconWidth() + 4;
-            rendererPane.paintComponent(g, comp, tree, cb);
+            if (hasIcons)
+            {
+               li.paintIcon(c, g, x, y + 2);
+               x += (li.getIconWidth() + 4);
+            }
+            rendererPane.paintComponent(g, c, tree, 
+                                    getCellBounds(x, y, leaf));
          }
          else
-         {
-            Component c = tree.getCellRenderer().getTreeCellRendererComponent(
+         {            
+            Component c = dtcr.getTreeCellRendererComponent(
                   tree, leaf, false, false, true, 0, false);
-
+            
             g.translate(x, y);
+            
+            if (hasIcons)
+            {
+               Component icon = dtcr.getTreeCellRendererComponent(tree, 
+                  li, false, false, true, 0, false); 
+               icon.paint(g);
+            }
+            
             c.paint(g);
             g.translate(-x, -y);
          }
+      }
    }
 
    /**
@@ -2555,29 +2573,61 @@
       boolean expanded = tree.isExpanded(curr);
 
       if (tree.isVisible(curr))
-         if (selected)
-         {
+      {
             DefaultTreeCellRenderer dtcr = (DefaultTreeCellRenderer) 
-            tree.getCellRenderer();            
-            Component comp = dtcr.getTreeCellRendererComponent(tree, nonLeaf,
-                  true, expanded, false, 0, false);
+                                                tree.getCellRenderer();
+            boolean hasIcons = false;
+            boolean hasOtherIcons = false;
+            Icon oi = dtcr.getOpenIcon();
+            Icon ci = dtcr.getClosedIcon();
             
-            Rectangle cb = getCellBounds(x, y,
-                  nonLeaf);
-            Icon oi = dtcr.getOpenIcon(); 
-            if (oi != null)
-               cb.width = ((int) cb.getWidth()) + oi.getIconWidth() + 4;            
-            rendererPane.paintComponent(g, comp, tree, cb);
-         }
-         else
-         {
-            Component c = tree.getCellRenderer().getTreeCellRendererComponent(
-                  tree, nonLeaf, false, expanded, false, 0, false);
+            if (oi != null || ci != null)
+               hasIcons = true;
+            
+            if (selected)
+            {      
+               Component c = dtcr.getTreeCellRendererComponent(tree, nonLeaf,
+                     true, expanded, false, 0, false);
 
-            g.translate(x, y);
-            c.paint(g);
-            g.translate(-x, -y);
-         }
+               if (hasIcons)
+               {
+                  if (expanded)
+                  {
+                     oi.paintIcon(c, g, x, y + 2);
+                     x += (oi.getIconWidth() + 4);
+                  }
+                  else
+                  {
+                     ci.paintIcon(c, g, x, y + 2);
+                     x += (ci.getIconWidth() + 4);
+                  }
+                  
+               }
+               rendererPane.paintComponent(g, c, tree, 
+                           getCellBounds(x, y, nonLeaf));
+            }
+            else
+            {
+               Component c = dtcr.getTreeCellRendererComponent(tree, nonLeaf, 
+                                          false, expanded, false, 0, false);
+               g.translate(x, y);
+               
+               if (hasIcons)
+               {
+                  Component icon;
+                  if (expanded)
+                     icon = dtcr.getTreeCellRendererComponent(tree, 
+                        oi, false, false, false, 0, false);
+                  else
+                     icon = dtcr.getTreeCellRendererComponent(tree, 
+                        ci, false, false, false, 0, false);
+                  
+                  icon.paint(g);
+               }
+               c.paint(g);
+               g.translate(-x, -y);
+            }
+      }
    }
Index: javax/swing/plaf/metal/MetalLookAndFeel.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/metal/MetalLookAndFeel.java,v
retrieving revision 1.27
diff -u -r1.27 MetalLookAndFeel.java
--- javax/swing/plaf/metal/MetalLookAndFeel.java	13 Jul 2005 11:56:02 -0000	1.27
+++ javax/swing/plaf/metal/MetalLookAndFeel.java	13 Jul 2005 18:54:16 -0000
@@ -794,19 +794,18 @@
       new ColorUIResource(getPrimaryControlDarkShadow()),
       "ScrollBar.thumbHighlight",
       new ColorUIResource(getPrimaryControl()),
+
       "SplitPane.darkShadow",
       new ColorUIResource(getControlDarkShadow()),
       "SplitPane.highlight",
       new ColorUIResource(getControlHighlight()),
-      "Tree.openIcon", 
-         new IconUIResource(new ImageIcon(getClass().getResource(
-         "/gnu/javax/swing/plaf/gtk/icons/TreeOpen.png"))),
-      "Tree.leafIcon", 
-         new IconUIResource(new ImageIcon(getClass().getResource(
-            "/gnu/javax/swing/plaf/gtk/icons/TreeLeaf.png"))),  
-      "Tree.closedIcon",
-         new IconUIResource(new ImageIcon(getClass().getResource(
-         "/gnu/javax/swing/plaf/gtk/icons/TreeClosed.png"))),
+
+      "Tree.openIcon", MetalIconFactory.getTreeFolderIcon(),
+      "Tree.closedIcon", MetalIconFactory.getTreeFolderIcon(),
+      "Tree.leafIcon", MetalIconFactory.getTreeLeafIcon(),
+      "Tree.collapsedIcon", MetalIconFactory.getTreeControlIcon(true),
+      "Tree.expandedIcon", MetalIconFactory.getTreeControlIcon(false),
+
       "PopupMenu.border", new MetalBorders.PopupMenuBorder()
     };
     defaults.putDefaults(myDefaults);
Index: javax/swing/tree/DefaultTreeCellRenderer.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/tree/DefaultTreeCellRenderer.java,v
retrieving revision 1.11
diff -u -r1.11 DefaultTreeCellRenderer.java
--- javax/swing/tree/DefaultTreeCellRenderer.java	12 Jul 2005 19:26:41 -0000	1.11
+++ javax/swing/tree/DefaultTreeCellRenderer.java	13 Jul 2005 18:54:16 -0000
@@ -379,22 +379,20 @@
 			boolean selected, boolean expanded, boolean leaf, int row,
 			boolean hasFocus)
 	{
-		this.selected = selected;
-		this.hasFocus = hasFocus;
-
-		setText(val.toString());
-		setHorizontalAlignment(LEFT);
-		setOpaque(true);
-		setVerticalAlignment(TOP);
-		setEnabled(true);
-		setFont(getFont());
-
-		if (leaf)
-			setIcon(getLeafIcon());
-		else if (expanded)
-			setIcon(getOpenIcon());
-		else
-			setIcon(getClosedIcon());
+		if (val instanceof Icon)
+      	setIcon((Icon) val);
+      else
+      {
+         setText(val.toString());
+         setIcon(null);
+         this.selected = selected;
+         this.hasFocus = hasFocus;
+         setHorizontalAlignment(LEFT);
+         setOpaque(true);
+         setVerticalAlignment(TOP);
+         setEnabled(true);
+         setFont(getFont());
+      }
 
 		if (selected) 
 		{
_______________________________________________
Classpath-patches mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/classpath-patches

Reply via email to