* FontFamily::GetStyle() now looks for alternative names when a specific
style couldn't be found, ie. when looking for "Roman", "Regular", and "Book" are accepted, too, and "Italic"/"Oblique" are now synonyms as well. * This prevents StyledEdit from using the "Condensed" style when it does not find a certain font. * Minor cleanup. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@24443 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2001-2006, Haiku.
|
||||
* Copyright 2001-2008, Haiku.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*
|
||||
* Authors:
|
||||
@@ -157,6 +157,23 @@ FontFamily::CountStyles() const
|
||||
}
|
||||
|
||||
|
||||
FontStyle*
|
||||
FontFamily::_FindStyle(const char* name) const
|
||||
{
|
||||
int32 count = fStyles.CountItems();
|
||||
if (!name || count < 1)
|
||||
return NULL;
|
||||
|
||||
for (int32 i = 0; i < count; i++) {
|
||||
FontStyle *style = fStyles.ItemAt(i);
|
||||
if (!strcmp(style->Name(), name))
|
||||
return style;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/*!
|
||||
\brief Determines whether the style belongs to the family
|
||||
\param style Name of the style being checked
|
||||
@@ -165,7 +182,7 @@ FontFamily::CountStyles() const
|
||||
bool
|
||||
FontFamily::HasStyle(const char *styleName) const
|
||||
{
|
||||
return GetStyle(styleName) != NULL;
|
||||
return _FindStyle(styleName) != NULL;
|
||||
}
|
||||
|
||||
|
||||
@@ -189,16 +206,36 @@ FontFamily::StyleAt(int32 index) const
|
||||
The object returned belongs to the family and must not be deleted.
|
||||
*/
|
||||
FontStyle*
|
||||
FontFamily::GetStyle(const char *styleName) const
|
||||
FontFamily::GetStyle(const char *name) const
|
||||
{
|
||||
int32 count = fStyles.CountItems();
|
||||
if (!styleName || count < 1)
|
||||
if (name == NULL || !name[0])
|
||||
return NULL;
|
||||
|
||||
for (int32 i = 0; i < count; i++) {
|
||||
FontStyle *style = fStyles.ItemAt(i);
|
||||
if (!strcmp(style->Name(), styleName))
|
||||
return style;
|
||||
FontStyle* style = _FindStyle(name);
|
||||
if (style != NULL)
|
||||
return style;
|
||||
|
||||
// try alternative names
|
||||
|
||||
if (!strcmp(name, "Roman") || !strcmp(name, "Regular")
|
||||
|| !strcmp(name, "Book")) {
|
||||
style = _FindStyle("Roman");
|
||||
if (style == NULL) {
|
||||
style = _FindStyle("Regular");
|
||||
if (style == NULL)
|
||||
style = _FindStyle("Book");
|
||||
}
|
||||
return style;
|
||||
}
|
||||
|
||||
BString alternative = name;
|
||||
if (alternative.FindFirst("Italic") >= 0) {
|
||||
alternative.ReplaceFirst("Italic", "Oblique");
|
||||
return _FindStyle(alternative.String());
|
||||
}
|
||||
if (alternative.FindFirst("Oblique") >= 0) {
|
||||
alternative.ReplaceFirst("Oblique", "Italic");
|
||||
return _FindStyle(alternative.String());
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2001-2006, Haiku.
|
||||
* Copyright 2001-2008, Haiku.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*
|
||||
* Authors:
|
||||
@@ -24,33 +24,35 @@
|
||||
Arial Roman, Arial Italic, Arial Bold, etc.
|
||||
*/
|
||||
class FontFamily {
|
||||
public:
|
||||
FontFamily(const char* name, uint16 id);
|
||||
virtual ~FontFamily();
|
||||
public:
|
||||
FontFamily(const char* name, uint16 id);
|
||||
virtual ~FontFamily();
|
||||
|
||||
const char* Name() const;
|
||||
const char* Name() const;
|
||||
|
||||
bool AddStyle(FontStyle* style);
|
||||
bool RemoveStyle(FontStyle* style);
|
||||
bool AddStyle(FontStyle* style);
|
||||
bool RemoveStyle(FontStyle* style);
|
||||
|
||||
FontStyle* GetStyle(const char* style) const;
|
||||
FontStyle* GetStyleMatchingFace(uint16 face) const;
|
||||
FontStyle* GetStyleByID(uint16 face) const;
|
||||
FontStyle* GetStyle(const char* style) const;
|
||||
FontStyle* GetStyleMatchingFace(uint16 face) const;
|
||||
FontStyle* GetStyleByID(uint16 face) const;
|
||||
|
||||
uint16 ID() const
|
||||
{ return fID; }
|
||||
uint32 Flags();
|
||||
uint16 ID() const
|
||||
{ return fID; }
|
||||
uint32 Flags();
|
||||
|
||||
bool HasStyle(const char* style) const;
|
||||
int32 CountStyles() const;
|
||||
FontStyle* StyleAt(int32 index) const;
|
||||
bool HasStyle(const char* style) const;
|
||||
int32 CountStyles() const;
|
||||
FontStyle* StyleAt(int32 index) const;
|
||||
|
||||
private:
|
||||
BString fName;
|
||||
BObjectList<FontStyle> fStyles;
|
||||
uint16 fID;
|
||||
uint16 fNextID;
|
||||
uint32 fFlags;
|
||||
private:
|
||||
FontStyle* _FindStyle(const char* name) const;
|
||||
|
||||
BString fName;
|
||||
BObjectList<FontStyle> fStyles;
|
||||
uint16 fID;
|
||||
uint16 fNextID;
|
||||
uint32 fFlags;
|
||||
};
|
||||
|
||||
#endif // FONT_FAMILY_H_
|
||||
|
||||
@@ -943,8 +943,8 @@ FontManager::GetStyleByIndex(const char* familyName, int32 index)
|
||||
\return The FontStyle having those attributes or NULL if not available
|
||||
*/
|
||||
FontStyle*
|
||||
FontManager::GetStyle(const char* familyName, const char* styleName, uint16 familyID,
|
||||
uint16 styleID, uint16 face)
|
||||
FontManager::GetStyle(const char* familyName, const char* styleName,
|
||||
uint16 familyID, uint16 styleID, uint16 face)
|
||||
{
|
||||
FontFamily* family;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user