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