diff --git a/src/share/classes/javax/swing/plaf/metal/MetalSliderUI.java b/src/share/classes/javax/swing/plaf/metal/MetalSliderUI.java
index ce9462737eb532b0d5b47be0fcd40a783dddde27..7a26c46b225679877f255c10199a87db8d43244a 100644
--- a/src/share/classes/javax/swing/plaf/metal/MetalSliderUI.java
+++ b/src/share/classes/javax/swing/plaf/metal/MetalSliderUI.java
@@ -27,23 +27,13 @@ package javax.swing.plaf.metal;
import javax.swing.plaf.basic.BasicSliderUI;
-import java.awt.Component;
-import java.awt.Container;
import java.awt.Graphics;
import java.awt.Dimension;
import java.awt.Rectangle;
-import java.awt.Point;
-import java.awt.Insets;
import java.awt.Color;
-import java.io.Serializable;
-import java.awt.IllegalComponentStateException;
-import java.awt.Polygon;
import java.beans.*;
-import javax.swing.border.AbstractBorder;
-
import javax.swing.*;
-import javax.swing.event.*;
import javax.swing.plaf.*;
/**
@@ -131,10 +121,7 @@ public class MetalSliderUI extends BasicSliderUI {
scrollListener.setScrollByBlock( false );
- Object sliderFillProp = c.getClientProperty( SLIDER_FILL );
- if ( sliderFillProp != null ) {
- filledSlider = ((Boolean)sliderFillProp).booleanValue();
- }
+ prepareFilledSliderField();
}
protected PropertyChangeListener createPropertyChangeListener( JSlider slider ) {
@@ -145,18 +132,23 @@ public class MetalSliderUI extends BasicSliderUI {
public void propertyChange( PropertyChangeEvent e ) { // listen for slider fill
super.propertyChange( e );
- String name = e.getPropertyName();
- if ( name.equals( SLIDER_FILL ) ) {
- if ( e.getNewValue() != null ) {
- filledSlider = ((Boolean)e.getNewValue()).booleanValue();
- }
- else {
- filledSlider = false;
- }
+ if (e.getPropertyName().equals(SLIDER_FILL)) {
+ prepareFilledSliderField();
}
}
}
+ private void prepareFilledSliderField() {
+ // Use true for Ocean theme
+ filledSlider = MetalLookAndFeel.usingOcean();
+
+ Object sliderFillProp = slider.getClientProperty(SLIDER_FILL);
+
+ if (sliderFillProp != null) {
+ filledSlider = ((Boolean) sliderFillProp).booleanValue();
+ }
+ }
+
public void paintThumb(Graphics g) {
Rectangle knobBounds = thumbRect;
@@ -172,22 +164,11 @@ public class MetalSliderUI extends BasicSliderUI {
g.translate( -knobBounds.x, -knobBounds.y );
}
- /**
- * If chooseFirstis true, c1 is returned,
- * otherwise c2.
- */
- private Color chooseColor(boolean chooseFirst, Color c1, Color c2) {
- if (chooseFirst) {
- return c2;
- }
- return c1;
- }
-
/**
* Returns a rectangle enclosing the track that will be painted.
*/
private Rectangle getPaintTrackRect() {
- int trackLeft = 0, trackRight = 0, trackTop = 0, trackBottom = 0;
+ int trackLeft = 0, trackRight, trackTop = 0, trackBottom;
if (slider.getOrientation() == JSlider.HORIZONTAL) {
trackBottom = (trackRect.height - 1) - getThumbOverhang();
trackTop = trackBottom - (getTrackWidth() - 1);
@@ -223,8 +204,8 @@ public class MetalSliderUI extends BasicSliderUI {
int trackLeft = 0;
int trackTop = 0;
- int trackRight = 0;
- int trackBottom = 0;
+ int trackRight;
+ int trackBottom;
// Draw the track
if ( slider.getOrientation() == JSlider.HORIZONTAL ) {
@@ -266,11 +247,11 @@ public class MetalSliderUI extends BasicSliderUI {
// Draw the fill
if ( filledSlider ) {
- int middleOfThumb = 0;
- int fillTop = 0;
- int fillLeft = 0;
- int fillBottom = 0;
- int fillRight = 0;
+ int middleOfThumb;
+ int fillTop;
+ int fillLeft;
+ int fillBottom;
+ int fillRight;
if ( slider.getOrientation() == JSlider.HORIZONTAL ) {
middleOfThumb = thumbRect.x + (thumbRect.width / 2);
@@ -335,105 +316,137 @@ public class MetalSliderUI extends BasicSliderUI {
int w = paintRect.width;
int h = paintRect.height;
- if (!slider.isEnabled()) {
- g.setColor(MetalLookAndFeel.getControlShadow());
- g.drawRect(0, 0, w - 1, h - 1);
- }
- else if (slider.getOrientation() == JSlider.HORIZONTAL) {
- int middleOfThumb = thumbRect.x + (thumbRect.width / 2) -
- paintRect.x;
- int fillMinX;
- int fillMaxX;
-
- if (middleOfThumb > 0) {
- g.setColor(chooseColor(drawInverted,
- MetalLookAndFeel.getPrimaryControlDarkShadow(),
- MetalLookAndFeel.getControlDarkShadow()));
- g.drawRect(0, 0, middleOfThumb - 1, h - 1);
- }
- if (middleOfThumb < w) {
- g.setColor(chooseColor(drawInverted,
- MetalLookAndFeel.getControlDarkShadow(),
- MetalLookAndFeel.getPrimaryControlDarkShadow()));
- g.drawRect(middleOfThumb, 0, w - middleOfThumb - 1, h - 1);
- }
- g.setColor(MetalLookAndFeel.getPrimaryControlShadow());
- if (drawInverted) {
- fillMinX = middleOfThumb;
- fillMaxX = w - 2;
- g.drawLine(1, 1, middleOfThumb, 1);
- }
- else {
- fillMinX = 1;
- fillMaxX = middleOfThumb;
- g.drawLine(middleOfThumb, 1, w - 1, 1);
- }
- if (h == 6) {
- g.setColor(MetalLookAndFeel.getWhite());
- g.drawLine(fillMinX, 1, fillMaxX, 1);
- g.setColor(sliderAltTrackColor);
- g.drawLine(fillMinX, 2, fillMaxX, 2);
+ if (slider.getOrientation() == JSlider.HORIZONTAL) {
+ int middleOfThumb = thumbRect.x + thumbRect.width / 2 - paintRect.x;
+
+ if (slider.isEnabled()) {
+ int fillMinX;
+ int fillMaxX;
+
+ if (middleOfThumb > 0) {
+ g.setColor(drawInverted ? MetalLookAndFeel.getControlDarkShadow() :
+ MetalLookAndFeel.getPrimaryControlDarkShadow());
+
+ g.drawRect(0, 0, middleOfThumb - 1, h - 1);
+ }
+
+ if (middleOfThumb < w) {
+ g.setColor(drawInverted ? MetalLookAndFeel.getPrimaryControlDarkShadow() :
+ MetalLookAndFeel.getControlDarkShadow());
+
+ g.drawRect(middleOfThumb, 0, w - middleOfThumb - 1, h - 1);
+ }
+
+ if (filledSlider) {
+ g.setColor(MetalLookAndFeel.getPrimaryControlShadow());
+ if (drawInverted) {
+ fillMinX = middleOfThumb;
+ fillMaxX = w - 2;
+ g.drawLine(1, 1, middleOfThumb, 1);
+ } else {
+ fillMinX = 1;
+ fillMaxX = middleOfThumb;
+ g.drawLine(middleOfThumb, 1, w - 1, 1);
+ }
+ if (h == 6) {
+ g.setColor(MetalLookAndFeel.getWhite());
+ g.drawLine(fillMinX, 1, fillMaxX, 1);
+ g.setColor(sliderAltTrackColor);
+ g.drawLine(fillMinX, 2, fillMaxX, 2);
+ g.setColor(MetalLookAndFeel.getControlShadow());
+ g.drawLine(fillMinX, 3, fillMaxX, 3);
+ g.setColor(MetalLookAndFeel.getPrimaryControlShadow());
+ g.drawLine(fillMinX, 4, fillMaxX, 4);
+ }
+ }
+ } else {
g.setColor(MetalLookAndFeel.getControlShadow());
- g.drawLine(fillMinX, 3, fillMaxX, 3);
- g.setColor(MetalLookAndFeel.getPrimaryControlShadow());
- g.drawLine(fillMinX, 4, fillMaxX, 4);
- }
- }
- else {
- int middleOfThumb = thumbRect.y + (thumbRect.height / 2) -
- paintRect.y;
- int fillMinY;
- int fillMaxY;
-
- if (middleOfThumb > 0) {
- g.setColor(chooseColor(drawInverted,
- MetalLookAndFeel.getControlDarkShadow(),
- MetalLookAndFeel.getPrimaryControlDarkShadow()));
- g.drawRect(0, 0, w - 1, middleOfThumb - 1);
- }
- if (middleOfThumb < h) {
- g.setColor(chooseColor(drawInverted,
- MetalLookAndFeel.getPrimaryControlDarkShadow(),
- MetalLookAndFeel.getControlDarkShadow()));
- g.drawRect(0, middleOfThumb, w - 1, h - middleOfThumb - 1);
- }
- g.setColor(MetalLookAndFeel.getPrimaryControlShadow());
- if (drawInverted()) {
- fillMinY = 1;
- fillMaxY = middleOfThumb;
- if (leftToRight) {
- g.drawLine(1, middleOfThumb, 1, h - 1);
+
+ if (middleOfThumb > 0) {
+ if (!drawInverted && filledSlider) {
+ g.fillRect(0, 0, middleOfThumb - 1, h - 1);
+ } else {
+ g.drawRect(0, 0, middleOfThumb - 1, h - 1);
+ }
}
- else {
- g.drawLine(w - 2, middleOfThumb, w - 2, h - 1);
+
+ if (middleOfThumb < w) {
+ if (drawInverted && filledSlider) {
+ g.fillRect(middleOfThumb, 0, w - middleOfThumb - 1, h - 1);
+ } else {
+ g.drawRect(middleOfThumb, 0, w - middleOfThumb - 1, h - 1);
+ }
}
}
- else {
- fillMinY = middleOfThumb;
- fillMaxY = h - 2;
- if (leftToRight) {
- g.drawLine(1, 1, 1, middleOfThumb);
+ } else {
+ int middleOfThumb = thumbRect.y + (thumbRect.height / 2) - paintRect.y;
+
+ if (slider.isEnabled()) {
+ int fillMinY;
+ int fillMaxY;
+
+ if (middleOfThumb > 0) {
+ g.setColor(drawInverted ? MetalLookAndFeel.getPrimaryControlDarkShadow() :
+ MetalLookAndFeel.getControlDarkShadow());
+
+ g.drawRect(0, 0, w - 1, middleOfThumb - 1);
}
- else {
- g.drawLine(w - 2, 1, w - 2, middleOfThumb);
+
+ if (middleOfThumb < h) {
+ g.setColor(drawInverted ? MetalLookAndFeel.getControlDarkShadow() :
+ MetalLookAndFeel.getPrimaryControlDarkShadow());
+
+ g.drawRect(0, middleOfThumb, w - 1, h - middleOfThumb - 1);
+ }
+
+ if (filledSlider) {
+ g.setColor(MetalLookAndFeel.getPrimaryControlShadow());
+ if (drawInverted()) {
+ fillMinY = 1;
+ fillMaxY = middleOfThumb;
+ if (leftToRight) {
+ g.drawLine(1, middleOfThumb, 1, h - 1);
+ } else {
+ g.drawLine(w - 2, middleOfThumb, w - 2, h - 1);
+ }
+ } else {
+ fillMinY = middleOfThumb;
+ fillMaxY = h - 2;
+ if (leftToRight) {
+ g.drawLine(1, 1, 1, middleOfThumb);
+ } else {
+ g.drawLine(w - 2, 1, w - 2, middleOfThumb);
+ }
+ }
+ if (w == 6) {
+ g.setColor(leftToRight ? MetalLookAndFeel.getWhite() : MetalLookAndFeel.getPrimaryControlShadow());
+ g.drawLine(1, fillMinY, 1, fillMaxY);
+ g.setColor(leftToRight ? sliderAltTrackColor : MetalLookAndFeel.getControlShadow());
+ g.drawLine(2, fillMinY, 2, fillMaxY);
+ g.setColor(leftToRight ? MetalLookAndFeel.getControlShadow() : sliderAltTrackColor);
+ g.drawLine(3, fillMinY, 3, fillMaxY);
+ g.setColor(leftToRight ? MetalLookAndFeel.getPrimaryControlShadow() : MetalLookAndFeel.getWhite());
+ g.drawLine(4, fillMinY, 4, fillMaxY);
+ }
+ }
+ } else {
+ g.setColor(MetalLookAndFeel.getControlShadow());
+
+ if (middleOfThumb > 0) {
+ if (drawInverted && filledSlider) {
+ g.fillRect(0, 0, w - 1, middleOfThumb - 1);
+ } else {
+ g.drawRect(0, 0, w - 1, middleOfThumb - 1);
+ }
+ }
+
+ if (middleOfThumb < h) {
+ if (!drawInverted && filledSlider) {
+ g.fillRect(0, middleOfThumb, w - 1, h - middleOfThumb - 1);
+ } else {
+ g.drawRect(0, middleOfThumb, w - 1, h - middleOfThumb - 1);
+ }
}
- }
- if (w == 6) {
- g.setColor(chooseColor(!leftToRight,
- MetalLookAndFeel.getWhite(),
- MetalLookAndFeel.getPrimaryControlShadow()));
- g.drawLine(1, fillMinY, 1, fillMaxY);
- g.setColor(chooseColor(!leftToRight, sliderAltTrackColor,
- MetalLookAndFeel.getControlShadow()));
- g.drawLine(2, fillMinY, 2, fillMaxY);
- g.setColor(chooseColor(!leftToRight,
- MetalLookAndFeel.getControlShadow(),
- sliderAltTrackColor));
- g.drawLine(3, fillMinY, 3, fillMaxY);
- g.setColor(chooseColor(!leftToRight,
- MetalLookAndFeel.getPrimaryControlShadow(),
- MetalLookAndFeel.getWhite()));
- g.drawLine(4, fillMinY, 4, fillMaxY);
}
}
diff --git a/test/javax/swing/JSlider/6587742/bug6587742.html b/test/javax/swing/JSlider/6587742/bug6587742.html
new file mode 100644
index 0000000000000000000000000000000000000000..ceda9f921c755a4eda3922ed479c51d4d7ee0cda
--- /dev/null
+++ b/test/javax/swing/JSlider/6587742/bug6587742.html
@@ -0,0 +1,13 @@
+
+