1 /* 2 * Copyright (c) 2003-2008 by Cosylab d. d. 3 * 4 * This file is part of CosyBeans-Common. 5 * 6 * CosyBeans-Common is free software: you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation, either version 3 of the License, or 9 * (at your option) any later version. 10 * 11 * CosyBeans-Common is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with CosyBeans-Common. If not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 package com.cosylab.gui.components.ledder; 21 import java.awt.Color; 22 import java.awt.Component; 23 import java.awt.Graphics; 24 import java.awt.Graphics2D; 25 import java.awt.Shape; 26 import java.awt.geom.Rectangle2D; 27 28 import javax.swing.ImageIcon; 29 30 /** 31 * This is the default icon used when displaying leds. This class is 32 * instantiated when led icon could not be loaded from the resources. It 33 * displays filled circle of appropriate color. 34 * 35 * @author <a href="mailto:ales.pucelj@cosylab.com">Ales Pucelj</a> 36 * @version $id$ 37 * 38 * @see com.cosylab.gui.components.ledder.Led 39 * @see com.cosylab.gui.components.ledder.LedIconFactory 40 */ 41 public class DefaultLedIcon extends ImageIcon { 42 43 // Parameters defining rendering of the led. 44 private LedPaintParameters parameters; 45 46 // Area to be painted. 47 private Rectangle2D rectangle; 48 49 // Paint implementation used to render the led. 50 private LedPaint paint; 51 52 protected int size=14; 53 54 /** 55 * Default constructor for DefaultLedIcon. If the color parameter is null, 56 * color will be set to <code>java.awt.Color.BLACK</code> 57 * 58 * @param color Color 59 */ 60 protected DefaultLedIcon(Color color) { 61 super(); 62 63 if (color == null) 64 color = Color.BLACK; 65 66 parameters = createDefaultParameters(); 67 68 getParameters().color = color; 69 } 70 71 /** 72 * Returns default parameters to be used for rendering of leds. 73 * 74 * @return LedPaintParameters 75 */ 76 protected LedPaintParameters createDefaultParameters() { 77 LedPaintParameters lpp = new LedPaintParameters(); 78 79 //lpp.centerX = 7; 80 //lpp.centerY = 7; 81 lpp.radius = 6; 82 lpp.highlightFactor = 0.85; 83 lpp.highlightFocus = 3.0; 84 lpp.shadowIntensity = 1.0; 85 lpp.borderSize = 0.05; 86 lpp.lightX = -0.20; 87 lpp.lightY = -0.50; 88 lpp.antialiasing = 3; 89 90 return lpp; 91 } 92 93 /** 94 * Returns area to be painted. This is a rectangle with dimensions of 95 * the icon. 96 * 97 * @return Rectangle2D 98 */ 99 private final Rectangle2D getRectangle() { 100 if (rectangle == null) { 101 rectangle = 102 new Rectangle2D.Double(0, 0, getIconWidth(), getIconHeight()); 103 } 104 return rectangle; 105 } 106 107 /** 108 * Returns LedPaint object that renders the icon. 109 * 110 * @return LedPaint 111 */ 112 private final LedPaint getPaint() { 113 if (paint==null) { 114 paint = new LedPaint(getParameters()); 115 } 116 return paint; 117 } 118 119 /** 120 * Returns LedPaintParameters that are initialized in the constructor. 121 * @return LedPaintParameters 122 */ 123 private final LedPaintParameters getParameters() { 124 return parameters; 125 } 126 127 /** 128 * Returns the height of this icon. This value is set to 16. 129 * 130 * @return int 131 * @see javax.swing.Icon#getIconHeight() 132 */ 133 public final int getIconHeight() { 134 return size; 135 } 136 137 /** 138 * Returns the width of this icon. This value is set to 16. 139 * 140 * @return int 141 * @see javax.swing.Icon#getIconWidth() 142 */ 143 public final int getIconWidth() { 144 return size; 145 } 146 147 /** 148 * Renders the icon. 149 * 150 * @param component Component 151 * @param g Graphics 152 * @param x int 153 * @param y int 154 * @see javax.swing.Icon#paintIcon(Component, Graphics, int, int) 155 */ 156 public void paintIcon(Component component, Graphics g, int x, int y) { 157 Graphics2D g2 = (Graphics2D) g; 158 getPaint().setCenter(x+parameters.radius+2,y+parameters.radius+2); 159 g2.setPaint(getPaint()); 160 g2.fill(new Rectangle2D.Double(x, y, getIconWidth(), getIconHeight())); 161 162 } 163 }