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.graphics2d;
034
035/**
036 * Used to indicate the position of an anchor point for a text string.  This is
037 * frequently used to align a string to a fixed point in some coordinate space.
038 */
039public enum TextAnchor {
040
041    /** Top/left. */
042    TOP_LEFT("TextAnchor.TOP_LEFT"),
043
044    /** Top/center. */
045    TOP_CENTER("TextAnchor.TOP_CENTER"),
046
047    /** Top/right. */
048    TOP_RIGHT("TextAnchor.TOP_RIGHT"),
049
050    /** Half-ascent/left. */
051    HALF_ASCENT_LEFT("TextAnchor.HALF_ASCENT_LEFT"),
052
053    /** Half-ascent/center. */
054    HALF_ASCENT_CENTER("TextAnchor.HALF_ASCENT_CENTER"),
055
056    /** Half-ascent/right. */
057    HALF_ASCENT_RIGHT("TextAnchor.HALF_ASCENT_RIGHT"),
058
059    /** Middle/left. */
060    CENTER_LEFT("TextAnchor.CENTER_LEFT"),
061
062    /** Middle/center. */
063    CENTER("TextAnchor.CENTER"),
064
065    /** Middle/right. */
066    CENTER_RIGHT("TextAnchor.CENTER_RIGHT"),
067
068    /** Baseline/left. */
069    BASELINE_LEFT("TextAnchor.BASELINE_LEFT"),
070
071    /** Baseline/center. */
072    BASELINE_CENTER("TextAnchor.BASELINE_CENTER"),
073
074    /** Baseline/right. */
075    BASELINE_RIGHT("TextAnchor.BASELINE_RIGHT"),
076
077    /** Bottom/left. */
078    BOTTOM_LEFT("TextAnchor.BOTTOM_LEFT"),
079
080    /** Bottom/center. */
081    BOTTOM_CENTER("TextAnchor.BOTTOM_CENTER"),
082
083    /** Bottom/right. */
084    BOTTOM_RIGHT("TextAnchor.BOTTOM_RIGHT");
085
086    /** The name. */
087    private final String name;
088
089    /**
090     * Private constructor.
091     *
092     * @param name  the name.
093     */
094    TextAnchor(String name) {
095        this.name = name;
096    }
097    
098    /**
099     * Returns {@code true} if this anchor is at the left side of the
100     * text bounds, and {@code false} otherwise.
101     * 
102     * @return A boolean. 
103     */
104    public boolean isLeft() {
105        return this == TOP_LEFT || this == CENTER_LEFT 
106                || this == HALF_ASCENT_LEFT || this == BASELINE_LEFT 
107                || this == BOTTOM_LEFT;    
108    }
109    
110    /**
111     * Returns {@code true} if this anchor is horizontally at the center 
112     * of the text bounds, and {@code false} otherwise.
113     * 
114     * @return A boolean. 
115     */
116    public boolean isHorizontalCenter() {
117        return this == TOP_CENTER || this == CENTER 
118                || this == HALF_ASCENT_CENTER || this == BASELINE_CENTER 
119                || this == BOTTOM_CENTER;
120    }
121    
122    /**
123     * Returns {@code true} if this anchor is at the right side of the
124     * text bounds, and {@code false} otherwise.
125     * 
126     * @return A boolean. 
127     */
128    public boolean isRight() {
129        return this == TOP_RIGHT || this == CENTER_RIGHT 
130                || this == HALF_ASCENT_RIGHT || this == BASELINE_RIGHT 
131                || this == BOTTOM_RIGHT;    
132    }
133    
134    /**
135     * Returns {@code true} if this anchor is at the top of the
136     * text bounds, and {@code false} otherwise.
137     * 
138     * @return A boolean. 
139     */
140    public boolean isTop() {
141        return this == TOP_LEFT || this == TOP_CENTER || this == TOP_RIGHT;
142    }
143    
144    /**
145     * Returns {@code true} if this anchor is at the half-ascent level of 
146     * the text bounds, and {@code false} otherwise.
147     * 
148     * @return A boolean. 
149     */
150    public boolean isHalfAscent() {
151        return this == HALF_ASCENT_LEFT || this == HALF_ASCENT_CENTER 
152                || this == HALF_ASCENT_RIGHT;
153    }
154    
155    /**
156     * Returns {@code true} if this anchor is at the half-height level of 
157     * the text bounds, and {@code false} otherwise.
158     * 
159     * @return A boolean. 
160     */
161    public boolean isHalfHeight() {
162        return this == CENTER_LEFT || this == CENTER || this == CENTER_RIGHT;
163    }
164    
165    /**
166     * Returns {@code true} if this anchor is at the baseline level of 
167     * the text bounds, and {@code false} otherwise.
168     * 
169     * @return A boolean. 
170     */
171    public boolean isBaseline() {
172        return this == BASELINE_LEFT || this == BASELINE_CENTER 
173                || this == BASELINE_RIGHT;
174    }
175    
176    /**
177     * Returns {@code true} if this anchor is at the bottom of 
178     * the text bounds, and {@code false} otherwise.
179     * 
180     * @return A boolean. 
181     */
182    public boolean isBottom() {
183        return this == BOTTOM_LEFT || this == BOTTOM_CENTER 
184                || this == BOTTOM_RIGHT;
185    }
186    
187    /**
188     * Returns a string representing the object.
189     *
190     * @return The string.
191     */
192    @Override
193    public String toString() {
194        return this.name;
195    }
196
197}