001package org.vishia.gral.ifc;
002
003import java.util.Map;
004import java.util.TreeMap;
005
006public final class GralFont
007{
008  /**Version, history and license.
009   * <ul>
010   * <li>2011-06-00 Hartmut created
011   * </ul>
012   * 
013   * <b>Copyright/Copyleft</b>:<br>
014   * For this source the LGPL Lesser General Public License,
015   * published by the Free Software Foundation is valid.
016   * It means:
017   * <ol>
018   * <li> You can use this source without any restriction for any desired purpose.
019   * <li> You can redistribute copies of this source to everybody.
020   * <li> Every user of this source, also the user of redistribute copies
021   *    with or without payment, must accept this license for further using.
022   * <li> But the LPGL is not appropriate for a whole software product,
023   *    if this source is only a part of them. It means, the user
024   *    must publish this part of source,
025   *    but doesn't need to publish the whole source of the own product.
026   * <li> You can study and modify (improve) this source
027   *    for own using or for redistribution, but you have to license the
028   *    modified sources likewise under this LGPL Lesser General Public License.
029   *    You mustn't delete this Copyright/Copyleft inscription in this source file.
030   * </ol>
031   * If you intent to use this source without publishing its usage, you can get
032   * a second license subscribing a special contract with the author. 
033   * 
034   * @author Hartmut Schorrig = hartmut.schorrig@vishia.de
035   */
036  public static final int version = 20120303;
037
038  /**The font-instance for the implementation can be set from the implementation with the necessary type
039   * to minimize the effort in dynamic instances.  */
040  public Object fontImpl;
041
042  public static final String fontMonospacedSansSerif = "monospacedSansSerif";
043  
044  public static final String fontMonospacedSmall = "MonospacedSmall";
045  
046  public static final String fontMonospacedSerif = "monospacedSerif";
047  
048  public static final String fontSansSerif = "sansSerif";
049  
050  public static final String fontSerif = "serif";
051  
052  /**Some types of fonts.*/
053  public static final char typeSmallMonospaced = 'm', typeMonospaced = 'M',
054    typeSansSerif = 'a', typeSerif = 't';
055  
056  public static final char styleNormal = 'n', styleItalic = 'i', styleBoldItalic = 'I', styleBold = 'b';
057  
058  public String fontName;
059  
060  /**The size of the font in points.*/
061  public int size;
062  
063  /**The style of the font. 
064   * <ul>
065   * <li>b bold
066   * <li>i italic
067   * <li>
068   * </ul>
069   */
070  public char style;
071
072  
073  private static Map<String, GralFont> fonts = new TreeMap<String, GralFont>();
074  
075  public GralFont(String fontName, int size, char style)
076  { this.fontName = fontName;
077    this.size = size;
078    this.style = style;
079  }
080  
081  
082  
083  /**Not yet ready. Therefore protected yet.
084   * @param fontName
085   * @param size Use the grid size!
086   * @param style
087   * @return
088   */
089  protected static GralFont getFont(String fontName, int size, char style){
090    String key = fontName + "." + style + size;
091    GralFont ret = fonts.get(key);
092    if(ret == null){
093      ret = new GralFont(fontName, size, style);
094      fonts.put(key, ret);
095    }
096    return ret;
097  }
098  
099  
100}