001/* ===========================================================
002 * Orson Charts : a 3D chart library for the Java(tm) platform
003 * ===========================================================
004 * 
005 * (C)opyright 2013-2022, by David Gilbert.  All rights reserved.
006 * 
007 * https://github.com/jfree/orson-charts
008 * 
009 * This program is free software: you can redistribute it and/or modify
010 * it under the terms of the GNU General Public License as published by
011 * the Free Software Foundation, either version 3 of the License, or
012 * (at your option) any later version.
013 *
014 * This program is distributed in the hope that it will be useful,
015 * but WITHOUT ANY WARRANTY; without even the implied warranty of
016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
017 * GNU General Public License for more details.
018 *
019 * You should have received a copy of the GNU General Public License
020 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
021 * 
022 * [Oracle and Java are registered trademarks of Oracle and/or its affiliates. 
023 * Other names may be trademarks of their respective owners.]
024 * 
025 * If you do not wish to be bound by the terms of the GPL, an alternative
026 * commercial license can be purchased.  For details, please see visit the
027 * Orson Charts home page:
028 * 
029 * http://www.object-refinery.com/orsoncharts/index.html
030 * 
031 */
032
033package org.jfree.chart3d.graphics3d;
034
035import java.awt.Color;
036import java.awt.Font;
037import org.jfree.chart3d.internal.Args;
038
039/**
040 * A face that carries a label (and is itself invisible).
041 * 
042 * @since 1.3
043 */
044public class LabelFace extends Face {
045    
046    /** A transparent color. */
047    private static final Color TRANSPARENT = new Color(0, 0, 0, 0);
048
049    /** The label. */
050    private String label;
051    
052    /** The font for the label. */
053    private Font font;
054    
055    /** The foreground color for the text. */
056    private Color textColor;
057    
058    /** The background color. */
059    private Color backgroundColor;
060    
061    /**
062     * Creates a new instance.
063     * 
064     * @param owner  the object that this face belongs to ({@code null} 
065     *     not permitted).
066     * @param vertices  the vertices that define the face ({@code null} 
067     *     not permitted).
068     * @param label  the label ({@code null} not permitted).
069     * @param font  the font ({@code null} not permitted).
070     * @param textColor  the foreground color ({@code null} not permitted).
071     * @param backgroundColor   the background color for the label 
072     *     ({@code null} not permitted).
073     */
074    public LabelFace(Object3D owner, int[] vertices, String label, Font font, 
075            Color textColor, Color backgroundColor) {
076        super(owner, vertices);
077        Args.nullNotPermitted(label, "label");
078        Args.nullNotPermitted(font, "font");
079        Args.nullNotPermitted(textColor, "textColor");
080        Args.nullNotPermitted(backgroundColor, "backgroundColor");
081        this.label = label;
082        this.font = font;
083        this.textColor = textColor;
084        this.backgroundColor = backgroundColor;
085    }
086
087    /**
088     * Returns a transparent color, so that the face is not visible.
089     * 
090     * @return A transparent color. 
091     */
092    @Override
093    public Color getColor() {
094        return TRANSPARENT;
095    }
096
097    /**
098     * Returns the label.
099     * 
100     * @return The label (never {@code null}). 
101     */
102    public String getLabel() {
103        return this.label;
104    }
105
106    /**
107     * Sets the label.
108     * 
109     * @param label  the new label ({@code null} not permitted). 
110     */
111    public void setLabel(String label) {
112        Args.nullNotPermitted(label, "label");
113        this.label = label;
114    }
115
116    /**
117     * Returns the font.
118     * 
119     * @return The font (never {@code null}). 
120     */
121    public Font getFont() {
122        return this.font;
123    }
124
125    /**
126     * Sets the font.
127     * 
128     * @param font  the font ({@code null} not permitted). 
129     */
130    public void setFont(Font font) {
131        Args.nullNotPermitted(font, "font");
132        this.font = font;
133    }
134
135    /**
136     * Returns the foreground color for the label text.
137     * 
138     * @return The foreground color (never {@code null}). 
139     */
140    public Color getTextColor() {
141        return this.textColor;
142    }
143
144    /**
145     * Sets the foreground color for the label text.
146     * 
147     * @param color  the color ({@code null} not permitted).
148     */
149    public void setTextColor(Color color) {
150        this.textColor = color;
151    }
152
153    /**
154     * Returns the background color.  The default value is a fully transparent
155     * color.
156     * 
157     * @return The background color (never {@code null}). 
158     */
159    public Color getBackgroundColor() {
160        return this.backgroundColor;
161    }
162
163    /**
164     * Sets the background color.
165     * 
166     * @param color  the color ({@code null} not permitted). 
167     */
168    public void setBackgroundColor(Color color) {
169        this.backgroundColor = color;
170    }
171
172}