    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}