1/* 2 * Copyright 2001-2009, Haiku. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * DarkWyrm <bpmagic@columbus.rr.com> 7 * Axel D��rfler, axeld@pinc-software.de 8 */ 9#ifndef GLOBAL_FONT_MANAGER_H 10#define GLOBAL_FONT_MANAGER_H 11 12 13#include "FontManager.h" 14 15#include <AutoDeleter.h> 16#include <Looper.h> 17#include <ObjectList.h> 18 19 20class BEntry; 21class BPath; 22struct node_ref; 23 24 25class FontFamily; 26class FontStyle; 27class ServerFont; 28 29 30/*! 31 \class GlobalFontManager GlobalFontManager.h 32 \brief Manager for system fonts within the font subsystem 33*/ 34class GlobalFontManager : public FontManager, public BLooper { 35public: 36 GlobalFontManager(); 37 virtual ~GlobalFontManager(); 38 39 bool Lock() { return BLooper::Lock(); } 40 void Unlock() { BLooper::Unlock(); } 41 bool IsLocked() const { return BLooper::IsLocked(); } 42 43 status_t InitCheck() { return fInitStatus; } 44 45 void SaveRecentFontMappings(); 46 47 virtual void MessageReceived(BMessage* message); 48 49 virtual int32 CountFamilies(); 50 51 virtual int32 CountStyles(const char* family); 52 virtual int32 CountStyles(uint16 familyID); 53 54 int32 CheckRevision(uid_t user); 55 56 const ServerFont* DefaultPlainFont() const; 57 const ServerFont* DefaultBoldFont() const; 58 const ServerFont* DefaultFixedFont() const; 59 60 void AttachUser(uid_t userID); 61 void DetachUser(uid_t userID); 62 63 virtual FontFamily* GetFamily(uint16 familyID) const; 64 virtual FontFamily* GetFamily(const char* name); 65 66 virtual FontStyle* GetStyle(uint16 familyID, uint16 styleID) const; 67 virtual FontStyle* GetStyle(const char* familyName, 68 const char* styleName, 69 uint16 familyID = 0xffff, 70 uint16 styleID = 0xffff, 71 uint16 face = 0); 72 73private: 74 struct font_directory; 75 struct font_mapping; 76 77 void _AddDefaultMapping(const char* family, 78 const char* style, const char* path); 79 bool _LoadRecentFontMappings(); 80 status_t _AddMappedFont(const char* family, 81 const char* style = NULL); 82 void _PrecacheFontFile(const ServerFont* font); 83 void _AddSystemPaths(); 84 font_directory* _FindDirectory(node_ref& nodeRef); 85 void _RemoveDirectory(font_directory* directory); 86 status_t _CreateDirectories(const char* path); 87 status_t _AddPath(const char* path); 88 status_t _AddPath(BEntry& entry, 89 font_directory** _newDirectory = NULL); 90 91 void _ScanFontsIfNecessary(); 92 void _ScanFonts(); 93 status_t _ScanFontDirectory(font_directory& directory); 94 status_t _AddFont(font_directory& directory, 95 BEntry& entry); 96 void _RemoveStyle(font_directory& directory, 97 FontStyle* style); 98 void _RemoveStyle(dev_t device, uint64 directory, 99 uint64 node); 100 FontStyle* _GetDefaultStyle(const char* familyName, 101 const char* styleName, 102 const char* fallbackFamily, 103 const char* fallbackStyle, 104 uint16 fallbackFace); 105 status_t _SetDefaultFonts(); 106 107private: 108 status_t fInitStatus; 109 110 typedef BObjectList<font_directory> DirectoryList; 111 typedef BObjectList<font_mapping> MappingList; 112 113 DirectoryList fDirectories; 114 MappingList fMappings; 115 116 ObjectDeleter<ServerFont> 117 fDefaultPlainFont; 118 ObjectDeleter<ServerFont> 119 fDefaultBoldFont; 120 ObjectDeleter<ServerFont> 121 fDefaultFixedFont; 122 123 bool fScanned; 124 125}; 126 127 128extern GlobalFontManager* gFontManager; 129 130#endif /* GLOBAL_FONT_MANAGER_H */ 131