Home | History | Annotate | Download | only in font
      1 /*
      2  * Copyright (c) 2009-2010 jMonkeyEngine
      3  * All rights reserved.
      4  *
      5  * Redistribution and use in source and binary forms, with or without
      6  * modification, are permitted provided that the following conditions are
      7  * met:
      8  *
      9  * * Redistributions of source code must retain the above copyright
     10  *   notice, this list of conditions and the following disclaimer.
     11  *
     12  * * Redistributions in binary form must reproduce the above copyright
     13  *   notice, this list of conditions and the following disclaimer in the
     14  *   documentation and/or other materials provided with the distribution.
     15  *
     16  * * Neither the name of 'jMonkeyEngine' nor the names of its contributors
     17  *   may be used to endorse or promote products derived from this software
     18  *   without specific prior written permission.
     19  *
     20  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     21  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     22  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     23  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
     24  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     25  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     26  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     27  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
     28  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
     29  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
     30  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     31  */
     32 
     33 package com.jme3.font;
     34 
     35 import com.jme3.font.BitmapFont.Align;
     36 import com.jme3.font.BitmapFont.VAlign;
     37 import com.jme3.math.ColorRGBA;
     38 
     39 /**
     40  * Defines a String that is to be drawn in one block that can be constrained by a {@link Rectangle}. Also holds
     41  * formatting information for the StringBlock
     42  *
     43  * @author dhdd
     44  */
     45 class StringBlock implements Cloneable {
     46 
     47     private String text;
     48     private Rectangle textBox;
     49     private Align alignment = Align.Left;
     50     private VAlign valignment = VAlign.Top;
     51     private float size;
     52     private ColorRGBA color = new ColorRGBA(ColorRGBA.White);
     53     private boolean kerning;
     54     private int lineCount;
     55     private LineWrapMode wrapType = LineWrapMode.Word;
     56     private float[] tabPos;
     57     private float tabWidth = 50;
     58     private char ellipsisChar = 0x2026;
     59 
     60     /**
     61      *
     62      * @param text the text that the StringBlock will hold
     63      * @param textBox the rectangle that constrains the text
     64      * @param alignment the initial alignment of the text
     65      * @param size the size in pixels (vertical size of a single line)
     66      * @param color the initial color of the text
     67      * @param kerning
     68      */
     69     StringBlock(String text, Rectangle textBox, BitmapFont.Align alignment, float size, ColorRGBA color,
     70             boolean kerning) {
     71         this.text = text;
     72         this.textBox = textBox;
     73         this.alignment = alignment;
     74         this.size = size;
     75         this.color.set(color);
     76         this.kerning = kerning;
     77     }
     78 
     79     StringBlock(){
     80         this.text = "";
     81         this.textBox = null;
     82         this.alignment = Align.Left;
     83         this.size = 100;
     84         this.color.set(ColorRGBA.White);
     85         this.kerning = true;
     86     }
     87 
     88     @Override
     89     public StringBlock clone(){
     90         try {
     91             StringBlock clone = (StringBlock) super.clone();
     92             clone.color = color.clone();
     93             if (textBox != null)
     94                 clone.textBox = textBox.clone();
     95             return clone;
     96         } catch (CloneNotSupportedException ex) {
     97             throw new AssertionError();
     98         }
     99     }
    100 
    101     String getText() {
    102         return text;
    103     }
    104 
    105     void setText(String text){
    106         this.text = text == null ? "" : text;
    107     }
    108 
    109     Rectangle getTextBox() {
    110         return textBox;
    111     }
    112 
    113     void setTextBox(Rectangle textBox) {
    114         this.textBox = textBox;
    115     }
    116 
    117     BitmapFont.Align getAlignment() {
    118         return alignment;
    119     }
    120 
    121     BitmapFont.VAlign getVerticalAlignment() {
    122         return valignment;
    123     }
    124 
    125     void setAlignment(BitmapFont.Align alignment) {
    126         this.alignment = alignment;
    127     }
    128 
    129     void setVerticalAlignment(BitmapFont.VAlign alignment) {
    130         this.valignment = alignment;
    131     }
    132 
    133     float getSize() {
    134         return size;
    135     }
    136 
    137     void setSize(float size) {
    138         this.size = size;
    139     }
    140 
    141     ColorRGBA getColor() {
    142         return color;
    143     }
    144 
    145     void setColor(ColorRGBA color) {
    146         this.color.set(color);
    147     }
    148 
    149     boolean isKerning() {
    150         return kerning;
    151     }
    152 
    153     void setKerning(boolean kerning) {
    154         this.kerning = kerning;
    155     }
    156 
    157     int getLineCount() {
    158         return lineCount;
    159     }
    160 
    161     void setLineCount(int lineCount) {
    162         this.lineCount = lineCount;
    163     }
    164 
    165     LineWrapMode getLineWrapMode() {
    166         return wrapType;
    167     }
    168 
    169     /**
    170      * available only when bounding is set. <code>setBox()</code> method call is needed in advance.
    171      * @param wrap true when word need not be split at the end of the line.
    172      */
    173     void setLineWrapMode(LineWrapMode wrap) {
    174         this.wrapType = wrap;
    175     }
    176 
    177     void setTabWidth(float tabWidth) {
    178         this.tabWidth = tabWidth;
    179     }
    180 
    181     void setTabPosition(float[] tabs) {
    182         this.tabPos = tabs;
    183     }
    184 
    185     float getTabWidth() {
    186         return tabWidth;
    187     }
    188 
    189     float[] getTabPosition() {
    190         return tabPos;
    191     }
    192 
    193     void setEllipsisChar(char c) {
    194         this.ellipsisChar = c;
    195     }
    196 
    197     int getEllipsisChar() {
    198         return ellipsisChar;
    199     }
    200 }