Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/demo/share/jfc/J2Ddemo/java2d/demos/Paint/Gradient.java
41175 views
1
/*
2
*
3
* Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
7
* are met:
8
*
9
* - Redistributions of source code must retain the above copyright
10
* notice, this list of conditions and the following disclaimer.
11
*
12
* - Redistributions in binary form must reproduce the above copyright
13
* notice, this list of conditions and the following disclaimer in the
14
* documentation and/or other materials provided with the distribution.
15
*
16
* - Neither the name of Oracle nor the names of its
17
* contributors may be used to endorse or promote products derived
18
* from this software without specific prior written permission.
19
*
20
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
21
* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
22
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
24
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
25
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
26
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
27
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
28
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
29
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
30
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31
*/
32
package java2d.demos.Paint;
33
34
35
import static java.awt.Color.black;
36
import static java.awt.Color.blue;
37
import static java.awt.Color.cyan;
38
import static java.awt.Color.green;
39
import static java.awt.Color.lightGray;
40
import static java.awt.Color.magenta;
41
import static java.awt.Color.orange;
42
import static java.awt.Color.red;
43
import static java.awt.Color.white;
44
import static java.awt.Color.yellow;
45
import java.awt.Color;
46
import java.awt.Component;
47
import java.awt.Dimension;
48
import java.awt.Font;
49
import java.awt.GradientPaint;
50
import java.awt.Graphics;
51
import java.awt.Graphics2D;
52
import java.awt.event.ActionEvent;
53
import java.awt.event.ActionListener;
54
import java.awt.font.TextLayout;
55
import java2d.ControlsSurface;
56
import java2d.CustomControls;
57
import javax.swing.Icon;
58
import javax.swing.JMenu;
59
import javax.swing.JMenuBar;
60
import javax.swing.JMenuItem;
61
62
63
@SuppressWarnings("serial")
64
public class Gradient extends ControlsSurface {
65
66
protected Color innerC, outerC;
67
68
public Gradient() {
69
setBackground(white);
70
innerC = green;
71
outerC = blue;
72
setControls(new Component[] { new DemoControls(this) });
73
}
74
75
@Override
76
public void render(int w, int h, Graphics2D g2) {
77
78
int w2 = w / 2;
79
int h2 = h / 2;
80
g2.setPaint(new GradientPaint(0, 0, outerC, w * .35f, h * .35f, innerC));
81
g2.fillRect(0, 0, w2, h2);
82
g2.setPaint(new GradientPaint(w, 0, outerC, w * .65f, h * .35f, innerC));
83
g2.fillRect(w2, 0, w2, h2);
84
g2.setPaint(new GradientPaint(0, h, outerC, w * .35f, h * .65f, innerC));
85
g2.fillRect(0, h2, w2, h2);
86
g2.setPaint(new GradientPaint(w, h, outerC, w * .65f, h * .65f, innerC));
87
g2.fillRect(w2, h2, w2, h2);
88
89
g2.setColor(black);
90
TextLayout tl = new TextLayout(
91
"GradientPaint", g2.getFont(), g2.getFontRenderContext());
92
tl.draw(g2, (int) (w / 2 - tl.getBounds().getWidth() / 2),
93
(int) (h / 2 + tl.getBounds().getHeight() / 2));
94
}
95
96
public static void main(String[] s) {
97
createDemoFrame(new Gradient());
98
}
99
100
101
static class DemoControls extends CustomControls implements ActionListener {
102
103
Gradient demo;
104
Color[] colors = { red, orange, yellow, green, blue, lightGray, cyan,
105
magenta };
106
String[] colorName = { "Red", "Orange", "Yellow", "Green",
107
"Blue", "lightGray", "Cyan", "Magenta" };
108
JMenuItem[] innerMI = new JMenuItem[colors.length];
109
JMenuItem[] outerMI = new JMenuItem[colors.length];
110
ColoredSquare[] squares = new ColoredSquare[colors.length];
111
JMenu imenu, omenu;
112
113
@SuppressWarnings("LeakingThisInConstructor")
114
public DemoControls(Gradient demo) {
115
super(demo.name);
116
this.demo = demo;
117
JMenuBar inMenuBar = new JMenuBar();
118
add(inMenuBar);
119
JMenuBar outMenuBar = new JMenuBar();
120
add(outMenuBar);
121
Font font = new Font(Font.SERIF, Font.PLAIN, 10);
122
123
imenu = inMenuBar.add(new JMenu("Inner Color"));
124
imenu.setFont(font);
125
imenu.setIcon(new ColoredSquare(demo.innerC));
126
omenu = outMenuBar.add(new JMenu("Outer Color"));
127
omenu.setFont(font);
128
omenu.setIcon(new ColoredSquare(demo.outerC));
129
for (int i = 0; i < colors.length; i++) {
130
squares[i] = new ColoredSquare(colors[i]);
131
innerMI[i] = imenu.add(new JMenuItem(colorName[i]));
132
innerMI[i].setFont(font);
133
innerMI[i].setIcon(squares[i]);
134
innerMI[i].addActionListener(this);
135
outerMI[i] = omenu.add(new JMenuItem(colorName[i]));
136
outerMI[i].setFont(font);
137
outerMI[i].setIcon(squares[i]);
138
outerMI[i].addActionListener(this);
139
}
140
}
141
142
@Override
143
public void actionPerformed(ActionEvent e) {
144
for (int i = 0; i < colors.length; i++) {
145
if (e.getSource().equals(innerMI[i])) {
146
demo.innerC = colors[i];
147
imenu.setIcon(squares[i]);
148
break;
149
} else if (e.getSource().equals(outerMI[i])) {
150
demo.outerC = colors[i];
151
omenu.setIcon(squares[i]);
152
break;
153
}
154
}
155
demo.repaint();
156
}
157
158
@Override
159
public Dimension getPreferredSize() {
160
return new Dimension(200, 37);
161
}
162
163
@Override
164
@SuppressWarnings("SleepWhileHoldingLock")
165
public void run() {
166
// goto double buffering
167
if (demo.getImageType() <= 1) {
168
demo.setImageType(2);
169
}
170
Thread me = Thread.currentThread();
171
while (thread == me) {
172
for (int i = 0; i < innerMI.length; i++) {
173
if (i != 4) {
174
try {
175
Thread.sleep(4444);
176
} catch (InterruptedException e) {
177
return;
178
}
179
innerMI[i].doClick();
180
}
181
}
182
}
183
thread = null;
184
}
185
186
187
class ColoredSquare implements Icon {
188
189
Color color;
190
191
public ColoredSquare(Color c) {
192
this.color = c;
193
}
194
195
@Override
196
public void paintIcon(Component c, Graphics g, int x, int y) {
197
Color oldColor = g.getColor();
198
g.setColor(color);
199
g.fill3DRect(x, y, getIconWidth(), getIconHeight(), true);
200
g.setColor(oldColor);
201
}
202
203
@Override
204
public int getIconWidth() {
205
return 12;
206
}
207
208
@Override
209
public int getIconHeight() {
210
return 12;
211
}
212
} // End ColoredSquare class
213
} // End DemoControls
214
} // End Gradient class
215
216
217