From f2816c29d73a69298af3172865d8539e22473ea2 Mon Sep 17 00:00:00 2001 From: Fred Kiefer Date: Mon, 12 Nov 2001 16:43:20 +0000 Subject: [PATCH] Changed GSFontEnumerator so that only [enumerateFontsAndFamilies] must be subclassed. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@11377 72102866-910b-0410-8b05-ffd578937521 --- Source/GSFontInfo.m | 87 ++++++++++----------------------------------- 1 file changed, 18 insertions(+), 69 deletions(-) diff --git a/Source/GSFontInfo.m b/Source/GSFontInfo.m index 0967d18c1..bafd2f5e8 100644 --- a/Source/GSFontInfo.m +++ b/Source/GSFontInfo.m @@ -37,10 +37,6 @@ static Class fontInfoClass = Nil; static GSFontEnumerator *sharedEnumerator = nil; -@interface NSFontManager (GNUstepBackend) -- (BOOL) _includeFont: (NSString*)fontName; -@end - @implementation GSFontEnumerator + (void) setDefaultClass: (Class)defaultClass @@ -48,95 +44,48 @@ static GSFontEnumerator *sharedEnumerator = nil; fontEnumeratorClass = defaultClass; } -- initWithFontManager: manager +- (id) init { [super init]; - fontManager = manager; + [self enumerateFontsAndFamilies]; + return self; } -+ sharedEnumeratorWithFontManager: manager +- (void) dealloc +{ + RELEASE(allFontNames); + RELEASE(allFontFamilies); + [super dealloc]; +} + ++ (GSFontEnumerator*) sharedEnumerator { if (!sharedEnumerator) - sharedEnumerator = [[fontEnumeratorClass alloc] - initWithFontManager: manager]; + sharedEnumerator = [[fontEnumeratorClass alloc] init]; return sharedEnumerator; } -- (NSArray*) allFonts +- (void) enumerateFontsAndFamilies { + // This method has to set up the ivars allFontNames and allFontFamilies [self subclassResponsibility: _cmd]; - return nil; } - (NSArray*) availableFonts { - int i; - NSArray *fontsList; - NSMutableArray *fontNames; - - fontsList = [self allFonts]; - fontNames = [NSMutableArray arrayWithCapacity: [fontsList count]]; - - for (i = 0; i < [fontsList count]; i++) - { - GSFontInfo *font = (GSFontInfo*)[fontsList objectAtIndex: i]; - NSString *name = [font fontName]; - - if ([fontManager _includeFont: name]) - [fontNames addObject: name]; - } - - return fontNames; + return allFontNames; } - (NSArray*) availableFontFamilies { - int i; - NSArray *fontsList; - NSMutableSet *fontFamilies; - - fontsList = [self allFonts]; - fontFamilies = [NSMutableSet setWithCapacity: [fontsList count]]; - for (i = 0; i < [fontsList count]; i++) - { - GSFontInfo *font = (GSFontInfo*)[fontsList objectAtIndex: i]; - - [fontFamilies addObject: [font familyName]]; - } - - return [fontFamilies allObjects]; + return [[allFontFamilies allKeys] sortedArrayUsingSelector: + @selector(compare:)]; } - (NSArray*) availableMembersOfFontFamily: (NSString*)family { - int i, j; - NSArray *fontFamilies = [self availableFontFamilies]; - NSMutableArray *fontNames = [NSMutableArray array]; - NSFontTraitMask traits; - - for (i = 0; i < [fontFamilies count]; i++) - { - NSArray *fontDefs = [self availableMembersOfFontFamily: - [fontFamilies objectAtIndex: i]]; - - for (j = 0; j < [fontDefs count]; j++) - { - NSArray *fontDef = [fontDefs objectAtIndex: j]; - - traits = [[fontDef objectAtIndex: 3] unsignedIntValue]; - // Check if the font has exactly the given mask - //if (traits == fontTraitMask) - { - NSString *name = [fontDef objectAtIndex: 0]; - - if ([fontManager _includeFont: name]) - [fontNames addObject: name]; - } - } - } - - return fontNames; + return [allFontFamilies objectForKey: family]; } @end