001/* =========================================================== 002 * Orson Charts : a 3D chart library for the Java(tm) platform 003 * =========================================================== 004 * 005 * (C)opyright 2013-2016, by Object Refinery Limited. All rights reserved. 006 * 007 * http://www.object-refinery.com/orsoncharts/index.html 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 com.orsoncharts.plot; 034 035import java.awt.Font; 036import java.io.Serializable; 037 038import com.orsoncharts.data.DefaultKeyedValues; 039import com.orsoncharts.util.ArgChecks; 040 041/** 042 * A standard implementation of the {@link FontSource} interface. 043 * <br><br> 044 * NOTE: This class is serializable, but the serialization format is subject 045 * to change in future releases and should not be relied upon for persisting 046 * instances of this class. 047 */ 048@SuppressWarnings("serial") 049public final class StandardFontSource implements FontSource, Serializable { 050 051 private static Font DEFAULT_FONT = new Font("Dialog", Font.PLAIN, 12); 052 053 /** Storage for the fonts assigned to keys. */ 054 private DefaultKeyedValues<Font> fonts; 055 056 /** The default font (never {@code null}). */ 057 private Font defaultFont; 058 059 /** 060 * Creates a new instance with default fonts. 061 */ 062 public StandardFontSource() { 063 this(DEFAULT_FONT); 064 } 065 066 /** 067 * Creates a new font source with the specified default font. 068 * 069 * @param defaultFont the default font ({@code null} not permitted). 070 */ 071 public StandardFontSource(Font defaultFont) { 072 ArgChecks.nullNotPermitted(defaultFont, "defaultFont"); 073 this.defaultFont = defaultFont; 074 this.fonts = new DefaultKeyedValues<Font>(); 075 } 076 077 /** 078 * Returns the default font. The default value is {@link #DEFAULT_FONT}. 079 * 080 * @return The default font (never {@code null}). 081 */ 082 public Font getDefaultFont() { 083 return this.defaultFont; 084 } 085 086 /** 087 * Sets the default font. 088 * 089 * @param font the font ({@code null} not permitted). 090 */ 091 public void setDefaultFont(Font font) { 092 ArgChecks.nullNotPermitted(font, "font"); 093 this.defaultFont = font; 094 } 095 096 /** 097 * Returns the font for the specified key. 098 * 099 * @param key the key ({@code null} not permitted). 100 * 101 * @return The font (never {@code null}). 102 */ 103 @Override 104 public Font getFont(Comparable<?> key) { 105 Font result = this.fonts.getValue(key); 106 if (result != null) { 107 return result; 108 } else { 109 return this.defaultFont; 110 } 111 } 112 113 /** 114 * Sets the font associated with the specified key. 115 * 116 * @param key the key ({@code null} not permitted). 117 * @param font the font ({@code null} permitted). 118 */ 119 @Override 120 public void setFont(Comparable<?> key, Font font) { 121 if (font != null) { 122 this.fonts.put(key, font); 123 } else { 124 this.fonts.remove(key); 125 } 126 } 127 128 /** 129 * Clears existing font settings and sets the default font to the 130 * supplied value. This method is used by the framework and is not 131 * normally called by client code. 132 * 133 * @param font the font ({@code null} not permitted). 134 * 135 * @since 1.2 136 */ 137 @Override 138 public void style(Font font) { 139 ArgChecks.nullNotPermitted(font, "font"); 140 this.defaultFont = font; 141 this.fonts.clear(); 142 } 143 144 /** 145 * Tests this paint source for equality with an arbitrary object. 146 * 147 * @param obj the object ({@code null} permitted). 148 * 149 * @return A boolean. 150 */ 151 @Override 152 public boolean equals(Object obj) { 153 if (obj == this) { 154 return true; 155 } 156 if (!(obj instanceof StandardFontSource)) { 157 return false; 158 } 159 StandardFontSource that = (StandardFontSource) obj; 160 if (!this.defaultFont.equals(that.defaultFont)) { 161 return false; 162 } 163 if (!this.fonts.equals(that.fonts)) { 164 return false; 165 } 166 return true; 167 } 168 169}