back: implement coveredCharacterSet for CairoFontInfo

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/back/trunk@32716 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
ericwa 2011-03-28 04:19:41 +00:00
parent f4de37421d
commit e6b42470de
6 changed files with 97 additions and 1 deletions

View file

@ -29,6 +29,7 @@
*/
#include "cairo/CairoFaceInfo.h"
#include "cairo/CairoFontEnumerator.h"
#include <cairo-ft.h>
#include <AppKit/NSFontManager.h>
@ -122,4 +123,24 @@
return _fontFace;
}
- (NSCharacterSet*)characterSet
{
FcResult result;
FcPattern *resolved;
FcCharSet *charset;
NSCharacterSet *characterSet = nil;
FcConfigSubstitute(NULL, _pattern, FcMatchPattern);
FcDefaultSubstitute(_pattern);
resolved = FcFontMatch(NULL, _pattern, &result);
if (FcResultMatch == FcPatternGetCharSet(resolved, FC_CHARSET, 0, &charset))
{
characterSet = [[[FontconfigCharacterSet alloc] initWithFontconfigCharSet: charset] autorelease];
}
FcPatternDestroy(resolved);
return characterSet;
}
@end

View file

@ -236,3 +236,48 @@ static NSArray *faFromFc(FcPattern *pat)
}
@end
@implementation FontconfigCharacterSet
- (id)initWithFontconfigCharSet: (FcCharSet*)charset
{
if ((self = [super init]))
{
_charset = FcCharSetCopy(charset);
}
return self;
}
- (id)mutableCopyWithZone: (NSZone*)aZone
{
return [[NSMutableCharacterSet characterSetWithBitmapRepresentation:
[self bitmapRepresentation]] retain];
}
- (void)dealloc
{
FcCharSetDestroy(_charset);
[super dealloc];
}
- (FcCharSet*)fontconfigCharSet
{
return _charset;
}
- (BOOL)characterIsMember: (unichar)c
{
return FcCharSetHasChar(_charset, c);
}
- (BOOL)longCharacterIsMember: (UTF32Char)c
{
return FcCharSetHasChar(_charset, c);
}
// FIXME: Implement for better performance
//- (NSData *)bitmapRepresentation
//{
//}
@end

View file

@ -79,7 +79,7 @@
/* setting GSFontInfo:
* weight, traits, familyName,
* mostCompatibleStringEncoding, encodingScheme,
* mostCompatibleStringEncoding, encodingScheme, coveredCharacterSet
*/
weight = [_faceInfo weight];
@ -87,6 +87,8 @@
familyName = [[_faceInfo familyName] copy];
mostCompatibleStringEncoding = NSUTF8StringEncoding;
encodingScheme = @"iso10646-1";
coveredCharacterSet = [[_faceInfo characterSet] retain];
/* setting GSFontInfo:
* xHeight, pix_width, pix_height