/* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. * * For information about the authors of this project Have a look * at the AUTHORS file in the root of this project. */ package net.sourceforge.fullsync.ui; import java.util.HashMap; import java.util.Map; import org.eclipse.swt.graphics.Device; import org.eclipse.swt.graphics.Font; public class FontRepository { private static class Key { private String name; private int height; private int style; private int hash; Key(String _name, int _height, int _style) { name = _name; height = _height; style = _style; hash = (name + "#" + height + "#" + style).hashCode(); } @Override public int hashCode() { return hash; } @Override public boolean equals(Object obj) { if (obj instanceof Key) { Key k = (Key) obj; return (height == k.height) && (style == k.style) && (0 == name.compareTo(k.name)); } return false; } } private Device dev; private Map<FontRepository.Key, Font> cache; public FontRepository(Device _device) { dev = _device; cache = new HashMap<FontRepository.Key, Font>(5); } public Font getFont(String name, int height, int style) { Key key = new Key(name, height, style); Font font = cache.get(key); if (null == font) { font = new Font(dev, name, height, style); } return font; } public void dispose() { for (Font f : cache.values()) { f.dispose(); } cache.clear(); } }