Index: javax/swing/plaf/basic/BasicBorders.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/basic/BasicBorders.java,v
retrieving revision 1.18
diff -u -r1.18 BasicBorders.java
--- javax/swing/plaf/basic/BasicBorders.java 15 Nov 2005 20:32:46 -0000 1.18
+++ javax/swing/plaf/basic/BasicBorders.java 21 Jan 2006 22:49:17 -0000
@@ -299,9 +299,7 @@
public static Border getSplitPaneDividerBorder()
{
/* See comment in methods above for why this border is not shared. */
- return new SplitPaneDividerBorder(
- UIManager.getColor("SplitPane.highlight"),
- UIManager.getColor("SplitPane.darkShadow"));
+ return new SplitPaneDividerBorder();
}
@@ -1518,34 +1516,15 @@
implements Border, UIResource, Serializable
{
/**
- * The highlight color, which is drawn on the left or top edge
- * depending on the orientation of the JSplitPanel.
- */
- protected Color highlight;
-
-
- /**
- * The highlight color, which is drawn on the right or bottom edge
- * depending on the orientation of the JSplitPanel.
- */
- protected Color shadow;
-
-
- /**
* Constructs a new border for drawing the divider of a JSplitPane
* in the Basic look and feel. The outer parts of the JSplitPane have
* their own border class, SplitPaneBorder
.
- *
- * @param shadow the shadow color.
- * @param highlight the highlight color.
*/
- public SplitPaneDividerBorder(Color highlight, Color shadow)
+ public SplitPaneDividerBorder()
{
- this.highlight = (highlight != null) ? highlight : Color.white;
- this.shadow = (shadow != null) ? shadow : Color.black;
+ // Nothing to do here.
}
-
/**
* Paints the border around the divider of a JSplitPane
.
*
@@ -1564,6 +1543,8 @@
public void paintBorder(Component c, Graphics g,
int x, int y, int width, int height)
{
+ Color highlight = UIManager.getColor("SplitPane.highlight");
+ Color shadow = UIManager.getColor("SplitPane.shadow");
Color oldColor, dcol;
int x2, y2;
JSplitPane sp;
@@ -1624,17 +1605,15 @@
return new Insets(1, 1, 1, 1);
}
-
/**
* Determines whether this border fills every pixel in its area
* when painting.
*
- * @return true
if both highlight and shadow
- * color are fully opaque.
+ * @return true
*/
public boolean isBorderOpaque()
{
- return (highlight.getAlpha() == 255) && (shadow.getAlpha() == 255);
+ return true;
}
@@ -1785,4 +1764,5 @@
return insets;
}
}
+
}
Index: javax/swing/plaf/basic/BasicLookAndFeel.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/basic/BasicLookAndFeel.java,v
retrieving revision 1.82
diff -u -r1.82 BasicLookAndFeel.java
--- javax/swing/plaf/basic/BasicLookAndFeel.java 10 Jan 2006 13:16:13 -0000 1.82
+++ javax/swing/plaf/basic/BasicLookAndFeel.java 21 Jan 2006 22:49:19 -0000
@@ -1023,6 +1023,7 @@
"SplitPane.dividerSize", new Integer(7),
"SplitPane.highlight", new ColorUIResource(highLight),
"SplitPane.shadow", new ColorUIResource(shadow),
+ "SplitPaneDivider.border", BasicBorders.getSplitPaneDividerBorder(),
"TabbedPane.ancestorInputMap", new UIDefaults.LazyInputMap(new Object[] {
"ctrl PAGE_DOWN","navigatePageDown",
"ctrl PAGE_UP", "navigatePageUp",
Index: javax/swing/plaf/basic/BasicSplitPaneDivider.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/basic/BasicSplitPaneDivider.java,v
retrieving revision 1.13
diff -u -r1.13 BasicSplitPaneDivider.java
--- javax/swing/plaf/basic/BasicSplitPaneDivider.java 10 Jan 2006 13:19:11 -0000 1.13
+++ javax/swing/plaf/basic/BasicSplitPaneDivider.java 21 Jan 2006 22:49:19 -0000
@@ -161,31 +161,6 @@
*/
transient int currentDividerLocation = 1;
- /** DOCUMENT ME! */
- private transient Border tmpBorder = new Border()
- {
- public Insets getBorderInsets(Component c)
- {
- return new Insets(2, 2, 2, 2);
- }
-
- public boolean isBorderOpaque()
- {
- return false;
- }
-
- public void paintBorder(Component c, Graphics g, int x, int y,
- int width, int height)
- {
- Color saved = g.getColor();
- g.setColor(Color.BLACK);
-
- g.drawRect(x + 2, y + 2, width - 4, height - 4);
-
- g.setColor(saved);
- }
- };
-
/**
* Constructs a new divider.
*
@@ -196,7 +171,6 @@
setLayout(new DividerLayout());
setBasicSplitPaneUI(ui);
setDividerSize(splitPane.getDividerSize());
- setBorder(tmpBorder);
}
/**
@@ -212,8 +186,6 @@
if (splitPane != null)
{
splitPane.removePropertyChangeListener(this);
- splitPane.removeMouseListener(mouseHandler);
- splitPane.removeMouseMotionListener(mouseHandler);
removeMouseListener(mouseHandler);
removeMouseMotionListener(mouseHandler);
splitPane = null;
@@ -227,8 +199,6 @@
if (splitPane != null)
{
splitPane.addPropertyChangeListener(this);
- splitPane.addMouseListener(mouseHandler);
- splitPane.addMouseMotionListener(mouseHandler);
addMouseListener(mouseHandler);
addMouseMotionListener(mouseHandler);
hiddenDivider = splitPaneUI.getNonContinuousLayoutDivider();
Index: javax/swing/plaf/basic/BasicSplitPaneUI.java
===================================================================
RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/basic/BasicSplitPaneUI.java,v
retrieving revision 1.23
diff -u -r1.23 BasicSplitPaneUI.java
--- javax/swing/plaf/basic/BasicSplitPaneUI.java 16 Nov 2005 22:21:18 -0000 1.23
+++ javax/swing/plaf/basic/BasicSplitPaneUI.java 21 Jan 2006 22:49:19 -0000
@@ -62,6 +62,7 @@
import javax.swing.UIManager;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.SplitPaneUI;
+import javax.swing.plaf.UIResource;
/**
* This is the Basic Look and Feel implementation of the SplitPaneUI class.
@@ -253,20 +254,21 @@
JSplitPane split = (JSplitPane) container;
distributeExtraSpace();
Insets insets = split.getInsets();
- int width = getInitialLocation(insets);
Dimension dims = split.getSize();
- for (int i = 0; i < components.length; i += 2)
- {
- if (components[i] == null)
- continue;
- setComponentToSize(components[i], sizes[i], width, insets, dims);
- width += sizes[i];
- }
- if (components[1] != null)
- {
- setComponentToSize(components[1], sizes[1], width, insets, dims);
- width += sizes[1];
- }
+ int loc = getInitialLocation(insets);
+ int available = getAvailableSize(dims, insets);
+ sizes[0] = getDividerLocation(split) - loc;
+ sizes[1] = available - sizes[0] - sizes[1];
+ // The size of the divider won't change.
+
+ // Layout component#1.
+ setComponentToSize(components[0], sizes[0], loc, insets, dims);
+ // Layout divider.
+ loc += sizes[0];
+ setComponentToSize(components[2], sizes[2], loc, insets, dims);
+ // Layout component#2.
+ loc += sizes[2];
+ setComponentToSize(components[1], sizes[1], loc, insets, dims);
}
}
@@ -451,21 +453,7 @@
*/
void distributeExtraSpace()
{
- int availSize = getAvailableSize(splitPane.getSize(),
- splitPane.getInsets());
- int[] newSizes = new int[3];
- double weight = splitPane.getResizeWeight();
-
- int oldLen = sizes[0] + sizes[1];
-
- // dividers don't change size.
- availSize -= sizes[2] + oldLen;
-
- int rightAlloc = (int) (availSize * (1 - weight));
- int leftAlloc = availSize - rightAlloc;
-
- sizes[0] += leftAlloc;
- sizes[1] += rightAlloc;
+ // FIXME: This needs to be reimplemented correctly.
}
/**
@@ -933,6 +921,8 @@
/** The JSplitPane that this UI draws. */
protected JSplitPane splitPane;
+ private int dividerLocation;
+
/**
* Creates a new BasicSplitPaneUI object.
*/
@@ -992,6 +982,7 @@
"SplitPane.foreground");
LookAndFeel.installBorder(splitPane, "SplitPane.border");
divider = createDefaultDivider();
+ divider.setBorder(UIManager.getBorder("SplitPaneDivider.border"));
resetLayoutManager();
nonContinuousLayoutDivider = createDefaultNonContinuousLayoutDivider();
splitPane.add(divider, JSplitPane.DIVIDER);
@@ -1012,8 +1003,10 @@
divider = null;
nonContinuousLayoutDivider = null;
- splitPane.setBackground(null);
- splitPane.setBorder(null);
+ if (splitPane.getBackground() instanceof UIResource)
+ splitPane.setBackground(null);
+ if (splitPane.getBorder() instanceof UIResource)
+ splitPane.setBorder(null);
}
/**
@@ -1298,44 +1291,7 @@
*/
public void setDividerLocation(JSplitPane jc, int location)
{
- location = validLocation(location);
- Container p = jc.getParent();
- Component right = jc.getRightComponent();
- Dimension rightPrefSize = right == null ? new Dimension(0, 0)
- : right.getPreferredSize();
- Dimension size = jc.getSize();
- // check if the size has been set for the splitpane
- if (size.width == 0 && size.height == 0)
- size = jc.getPreferredSize();
-
- if (getOrientation() == 0 && location > size.height)
- {
- location = size.height;
- while (p != null)
- {
- p.setSize(p.getWidth(), p.getHeight() + rightPrefSize.height);
- p = p.getParent();
- }
- }
- else if (location > size.width)
- {
- location = size.width;
- while (p != null)
- {
- p.setSize(p.getWidth() + rightPrefSize.width, p.getHeight());
- p = p.getParent();
- }
- }
-
- setLastDragLocation(getDividerLocation(splitPane));
- splitPane.setLastDividerLocation(getDividerLocation(splitPane));
- int[] tmpSizes = layoutManager.getSizes();
- tmpSizes[0] = location
- - layoutManager.getInitialLocation(splitPane.getInsets());
- tmpSizes[1] = layoutManager.getAvailableSize(splitPane.getSize(),
- splitPane.getInsets())
- - tmpSizes[0];
- layoutManager.setSizes(tmpSizes);
+ dividerLocation = validLocation(location);
splitPane.revalidate();
splitPane.repaint();
}
@@ -1349,8 +1305,7 @@
*/
public int getDividerLocation(JSplitPane jc)
{
- return layoutManager.sizes[0]
- + layoutManager.getInitialLocation(splitPane.getInsets());
+ return dividerLocation;
}
/**
@@ -1365,7 +1320,7 @@
{
int value = layoutManager.getInitialLocation(jc.getInsets());
if (layoutManager.components[0] != null)
- value -= layoutManager.minimumSizeOfComponent(0);
+ value += layoutManager.minimumSizeOfComponent(0);
return value;
}