forked from cberes/john-hancock
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Config.java
150 lines (132 loc) · 4.03 KB
/
Config.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
package net.seabears.signature;
import java.awt.BasicStroke;
import java.awt.Color;
/**
* Signature conversion configuration.
*/
public class Config {
/**
* Configuration builder class.
*/
public static class Builder {
private Color background = Color.WHITE;
private Color foreground = Color.BLACK;
private int padding = 0;
private BasicStroke stroke = new BasicStroke(1);
private Builder() {
}
/**
* Sets the background color.
* @param color background color
* @return this instance
* @see Config#getBackground()
*/
public Builder withBackground(final Color color) {
this.background = color;
return this;
}
/**
* Sets the foreground color.
* @param color foreground color
* @return this instance
* @see Config#getForeground()
*/
public Builder withForeground(final Color color) {
this.foreground = color;
return this;
}
/**
* Sets the padding in pixels to be used.
* @param paddingSize padding in pixels
* @return this instance
* @see Config#getPadding()
*/
public Builder withPadding(final int paddingSize) {
this.padding = paddingSize;
return this;
}
/**
* Sets the stroke width.
* @param paddingSize padding in pixels
* @return this instance
* @see Config#getPadding()
*/
public Builder withStroke(final int strokeWidth) {
this.padding = Math.round(stroke.getLineWidth()/2);
this.stroke = new BasicStroke(strokeWidth);
return this;
}
/**
* Creates a new configuration from this instance.
* @return {@link Config} instance
*/
public Config build() {
return new Config(this);
}
}
/**
* The default configuration: black on white with no padding.
*/
public static final Config DEFAULT = builder().build();
private final Color background;
private final Color foreground;
private final int padding;
private final BasicStroke stroke;
public Config(final Builder builder) {
this.background = builder.background;
this.foreground = builder.foreground;
this.padding = builder.padding;
this.stroke = builder.stroke;
}
/**
* Returns the configured background color.
* The default background color is {@link Color#WHITE}.
* @return background color
*/
public Color getBackground() {
return background;
}
/**
* Returns the configured foreground color.
* The default foreground color is {@link Color#BLACK}.
* @return foreground color
*/
public Color getForeground() {
return foreground;
}
/**
* Returns the configured padding in pixels.
* By default, there is no padding.
* Padding is added to each side (top, left, bottom, right).
* For example, if a padding of {@code 10} is used, the image will be 20 pixels wider and 20 pixels taller.
* @return padding in pixels
*/
public int getPadding() {
return padding;
}
/**
* Returns the configured stroke width.
* The default stroke width is 1.
* @return stroke width
*/
public BasicStroke getStroke() {
return stroke;
}
/**
* Returns whether greyscale mode can be used for images created with this configuration.
* @return whether greyscale can be used
*/
public boolean isGreyscale() {
return isGreyscale(background) && isGreyscale(foreground);
}
private static boolean isGreyscale(final Color color) {
return color.getRed() == color.getGreen() && color.getGreen() == color.getBlue();
}
/**
* Creates a new builder instance.
* @return builder instance
*/
public static Builder builder() {
return new Builder();
}
}