From 974dd00c857f8a8a89798b3a15293d1ed815408d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Wed, 9 Nov 2005 19:16:25 +0000 Subject: [PATCH] The font manager now has default fonts for bold/fixed as well - these are now used in the DesktopSettings as defaults, too (but can be changed there). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@14804 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- headers/private/servers/app/FontManager.h | 13 +++- src/servers/app/DesktopSettings.cpp | 35 +---------- src/servers/app/DesktopSettingsPrivate.h | 3 - src/servers/app/FontManager.cpp | 76 ++++++++++++++++++----- src/servers/app/ServerFont.cpp | 2 +- 5 files changed, 74 insertions(+), 55 deletions(-) diff --git a/headers/private/servers/app/FontManager.h b/headers/private/servers/app/FontManager.h index aeb01532fc..443b506744 100644 --- a/headers/private/servers/app/FontManager.h +++ b/headers/private/servers/app/FontManager.h @@ -56,7 +56,9 @@ class FontManager : public BLooper { FontStyle *GetStyle(uint16 familyID, uint16 styleID) const; FontStyle* FindStyleMatchingFace(uint16 face) const; - const ServerFont* DefaultFont() const; + const ServerFont* DefaultPlainFont() const; + const ServerFont* DefaultBoldFont() const; + const ServerFont* DefaultFixedFont() const; void AttachUser(uid_t userID); void DetachUser(uid_t userID); @@ -66,7 +68,10 @@ class FontManager : public BLooper { struct font_mapping; bool _LoadRecentFontMappings(); - status_t _SetDefaultFont(); + FontStyle* _GetDefaultStyle(const char *familyName, const char *styleName, + const char *fallbackFamily, const char *fallbackStyle, + uint16 fallbackFace); + status_t _SetDefaultFonts(); void _AddSystemPaths(); status_t _AddPath(const char* path); status_t _AddPath(BEntry& entry, font_directory** _newDirectory = NULL); @@ -87,7 +92,9 @@ class FontManager : public BLooper { BObjectList fMappings; BObjectList fFamilies; HashTable fStyleHashTable; - ServerFont *fDefaultFont; + ServerFont* fDefaultPlainFont; + ServerFont* fDefaultBoldFont; + ServerFont* fDefaultFixedFont; bool fScanned; int32 fNextID; }; diff --git a/src/servers/app/DesktopSettings.cpp b/src/servers/app/DesktopSettings.cpp index 8726a0dbda..525ba06b8b 100644 --- a/src/servers/app/DesktopSettings.cpp +++ b/src/servers/app/DesktopSettings.cpp @@ -32,16 +32,9 @@ DesktopSettings::Private::~Private() void DesktopSettings::Private::_SetDefaults() { - _SetFont(fPlainFont, DEFAULT_PLAIN_FONT_FAMILY, DEFAULT_PLAIN_FONT_STYLE, - DEFAULT_PLAIN_FONT_SIZE, FALLBACK_PLAIN_FONT_FAMILY, DEFAULT_PLAIN_FONT_STYLE, - B_REGULAR_FACE); - _SetFont(fBoldFont, DEFAULT_BOLD_FONT_FAMILY, DEFAULT_BOLD_FONT_STYLE, - DEFAULT_BOLD_FONT_SIZE, FALLBACK_BOLD_FONT_FAMILY, DEFAULT_BOLD_FONT_STYLE, - B_BOLD_FACE); - _SetFont(fFixedFont, DEFAULT_FIXED_FONT_FAMILY, DEFAULT_FIXED_FONT_STYLE, - DEFAULT_FIXED_FONT_SIZE, FALLBACK_FIXED_FONT_FAMILY, DEFAULT_FIXED_FONT_STYLE, - B_REGULAR_FACE); - fFixedFont.SetSpacing(B_FIXED_SPACING); + fPlainFont = *gFontManager->DefaultPlainFont(); + fBoldFont = *gFontManager->DefaultBoldFont(); + fFixedFont = *gFontManager->DefaultFixedFont(); fMouseMode = B_NORMAL_MOUSE; @@ -67,28 +60,6 @@ DesktopSettings::Private::_SetDefaults() } -void -DesktopSettings::Private::_SetFont(ServerFont &font, const char *familyName, - const char *styleName, float size, const char *fallbackFamily, - const char *fallbackStyle, uint16 fallbackFace) -{ - BAutolock locker(gFontManager); - - // try to find a matching font - - FontStyle* style = gFontManager->GetStyle(familyName, styleName); - if (style == NULL) { - style = gFontManager->GetStyle(fallbackFamily, fallbackStyle); - if (style == NULL) { - style = gFontManager->FindStyleMatchingFace(fallbackFace); - } - } - - if (style != NULL) - font.SetStyle(*style); -} - - status_t DesktopSettings::Private::_Load() { diff --git a/src/servers/app/DesktopSettingsPrivate.h b/src/servers/app/DesktopSettingsPrivate.h index 326e1746cb..0da8e2f8e1 100644 --- a/src/servers/app/DesktopSettingsPrivate.h +++ b/src/servers/app/DesktopSettingsPrivate.h @@ -49,9 +49,6 @@ class DesktopSettings::Private : public BLocker { private: void _SetDefaults(); - void _SetFont(ServerFont& font, const char* family, const char* style, - float size, const char *fallbackFamily, - const char* fallbackStyle, uint16 fallbackFace); status_t _Load(); ServerFont fPlainFont; diff --git a/src/servers/app/FontManager.cpp b/src/servers/app/FontManager.cpp index 24da00d604..6fd48de8cd 100644 --- a/src/servers/app/FontManager.cpp +++ b/src/servers/app/FontManager.cpp @@ -58,7 +58,6 @@ struct FontManager::font_mapping { FontManager::FontManager() : BLooper("Font Manager"), fFamilies(20), - fDefaultFont(NULL), fScanned(false), fNextID(0) { @@ -68,7 +67,7 @@ FontManager::FontManager() _AddSystemPaths(); _LoadRecentFontMappings(); - fInitStatus = _SetDefaultFont(); + fInitStatus = _SetDefaultFonts(); } /* @@ -141,30 +140,61 @@ FontManager::_RemoveFamily(const char *familyName) } -/*! - \brief Sets the font that will be used when you create an empty - ServerFont without specifying a style. -*/ -status_t -FontManager::_SetDefaultFont() +FontStyle* +FontManager::_GetDefaultStyle(const char *familyName, const char *styleName, + const char *fallbackFamily, const char *fallbackStyle, + uint16 fallbackFace) { - FontStyle* style = GetStyle(DEFAULT_PLAIN_FONT_FAMILY, DEFAULT_PLAIN_FONT_STYLE); + // try to find a matching font + + FontStyle* style = GetStyle(familyName, styleName); if (style == NULL) { - style = GetStyle(FALLBACK_PLAIN_FONT_FAMILY, DEFAULT_PLAIN_FONT_STYLE); + style = GetStyle(fallbackFamily, fallbackStyle); if (style == NULL) { - style = FindStyleMatchingFace(B_REGULAR_FACE); - if (style == NULL && fFamilies.CountItems() != 0) + style = FindStyleMatchingFace(fallbackFace); + if (style == NULL && FamilyAt(0) != NULL) style = FamilyAt(0)->StyleAt(0); } } + return style; +} + + +/*! + \brief Sets the fonts that will be used when you create an empty + ServerFont without specifying a style, as well as the default + Desktop fonts if there are no settings available. +*/ +status_t +FontManager::_SetDefaultFonts() +{ + FontStyle* style = _GetDefaultStyle(DEFAULT_PLAIN_FONT_FAMILY, + DEFAULT_PLAIN_FONT_STYLE, FALLBACK_PLAIN_FONT_FAMILY, + DEFAULT_PLAIN_FONT_STYLE, + B_REGULAR_FACE); if (style == NULL) return B_ERROR; - fDefaultFont = new (nothrow) ServerFont(*style, DEFAULT_PLAIN_FONT_SIZE); - if (fDefaultFont == NULL) + fDefaultPlainFont = new (nothrow) ServerFont(*style, DEFAULT_PLAIN_FONT_SIZE); + if (fDefaultPlainFont == NULL) return B_NO_MEMORY; + style = _GetDefaultStyle(DEFAULT_BOLD_FONT_FAMILY, DEFAULT_BOLD_FONT_STYLE, + FALLBACK_BOLD_FONT_FAMILY, DEFAULT_BOLD_FONT_STYLE, B_BOLD_FACE); + + fDefaultBoldFont = new (nothrow) ServerFont(*style, DEFAULT_BOLD_FONT_SIZE); + if (fDefaultBoldFont == NULL) + return B_NO_MEMORY; + + style = _GetDefaultStyle(DEFAULT_FIXED_FONT_FAMILY, DEFAULT_FIXED_FONT_STYLE, + FALLBACK_FIXED_FONT_FAMILY, DEFAULT_FIXED_FONT_STYLE, B_REGULAR_FACE); + + fDefaultFixedFont = new (nothrow) ServerFont(*style, DEFAULT_FIXED_FONT_SIZE); + if (fDefaultFixedFont == NULL) + return B_NO_MEMORY; + + fDefaultFixedFont->SetSpacing(B_FIXED_SPACING); return B_OK; } @@ -631,9 +661,23 @@ FontManager::FindStyleMatchingFace(uint16 face) const const ServerFont* -FontManager::DefaultFont() const +FontManager::DefaultPlainFont() const { - return fDefaultFont; + return fDefaultPlainFont; +} + + +const ServerFont* +FontManager::DefaultBoldFont() const +{ + return fDefaultBoldFont; +} + + +const ServerFont* +FontManager::DefaultFixedFont() const +{ + return fDefaultFixedFont; } diff --git a/src/servers/app/ServerFont.cpp b/src/servers/app/ServerFont.cpp index 7abbb93203..8511704169 100644 --- a/src/servers/app/ServerFont.cpp +++ b/src/servers/app/ServerFont.cpp @@ -147,7 +147,7 @@ ServerFont::ServerFont() : fStyle(NULL) { - *this = *gFontManager->DefaultFont(); + *this = *gFontManager->DefaultPlainFont(); }