Skip to content

Commit 181be0a

Browse files
github conflict resolution
1 parent 2c8d779 commit 181be0a

File tree

1 file changed

+158
-111
lines changed

1 file changed

+158
-111
lines changed
Lines changed: 158 additions & 111 deletions
Original file line numberDiff line numberDiff line change
@@ -1,127 +1,174 @@
11
package mdlaf.components.slider;
22

3-
import mdlaf.resources.MaterialColors;
4-
import mdlaf.resources.MaterialDrawingUtils;
3+
import java.awt.Graphics;
54

5+
import java.awt.Rectangle;
66
import javax.swing.JComponent;
77
import javax.swing.JSlider;
8-
import javax.swing.UIManager;
98
import javax.swing.plaf.ComponentUI;
10-
import javax.swing.plaf.basic.BasicSliderUI;
11-
import java.awt.Dimension;
12-
import java.awt.Graphics;
13-
14-
public class MaterialSliderUI extends BasicSliderUI {
15-
16-
private static final int NORMAL_THUMB_RADIUS = 7;
17-
private static final int DRAG_THUMB_RADIUS = 14;
18-
private static final Dimension THUMB_SIZE = new Dimension (DRAG_THUMB_RADIUS * 2, DRAG_THUMB_RADIUS * 2);
19-
20-
public MaterialSliderUI (JSlider slider) {
21-
super (slider);
22-
}
23-
24-
public static ComponentUI createUI (JComponent c) {
25-
return new MaterialSliderUI ((JSlider) c);
26-
}
27-
28-
@Override
29-
public void installUI (JComponent c) {
30-
super.installUI (c);
9+
import javax.swing.plaf.metal.MetalLookAndFeel;
10+
import javax.swing.plaf.metal.MetalSliderUI;
11+
import mdlaf.resources.MaterialColors;
12+
import mdlaf.resources.MaterialDrawingUtils;
3113

14+
/**
15+
*
16+
* @author https://github.com/vincenzopalazzo
17+
*
18+
*/
19+
public class MaterialSliderUI extends MetalSliderUI{
20+
21+
public static ComponentUI createUI(JComponent c) {
3222
JSlider slider = (JSlider) c;
33-
slider.setFont (UIManager.getFont ("Slider.font"));
34-
slider.setBackground (UIManager.getColor ("Slider.background"));
35-
slider.setForeground (UIManager.getColor ("Slider.foreground"));
36-
slider.setBorder (UIManager.getBorder ("Slider.border"));
37-
}
38-
39-
@Override
40-
public Dimension getThumbSize () {
41-
return THUMB_SIZE;
23+
//return new MaterialSliderUI(slider);
24+
return new MaterialSliderUI();
4225
}
4326

4427
@Override
45-
public void paintThumb (Graphics g) {
46-
g = MaterialDrawingUtils.getAliasedGraphics (g);
47-
48-
int cx = thumbRect.x + thumbRect.width / 2;
49-
int cy = thumbRect.y + thumbRect.height / 2;
50-
51-
if (isDragging ()) {
52-
g.setColor (MaterialColors.bleach (slider.getForeground (), 0.5f));
53-
drawCircle (g, cx, cy, DRAG_THUMB_RADIUS);
54-
}
55-
56-
g.setColor (slider.getForeground ());
57-
drawCircle (g, cx, cy, NORMAL_THUMB_RADIUS);
58-
59-
// need to redraw loaded part of progress line
60-
Line loaded = getTrack (true);
61-
g.drawLine (loaded.x1, loaded.y1, loaded.x2, loaded.y2);
62-
}
63-
64-
@Override
65-
public void paintTrack (Graphics g) {
66-
g = MaterialDrawingUtils.getAliasedGraphics (g);
67-
68-
g.setColor (UIManager.getColor ("Slider.trackColor"));
69-
Line unloaded = getTrack (false);
70-
g.drawLine (unloaded.x1, unloaded.y1, unloaded.x2, unloaded.y2);
71-
72-
g.setColor (slider.getForeground ());
73-
Line loaded = getTrack (true);
74-
g.drawLine (loaded.x1, loaded.y1, loaded.x2, loaded.y2);
75-
}
76-
77-
private static void drawCircle (Graphics g, int x, int y, int radius) {
78-
g.fillOval (x - radius, y - radius, radius * 2, radius * 2);
79-
}
80-
81-
private Line getTrack (boolean loaded) {
82-
if (slider.getOrientation () == JSlider.HORIZONTAL) {
83-
Line left = new Line (trackRect.x, thumbRect.y + thumbRect.height / 2, thumbRect.x + thumbRect.width / 2, thumbRect.y + thumbRect.height / 2);
84-
Line right = new Line (thumbRect.x + thumbRect.width / 2, thumbRect.y + thumbRect.height / 2, trackRect.x + trackRect.width, thumbRect.y + thumbRect.height / 2);
85-
86-
if (loaded) {
87-
return slider.getInverted () ? right : left;
88-
}
89-
else {
90-
return slider.getInverted () ? left : right;
91-
}
92-
}
93-
else {
94-
Line top = new Line (thumbRect.x + thumbRect.width / 2, trackRect.y, thumbRect.x + thumbRect.width / 2, thumbRect.y + thumbRect.height / 2);
95-
Line bottom = new Line (thumbRect.x + thumbRect.width / 2, thumbRect.y + thumbRect.height / 2, thumbRect.x + thumbRect.width / 2, trackRect.y + trackRect.height);
96-
97-
if (loaded) {
98-
return slider.getInverted () ? top : bottom;
99-
}
100-
else {
101-
return slider.getInverted () ? bottom : top;
102-
}
103-
}
104-
}
105-
106-
@Override
107-
public void paintFocus (Graphics g) {
108-
28+
public void installUI(JComponent c) {
29+
// TODO Auto-generated method stub
30+
super.installUI(c);
31+
JSlider slider = (JSlider) c;
32+
slider.setBackground(MaterialColors.WHITE);
33+
slider.setPaintTrack(true);
10934
}
11035

11136
@Override
112-
public void paint (Graphics g, JComponent c) {
113-
super.paint (MaterialDrawingUtils.getAliasedGraphics (g), c);
114-
}
115-
116-
private static class Line {
117-
118-
int x1, y1, x2, y2;
119-
120-
Line (int x1, int y1, int x2, int y2) {
121-
this.x1 = x1;
122-
this.y1 = y1;
123-
this.x2 = x2;
124-
this.y2 = y2;
125-
}
37+
public void paint(Graphics g, JComponent c) {
38+
super.paint(MaterialDrawingUtils.getAliasedGraphics(g), c);
12639
}
40+
41+
/**
42+
* original code of MetalSliderUI
43+
* @return Rectangle
44+
*/
45+
46+
private Rectangle getPaintTrackRect() {
47+
int trackLeft = 0, trackRight, trackTop = 0, trackBottom;
48+
if (slider.getOrientation() == JSlider.HORIZONTAL) {
49+
trackBottom = (trackRect.height - 1) - getThumbOverhang();
50+
trackTop = trackBottom - (getTrackWidth() - 1);
51+
trackRight = trackRect.width - 1;
52+
}
53+
else {
54+
if (this.leftToRightCache) {
55+
trackLeft = (trackRect.width - getThumbOverhang()) -
56+
getTrackWidth();
57+
trackRight = (trackRect.width - getThumbOverhang()) - 1;
58+
}
59+
else {
60+
trackLeft = getThumbOverhang();
61+
trackRight = getThumbOverhang() + getTrackWidth() - 1;
62+
}
63+
trackBottom = trackRect.height - 1;
64+
}
65+
return new Rectangle(trackRect.x + trackLeft, trackRect.y + trackTop,
66+
trackRight - trackLeft, trackBottom - trackTop);
67+
}
68+
69+
/**
70+
* original code of MetalSliderUI with some tricks on the colors
71+
*/
72+
public void paintTrack(Graphics g) {
73+
g.translate( trackRect.x, trackRect.y );
74+
75+
int trackLeft = 0;
76+
int trackTop = 0;
77+
int trackRight;
78+
int trackBottom;
79+
80+
// Draw the track
81+
if ( slider.getOrientation() == JSlider.HORIZONTAL ) {
82+
trackBottom = (trackRect.height - 1) - getThumbOverhang();
83+
trackTop = trackBottom - (getTrackWidth() - 1);
84+
trackRight = trackRect.width - 1;
85+
}
86+
else {
87+
if (this.leftToRightCache) {
88+
trackLeft = (trackRect.width - getThumbOverhang()) -
89+
getTrackWidth();
90+
trackRight = (trackRect.width - getThumbOverhang()) - 1;
91+
}
92+
else {
93+
trackLeft = getThumbOverhang();
94+
trackRight = getThumbOverhang() + getTrackWidth() - 1;
95+
}
96+
trackBottom = trackRect.height - 1;
97+
}
98+
99+
if ( slider.isEnabled() ) {
100+
g.setColor(MaterialColors.LIGHT_BLUE_400 );
101+
g.drawRect( trackLeft, trackTop,
102+
(trackRight - trackLeft) - 1, (trackBottom - trackTop) - 1 );
103+
104+
g.setColor( MaterialColors.LIGHT_BLUE_400 );
105+
g.drawLine( trackLeft + 1, trackBottom, trackRight, trackBottom );
106+
g.drawLine( trackRight, trackTop + 1, trackRight, trackBottom );
107+
108+
g.setColor( MaterialColors.LIGHT_BLUE_400 );
109+
g.drawLine( trackLeft + 1, trackTop + 1, trackRight - 2, trackTop + 1 );
110+
g.drawLine( trackLeft + 1, trackTop + 1, trackLeft + 1, trackBottom - 2 );
111+
}
112+
else {
113+
g.setColor( MetalLookAndFeel.getControlShadow() );
114+
g.drawRect( trackLeft, trackTop,
115+
(trackRight - trackLeft) - 1, (trackBottom - trackTop) - 1 );
116+
}
117+
118+
// Draw the fill
119+
if ( filledSlider ) {
120+
int middleOfThumb;
121+
int fillTop;
122+
int fillLeft;
123+
int fillBottom;
124+
int fillRight;
125+
126+
if ( slider.getOrientation() == JSlider.HORIZONTAL ) {
127+
middleOfThumb = thumbRect.x + (thumbRect.width / 2);
128+
middleOfThumb -= trackRect.x; // To compensate for the g.translate()
129+
fillTop = !slider.isEnabled() ? trackTop : trackTop + 1;
130+
fillBottom = !slider.isEnabled() ? trackBottom - 1 : trackBottom - 2;
131+
132+
if ( !drawInverted() ) {
133+
fillLeft = !slider.isEnabled() ? trackLeft : trackLeft + 1;
134+
fillRight = middleOfThumb;
135+
}
136+
else {
137+
fillLeft = middleOfThumb;
138+
fillRight = !slider.isEnabled() ? trackRight - 1 : trackRight - 2;
139+
}
140+
}
141+
else {
142+
middleOfThumb = thumbRect.y + (thumbRect.height / 2);
143+
middleOfThumb -= trackRect.y; // To compensate for the g.translate()
144+
fillLeft = !slider.isEnabled() ? trackLeft : trackLeft + 1;
145+
fillRight = !slider.isEnabled() ? trackRight - 1 : trackRight - 2;
146+
147+
if ( !drawInverted() ) {
148+
fillTop = middleOfThumb;
149+
fillBottom = !slider.isEnabled() ? trackBottom - 1 : trackBottom - 2;
150+
}
151+
else {
152+
fillTop = !slider.isEnabled() ? trackTop : trackTop + 1;
153+
fillBottom = middleOfThumb;
154+
}
155+
}
156+
157+
if ( slider.isEnabled() ) {
158+
g.setColor( MaterialColors.LIGHT_BLUE_400 );
159+
g.drawLine( fillLeft, fillTop, fillRight, fillTop );
160+
g.drawLine( fillLeft, fillTop, fillLeft, fillBottom );
161+
162+
g.setColor(MaterialColors.LIGHT_BLUE_400 );
163+
g.fillRect( fillLeft + 1, fillTop + 1,
164+
fillRight - fillLeft, fillBottom - fillTop );
165+
}
166+
else {
167+
g.setColor( MetalLookAndFeel.getControlShadow() );
168+
g.fillRect(fillLeft, fillTop, fillRight - fillLeft, fillBottom - fillTop);
169+
}
170+
}
171+
172+
g.translate( -trackRect.x, -trackRect.y );
173+
}
127174
}

0 commit comments

Comments
 (0)