1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package com.cosylab.gui.components.ledder;
21 import java.awt.BorderLayout;
22 import java.awt.CardLayout;
23 import java.awt.Color;
24 import java.awt.Dimension;
25 import java.awt.Graphics;
26 import java.awt.Graphics2D;
27 import java.awt.GridBagConstraints;
28 import java.awt.GridBagLayout;
29 import java.awt.GridLayout;
30 import java.awt.event.ActionEvent;
31 import java.awt.event.ActionListener;
32 import java.awt.event.MouseAdapter;
33 import java.awt.event.MouseEvent;
34 import java.awt.geom.Rectangle2D;
35
36 import javax.swing.JButton;
37 import javax.swing.JColorChooser;
38 import javax.swing.JComponent;
39 import javax.swing.JDialog;
40 import javax.swing.JPanel;
41 import javax.swing.JScrollPane;
42 import javax.swing.JSlider;
43 import javax.swing.JTextPane;
44 import javax.swing.border.EtchedBorder;
45 import javax.swing.border.TitledBorder;
46
47
48
49
50
51 public class LedPaintDemo extends JPanel {
52
53 private JSlider hlFactorSlider;
54 private JSlider hlFocusSlider;
55
56 private JSlider shadowSlider;
57 private JSlider borderSlider;
58
59 private JSlider radiusSlider;
60 private JSlider aliasSlider;
61
62 private JPanel controlPanel;
63
64 private JTextPane sourcePane;
65
66 private JButton colorButton;
67
68 private LightPosition lightPosition;
69
70 private LedPainter painter;
71
72 private SliderMouseListener sml = new SliderMouseListener();
73
74 private Color currentColor = Color.RED;
75
76 private class LedPainter extends JComponent {
77
78 private LedPaintParameters params = new LedPaintParameters();
79
80 public void setParameters(LedPaintParameters p) {
81 params = p;
82 }
83
84 protected void paintComponent(Graphics g) {
85 super.paintComponent(g);
86 Graphics2D g2 = (Graphics2D) g;
87 Rectangle2D r =
88 new Rectangle2D.Double(0, 0, getWidth(), getHeight());
89
90 long time = System.currentTimeMillis();
91
92 LedPaint rgp = new LedPaint(params,getWidth() / 2,getHeight() / 2);
93
94 g2.setPaint(rgp);
95 g2.fill(r);
96
97 time = System.currentTimeMillis() - time;
98 System.out.println(time);
99 }
100 }
101
102 private class LightPosition extends JComponent {
103 public double xPos = 0.0;
104 public double yPos = 0.0;
105 private class PointListener extends MouseAdapter {
106 public void mouseClicked(MouseEvent e) {
107 int w = LightPosition.this.getWidth();
108 int h = LightPosition.this.getHeight();
109 int r = (w < h) ? w : h;
110
111 xPos = (1.0 * e.getX() - (r / 2)) / (r / 2);
112 yPos = (1.0 * e.getY() - (r / 2)) / (r / 2);
113
114 getPainter().setParameters(getParameters());
115 getPainter().repaint();
116 displayParameters();
117 }
118 }
119 public LightPosition() {
120 addMouseListener(new PointListener());
121 }
122 protected void paintComponent(Graphics g) {
123 super.paintComponent(g);
124 int w = LightPosition.this.getWidth();
125 int h = LightPosition.this.getHeight();
126 int r = (w < h) ? w : h;
127
128 g.drawOval(0, 0, r - 1, r - 1);
129 }
130
131 }
132
133 private class SliderMouseListener extends MouseAdapter {
134 public void mouseReleased(MouseEvent arg0) {
135 getPainter().setParameters(getParameters());
136 getPainter().repaint();
137 displayParameters();
138 }
139 }
140
141 private class ColorButtonListener implements ActionListener {
142 public void actionPerformed(ActionEvent e) {
143 Color newColor =
144 JColorChooser.showDialog(
145 LedPaintDemo.this,
146 "Select led color",
147 currentColor);
148
149 if (newColor == null) {
150 return;
151 }
152
153 currentColor = newColor;
154
155 getPainter().setParameters(getParameters());
156 getPainter().repaint();
157 }
158 }
159
160 public LedPaintDemo() {
161 initialize();
162 }
163
164 private void initialize() {
165 setLayout(new BorderLayout());
166
167 add(getControlPanel(), BorderLayout.EAST);
168
169 JPanel panel = new JPanel();
170 panel.setLayout(new GridBagLayout());
171
172 getPainter().setMinimumSize(new Dimension(10, 10));
173 getPainter().setMaximumSize(new Dimension(200, 200));
174 getPainter().setPreferredSize(new Dimension(200, 220));
175 GridBagConstraints gbc = new GridBagConstraints();
176
177 gbc.gridx = 0;
178 gbc.gridy = 0;
179 gbc.anchor = GridBagConstraints.CENTER;
180 gbc.fill = GridBagConstraints.NONE;
181
182 panel.add(getPainter(), gbc);
183
184 add(panel, BorderLayout.CENTER);
185
186 add(new JScrollPane(getSourcePane()), BorderLayout.SOUTH);
187
188 resetParameters();
189 getPainter().setParameters(getParameters());
190 getPainter().repaint();
191 displayParameters();
192 }
193
194 private LedPainter getPainter() {
195 if (painter == null) {
196 painter = new LedPainter();
197 painter.setBorder(new TitledBorder("Preview"));
198 }
199 return painter;
200 }
201
202 private JPanel getControlPanel() {
203 if (controlPanel == null) {
204 controlPanel = new JPanel();
205
206 controlPanel.setLayout(new GridLayout(4, 2));
207
208 controlPanel.add(getHlFactorSlider());
209 controlPanel.add(getHlFocusSlider());
210
211 controlPanel.add(getShadowSlider());
212 controlPanel.add(getBorderSlider());
213
214 controlPanel.add(getRadiusSlider());
215 controlPanel.add(getAliasSlider());
216
217 controlPanel.add(getColorButton());
218
219 controlPanel.add(getLightPosition());
220
221 }
222 return controlPanel;
223 }
224
225 private JSlider createSlider(String title) {
226 JSlider slider = new JSlider();
227
228 slider.setMinimum(0);
229 slider.setMaximum(100);
230 slider.setMajorTickSpacing(20);
231 slider.setMinorTickSpacing(5);
232 slider.setPaintLabels(true);
233 slider.setPaintTicks(true);
234 slider.setBorder(new TitledBorder(new EtchedBorder(), title));
235
236 slider.addMouseListener(sml);
237
238 return slider;
239 }
240
241 private JSlider getHlFactorSlider() {
242 if (hlFactorSlider == null) {
243 hlFactorSlider = createSlider("Highlight factor");
244 }
245 return hlFactorSlider;
246 }
247
248 private JSlider getHlFocusSlider() {
249 if (hlFocusSlider == null) {
250 hlFocusSlider = createSlider("Highlight focus");
251 }
252 return hlFocusSlider;
253 }
254
255 private JSlider getShadowSlider() {
256 if (shadowSlider == null) {
257 shadowSlider = createSlider("Shadow intensity");
258 }
259 return shadowSlider;
260 }
261
262 private JSlider getBorderSlider() {
263 if (borderSlider == null) {
264 borderSlider = createSlider("Border size");
265 }
266 return borderSlider;
267 }
268
269 private JSlider getRadiusSlider() {
270 if (radiusSlider == null) {
271 radiusSlider = createSlider("Radius");
272 radiusSlider.setMinimum(0);
273 }
274 return radiusSlider;
275 }
276
277 private JSlider getAliasSlider() {
278 if (aliasSlider == null) {
279 aliasSlider = createSlider("Antialiasing level");
280 aliasSlider.setMinimum(1);
281 aliasSlider.setMaximum(6);
282 aliasSlider.setMinorTickSpacing(1);
283 aliasSlider.setMajorTickSpacing(2);
284 }
285 return aliasSlider;
286 }
287
288 private JTextPane getSourcePane() {
289 if (sourcePane == null) {
290 sourcePane = new JTextPane();
291
292 }
293 return sourcePane;
294 }
295
296 private LedPaintParameters getParameters() {
297 LedPaintParameters lpp = new LedPaintParameters();
298
299 lpp.radius = getRadiusSlider().getValue();
300
301 lpp.highlightFactor = getHlFactorSlider().getValue() / 100.0;
302 lpp.highlightFocus = getHlFocusSlider().getValue() / 20.0;
303
304 lpp.shadowIntensity = getShadowSlider().getValue() / 100.0;
305 lpp.borderSize = getBorderSlider().getValue() / 100.0;
306
307 lpp.color = currentColor;
308
309 lpp.antialiasing = getAliasSlider().getValue();
310
311 lpp.lightX = lightPosition.xPos;
312 lpp.lightY = lightPosition.yPos;
313
314 return lpp;
315 }
316
317 private LightPosition getLightPosition() {
318 if (lightPosition == null) {
319 lightPosition = new LightPosition();
320 }
321 return lightPosition;
322 }
323
324 private void displayParameters() {
325 LedPaintParameters lpp = getParameters();
326 StringBuffer sb = new StringBuffer();
327
328 sb.append("LedPaintParameters lpp = new LedPaintParameters();\n");
329 sb.append("lpp.radius = ");
330 sb.append(lpp.radius);
331 sb.append(";\n");
332 sb.append("lpp.highlightFactor = ");
333 sb.append(lpp.highlightFactor);
334 sb.append(";\n");
335 sb.append("lpp.highlightFocus = ");
336 sb.append(lpp.highlightFocus);
337 sb.append(";\n");
338 sb.append("lpp.shadowIntensity = ");
339 sb.append(lpp.shadowIntensity);
340 sb.append(";\n");
341 sb.append("lpp.borderSize = ");
342 sb.append(lpp.borderSize);
343 sb.append(";\n");
344 sb.append("lpp.lightX = ");
345 sb.append(lpp.lightX);
346 sb.append(";\n");
347 sb.append("lpp.lightY = ");
348 sb.append(lpp.lightY);
349 sb.append(";\n");
350 sb.append("lpp.antialiasing = ");
351 sb.append(lpp.antialiasing);
352 sb.append(";\n");
353 sb.append("lpp.color = new java.awt.Color(");
354 sb.append(lpp.color.getRed());
355 sb.append(", ");
356 sb.append(lpp.color.getGreen());
357 sb.append(", ");
358 sb.append(lpp.color.getBlue());
359 sb.append(");\n");
360
361 getSourcePane().setText(sb.toString());
362 }
363
364 private void resetParameters() {
365 getHlFactorSlider().setValue(85);
366 getHlFocusSlider().setValue(60);
367 getShadowSlider().setValue(100);
368 getBorderSlider().setValue(5);
369 getAliasSlider().setValue(1);
370 }
371
372 private JButton getColorButton() {
373 if (colorButton == null) {
374 colorButton = new JButton("Select color");
375 colorButton.addActionListener(new ColorButtonListener());
376 }
377 return colorButton;
378 }
379
380
381
382
383 protected void paintComponent(Graphics g) {
384 super.paintComponent(g);
385 }
386
387 public static void main(String[] args) {
388 JDialog dialog = new JDialog();
389
390 dialog.setSize(750, 550);
391 dialog.setModal(true);
392
393 dialog.getContentPane().setLayout(new CardLayout());
394 LedPaintDemo lc = new LedPaintDemo();
395 dialog.getContentPane().add(lc, "");
396
397 dialog.show();
398
399 System.exit(0);
400 }
401
402 }