/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Tiny Look and Feel *
* *
* (C) Copyright 2003 - 2007 Hans Bickel *
* *
* For licensing information and credits, please refer to the *
* comment in file de.muntjak.tinylookandfeel.TinyLookAndFeel *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
package de.muntjak.tinylookandfeel;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.Stroke;
import java.awt.event.MouseEvent;
import javax.swing.BorderFactory;
import javax.swing.JComponent;
import javax.swing.JSlider;
import javax.swing.plaf.ComponentUI;
import javax.swing.plaf.basic.BasicSliderUI;
import javax.swing.plaf.metal.MetalSliderUI;
import de.muntjak.tinylookandfeel.controlpanel.ColorRoutines;
import de.muntjak.tinylookandfeel.controlpanel.SBChooser;
/**
* TinySliderUI
*
* @version 1.0
* @author Hans Bickel
*/
public class TinySliderUI extends MetalSliderUI {
/* the only instance of the stroke for the focus */
private static BasicStroke focusStroke =
new BasicStroke(1.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL,
1.0f, new float[] { 1.0f, 1.0f }, 0.0f);
protected boolean isRollover = false, wasRollover = false;
protected boolean isDragging = false;
protected TrackListener trackListener;
protected TrackListener createTrackListener(JSlider slider) {
return new MyTrackListener();
}
protected Dimension getThumbSize() {
if (slider.getOrientation() == JSlider.VERTICAL) {
return Theme.sliderVertSize[Theme.derivedStyle[Theme.style]];
} else {
return Theme.sliderHorzSize[Theme.derivedStyle[Theme.style]];
}
}
/**
* Returns the shorter dimension of the track.
*/
protected int getTrackWidth() {
return 4;
}
public void paintThumb(Graphics g) {
Color c = null;
if(!slider.isEnabled()) {
c = Theme.sliderThumbDisabledColor[Theme.style].getColor();
}
else if(isDragging) {
c = Theme.sliderThumbPressedColor[Theme.style].getColor();
}
else if(isRollover && Theme.sliderRolloverEnabled[Theme.style]) {
if(Theme.derivedStyle[Theme.style] == Theme.YQ_STYLE) {
c = Theme.sliderThumbColor[Theme.style].getColor();
}
else {
c = Theme.sliderThumbRolloverColor[Theme.style].getColor();
}
}
else {
c = Theme.sliderThumbColor[Theme.style].getColor();
}
g.setColor(c);
switch(Theme.derivedStyle[Theme.style]) {
case Theme.TINY_STYLE:
drawTinyThumb(g, c);
break;
case Theme.W99_STYLE:
drawWinThumb(g, c);
break;
case Theme.YQ_STYLE:
drawXpThumb(g);
break;
}
}
private void drawTinyThumb(Graphics g, Color c) {
int x1 = thumbRect.x;
int y1 = thumbRect.y;
int x2 = x1 + thumbRect.width - 1;
int y2 = y1 + thumbRect.height - 1;
g.fillRect(x1 + 1, y1 + 1, thumbRect.width - 2, thumbRect.height - 2);
}
private void drawWinThumb(Graphics g, Color c) {
int x1 = thumbRect.x;
int y1 = thumbRect.y;
int x2 = x1 + thumbRect.width - 1;
int y2 = y1 + thumbRect.height - 1;
if(slider.getOrientation() == JSlider.HORIZONTAL) {
g.fillRect(x1 + 1, y1 + 1, thumbRect.width - 2, 15);
g.drawLine(x1 + 2, y1 + 16, x1 + 7, y1 + 16);
g.drawLine(x1 + 3, y1 + 17, x1 + 6, y1 + 17);
g.drawLine(x1 + 4, y1 + 18, x1 + 5, y1 + 18);
if(isDragging && slider.isEnabled()) {
g.setColor(Theme.sliderThumbColor[Theme.style].getColor());
g.drawLine(x1 + 1, y1 + 1, x2 - 2, y1 + 1);
g.drawLine(x1 + 1, y1 + 2, x1 + 1, y1 + 16);
}
if(!slider.isEnabled()) {
g.setColor(Theme.sliderLightDisabledColor[Theme.style].getColor());
}
else {
g.setColor(Theme.sliderLightColor[Theme.style].getColor());
}
g.drawLine(x1, y1, x1, y1 + 15);
g.drawLine(x1 + 1, y1, x2 - 1, y1);
g.drawLine(x1 + 1, y1 + 16, x1 + 1, y1 + 16);
g.drawLine(x1 + 2, y1 + 17, x1 + 2, y1 + 17);
g.drawLine(x1 + 3, y1 + 18, x1 + 3, y1 + 18);
g.drawLine(x1 + 4, y1 + 19, x1 + 4, y1 + 19);
if(!slider.isEnabled()) {
g.setColor(Theme.sliderDarkDisabledColor[Theme.style].getColor());
}
else {
g.setColor(Theme.sliderDarkColor[Theme.style].getColor());
}
g.drawLine(x2 - 1, y1 + 1, x2 - 1, y1 + 15);
g.drawLine(x1 + 8, y1 + 16, x1 + 8, y1 + 16);
g.drawLine(x1 + 7, y1 + 17, x1 + 7, y1 + 17);
g.drawLine(x1 + 6, y1 + 18, x1 + 6, y1 + 18);
g.drawLine(x1 + 5, y1 + 19, x1 + 5, y1 + 19);
if(!slider.isEnabled()) {
g.setColor(Theme.sliderBorderDisabledColor[Theme.style].getColor());
}
else {
g.setColor(Theme.sliderBorderColor[Theme.style].getColor());
}
g.drawLine(x2, y1, x2, y1 + 15);
g.drawLine(x1 + 9, y1 + 16, x1 + 9, y1 + 16);
g.drawLine(x1 + 8, y1 + 17, x1 + 8, y1 + 17);
g.drawLine(x1 + 7, y1 + 18, x1 + 7, y1 + 18);
g.drawLine(x1 + 6, y1 + 19, x1 + 6, y1 + 19);
g.drawLine(x1 + 5, y1 + 20, x1 + 5, y1 + 20);
}
else {
g.fillRect(x1 + 2, y1 + 1, thumbRect.width - 2, thumbRect.height - 2);
if(isDragging && slider.isEnabled()) {
g.setColor(Theme.sliderThumbColor[Theme.style].getColor());
g.drawLine(x1 + 2, y1 + 1, x2 - 2, y1 + 1);
g.drawLine(x1 + 2, y1 + 2, x1 + 2, y2 - 2);
}
if(!slider.isEnabled()) {
g.setColor(Theme.sliderLightDisabledColor[Theme.style].getColor());
}
else {
g.setColor(Theme.sliderLightColor[Theme.style].getColor());
}
g.drawLine(x1 + 1, y1, x1 + 1, y2 - 1);
g.drawLine(x1 + 1, y1, x2 - 1, y1);
if(!slider.isEnabled()) {
g.setColor(Theme.sliderDarkDisabledColor[Theme.style].getColor());
}
else {
g.setColor(Theme.sliderDarkColor[Theme.style].getColor());
}
g.drawLine(x1 + 2, y1 + 9, x2 - 1, y1 + 9);
g.drawLine(x2 - 1, y1 + 1, x2 - 1, y2 - 2);
if(!slider.isEnabled()) {
g.setColor(Theme.sliderBorderDisabledColor[Theme.style].getColor());
}
else {
g.setColor(Theme.sliderBorderColor[Theme.style].getColor());
}
g.drawLine(x1 + 1, y2, x2, y2);
g.drawLine(x2, y1, x2, y2);
}
}
private void drawXpThumb(Graphics g) {
int x1 = thumbRect.x;
int y1 = thumbRect.y;
int x2 = x1 + thumbRect.width - 1;
int y2 = y1 + thumbRect.height - 1;
if(slider.getPaintTicks()) {
// draw arrow-like thumb
if(slider.getOrientation() == JSlider.HORIZONTAL) {
g.fillRect(x1 + 1, y1 + 4, thumbRect.width - 4, thumbRect.height - 8);
g.drawLine(x1 + 5, y2 - 3, x1 + 5, y2 - 3);
Color c = g.getColor();
g.setColor(ColorRoutines.darken(c, 10));
g.drawLine(x2 - 2, y1 + 4, x2 - 2, y2 - 6);
g.setColor(ColorRoutines.darken(c, 20));
g.drawLine(x2 - 1, y1 + 4, x2 - 1, y2 - 7);
Color bc = null;
if(!slider.isEnabled()) {
bc = Theme.sliderBorderDisabledColor[Theme.style].getColor();
}
else {
bc = Theme.sliderBorderColor[Theme.style].getColor();
}
g.setColor(bc);
g.drawLine(x1 + 1, y1, x2 - 1, y1);
g.drawLine(x1, y1 + 1, x1, y2 - 5);
g.drawLine(x1 + 1, y2 - 4, x1 + 1, y2 - 4);
g.drawLine(x1 + 2, y2 - 3, x1 + 2, y2 - 3);
g.drawLine(x1 + 3, y2 - 2, x1 + 3, y2 - 2);
g.drawLine(x1 + 4, y2 - 1, x1 + 4, y2 - 1);
g.setColor(Theme.sliderDarkColor[Theme.style].getColor());
g.drawLine(x2, y1 + 1, x2, y2 - 5);
g.drawLine(x2 - 1, y2 - 4, x2 - 1, y2 - 4);
g.drawLine(x2 - 2, y2 - 3, x2 - 2, y2 - 3);
g.drawLine(x2 - 3, y2 - 2, x2 - 3, y2 - 2);
g.drawLine(x2 - 4, y2 - 1, x2 - 4, y2 - 1);
g.drawLine(x2 - 5, y2, x2 - 5, y2);
Color col = null;
if(!slider.isEnabled()) {
col = Theme.sliderBorderDisabledColor[Theme.style].getColor();
g.setColor(col);
}
else if(!isDragging && isRollover && Theme.sliderRolloverEnabled[Theme.style]) {
col = Theme.sliderThumbRolloverColor[Theme.style].getColor();
}
else {
col = Theme.sliderLightColor[Theme.style].getColor();
}
Color c2 = SBChooser.getAdjustedColor(col, 67, 39);
if(slider.isEnabled()) g.setColor(c2);
g.drawLine(x1 + 1, y1 + 1, x2 - 1, y1 + 1);
g.drawLine(x1 + 1, y2 - 6, x1 + 1, y2 - 6);
g.drawLine(x1 + 2, y2 - 5, x1 + 2, y2 - 5);
g.drawLine(x1 + 3, y2 - 4, x1 + 3, y2 - 4);
if(slider.isEnabled()) g.setColor(ColorRoutines.getAverage(bc, c2));
g.drawLine(x1 + 1, y2 - 5, x1 + 1, y2 - 5);
g.drawLine(x1 + 2, y2 - 4, x1 + 2, y2 - 4);
g.drawLine(x1 + 3, y2 - 3, x1 + 3, y2 - 3);
Color c3 = ColorRoutines.getAverage(col, c2);
if(slider.isEnabled()) g.setColor(c3);
g.drawLine(x1 + 1, y1 + 2, x2 - 1, y1 + 2);
g.drawLine(x1 + 4, y2 - 3, x1 + 4, y2 - 3);
g.drawLine(x1 + 5, y2 - 2, x1 + 5, y2 - 2);
g.drawLine(x1 + 6, y2 - 3, x1 + 6, y2 - 3);
if(slider.isEnabled()) g.setColor(ColorRoutines.getAverage(bc, c3));
g.drawLine(x1 + 4, y2 - 2, x1 + 4, y2 - 2);
g.drawLine(x1 + 5, y2 - 1, x1 + 5, y2 - 1);
g.drawLine(x1 + 6, y2 - 2, x1 + 6, y2 - 2);
if(slider.isEnabled()) g.setColor(col);
g.drawLine(x1 + 1, y1 + 3, x2 - 1, y1 + 3);
g.drawLine(x1 + 9, y2 - 6, x1 + 9, y2 - 6);
g.drawLine(x1 + 8, y2 - 5, x1 + 8, y2 - 5);
g.drawLine(x1 + 7, y2 - 4, x1 + 7, y2 - 4);
if(slider.isEnabled()) g.setColor(ColorRoutines.getAverage(bc, col));
g.drawLine(x1 + 9, y2 - 5, x1 + 9, y2 - 5);
g.drawLine(x1 + 8, y2 - 4, x1 + 8, y2 - 4);
g.drawLine(x1 + 7, y2 - 3, x1 + 7, y2 - 3);
}
else { // VERTICAL
g.fillRect(x1 + 4, y1 + 1, thumbRect.width - 8, thumbRect.height - 4);
g.drawLine(x2 - 3, y1 + 5, x2 - 3, y1 + 5);
Color c = g.getColor();
g.setColor(ColorRoutines.darken(c, 10));
g.drawLine(x1 + 4, y2 - 2, x2 - 6, y2 - 2);
g.setColor(ColorRoutines.darken(c, 20));
g.drawLine(x1 + 4, y2 - 1, x2 - 7, y2 - 1);
Color bc = null;
if(!slider.isEnabled()) {
bc = Theme.sliderBorderDisabledColor[Theme.style].getColor();
}
else {
bc = Theme.sliderBorderColor[Theme.style].getColor();
}
g.setColor(bc);
g.drawLine(x1, y1 + 1, x1, y2 - 1);
g.drawLine(x1 + 1, y1, x2 - 5, y1);
g.drawLine(x2 - 4, y1 + 1, x2 - 4, y1 + 1);
g.drawLine(x2 - 3, y1 + 2, x2 - 3, y1 + 2);
g.drawLine(x2 - 2, y1 + 3, x2 - 2, y1 + 3);
g.drawLine(x2 - 1, y1 + 4, x2 - 1, y1 + 4);
g.setColor(Theme.sliderDarkColor[Theme.style].getColor());
g.drawLine(x1 + 1, y2, x2 - 5, y2);
g.drawLine(x2 - 4, y2 - 1, x2 - 4, y2 - 1);
g.drawLine(x2 - 3, y2 - 2, x2 - 3, y2 - 2);
g.drawLine(x2 - 2, y2 - 3, x2 - 2, y2 - 3);
g.drawLine(x2 - 1, y2 - 4, x2 - 1, y2 - 4);
g.drawLine(x2, y2 - 5, x2, y2 - 5);
Color col = null;
if(!slider.isEnabled()) {
col = Theme.sliderBorderDisabledColor[Theme.style].getColor();
g.setColor(col);
}
else if(!isDragging && isRollover && Theme.sliderRolloverEnabled[Theme.style]) {
col = Theme.sliderThumbRolloverColor[Theme.style].getColor();
}
else {
col = Theme.sliderLightColor[Theme.style].getColor();
}
Color c2 = SBChooser.getAdjustedColor(col, 67, 39);
if(slider.isEnabled()) g.setColor(c2);
g.drawLine(x1 + 1, y1 + 1, x1 + 1, y2 - 1);
g.drawLine(x2 - 6, y1 + 1, x2 - 6, y1 + 1);
g.drawLine(x2 - 5, y1 + 2, x2 - 5, y1 + 2);
g.drawLine(x2 - 4, y1 + 3, x2 - 4, y1 + 3);
if(slider.isEnabled()) g.setColor(ColorRoutines.getAverage(bc, c2));
g.drawLine(x2 - 5, y1 + 1, x2 - 5, y1 + 1);
g.drawLine(x2 - 4, y1 + 2, x2 - 4, y1 + 2);
g.drawLine(x2 - 3, y1 + 3, x2 - 3, y1 + 3);
Color c3 = ColorRoutines.getAverage(col, c2);
if(slider.isEnabled()) g.setColor(c3);
g.drawLine(x1 + 2, y1 + 1, x1 + 2, y2 - 1);
g.drawLine(x2 - 3, y1 + 4, x2 - 3, y1 + 4);
g.drawLine(x2 - 2, y1 + 5, x2 - 2, y1 + 5);
g.drawLine(x2 - 3, y1 + 6, x2 - 3, y1 + 6);
if(slider.isEnabled()) g.setColor(ColorRoutines.getAverage(bc, c3));
g.drawLine(x2 - 2, y1 + 4, x2 - 2, y1 + 4);
g.drawLine(x2 - 1, y1 + 5, x2 - 1, y1 + 5);
g.drawLine(x2 - 2, y1 + 6, x2 - 2, y1 + 6);
if(slider.isEnabled()) g.setColor(col);
g.drawLine(x1 + 3, y1 + 1, x1 + 3, y2 - 1);
g.drawLine(x2 - 6, y1 + 9, x2 - 6, y1 + 9);
g.drawLine(x2 - 5, y1 + 8, x2 - 5, y1 + 8);
g.drawLine(x2 - 4, y1 + 7, x2 - 4, y1 + 7);
if(slider.isEnabled()) g.setColor(ColorRoutines.getAverage(bc, col));
g.drawLine(x2 - 5, y1 + 9, x2 - 5, y1 + 9);
g.drawLine(x2 - 4, y1 + 8, x2 - 4, y1 + 8);
g.drawLine(x2 - 3, y1 + 7, x2 - 3, y1 + 7);
}
}
else { // no ticks painted
// draw rectangular thumb
if(slider.getOrientation() == JSlider.HORIZONTAL) {
g.fillRect(x1 + 1, y1 + 1, thumbRect.width - 4, thumbRect.height - 4);
Color c = g.getColor();
g.setColor(ColorRoutines.darken(c, 10));
g.drawLine(x2 - 2, y1 + 3, x2 - 2, y2 - 3);
g.setColor(ColorRoutines.darken(c, 20));
g.drawLine(x2 - 1, y1 + 3, x2 - 1, y2 - 3);
if(!slider.isEnabled()) {
g.setColor(Theme.sliderBorderDisabledColor[Theme.style].getColor());
}
else {
g.setColor(Theme.sliderBorderColor[Theme.style].getColor());
}
g.drawLine(x1, y1 + 1, x1, y2 - 1);
g.drawLine(x1 + 1, y1, x2 - 1, y1);
if(!slider.isEnabled()) {
g.setColor(Theme.sliderDarkDisabledColor[Theme.style].getColor());
}
else {
g.setColor(Theme.sliderDarkColor[Theme.style].getColor());
}
g.drawLine(x1 + 1, y2, x2 - 1, y2);
g.drawLine(x2, y1 + 1, x2, y2 - 1);
Color col = null;
if(!slider.isEnabled()) {
col = Theme.sliderBorderDisabledColor[Theme.style].getColor();
g.setColor(col);
}
else if(!isDragging && isRollover && Theme.sliderRolloverEnabled[Theme.style]) {
col = Theme.sliderThumbRolloverColor[Theme.style].getColor();
}
else {
col = Theme.sliderLightColor[Theme.style].getColor();
}
Color c2 = SBChooser.getAdjustedColor(col, 67, 39);
if(slider.isEnabled()) g.setColor(c2);
g.drawLine(x1 + 1, y1 + 1, x2 - 1, y1 + 1);
if(slider.isEnabled()) g.setColor(ColorRoutines.getAverage(col, c2));
g.drawLine(x1 + 1, y1 + 2, x2 - 1, y1 + 2);
g.drawLine(x1 + 1, y2 - 2, x2 - 1, y2 - 2);
if(slider.isEnabled()) g.setColor(col);
g.drawLine(x1 + 1, y2 - 1, x2 - 1, y2 - 1);
}
else { // VERTICAL
g.fillRect(x1 + 1, y1 + 1, thumbRect.width - 4, thumbRect.height - 4);
Color c = g.getColor();
g.setColor(ColorRoutines.darken(c, 10));
g.drawLine(x1 + 3, y2 - 2, x2 - 3, y2 - 2);
g.setColor(ColorRoutines.darken(c, 20));
g.drawLine(x1 + 3, y2 - 1, x2 - 3, y2 - 1);
if(!slider.isEnabled()) {
g.setColor(Theme.sliderBorderDisabledColor[Theme.style].getColor());
}
else {
g.setColor(Theme.sliderBorderColor[Theme.style].getColor());
}
g.drawLine(x1 + 1, y1, x2 - 1, y1);
g.drawLine(x1, y1 + 1, x1, y2 - 1);
if(!slider.isEnabled()) {
g.setColor(Theme.sliderDarkDisabledColor[Theme.style].getColor());
}
else {
g.setColor(Theme.sliderDarkColor[Theme.style].getColor());
}
g.drawLine(x2, y1 + 1, x2, y2 - 1);
g.drawLine(x1 + 1, y2, x2 - 1, y2);
Color col = null;
if(!slider.isEnabled()) {
col = Theme.sliderBorderDisabledColor[Theme.style].getColor();
g.setColor(col);
}
else if(!isDragging && isRollover && Theme.sliderRolloverEnabled[Theme.style]) {
col = Theme.sliderThumbRolloverColor[Theme.style].getColor();
}
else {
col = Theme.sliderLightColor[Theme.style].getColor();
}
Color c2 = SBChooser.getAdjustedColor(col, 67, 39);
if(slider.isEnabled()) g.setColor(c2);
g.drawLine(x1 + 1, y1 + 1, x1 + 1, y2 - 1);
if(slider.isEnabled()) g.setColor(ColorRoutines.getAverage(col, c2));
g.drawLine(x1 + 2, y1 + 1, x1 + 2, y2 - 1);
g.drawLine(x2 - 2, y1 + 1, x2 - 2, y2 - 1);
if(slider.isEnabled()) g.setColor(col);
g.drawLine(x2 - 1, y1 + 1, x2 - 1, y2 - 1);
}
}
}
public static ComponentUI createUI(JComponent c) {
return new TinySliderUI();
}
public void installUI(JComponent c) {
super.installUI(c);
c.setBorder(BorderFactory.createEmptyBorder(2, 2, 2, 2));
}
protected int getThumbOverhang() {
if (slider.getOrientation() == JSlider.VERTICAL) {
return (int) (getThumbSize().getWidth() - getTrackWidth()) / 2;
} else {
return (int) (getThumbSize().getHeight() - getTrackWidth()) / 2;
}
}
/**
* This TrackListener extends the BasicSliderUI.TrackListener such that
* rollover and dragging state can be tracked.
*/
class MyTrackListener extends BasicSliderUI.TrackListener {
public void mouseReleased(MouseEvent e) {
super.mouseReleased(e);
isDragging = false;
slider.repaint();
}
public void mousePressed(MouseEvent e) {
super.mousePressed(e);
if (thumbRect.contains(e.getX(), e.getY())) {
isDragging = true;
}
slider.repaint();
}
public void mouseEntered(MouseEvent e) {
isRollover = false;
wasRollover = false;
if (thumbRect.contains(e.getX(), e.getY())) {
isRollover = true;
}
}
public void mouseExited(MouseEvent e) {
isRollover = false;
if (isRollover != wasRollover) {
slider.repaint();
wasRollover = isRollover;
}
}
public void mouseDragged(MouseEvent e) {
if (thumbRect.contains(e.getX(), e.getY())) {
isRollover = true;
}
super.mouseDragged(e);
}
public void mouseMoved(MouseEvent e) {
if (thumbRect.contains(e.getX(), e.getY())) {
isRollover = true;
if (isRollover != wasRollover) {
slider.repaint();
wasRollover = isRollover;
}
} else {
isRollover = false;
if (isRollover != wasRollover) {
slider.repaint();
wasRollover = isRollover;
}
}
}
}
public void paintTrack(Graphics g) {
// g.setColor(Color.GREEN);
// g.fillRect(0, 0, slider.getWidth(), slider.getHeight());
switch(Theme.derivedStyle[Theme.style]) {
case Theme.TINY_STYLE:
drawTinyTrack(g);
break;
case Theme.W99_STYLE:
drawWinTrack(g);
break;
case Theme.YQ_STYLE:
drawXpTrack(g);
break;
}
}
public void paintFocus(Graphics g) {
if(!Theme.sliderFocusEnabled[Theme.style]) return;
if(!(g instanceof Graphics2D)) return;
Graphics2D g2d = (Graphics2D)g;
Stroke memStroke = g2d.getStroke();
g2d.setStroke(focusStroke);
g2d.setColor(Theme.sliderFocusColor[Theme.style].getColor());
g2d.drawRect(0, 0, slider.getWidth() - 1, slider.getHeight() - 1);
g2d.setStroke(memStroke);
}
private void drawTinyTrack(Graphics g) {
int x1 = trackRect.x;
int x2 = x1 + trackRect.width;
int y1 = trackRect.y;
int y2 = y1 + trackRect.height;
if (slider.getOrientation() == JSlider.HORIZONTAL) {
int y = y1 + (trackRect.height - 7) / 2;
g.setColor(new Color(170, 170, 170));
g.drawLine(x1, y + 1, x1, y + 4);
g.drawLine(x2 - 1, y + 1, x2 - 1, y + 1);
g.fillRect(x1 + 1, y, trackRect.width - 2, 5);
g.setColor(new Color(34, 34, 34));
g.drawLine(x1 + 1, y + 2, x1 + 1, y + 4);
g.drawLine(x2 - 1, y + 2, x2 - 1, y + 4);
g.drawLine(x1 + 2, y + 1, x2 - 2, y + 1);
g.drawLine(x1 + 2, y + 5, x2 - 2, y + 5);
g.setColor(Color.WHITE);
g.drawLine(x1 + 1, y + 5, x1 + 1, y + 5);
g.drawLine(x1 + 2, y + 6, x2 - 1, y + 6);
g.drawLine(x2 - 1, y + 5, x2 - 1, y + 5);
g.drawLine(x2, y + 2, x2, y + 4);
}
else {
int x = x1 + (trackRect.width - 7) / 2 + 1;
g.setColor(new Color(170, 170, 170));
g.drawLine(x + 1, y1 + 1, x + 1, y1 + 1);
g.drawLine(x + 1, y2, x + 4, y2);
g.fillRect(x, y1 + 2, 5, trackRect.height - 2);
g.setColor(new Color(34, 34, 34));
g.drawLine(x + 2, y1 + 1, x + 4, y1 + 1);
g.drawLine(x + 2, y2 - 1, x + 4, y2 - 1);
g.drawLine(x + 1, y1 + 2, x + 1, y2 - 2);
g.drawLine(x + 5, y1 + 2, x + 5, y2 - 2);
g.setColor(Color.WHITE);
g.drawLine(x + 2, y1, x + 5, y1);
g.drawLine(x + 5, y1 + 1, x + 5, y1 + 1);
g.drawLine(x + 6, y1 + 1, x + 6, y2 - 2);
g.drawLine(x + 5, y2 - 1, x + 5, y2 - 1);
}
}
private void drawWinTrack(Graphics g) {
int x1 = trackRect.x;
int x2 = x1 + trackRect.width;
int y1 = trackRect.y;
int y2 = y1 + trackRect.height;
if (slider.getOrientation() == JSlider.HORIZONTAL) {
int y = y1 + (trackRect.height - 4) / 2;
g.setColor(Theme.sliderTrackColor[Theme.style].getColor());
g.drawLine(x1 + 1, y + 2, x2 - 1, y + 2);
g.drawLine(x2 - 1, y + 1, x2 - 1, y + 1);
g.setColor(Theme.sliderTrackDarkColor[Theme.style].getColor());
g.drawLine(x1, y, x1, y + 3);
g.drawLine(x1 + 1, y, x2, y);
g.setColor(Theme.sliderTrackBorderColor[Theme.style].getColor());
g.drawLine(x1 + 1, y + 1, x2 - 2, y + 1);
g.setColor(Theme.sliderTrackLightColor[Theme.style].getColor());
g.drawLine(x2, y + 1, x2, y + 2);
g.drawLine(x1 + 1, y + 3, x2, y + 3);
}
else {
int x = x1 + (trackRect.width - 4) / 2 + 1;
g.setColor(Theme.sliderTrackColor[Theme.style].getColor());
g.drawLine(x + 2, y1 + 1, x + 2, y2 - 1);
g.drawLine(x + 1, y2 - 1, x + 1, y2 - 1);
g.setColor(Theme.sliderTrackDarkColor[Theme.style].getColor());
g.drawLine(x, y1, x + 3, y1);
g.drawLine(x, y1 + 1, x, y2);
g.setColor(Theme.sliderTrackBorderColor[Theme.style].getColor());
g.drawLine(x + 1, y1 + 1, x + 1, y2 - 2);
g.setColor(Theme.sliderTrackLightColor[Theme.style].getColor());
g.drawLine(x + 3, y1 + 1, x + 3, y2);
g.drawLine(x + 1, y2, x + 2, y2);
}
}
private void drawXpTrack(Graphics g) {
int x1 = trackRect.x;
int x2 = x1 + trackRect.width;
int y1 = trackRect.y;
int y2 = y1 + trackRect.height;
// Draw the track
if (slider.getOrientation() == JSlider.HORIZONTAL) {
int y = y1 + (trackRect.height - 4) / 2;
g.setColor(Theme.sliderTrackColor[Theme.style].getColor());
g.drawLine(x1 + 1, y + 2, x2 - 2, y + 2);
g.setColor(Theme.sliderTrackDarkColor[Theme.style].getColor());
g.drawLine(x1 + 1, y + 1, x2 - 2, y + 1);
g.drawLine(x2 - 1, y + 1, x2 - 1, y + 2);
g.drawLine(x1, y, x1, y);
g.drawLine(x1, y + 3, x1, y + 3);
g.setColor(Theme.sliderTrackLightColor[Theme.style].getColor());
g.drawLine(x1 + 1, y + 3, x2 - 1, y + 3);
g.drawLine(x2, y + 1, x2, y + 3);
g.setColor(Theme.sliderTrackBorderColor[Theme.style].getColor());
g.drawLine(x1 + 1, y, x2, y);
g.setColor(ColorRoutines.lighten(
Theme.sliderTrackBorderColor[Theme.style].getColor(), 20));
g.drawLine(x1, y + 1, x1, y + 2);
}
else {
int x = x1 + (trackRect.width - 4) / 2;
g.setColor(Theme.sliderTrackBorderColor[Theme.style].getColor());
g.drawLine(x, y1 + 2, x, y2 - 2);
g.setColor(ColorRoutines.lighten(
Theme.sliderTrackBorderColor[Theme.style].getColor(), 20));
g.drawLine(x, y1 + 1, x + 2, y1 + 1);
g.drawLine(x, y2 - 1, x + 2, y2 - 1);
g.setColor(Theme.sliderTrackDarkColor[Theme.style].getColor());
g.drawLine(x, y1, x + 3, y1);
g.drawLine(x + 1, y1 + 2, x + 1, y2 - 2);
g.drawLine(x, y2, x + 3, y2);
g.setColor(Theme.sliderTrackLightColor[Theme.style].getColor());
g.drawLine(x + 3, y1 + 1, x + 3, y2 - 1);
g.setColor(Theme.sliderTrackColor[Theme.style].getColor());
g.drawLine(x + 2, y1 + 2, x + 2, y2 - 2);
}
}
protected void paintMinorTickForHorizSlider( Graphics g, Rectangle tickBounds, int x ) {
g.setColor(slider.isEnabled() ? Theme.sliderTickColor[Theme.style].getColor() : Theme.sliderTickDisabledColor[Theme.style].getColor());
g.drawLine( x, 0, x, tickBounds.height / 2 - 1 );
}
protected void paintMajorTickForHorizSlider( Graphics g, Rectangle tickBounds, int x ) {
g.setColor(slider.isEnabled() ? Theme.sliderTickColor[Theme.style].getColor() : Theme.sliderTickDisabledColor[Theme.style].getColor());
g.drawLine( x, 0, x, tickBounds.height - 2 );
}
protected void paintMinorTickForVertSlider( Graphics g, Rectangle tickBounds, int y ) {
g.setColor(slider.isEnabled() ? Theme.sliderTickColor[Theme.style].getColor() : Theme.sliderTickDisabledColor[Theme.style].getColor());
g.drawLine( 0, y, tickBounds.width / 2 - 1, y );
}
protected void paintMajorTickForVertSlider( Graphics g, Rectangle tickBounds, int y ) {
g.setColor(slider.isEnabled() ? Theme.sliderTickColor[Theme.style].getColor() : Theme.sliderTickDisabledColor[Theme.style].getColor());
g.drawLine( 0, y, tickBounds.width - 2, y );
}
}