/* Copyright (C) 2014 Johan Mattsson This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. */ using Gee; namespace BirdFont { /** Thread specific font cache. */ public class FontCache { public static FallbackFont fallback_font; static FontCache? default_cache = null; Gee.HashMap fonts; CachedFont fallback; public FontCache () { if (is_null (fallback_font)) { fallback_font = new FallbackFont (); } fallback = new CachedFont (null); fonts = new Gee.HashMap (); } public CachedFont get_font (string file_name) { CachedFont c; Font f; bool ok; if (file_name == "") { return fallback; } if (fonts.has_key (file_name)) { c = fonts.get (file_name); return c; } f = new Font (); f.set_file (file_name); ok = f.load (); if (!ok) { stderr.printf ("Can't load %s\n", file_name); return new CachedFont (null); } c = new CachedFont (f); if (file_name == "") { warning ("No file."); return c; } fonts.set (file_name, c); return c; } public static FontCache get_default_cache () { if (default_cache == null) { default_cache = new FontCache (); } return (!) default_cache; } public CachedFont get_fallback () { return fallback; } } }