FontDatabase.h

00001 /*
00002  * This source file is part of libRocket, the HTML/CSS Interface Middleware
00003  *
00004  * For the latest information, see http://www.librocket.com
00005  *
00006  * Copyright (c) 2008-2010 CodePoint Ltd, Shift Technology Ltd
00007  *
00008  * Permission is hereby granted, free of charge, to any person obtaining a copy
00009  * of this software and associated documentation files (the "Software"), to deal
00010  * in the Software without restriction, including without limitation the rights
00011  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
00012  * copies of the Software, and to permit persons to whom the Software is
00013  * furnished to do so, subject to the following conditions:
00014  *
00015  * The above copyright notice and this permission notice shall be included in
00016  * all copies or substantial portions of the Software.
00017  * 
00018  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
00019  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
00020  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
00021  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
00022  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
00023  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
00024  * THE SOFTWARE.
00025  *
00026  */
00027 
00028 #ifndef ROCKETCOREFONTDATABASE_H
00029 #define ROCKETCOREFONTDATABASE_H
00030 
00031 #include <Rocket/Core/StringUtilities.h>
00032 #include <Rocket/Core/Header.h>
00033 #include <Rocket/Core/Font.h>
00034 
00035 namespace Rocket {
00036 namespace Core {
00037 
00038 class FontEffect;
00039 class FontFamily;
00040 class FontFaceHandle;
00041 class PropertyDictionary;
00042 
00049 class ROCKETCORE_API FontDatabase
00050 {
00051 public:
00052         static bool Initialise();
00053         static void Shutdown();
00054 
00058         static bool LoadFontFace(const String& file_name);
00065         static bool LoadFontFace(const String& file_name, const String& family, Font::Style style, Font::Weight weight);
00073         static bool LoadFontFace(const byte* data, int data_length, const String& family, Font::Style style, Font::Weight weight);
00074 
00084         static FontFaceHandle* GetFontFaceHandle(const String& family, const String& charset, Font::Style style, Font::Weight weight, int size);
00085 
00091         static FontEffect* GetFontEffect(const String& name, const PropertyDictionary& properties);
00092 
00095         static void ReleaseFontEffect(const FontEffect* effect);
00096 
00097 private:
00098         FontDatabase(void);
00099         ~FontDatabase(void);
00100 
00101         // Adds a loaded face to the appropriate font family.
00102         bool AddFace(void* face, const String& family, Font::Style style, Font::Weight weight, bool release_stream);
00103         // Loads a FreeType face.
00104         void* LoadFace(const String& file_name);
00105         // Loads a FreeType face from memory.
00106         void* LoadFace(const byte* data, int data_length, const String& source, bool local_data);
00107 
00108         typedef std::map< String, FontFamily*, StringUtilities::StringComparei > FontFamilyMap;
00109         FontFamilyMap font_families;
00110 
00111         static FontDatabase* instance;
00112 };
00113 
00114 }
00115 }
00116 
00117 #endif