Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/demo/share/jfc/Metalworks/PropertiesMetalTheme.java
41149 views
1
/*
2
* Copyright (c) 1998, 2011, Oracle and/or its affiliates. All rights reserved.
3
*
4
* Redistribution and use in source and binary forms, with or without
5
* modification, are permitted provided that the following conditions
6
* are met:
7
*
8
* - Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
*
11
* - Redistributions in binary form must reproduce the above copyright
12
* notice, this list of conditions and the following disclaimer in the
13
* documentation and/or other materials provided with the distribution.
14
*
15
* - Neither the name of Oracle nor the names of its
16
* contributors may be used to endorse or promote products derived
17
* from this software without specific prior written permission.
18
*
19
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
20
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
21
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
23
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
24
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
25
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
26
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
27
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
28
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
*/
31
32
/*
33
* This source code is provided to illustrate the usage of a given feature
34
* or technique and has been deliberately simplified. Additional steps
35
* required for a production-quality application, such as security checks,
36
* input validation and proper error handling, might not be present in
37
* this sample code.
38
*/
39
40
41
42
import java.io.IOException;
43
import java.io.InputStream;
44
import java.util.Properties;
45
import java.util.StringTokenizer;
46
47
import javax.swing.plaf.ColorUIResource;
48
import javax.swing.plaf.metal.DefaultMetalTheme;
49
50
51
/**
52
* This class allows you to load a theme from a file.
53
* It uses the standard Java Properties file format.
54
* To create a theme you provide a text file which contains
55
* tags corresponding to colors of the theme along with a value
56
* for that color. For example:
57
*
58
* name=My Ugly Theme
59
* primary1=255,0,0
60
* primary2=0,255,0
61
* primary3=0,0,255
62
*
63
* This class only loads colors from the properties file,
64
* but it could easily be extended to load fonts - or even icons.
65
*
66
* @author Steve Wilson
67
* @author Alexander Kouznetsov
68
*/
69
public class PropertiesMetalTheme extends DefaultMetalTheme {
70
71
private String name = "Custom Theme";
72
private ColorUIResource primary1;
73
private ColorUIResource primary2;
74
private ColorUIResource primary3;
75
private ColorUIResource secondary1;
76
private ColorUIResource secondary2;
77
private ColorUIResource secondary3;
78
private ColorUIResource black;
79
private ColorUIResource white;
80
81
/**
82
* pass an inputstream pointing to a properties file.
83
* Colors will be initialized to be the same as the DefaultMetalTheme,
84
* and then any colors provided in the properties file will override that.
85
*/
86
public PropertiesMetalTheme(InputStream stream) {
87
initColors();
88
loadProperties(stream);
89
}
90
91
/**
92
* Initialize all colors to be the same as the DefaultMetalTheme.
93
*/
94
private void initColors() {
95
primary1 = super.getPrimary1();
96
primary2 = super.getPrimary2();
97
primary3 = super.getPrimary3();
98
99
secondary1 = super.getSecondary1();
100
secondary2 = super.getSecondary2();
101
secondary3 = super.getSecondary3();
102
103
black = super.getBlack();
104
white = super.getWhite();
105
}
106
107
/**
108
* Load the theme name and colors from the properties file
109
* Items not defined in the properties file are ignored
110
*/
111
private void loadProperties(InputStream stream) {
112
Properties prop = new Properties();
113
try {
114
prop.load(stream);
115
} catch (IOException e) {
116
System.out.println(e);
117
}
118
119
Object tempName = prop.get("name");
120
if (tempName != null) {
121
name = tempName.toString();
122
}
123
124
Object colorString = null;
125
126
colorString = prop.get("primary1");
127
if (colorString != null) {
128
primary1 = parseColor(colorString.toString());
129
}
130
131
colorString = prop.get("primary2");
132
if (colorString != null) {
133
primary2 = parseColor(colorString.toString());
134
}
135
136
colorString = prop.get("primary3");
137
if (colorString != null) {
138
primary3 = parseColor(colorString.toString());
139
}
140
141
colorString = prop.get("secondary1");
142
if (colorString != null) {
143
secondary1 = parseColor(colorString.toString());
144
}
145
146
colorString = prop.get("secondary2");
147
if (colorString != null) {
148
secondary2 = parseColor(colorString.toString());
149
}
150
151
colorString = prop.get("secondary3");
152
if (colorString != null) {
153
secondary3 = parseColor(colorString.toString());
154
}
155
156
colorString = prop.get("black");
157
if (colorString != null) {
158
black = parseColor(colorString.toString());
159
}
160
161
colorString = prop.get("white");
162
if (colorString != null) {
163
white = parseColor(colorString.toString());
164
}
165
166
}
167
168
@Override
169
public String getName() {
170
return name;
171
}
172
173
@Override
174
protected ColorUIResource getPrimary1() {
175
return primary1;
176
}
177
178
@Override
179
protected ColorUIResource getPrimary2() {
180
return primary2;
181
}
182
183
@Override
184
protected ColorUIResource getPrimary3() {
185
return primary3;
186
}
187
188
@Override
189
protected ColorUIResource getSecondary1() {
190
return secondary1;
191
}
192
193
@Override
194
protected ColorUIResource getSecondary2() {
195
return secondary2;
196
}
197
198
@Override
199
protected ColorUIResource getSecondary3() {
200
return secondary3;
201
}
202
203
@Override
204
protected ColorUIResource getBlack() {
205
return black;
206
}
207
208
@Override
209
protected ColorUIResource getWhite() {
210
return white;
211
}
212
213
/**
214
* parse a comma delimited list of 3 strings into a Color
215
*/
216
private ColorUIResource parseColor(String s) {
217
int red = 0;
218
int green = 0;
219
int blue = 0;
220
try {
221
StringTokenizer st = new StringTokenizer(s, ",");
222
223
red = Integer.parseInt(st.nextToken());
224
green = Integer.parseInt(st.nextToken());
225
blue = Integer.parseInt(st.nextToken());
226
227
} catch (Exception e) {
228
System.out.println(e);
229
System.out.println("Couldn't parse color :" + s);
230
}
231
232
return new ColorUIResource(red, green, blue);
233
}
234
}
235
236